diff --git a/games/lemm/Makefile b/games/lemm/Makefile index 97258ae4..312c4202 100644 --- a/games/lemm/Makefile +++ b/games/lemm/Makefile @@ -40,7 +40,7 @@ lemm.dsk: QBOOT QLOAD LEMM \ hr_lemm.dsk: QBOOT QLOAD HR_LEMM \ HR_LEVEL1 HR_LEVEL2 HR_LEVEL3 HR_LEVEL4 HR_LEVEL5 \ - LEVEL6 LEVEL7 LEVEL8 LEVEL9 LEVEL10 + HR_LEVEL6 HR_LEVEL7 LEVEL8 LEVEL9 LEVEL10 cp $(EMPTY_DISK) hr_lemm.dsk $(DOS33_RAW) hr_lemm.dsk 0 0 QBOOT 0 1 $(DOS33_RAW) hr_lemm.dsk 0 2 QBOOT 1 1 @@ -52,8 +52,8 @@ hr_lemm.dsk: QBOOT QLOAD HR_LEMM \ $(DOS33_RAW) hr_lemm.dsk 12 0 HR_LEVEL3 0 0 $(DOS33_RAW) hr_lemm.dsk 15 0 HR_LEVEL4 0 0 $(DOS33_RAW) hr_lemm.dsk 18 0 HR_LEVEL5 0 0 - $(DOS33_RAW) hr_lemm.dsk 21 0 LEVEL6 0 0 - $(DOS33_RAW) hr_lemm.dsk 24 0 LEVEL7 0 0 + $(DOS33_RAW) hr_lemm.dsk 21 0 HR_LEVEL6 0 0 + $(DOS33_RAW) hr_lemm.dsk 24 0 HR_LEVEL7 0 0 $(DOS33_RAW) hr_lemm.dsk 27 0 LEVEL8 0 0 $(DOS33_RAW) hr_lemm.dsk 30 0 LEVEL9 0 0 $(DOS33_RAW) hr_lemm.dsk 33 0 LEVEL10 0 0 @@ -400,6 +400,27 @@ hr_level5.o: hr_level5.s zp.inc hardware.inc qload.inc lemm.inc \ hr_graphics/graphics_hr_level5.inc ca65 -o hr_level5.o hr_level5.s -l hr_level5.lst +#### + +HR_LEVEL6: hr_level6.o + ld65 -o HR_LEVEL6 hr_level6.o -C ../../linker_scripts/apple2_9000.inc + +hr_level6.o: hr_level6.s zp.inc hardware.inc qload.inc lemm.inc \ + release_lemming.s \ + hr_graphics/graphics_hr_level6.inc + ca65 -o hr_level6.o hr_level6.s -l hr_level6.lst + +#### + +HR_LEVEL7: hr_level7.o + ld65 -o HR_LEVEL7 hr_level7.o -C ../../linker_scripts/apple2_9000.inc + +hr_level7.o: hr_level7.s zp.inc hardware.inc qload.inc lemm.inc \ + release_lemming.s \ + hr_graphics/graphics_hr_level7.inc + ca65 -o hr_level7.o hr_level7.s -l hr_level7.lst + + diff --git a/games/lemm/hr_graphics/l6_rr.png b/games/lemm/hr_graphics/l6_rr.png index a1dcc08b..4a56be28 100644 Binary files a/games/lemm/hr_graphics/l6_rr.png and b/games/lemm/hr_graphics/l6_rr.png differ diff --git a/games/lemm/hr_graphics/l7_floppy.png b/games/lemm/hr_graphics/l7_floppy.png index e32f2b60..c2003107 100644 Binary files a/games/lemm/hr_graphics/l7_floppy.png and b/games/lemm/hr_graphics/l7_floppy.png differ diff --git a/games/lemm/hr_level6.s b/games/lemm/hr_level6.s new file mode 100644 index 00000000..6f7c45e4 --- /dev/null +++ b/games/lemm/hr_level6.s @@ -0,0 +1,305 @@ +; Floppy Expansion Take 1 + +.include "zp.inc" +.include "hardware.inc" +.include "qload.inc" +.include "lemm.inc" +.include "lemming_status.inc" + +.byte 6 ; level 6 + +do_level6: + + + ;====================== + ; set up initial stuff + ;====================== + + lda #10 + sta CLIMBER_COUNT + sta EXPLODER_COUNT + sta STOPPER_COUNT + sta BUILDER_COUNT + sta BASHER_COUNT + sta MINER_COUNT + sta DIGGER_COUNT + sta FLOATER_COUNT + + + + lda #0 + sta DOOR_X + lda #0 + sta DOOR_Y + + lda #3 + sta INIT_X + lda #8 + sta INIT_Y + + ; flame locations + + lda #33 + sta l_flame_x_smc+1 + lda #106 + sta l_flame_y_smc+1 + sta r_flame_y_smc+1 + + lda #37 + sta r_flame_x_smc+1 + + ; door exit location + + lda #33 ; + sta exit_x1_smc+1 + lda #37 + sta exit_x2_smc+1 + + lda #95 + sta exit_y1_smc+1 + lda #130 + sta exit_y2_smc+1 + + lda #$10 ; BCD + sta PERCENT_NEEDED + sta PERCENT_ADD + + ;============== + ; set up intro + ;============== + + lda #hr_level6_preview_lzsa + sta level_preview_h_smc+1 + + lda #level6_intro_text + sta intro_text_smc_h+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 #hr_level6_lzsa + sta getsrc_smc+2 ; LZSA_SRC_HI + + lda #$20 + + jsr decompress_lzsa2_fast + + lda #hr_level6_lzsa + sta getsrc_smc+2 ; LZSA_SRC_HI + + lda #$40 + + jsr decompress_lzsa2_fast + + + ;======================= + ; Setup cursor + ;======================= + + lda #$FF + sta OVER_LEMMING + lda #10 + sta CURSOR_X + lda #100 + sta CURSOR_Y + + ;======================= + ; init vars + ;======================= + + lda #10 + sta LEMMINGS_TO_RELEASE + + ; set up time + + lda #$5 + sta TIME_MINUTES + lda #$00 + sta TIME_SECONDS + sta TIMER_COUNT ; 1/50 + + jsr init_level + + jsr update_remaining_all + + ;======================= + ; Play "Let's Go" + ;======================= + + jsr play_letsgo + + + ;=================== + ;=================== + ; Main Loop + ;=================== + ;=================== +l6_main_loop: + + ;========================= + ; load next chunk of music + ; if necessary + ;========================= + + jsr load_music + + + ;========================= + ; open door + ;========================= + + lda DOOR_OPEN + bne l6_door_is_open + + jsr draw_door + +l6_door_is_open: + + ;====================== + ; release lemmings + ;====================== + + jsr release_lemming + + ;====================== + ; animate flames + ;====================== + + + jsr draw_flames + + jsr update_timer + + ; main drawing loop + + jsr erase_lemming + + jsr erase_pointer + + jsr move_lemmings + + jsr draw_lemming + + jsr handle_keypress + + jsr draw_pointer + + ; wait a bit + + lda #$f0 + jsr wait + + inc FRAMEL + + lda LEVEL_OVER + bne l6_level_over + + jmp l6_main_loop + + +l6_level_over: + + rts + + +.include "update_timer.s" + +.include "hr_graphics/graphics_hr_level6.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 hr_level7_preview_lzsa + sta level_preview_h_smc+1 + + lda #level7_intro_text + sta intro_text_smc_h+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 #hr_level7_lzsa + sta getsrc_smc+2 ; LZSA_SRC_HI + + lda #$20 + + jsr decompress_lzsa2_fast + + lda #hr_level7_lzsa + sta getsrc_smc+2 ; LZSA_SRC_HI + + lda #$40 + + jsr decompress_lzsa2_fast + + + ;======================= + ; Setup cursor + ;======================= + + lda #$FF + sta OVER_LEMMING + lda #10 + sta CURSOR_X + lda #100 + sta CURSOR_Y + + ;======================= + ; init vars + ;======================= + + lda #10 + sta LEMMINGS_TO_RELEASE + + ; set up time + + lda #$5 + sta TIME_MINUTES + lda #$00 + sta TIME_SECONDS + sta TIMER_COUNT ; 1/50 + + jsr init_level + + jsr update_remaining_all + + ;======================= + ; Play "Let's Go" + ;======================= + + jsr play_letsgo + + + ;=================== + ;=================== + ; Main Loop + ;=================== + ;=================== +l7_main_loop: + + ;========================= + ; load next chunk of music + ; if necessary + ;========================= + + jsr load_music + + + ;========================= + ; open door + ;========================= + + lda DOOR_OPEN + bne l7_door_is_open + + jsr draw_door + +l7_door_is_open: + + ;====================== + ; release lemmings + ;====================== + + jsr release_lemming + + ;====================== + ; animate flames + ;====================== + + + jsr draw_flames + + jsr update_timer + + ; main drawing loop + + jsr erase_lemming + + jsr erase_pointer + + jsr move_lemmings + + jsr draw_lemming + + jsr handle_keypress + + jsr draw_pointer + + ; wait a bit + + lda #$f0 + jsr wait + + inc FRAMEL + + lda LEVEL_OVER + bne l7_level_over + + jmp l7_main_loop + + +l7_level_over: + + rts + + +.include "update_timer.s" + +.include "hr_graphics/graphics_hr_level7.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