From 95fc2febff5d9ed1a61652f9dec1a3d0a326bacb Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Sun, 14 Apr 2024 22:44:38 -0400 Subject: [PATCH] keen: hook up level2 --- games/keen/Makefile | 20 ++- games/keen/level1.s | 23 +--- games/keen/level2.s | 291 ++++++++++++++++++++++++++++++++++++++++++++ games/keen/mars.s | 4 +- 4 files changed, 305 insertions(+), 33 deletions(-) create mode 100644 games/keen/level2.s diff --git a/games/keen/Makefile b/games/keen/Makefile index c082efa5..b4b80074 100644 --- a/games/keen/Makefile +++ b/games/keen/Makefile @@ -11,15 +11,14 @@ EMPTY_DISK = ../../empty_disk/empty.dsk all: keen1_lores.dsk -keen1_lores.dsk: HELLO LOADER TITLE MARS LEVEL1 -#LEVEL2 +keen1_lores.dsk: HELLO LOADER TITLE MARS LEVEL1 LEVEL2 cp $(EMPTY_DISK) keen1_lores.dsk $(DOS33) -y keen1_lores.dsk SAVE A HELLO $(DOS33) -y keen1_lores.dsk BSAVE -a 0x1000 LOADER $(DOS33) -y keen1_lores.dsk BSAVE -a 0x4000 TITLE $(DOS33) -y keen1_lores.dsk BSAVE -a 0x2000 MARS $(DOS33) -y keen1_lores.dsk BSAVE -a 0x2000 LEVEL1 -# $(DOS33) -y keen1_lores.dsk BSAVE -a 0x2000 LEVEL2 + $(DOS33) -y keen1_lores.dsk BSAVE -a 0x2000 LEVEL2 ### @@ -67,7 +66,7 @@ level1.o: level1.s zp.inc hardware.inc \ text_help.s gr_fast_clear.s text_quit_yn.s text_drawbox.s \ level1_enemies.s level1_items.s \ graphics/keen_graphics.inc sprites/keen_sprites.inc \ - maps/level1_map.lzsa \ + maps/level1_map.zx02 \ status_bar.s draw_keen.s move_keen.s gr_putsprite_crop.s \ draw_tilemap.s tilemap_lookup.s \ level1_sfx.s longer_sound.s \ @@ -81,16 +80,15 @@ LEVEL2: level2.o level2.o: level2.s zp.inc hardware.inc \ text_help.s gr_fast_clear.s text_quit_yn.s text_drawbox.s \ - enemies_level2.s actions_level2.s item_level2.s \ - graphics/keen_graphics.inc keen_sprites.inc \ - maps/level2_map.lzsa \ + level1_enemies.s level1_items.s \ + graphics/keen_graphics.inc sprites/keen_sprites.inc \ + maps/level2_map.zx02 \ status_bar.s draw_keen.s move_keen.s gr_putsprite_crop.s \ - draw_tilemap.s \ - sound_effects.s longer_sound.s \ + draw_tilemap.s tilemap_lookup.s \ + level1_sfx.s longer_sound.s \ keyboard.s handle_laser.s ca65 -o level2.o level2.s -l level2.lst - #### graphics/keen1_title.hgr.zx02: @@ -108,7 +106,7 @@ maps/level1_map.lzsa: #### clean: - rm -f *~ *.o *.lst HELLO LOADER TITLE MARS LEVEL1 + rm -f *~ *.o *.lst HELLO LOADER TITLE MARS LEVEL1 LEVEL2 cd graphics && make clean cd maps && make clean # cd title && make clean diff --git a/games/keen/level1.s b/games/keen/level1.s index 51c77d6b..f43f83d5 100644 --- a/games/keen/level1.s +++ b/games/keen/level1.s @@ -1,4 +1,4 @@ -; Keen PoC Level 1 +; Keen PoC Level 1 (Border Town) ; by deater (Vince Weaver) @@ -14,8 +14,7 @@ MAX_TILE_Y = 5 ; (34 - 24)/2 (maybe?) keen_start: ;=================== ; init screen -; jsr TEXT -; jsr HOME + bit KEYRESET bit SET_GR @@ -67,19 +66,6 @@ keen_start: lda #RIGHT ; direction sta KEEN_DIRECTION - ;==================================== - ; load level1 background - ;==================================== - -; lda #level1_bg_zx02 -; sta ZX0_src+1 - -; lda #$c ; load to page $c00 - -; jsr full_decomp - ;==================================== ; load level1 tilemap @@ -129,10 +115,6 @@ keen_loop: jsr draw_keen - ; handle door opening - -; jsr check_open_door - jsr page_flip jsr handle_keypress @@ -306,3 +288,4 @@ level1_levelover: level1_data_zx02: .incbin "maps/level1_map.zx02" + diff --git a/games/keen/level2.s b/games/keen/level2.s new file mode 100644 index 00000000..cd72cfb6 --- /dev/null +++ b/games/keen/level2.s @@ -0,0 +1,291 @@ +; Keen PoC Level 2 (First Shrine) + +; by deater (Vince Weaver) + +; Zero Page + .include "zp.inc" + .include "hardware.inc" + .include "common_defines.inc" + + +MAX_TILE_X = 96 ; 116 - 20 +MAX_TILE_Y = 5 ; (34 - 24)/2 (maybe?) + +keen_start: + ;=================== + ; init screen + + bit KEYRESET + + bit SET_GR + bit PAGE1 + bit LORES + bit FULLGR + + jsr clear_top ; avoid grey stripes at load + + ;===================== + ; init vars + ;===================== + + lda #0 + sta ANIMATE_FRAME + sta FRAMEL + sta FRAMEH + sta KEEN_WALKING + sta KEEN_JUMPING + sta LEVEL_OVER + sta LASER_OUT + sta KEEN_XL + sta KEEN_FALLING + sta KEEN_SHOOTING + sta KEYCARDS + + ; debug + +; lda #9 +; sta RAYGUNS + + lda #4 + sta DRAW_PAGE + + ; Level 1 + ; start at 2,24 (remember tiles 2 bytes high even though 4 pixels) + ; but with reference to starting tilemap (0,5) should be + ; 2,8? + + lda #1 + sta KEEN_TILEX + lda #13 + sta KEEN_TILEY + + lda #0 ; offset from tile location + sta KEEN_X + sta KEEN_Y + + lda #RIGHT ; direction + sta KEEN_DIRECTION + + + ;==================================== + ; load level1 tilemap + ;==================================== + + lda #level1_data_zx02 + sta ZX0_src+1 + lda #$90 ; load to page $9000 + jsr full_decomp + + ;==================================== + ; copy in tilemap subset + ;==================================== + ; we copy in full screen, 40x48 = 20x12 tiles + ; we start out assuming position is 0,5 + + lda #0 + sta TILEMAP_X + lda #5 + sta TILEMAP_Y + + jsr copy_tilemap_subset + + ;==================================== + ;==================================== + ; Main loop + ;==================================== + ;==================================== + +keen_loop: + + ; draw tilemap + + jsr draw_tilemap + + ; draw enemies + + jsr draw_enemies + + ; draw laser + + jsr draw_laser + + ; draw keen + + jsr draw_keen + + jsr page_flip + + jsr handle_keypress + + jsr move_keen + + jsr move_enemies + + jsr move_laser + + + ;======================== + ; increment frame count + ;======================== + + inc FRAMEL + bne no_frame_oflo + inc FRAMEH +no_frame_oflo: + + ;=========================== + ; check end of level + ;=========================== + + lda LEVEL_OVER + bne done_with_keen + + ;=========================== + ; delay + ;=========================== + +; lda #200 +; jsr WAIT + + + jmp keen_loop + + +done_with_keen: + bit KEYRESET ; clear keypress + + ; three reasons we could get here + ; NEXT_LEVEL = finished level by exiting door + ; GAME_OVER = hit ESC and said Y to QUIT + ; TOUCHED_ENEMY = touched an enemy + + lda LEVEL_OVER + cmp #NEXT_LEVEL + beq level1_levelover + + cmp #GAME_OVER + beq level1_gameover + + ; got here, touched enemy + + + ;============================ + ; end animation + ;============================ + + lda #1 + sta PLAY_END_SOUND + + inc KEEN_TILEY ; move down + + sec + lda KEEN_TILEX + sbc TILEMAP_X + asl + clc + adc KEEN_X + sta XPOS + + sec + lda KEEN_TILEY + sbc TILEMAP_Y + asl + asl + clc + adc KEEN_Y + sta YPOS + +level_end_animation: + jsr draw_tilemap + + ldx #keen_sprite_squish + stx INL + sta INH + jsr put_sprite_crop + + jsr page_flip + + lda PLAY_END_SOUND + beq skip_end_sound + + ldy #SFX_KEENDIESND + jsr play_sfx + + dec PLAY_END_SOUND +skip_end_sound: + + + lda #50 + jsr WAIT + + dec YPOS + dec YPOS + + bpl level_end_animation + + + dec KEENS + bpl level1_levelover + +level1_gameover: + + ; mars plays this + +; ldy #SFX_GAMEOVERSND +; jsr play_sfx + + lda #GAME_OVER + sta LEVEL_OVER + +level1_levelover: + + lda #LOAD_MARS + sta WHICH_LOAD + + rts ; exit back + + + ;========================== + ; includes + ;========================== + + ; level graphics +;level1_bg_zx02: +; .incbin "graphics/level1_bg.gr.zx02" + + .include "text_print.s" + .include "gr_offsets.s" + .include "gr_fast_clear.s" + .include "gr_pageflip.s" + .include "gr_putsprite_crop.s" + .include "zx02_optim.s" + + .include "status_bar.s" + .include "keyboard.s" + .include "joystick.s" + + .include "text_drawbox.s" + .include "text_help.s" + .include "text_quit_yn.s" + + .include "draw_keen.s" + .include "sprites/keen_sprites.inc" + .include "move_keen.s" + .include "handle_laser.s" + .include "draw_tilemap.s" + .include "level1_enemies.s" + .include "level1_items.s" + + .include "level1_sfx.s" + .include "longer_sound.s" + + .include "random16.s" + + .include "tilemap_lookup.s" + +level1_data_zx02: + .incbin "maps/level2_map.zx02" + diff --git a/games/keen/mars.s b/games/keen/mars.s index 2173ffe7..fca1f888 100644 --- a/games/keen/mars.s +++ b/games/keen/mars.s @@ -614,7 +614,7 @@ location_size: .byte 1,1,1,1 location_actions_low: - .byte <(enter_level-1),<(dummy_action-1) ; level1, level2 + .byte <(enter_level-1),<(enter_level-1) ; level1, level2 .byte <(dummy_action-1),<(dummy_action-1) .byte <(dummy_action-1),<(dummy_action-1) .byte <(dummy_action-1),<(dummy_action-1) @@ -626,7 +626,7 @@ location_actions_low: .byte <(transport_left-1),<(transport_secret-1) ; r trans, secret location_actions_high: - .byte >(enter_level-1),>(dummy_action-1) ; level1, level2 + .byte >(enter_level-1),>(enter_level-1) ; level1, level2 .byte >(dummy_action-1),>(dummy_action-1) .byte >(dummy_action-1),>(dummy_action-1) .byte >(dummy_action-1),>(dummy_action-1)