From ea4f705e6db9053f09350e495b84fe1b156a1fe5 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Sat, 19 Mar 2022 00:36:58 -0400 Subject: [PATCH] lemm: add level4 --- games/lemm/Makefile | 13 +- games/lemm/TODO | 3 +- games/lemm/graphics/Makefile | 28 ++- games/lemm/graphics/level4.png | Bin 0 -> 29146 bytes games/lemm/graphics/level4_preview.png | Bin 0 -> 1240 bytes games/lemm/lemm.s | 13 +- games/lemm/level1.s | 3 + games/lemm/level2.s | 2 + games/lemm/level4.s | 333 +++++++++++++++++++++++++ games/lemm/level5.s | 2 + games/lemm/music/Makefile | 32 ++- 11 files changed, 420 insertions(+), 9 deletions(-) create mode 100644 games/lemm/graphics/level4.png create mode 100644 games/lemm/graphics/level4_preview.png create mode 100644 games/lemm/level4.s diff --git a/games/lemm/Makefile b/games/lemm/Makefile index aa0b3cc6..f7bddc85 100644 --- a/games/lemm/Makefile +++ b/games/lemm/Makefile @@ -19,7 +19,7 @@ all: lemm.dsk lemm.dsk: QBOOT QLOAD LEMM \ - LEVEL1 LEVEL2 LEVEL5 + LEVEL1 LEVEL2 LEVEL4 LEVEL5 cp $(EMPTY_DISK) lemm.dsk $(DOS33_RAW) lemm.dsk 0 0 QBOOT 0 1 $(DOS33_RAW) lemm.dsk 0 2 QBOOT 1 1 @@ -28,6 +28,7 @@ lemm.dsk: QBOOT QLOAD LEMM \ $(DOS33_RAW) lemm.dsk 3 0 LEMM 0 0 $(DOS33_RAW) lemm.dsk 10 0 LEVEL1 0 0 $(DOS33_RAW) lemm.dsk 12 0 LEVEL2 0 0 + $(DOS33_RAW) lemm.dsk 16 0 LEVEL4 0 0 $(DOS33_RAW) lemm.dsk 18 0 LEVEL5 0 0 @@ -149,6 +150,16 @@ level2.o: level2.s zp.inc hardware.inc qload.inc lemm.inc \ graphics/graphics_level2.inc ca65 -o level2.o level2.s -l level2.lst +#### + +LEVEL4: level4.o + ld65 -o LEVEL4 level4.o -C ../../linker_scripts/apple2_a000.inc + +level4.o: level4.s zp.inc hardware.inc qload.inc lemm.inc \ + graphics/graphics_level4.inc + ca65 -o level4.o level4.s -l level4.lst + + #### diff --git a/games/lemm/TODO b/games/lemm/TODO index 5f1dd461..02ce6fae 100644 --- a/games/lemm/TODO +++ b/games/lemm/TODO @@ -9,4 +9,5 @@ + Falling too far and you go splat + See if the jerky animation is due to starting at an odd x vs even x, maybe we should start animation 4 frames in if that's - the case + the case. Or maybe it's the shift for odd frames, make + the shift the other way if walking left/right diff --git a/games/lemm/graphics/Makefile b/games/lemm/graphics/Makefile index 4dbb4b6c..e2a25e06 100644 --- a/games/lemm/graphics/Makefile +++ b/games/lemm/graphics/Makefile @@ -8,7 +8,9 @@ HGR_SPRITE = ../../../utils/hgr-utils/hgr_make_sprite all: graphics_test.inc \ graphics_level1.inc \ graphics_level2.inc \ - graphics_level5.inc sprites.inc + graphics_level4.inc \ + graphics_level5.inc \ + sprites.inc ### @@ -34,6 +36,12 @@ graphics_level2.inc: \ echo "level2_preview_lzsa: .incbin \"level2_preview.lzsa\"" >> graphics_level2.inc +graphics_level4.inc: \ + level4.lzsa \ + level4_preview.lzsa + echo "level4_lzsa: .incbin \"level4.lzsa\"" > graphics_level4.inc + echo "level4_preview_lzsa: .incbin \"level4_preview.lzsa\"" >> graphics_level4.inc + graphics_level5.inc: \ level5.lzsa \ level5_preview.lzsa @@ -167,6 +175,24 @@ level2_preview.hgr: level2_preview.png ### +level4.lzsa: level4.hgr + $(LZSA) -r -f2 level4.hgr level4.lzsa + +level4.hgr: level4.png + $(PNG2HGR) level4.png > level4.hgr + +### + + +level4_preview.lzsa: level4_preview.hgr + $(LZSA) -r -f2 level4_preview.hgr level4_preview.lzsa + +level4_preview.hgr: level4_preview.png + $(PNG2HGR) level4_preview.png > level4_preview.hgr + + +### + level5.lzsa: level5.hgr $(LZSA) -r -f2 level5.hgr level5.lzsa diff --git a/games/lemm/graphics/level4.png b/games/lemm/graphics/level4.png new file mode 100644 index 0000000000000000000000000000000000000000..7b2f06a5ebb2f6993618e2d9444940c332c087d9 GIT binary patch literal 29146 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 literal 0 HcmV?d00001 diff --git a/games/lemm/graphics/level4_preview.png b/games/lemm/graphics/level4_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..5f9663bb294f137c69996683f0b1d6f21df3f6eb GIT binary patch literal 1240 zcmV;}1Sk86P)EX>4Tx04R}tkv&MmP!xqvQ$;Bi2djuUWT;LSL`5963Pq?8YK2xEOkVm2O&XFE z7e~Rh;NZ_<)xpJCR|i)?5c~mgbaGO3krMAq3N2#1@OU5R-E(;FK0v6KnPzp21DbA| zsYG1NWLL$mR|GJCeuNN^nPtpLQWC!Pbx++?cQKyj-}h(rs5y%P0g-r?8KzCVK|H-_ z8=UuvBdjQ^#OK6gCS8#Dk?V@bZ=4G*3p_Jorc?985n{2>#!4HrqNx#25l2-`r+gvf zvC4UivsSLM<~{if!#RCrnd`KMk-#FBAVGwJDoQBBMvQiy6bmUjkNfzCT)#vvg4x6ke0p62|10Ql{4b^~g}Bme*a5>QN3MF0Q*8_NOYH2(kp|IJ$g8=C%+ zpF_CX>@2HM@dakSAh-}0007`Nklutj@41~EtR^SR; zfh%zTRmz8y$c_`BKTNg2eMwZq383qV6lt62mq=nF8Xtd|f5zK1&%`%IE%=lU)sTOb z^XMfv)HI1?Y+*X1YlCGR2ImGiExSG3{Qa$R@Sb8Jn>y{V`*5NE%JU5i@6MyUY5yqc(YF=g6rc#gt|JwJFj#HN>ivB~whhGnQ8XB`B4w z&e#rT;-gkUE1E5Z7jI#0j~Tn{)%Rr6RnI*O_l_3glbCjA?AjUGl1(3+u~TQ!mD-nL zc#AXqmtsaPol)9Swe_k1)m3(XLw?!L?W#@RHoYDF%-?Z_vr3+roy~@98fAOw_2$8b zPVebPG{ao#_Na+CWxs%w@<^lEazX3|TWXW4O5OyHx8x1sFlevel4_preview_lzsa + sta level_preview_h_smc+1 + + ;============== + ; set up music + ;============== + + lda #0 + sta CURRENT_CHUNK + sta DONE_PLAYING + sta BASE_FRAME_L + sta BUTTON_LOCATION + + ; set up first song + + lda #music8_parts_l + sta chunk_l_smc+2 + + lda #music8_parts_h + sta chunk_h_smc+2 + + + lda #$D0 + sta CHUNK_NEXT_LOAD ; Load at $D0 + jsr load_song_chunk + + lda #$D0 ; music starts at $d000 + sta CHUNK_NEXT_PLAY + sta BASE_FRAME_H + + lda #1 + sta LOOP + sta CURRENT_CHUNK + + + + ;======================= + ; show title screen + ;======================= + + jsr intro_level + + ;======================= + ; Load Graphics + ;======================= + + lda #$20 + sta HGR_PAGE + jsr hgr_make_tables + + bit SET_GR + bit PAGE0 + bit HIRES + bit FULLGR + + lda #level4_lzsa + sta getsrc_smc+2 ; LZSA_SRC_HI + + lda #$20 + + jsr decompress_lzsa2_fast + + lda #level4_lzsa + sta getsrc_smc+2 ; LZSA_SRC_HI + + lda #$40 + + jsr decompress_lzsa2_fast + + + ;======================= + ; Setup cursor + ;======================= + + lda #0 + sta OVER_LEMMING + lda #10 + sta CURSOR_X + lda #100 + sta CURSOR_Y + + ;======================= + ; Init Lemmings + ;======================= + + lda #0 + sta lemming_out + sta lemming_exploding + lda INIT_X + sta lemming_x + lda INIT_Y + sta lemming_y + lda #1 + sta lemming_direction + lda #LEMMING_FALLING + sta lemming_status + + ;======================= + ; Play "Let's Go" + ;======================= + + jsr play_letsgo + + + ;======================= + ; start music + ;======================= + +; cli + + ;======================= + ; init vars + ;======================= + + lda #0 + sta LEVEL_OVER + sta DOOR_OPEN + sta FRAMEL + sta LOAD_NEXT_CHUNK + sta JOYSTICK_ENABLED + sta LEMMINGS_OUT + + jsr update_lemmings_out + + lda #1 + sta LEMMINGS_TO_RELEASE + +; jsr save_bg_14x14 ; save initial bg + + ; set up time + + lda #$5 + sta TIME_MINUTES + lda #$00 + sta TIME_SECONDS + + sta TIMER_COUNT + + ;=================== + ;=================== + ; Main Loop + ;=================== + ;=================== +l2_main_loop: + + lda LOAD_NEXT_CHUNK ; see if we need to load next chunk + beq l2_no_load_chunk ; outside IRQ to avoid glitch in music + + jsr load_song_chunk + + lda #0 ; reset + sta LOAD_NEXT_CHUNK + + +l2_no_load_chunk: + + + lda DOOR_OPEN + bne l2_door_is_open + + jsr draw_door + +l2_door_is_open: + + ;====================== + ; release lemmings + ;====================== + + lda LEMMINGS_TO_RELEASE + beq l2_done_release_lemmings + + lda DOOR_OPEN + beq l2_done_release_lemmings + + lda FRAMEL + and #$f + bne l2_done_release_lemmings + + inc LEMMINGS_OUT + jsr update_lemmings_out + + lda #1 + sta lemming_out + + dec LEMMINGS_TO_RELEASE + +l2_done_release_lemmings: + + + jsr draw_flames + + lda TIMER_COUNT + cmp #$50 + bcc l2_timer_not_yet + + jsr update_time + + lda #$0 + sta TIMER_COUNT +l2_timer_not_yet: + + + ; main drawing loop + + jsr erase_lemming + + jsr erase_pointer + + jsr move_lemmings + + jsr draw_lemming + + jsr handle_keypress + + jsr draw_pointer + + lda #$ff + jsr wait + + inc FRAMEL + + lda LEVEL_OVER + bne l2_level_over + + jmp l2_main_loop + + +l2_level_over: + +; bit SET_TEXT + + jsr disable_music + + jsr outro_level1 + + rts + + + + +.include "graphics/graphics_level4.inc" + + +music8_parts_h: + .byte >lemm9_part1_lzsa,>lemm9_part2_lzsa,>lemm9_part3_lzsa + .byte >lemm9_part4_lzsa,>lemm9_part5_lzsa,>lemm9_part6_lzsa + .byte >lemm9_part7_lzsa + .byte $00 + +music8_parts_l: + .byte