From ef5a65bd48f8b9f0b90cc1d06f15d890b4072ffa Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Thu, 17 Mar 2022 21:33:58 -0400 Subject: [PATCH] lemm: make level2 winnable --- games/lemm/Makefile | 23 ++- games/lemm/draw_door.s | 24 ++- games/lemm/draw_flames.s | 8 +- games/lemm/graphics/Makefile | 14 +- games/lemm/graphics/level2.png | Bin 21920 -> 26630 bytes games/lemm/lemm.s | 17 +- games/lemm/level1.s | 42 +++++ games/lemm/level2.s | 327 +++++++++++++++++++++++++++++++++ games/lemm/level5.s | 8 + games/lemm/move_lemming.s | 11 +- games/lemm/music/Makefile | 46 ++++- games/lemm/zp.inc | 6 + 12 files changed, 503 insertions(+), 23 deletions(-) create mode 100644 games/lemm/level2.s diff --git a/games/lemm/Makefile b/games/lemm/Makefile index 8d7865c9..aa0b3cc6 100644 --- a/games/lemm/Makefile +++ b/games/lemm/Makefile @@ -19,7 +19,7 @@ all: lemm.dsk lemm.dsk: QBOOT QLOAD LEMM \ - LEVEL1 LEVEL5 + LEVEL1 LEVEL2 LEVEL5 cp $(EMPTY_DISK) lemm.dsk $(DOS33_RAW) lemm.dsk 0 0 QBOOT 0 1 $(DOS33_RAW) lemm.dsk 0 2 QBOOT 1 1 @@ -27,6 +27,7 @@ lemm.dsk: QBOOT QLOAD LEMM \ $(DOS33_RAW) lemm.dsk 1 0 QLOAD 0 0 $(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 18 0 LEVEL5 0 0 @@ -121,8 +122,14 @@ lemm.inc: generate_common LEMM ./generate_common -a 0x6000 -s update_lemmings_out lemm.lst >> lemm.inc ./generate_common -a 0x6000 -s level_preview_h_smc lemm.lst >> lemm.inc ./generate_common -a 0x6000 -s level_preview_l_smc lemm.lst >> lemm.inc - - + ./generate_common -a 0x6000 -s r_flame_x_smc lemm.lst >> lemm.inc + ./generate_common -a 0x6000 -s r_flame_y_smc lemm.lst >> lemm.inc + ./generate_common -a 0x6000 -s l_flame_x_smc lemm.lst >> lemm.inc + ./generate_common -a 0x6000 -s l_flame_y_smc lemm.lst >> lemm.inc + ./generate_common -a 0x6000 -s exit_x1_smc lemm.lst >> lemm.inc + ./generate_common -a 0x6000 -s exit_x2_smc lemm.lst >> lemm.inc + ./generate_common -a 0x6000 -s exit_y1_smc lemm.lst >> lemm.inc + ./generate_common -a 0x6000 -s exit_y2_smc lemm.lst >> lemm.inc #### @@ -135,6 +142,16 @@ level1.o: level1.s zp.inc hardware.inc qload.inc lemm.inc \ #### +LEVEL2: level2.o + ld65 -o LEVEL2 level2.o -C ../../linker_scripts/apple2_a000.inc + +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 + + +#### + LEVEL5: level5.o ld65 -o LEVEL5 level5.o -C ../../linker_scripts/apple2_a000.inc diff --git a/games/lemm/draw_door.s b/games/lemm/draw_door.s index d32f8e43..79d3d379 100644 --- a/games/lemm/draw_door.s +++ b/games/lemm/draw_door.s @@ -14,26 +14,34 @@ draw_door: lda door_h,Y sta INH - ldx #9 ; 63 + ldx DOOR_X ; 63 stx XPOS - lda #36 + lda DOOR_Y sta YPOS jsr hgr_draw_sprite jsr hgr_sprite_page_toggle - ldx #9 ; 63 + lda FRAMEL + lsr + and #$3 + tay + + lda door_l,Y + sta INL + lda door_h,Y + sta INH + + ldx DOOR_X ; 63 stx XPOS - lda #36 + lda DOOR_Y sta YPOS jsr hgr_draw_sprite jsr hgr_sprite_page_toggle - - lda FRAMEL cmp #7 bne not_door_done @@ -74,9 +82,9 @@ draw_door_5: lda bdoor_h,Y sta INH - ldx #9 ; 63 + ldx DOOR_X ; 63 stx XPOS - lda #24 + lda DOOR_Y sta YPOS jsr hgr_draw_sprite diff --git a/games/lemm/draw_flames.s b/games/lemm/draw_flames.s index 5f99e0ba..aae97527 100644 --- a/games/lemm/draw_flames.s +++ b/games/lemm/draw_flames.s @@ -1,4 +1,6 @@ - + ;======================= + ; draw exit flames + ;======================= draw_flames: @@ -12,8 +14,10 @@ draw_flames: lda lflame_h,Y sta INH +l_flame_x_smc: ldx #31 ; 217 stx XPOS +l_flame_y_smc: lda #108 sta YPOS @@ -30,8 +34,10 @@ draw_flames: lda rflame_h,Y sta INH +r_flame_x_smc: ldx #35 ; 245 stx XPOS +r_flame_y_smc: lda #108 sta YPOS diff --git a/games/lemm/graphics/Makefile b/games/lemm/graphics/Makefile index b54f4078..4dbb4b6c 100644 --- a/games/lemm/graphics/Makefile +++ b/games/lemm/graphics/Makefile @@ -28,10 +28,10 @@ graphics_level1.inc: \ echo "level1_preview_lzsa: .incbin \"level1_preview.lzsa\"" >> graphics_level1.inc graphics_level2.inc: \ - level2.lzsa -# level1_preview.lzsa + level2.lzsa \ + level2_preview.lzsa echo "level2_lzsa: .incbin \"level2.lzsa\"" > graphics_level2.inc -# echo "level1_preview_lzsa: .incbin \"level1_preview.lzsa\"" >> graphics_level1.inc + echo "level2_preview_lzsa: .incbin \"level2_preview.lzsa\"" >> graphics_level2.inc graphics_level5.inc: \ @@ -159,6 +159,14 @@ level2.hgr: level2.png ### +level2_preview.lzsa: level2_preview.hgr + $(LZSA) -r -f2 level2_preview.hgr level2_preview.lzsa + +level2_preview.hgr: level2_preview.png + $(PNG2HGR) level2_preview.png > level2_preview.hgr + +### + level5.lzsa: level5.hgr $(LZSA) -r -f2 level5.hgr level5.lzsa diff --git a/games/lemm/graphics/level2.png b/games/lemm/graphics/level2.png index b7d0760366adf984ed2526c4536668d99d03623c..18c88dad4e11272f30480af491ac61d6225c458d 100644 GIT binary patch delta 23222 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

-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 rAlevel2_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 #level2_lzsa + sta getsrc_smc+2 ; LZSA_SRC_HI + + lda #$20 + + jsr decompress_lzsa2_fast + + lda #level2_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_level2.inc" + + +music8_parts_h: + .byte >lemm8_part1_lzsa,>lemm8_part2_lzsa,>lemm8_part3_lzsa + .byte >lemm8_part4_lzsa,>lemm8_part5_lzsa,>lemm8_part6_lzsa + .byte $00 + +music8_parts_l: + .byte lemm5.raw @@ -19,6 +21,15 @@ lemm5.raw: lemm5.ym lemm6.raw: lemm6.ym $(YM5_TO_RAW) ./lemm6.ym > lemm6.raw +lemm8.raw: lemm8.ym + $(YM5_TO_RAW) ./lemm8.ym > lemm8.raw + +lemm9.raw: lemm9.ym + $(YM5_TO_RAW) ./lemm9.ym > lemm9.raw + +lemm10.raw: lemm10.ym + $(YM5_TO_RAW) ./lemm10.ym > lemm10.raw + #### lemm5.part1: lemm5.raw @@ -74,6 +85,35 @@ lemm6.part9.lzsa: lemm6.part9 lemm6.part10.lzsa: lemm6.part10 $(LZSA) -r -f2 lemm6.part10 lemm6.part10.lzsa +#### + +lemm8.part1: lemm8.raw + $(RAW_INTERLEAVE) -m 11 -c 512 ./lemm8 + +lemm8.part1.lzsa: lemm8.part1 + $(LZSA) -r -f2 lemm8.part1 lemm8.part1.lzsa + +lemm8.part2.lzsa: lemm8.part2 + $(LZSA) -r -f2 lemm8.part2 lemm8.part2.lzsa + +lemm8.part3.lzsa: lemm8.part3 + $(LZSA) -r -f2 lemm8.part3 lemm8.part3.lzsa + +lemm8.part4.lzsa: lemm8.part4 + $(LZSA) -r -f2 lemm8.part4 lemm8.part4.lzsa + +lemm8.part5.lzsa: lemm8.part5 + $(LZSA) -r -f2 lemm8.part5 lemm8.part5.lzsa + +lemm8.part6.lzsa: lemm8.part6 + $(LZSA) -r -f2 lemm8.part6 lemm8.part6.lzsa + +lemm8.part7.lzsa: lemm8.part7 + $(LZSA) -r -f2 lemm8.part7 lemm8.part7.lzsa + + +#### + clean: rm -f *.lzsa *.part1 *.part2 *.part3 *.part4 *.part5 *.part6 *.part7 *.part8 *.part9 *.part10 diff --git a/games/lemm/zp.inc b/games/lemm/zp.inc index e1debd3d..f14bc5a1 100644 --- a/games/lemm/zp.inc +++ b/games/lemm/zp.inc @@ -75,6 +75,12 @@ WHICH_LEVEL = $88 APPLEII_MODEL = $8B +DOOR_X = $90 ; location of door +DOOR_Y = $91 +INIT_X = $92 ; initial lemming position +INIT_Y = $93 + + ; done game puzzle state