From beba8e05e9fc706a9038b5a2ce4c51f0ea06ae3e Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Sun, 21 Apr 2024 18:53:46 -0400 Subject: [PATCH] keen: fix problem with MAX_ENEMIES count also start hooking up more levels --- games/keen/Makefile | 13 ++++++++++- games/keen/handle_laser.s | 10 ++++++--- games/keen/level1_enemies.s | 18 +++++++++++---- games/keen/level4.s | 4 ++-- games/keen/level5.s | 40 +++++++++++++++++++++++++++++++++ games/keen/loader.s | 39 ++++++++++++++++++++++++++++++++ games/keen/maps/Makefile | 9 ++++++++ games/keen/maps/level5_map.png | Bin 0 -> 9313 bytes games/keen/mars.s | 28 +++++++++++------------ 9 files changed, 137 insertions(+), 24 deletions(-) create mode 100644 games/keen/level5.s create mode 100644 games/keen/maps/level5_map.png diff --git a/games/keen/Makefile b/games/keen/Makefile index f9ab4aea..6c1c8e26 100644 --- a/games/keen/Makefile +++ b/games/keen/Makefile @@ -12,7 +12,7 @@ EMPTY_DISK = ../../empty_disk/empty.dsk all: keen1_lores.dsk keen1_lores.dsk: HELLO LOADER TITLE ENGINE MARS \ - LEVEL1 LEVEL2 LEVEL3 LEVEL4 + LEVEL1 LEVEL2 LEVEL3 LEVEL4 LEVEL5 cp $(EMPTY_DISK) keen1_lores.dsk $(DOS33) -y keen1_lores.dsk SAVE A HELLO $(DOS33) -y keen1_lores.dsk BSAVE -a 0x1000 LOADER @@ -23,6 +23,7 @@ keen1_lores.dsk: HELLO LOADER TITLE ENGINE MARS \ $(DOS33) -y keen1_lores.dsk BSAVE -a 0x6000 LEVEL2 $(DOS33) -y keen1_lores.dsk BSAVE -a 0x6000 LEVEL3 $(DOS33) -y keen1_lores.dsk BSAVE -a 0x6000 LEVEL4 + $(DOS33) -y keen1_lores.dsk BSAVE -a 0x6000 LEVEL5 ### @@ -97,6 +98,16 @@ level4.o: level4.s enemies.inc \ maps/level4_map.zx02 ca65 -o level4.o level4.s -l level4.lst +#### + +LEVEL5: level5.o + ld65 -o LEVEL5 level5.o -C ../../linker_scripts/apple2_6000.inc + +level5.o: level5.s enemies.inc \ + maps/level5_map.zx02 + ca65 -o level5.o level5.s -l level5.lst + + diff --git a/games/keen/handle_laser.s b/games/keen/handle_laser.s index eee9f9cd..f9c292c5 100644 --- a/games/keen/handle_laser.s +++ b/games/keen/handle_laser.s @@ -122,6 +122,8 @@ laser_enemies: ldy #0 ; which enemy laser_enemies_loop: + cpy NUM_ENEMIES + beq done_laser_enemies_loop ; see if out @@ -164,9 +166,11 @@ hit_something: jmp exit_laser_enemy done_laser_enemy: - iny - cpy NUM_ENEMIES - bne laser_enemies_loop +; iny +; cpy NUM_ENEMIES + jmp laser_enemies_loop + +done_laser_enemies_loop: exit_laser_enemy: rts diff --git a/games/keen/level1_enemies.s b/games/keen/level1_enemies.s index 1b63a96c..20f61123 100644 --- a/games/keen/level1_enemies.s +++ b/games/keen/level1_enemies.s @@ -8,6 +8,11 @@ move_enemies: ldx #0 move_enemies_loop: + cpx NUM_ENEMIES + bne keep_on_moving + + jmp done_move_enemies_loop +keep_on_moving: ; only move if out @@ -242,10 +247,12 @@ move_left_noflo: done_move_enemy: inx - cpx NUM_ENEMIES - beq totally_done_move_enemies +; cpx NUM_ENEMIES +; beq totally_done_move_enemies jmp move_enemies_loop + +done_move_enemies_loop: totally_done_move_enemies: rts @@ -258,6 +265,8 @@ draw_enemies: ldy #0 draw_enemies_loop: + cpy NUM_ENEMIES + beq done_draw_enemies ; see if out @@ -365,10 +374,11 @@ draw_enemy: done_draw_enemy: iny - cpy NUM_ENEMIES - beq exit_draw_enemy +; cpy NUM_ENEMIES +; beq exit_draw_enemy jmp draw_enemies_loop +done_draw_enemies: exit_draw_enemy: rts diff --git a/games/keen/level4.s b/games/keen/level4.s index 6567619a..89995e33 100644 --- a/games/keen/level4.s +++ b/games/keen/level4.s @@ -4,7 +4,7 @@ ; at $6000 -level3_data: +level4_data: .byte 116 ;MAX_TILE_X = 116 ; 116 wide .byte 20 ;MAX_TILE_Y = 16 ; 20 tall @@ -36,7 +36,7 @@ enemy_data_y: .byte 0, 0, 0, 0, 0, 0, 0, 0 enemy_data_state: .byte 0, 0, 0, 0, 0, 0, 0, 0 enemy_data_count: .byte 8, 8, 8, 8, 8, 8, 8, 8 - +; FIXME: this is not correct ; enemy1: yorp @16,9, right ; enemy2: yorp @19,9 left ; enemy3: yorp @23,9 left diff --git a/games/keen/level5.s b/games/keen/level5.s new file mode 100644 index 00000000..7f1c702b --- /dev/null +++ b/games/keen/level5.s @@ -0,0 +1,40 @@ +; Level 5 (Pogo Shrine) + +; at $6000 + +level2_data: +.byte 20 ;MAX_TILE_X = 116 ; 116 wide +.byte 26 ;MAX_TILE_Y = 16 ; 16 tall + +.byte 1 ;START_KEEN_TILEX = 1 +.byte 13 ;START_KEEN_TILEY = 13 + +.byte 0 ;START_TILEMAP_X = 0 +.byte 5 ;START_TILEMAP_Y = 5 + +.byte 0 ;NUM_ENEMIES = 8 + +.byte 32 ;HARDTOP_TILES = 32 ; start at 32 +.byte 40 ;ALLHARD_TILES = 40 ; start at 40 + + +.align $100 + +; at $6100 +enemy_data: +.byte $0 + +.align $100 + +; at $6200 +oracle_message: + ; 012345678901234567890123456789012345678 + .byte 2,21,"YOU HEAR IN YOUR MIND:",0 + .byte 2,22,"IT IS TOO BAD THAT YOU CANNOT READ",0 + .byte 2,23,"THE STANDARD GALACTIC ALPHABET, HUMAN",0 + +.align $100 + +; at $6300 +level5_data_zx02: + .incbin "maps/level5_map.zx02" diff --git a/games/keen/loader.s b/games/keen/loader.s index f4d0b987..c5357965 100644 --- a/games/keen/loader.s +++ b/games/keen/loader.s @@ -195,6 +195,8 @@ copy_filename_done: rts +; FIXME: probably smaler to build the level filename on the fly? + filenames: .word title_filename .word mars_filename @@ -202,6 +204,18 @@ filenames: .word keen2_filename .word keen3_filename .word keen4_filename + .word keen5_filename + .word keen6_filename + .word keen7_filename + .word keen8_filename + .word keen9_filename + .word keen10_filename + .word keen11_filename + .word keen12_filename + .word keen13_filename + .word keen14_filename + .word keen15_filename + .word keen16_filename engine_filename: .byte "ENGINE",0 @@ -217,6 +231,31 @@ keen3_filename: .byte "LEVEL3",0 keen4_filename: .byte "LEVEL4",0 +keen5_filename: + .byte "LEVEL5",0 +keen6_filename: + .byte "LEVEL6",0 +keen7_filename: + .byte "LEVEL7",0 +keen8_filename: + .byte "LEVEL8",0 +keen9_filename: + .byte "LEVEL9",0 +keen10_filename: + .byte "LEVEL10",0 +keen11_filename: + .byte "LEVEL11",0 +keen12_filename: + .byte "LEVEL12",0 +keen13_filename: + .byte "LEVEL13",0 +keen14_filename: + .byte "LEVEL14",0 +keen15_filename: + .byte "LEVEL15",0 +keen16_filename: + .byte "LEVEL16",0 + ;=================================================== diff --git a/games/keen/maps/Makefile b/games/keen/maps/Makefile index 4f624009..8f4d1621 100644 --- a/games/keen/maps/Makefile +++ b/games/keen/maps/Makefile @@ -8,6 +8,7 @@ PNG2GR = ../../../utils/gr-utils/png2gr all: png2map \ level1_map.zx02 level2_map.zx02 \ level3_map.zx02 level4_map.zx02 \ + level5_map.zx02 \ mars_map.zx02 ### @@ -42,6 +43,14 @@ level4_map.zx02: level4_map.inc level4_map.inc: level4_map.png png2map ./png2map level4_map.png level4_map.inc +### + +level5_map.zx02: level5_map.inc + $(ZX02) level5_map.inc level5_map.zx02 + +level5_map.inc: level5_map.png png2map + ./png2map level5_map.png level5_map.inc + ### diff --git a/games/keen/maps/level5_map.png b/games/keen/maps/level5_map.png new file mode 100644 index 0000000000000000000000000000000000000000..5e8451d46ff3b7dfacb9b80685846e6e6c9d4622 GIT binary patch literal 9313 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 Go%}DhIEZin literal 0 HcmV?d00001 diff --git a/games/keen/mars.s b/games/keen/mars.s index a811b8a1..d0b6c5c9 100644 --- a/games/keen/mars.s +++ b/games/keen/mars.s @@ -618,25 +618,25 @@ location_size: location_actions_low: .byte <(enter_level-1),<(enter_level-1) ; level1, level2 - .byte <(enter_level-1),<(dummy_action-1) ; level3, level4 - .byte <(dummy_action-1),<(dummy_action-1) - .byte <(dummy_action-1),<(dummy_action-1) - .byte <(dummy_action-1),<(dummy_action-1) - .byte <(dummy_action-1),<(dummy_action-1) - .byte <(dummy_action-1),<(dummy_action-1) - .byte <(dummy_action-1),<(dummy_action-1) + .byte <(enter_level-1),<(enter_level-1) ; level3, level4 + .byte <(enter_level-1),<(enter_level-1) ; level4, level6 + .byte <(enter_level-1),<(enter_level-1) ; level7, level8 + .byte <(enter_level-1),<(enter_level-1) ; level9, level10 + .byte <(enter_level-1),<(enter_level-1) ; level11, level12 + .byte <(enter_level-1),<(enter_level-1) ; level13, level14 + .byte <(enter_level-1),<(enter_level-1) ; level15, level16 .byte <(do_parts-1),<(transport_right-1) ; ship, l transport .byte <(transport_left-1),<(transport_secret-1) ; r trans, secret location_actions_high: .byte >(enter_level-1),>(enter_level-1) ; level1, level2 - .byte >(enter_level-1),>(dummy_action-1) ; level3, level4 - .byte >(dummy_action-1),>(dummy_action-1) - .byte >(dummy_action-1),>(dummy_action-1) - .byte >(dummy_action-1),>(dummy_action-1) - .byte >(dummy_action-1),>(dummy_action-1) - .byte >(dummy_action-1),>(dummy_action-1) - .byte >(dummy_action-1),>(dummy_action-1) + .byte >(enter_level-1),>(enter_level-1) ; level3, level4 + .byte >(enter_level-1),>(enter_level-1) ; level5, level6 + .byte >(enter_level-1),>(enter_level-1) ; level7, level8 + .byte >(enter_level-1),>(enter_level-1) ; level9, level10 + .byte >(enter_level-1),>(enter_level-1) ; level11, level12 + .byte >(enter_level-1),>(enter_level-1) ; level13, level14 + .byte >(enter_level-1),>(enter_level-1) ; level15, level16 .byte >(do_parts-1),>(transport_right-1) ; ship, l transport .byte >(transport_left-1),>(transport_secret-1) ; r trans, secret