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 00000000..5e8451d4 Binary files /dev/null and b/games/keen/maps/level5_map.png differ 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