From 662437c5cdbe08abc98c82201ae532a1a36f3665 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Mon, 25 Mar 2024 00:53:05 -0400 Subject: [PATCH] keen: working on yorp support --- games/keen/NOTES | 19 +++ games/keen/TODO | 7 +- games/keen/enemies_level1.s | 225 ++++++++++++---------------- games/keen/keen_level1.s | 4 - games/keen/sprites/Makefile | 3 + games/keen/sprites/keen_sprites.png | Bin 9164 -> 4835 bytes 6 files changed, 122 insertions(+), 136 deletions(-) diff --git a/games/keen/NOTES b/games/keen/NOTES index d198647b..8e1e3304 100644 --- a/games/keen/NOTES +++ b/games/keen/NOTES @@ -55,3 +55,22 @@ Level1: tilemap copies + + +TILEMAP_X +TILEMAP_Y +KEEN_X / KEEN_XL +KEEN_Y + + + +Enemy logic: + when update tilemap + detect if enemy on screen + if so mark active + give it current x/y value + + when move + same as keen move + if move off left/right side of screen mark inactive + diff --git a/games/keen/TODO b/games/keen/TODO index c265974b..f4339511 100644 --- a/games/keen/TODO +++ b/games/keen/TODO @@ -1,12 +1,15 @@ -hi-res version + + enemy movement ++ animate enemies? + check raygun count before shooting + fix background tile when get item + fix keybindings + play jingle entering/leaving level + implement leaving level -+ animate enemies? + animate death +hi-res version +~~~~~~~~~~~~~~ ++ diff --git a/games/keen/enemies_level1.s b/games/keen/enemies_level1.s index 7a7012ad..e087ffe0 100644 --- a/games/keen/enemies_level1.s +++ b/games/keen/enemies_level1.s @@ -66,44 +66,25 @@ exit_laser_enemy: ; move enemy ;======================= ; which one is in Y + + + ; assume yorp for now move_enemy: - lda enemy_data+ENEMY_DATA_TYPE,Y - and #$fc - - cmp #ENEMY_CAMERA - beq aim_camera - - ; FIXME: actually move them -move_bot: -move_crawler: - lda FRAMEL - and #$f - bne done_move_enemy - - lda enemy_data+ENEMY_DATA_TYPE,Y - eor #$2 - sta enemy_data+ENEMY_DATA_TYPE,Y - jmp done_move_enemy - -aim_camera: - lda KEEN_X - lsr + lda enemy_data+ENEMY_DATA_X,Y clc - adc TILEMAP_X + adc #1 + sta enemy_data+ENEMY_DATA_X,Y - cmp enemy_data+ENEMY_DATA_TILEX,Y - bcc aim_camera_left + cmp #36 + bcc move_enemy_good -aim_camera_right: - lda #2 - sta enemy_data+ENEMY_DATA_TYPE,Y - jmp done_move_enemy -aim_camera_left: lda #0 - sta enemy_data+ENEMY_DATA_TYPE,Y + sta enemy_data+ENEMY_DATA_OUT,Y + + +move_enemy_good: -done_move_enemy: rts @@ -123,81 +104,94 @@ draw_enemies_loop: ; check if on screen - lda TILEMAP_X - cmp enemy_data+ENEMY_DATA_TILEX,Y - bcs done_draw_enemy +; lda TILEMAP_X +; cmp enemy_data+ENEMY_DATA_TILEX,Y +; bcs done_draw_enemy - clc - adc #14 - cmp enemy_data+ENEMY_DATA_TILEX,Y - bcc done_draw_enemy +; clc +; adc #14 +; cmp enemy_data+ENEMY_DATA_TILEX,Y +; bcc done_draw_enemy - lda TILEMAP_Y - cmp enemy_data+ENEMY_DATA_TILEY,Y - bcs done_draw_enemy +; lda TILEMAP_Y +; cmp enemy_data+ENEMY_DATA_TILEY,Y +; bcs done_draw_enemy - clc - adc #10 - cmp enemy_data+ENEMY_DATA_TILEY,Y - bcc done_draw_enemy +; clc +; adc #10 +; cmp enemy_data+ENEMY_DATA_TILEY,Y +; bcc done_draw_enemy ; set X and Y value ; convert tile values to X,Y ; X = (ENEMY_TILE_X-TILEX)*2 + 6 - lda enemy_data+ENEMY_DATA_TILEX,Y - sec - sbc TILEMAP_X - asl - clc - adc #4 - sta XPOS +; lda enemy_data+ENEMY_DATA_TILEX,Y +; sec +; sbc TILEMAP_X +; asl +; clc +; adc #4 +; sta XPOS ; Y = (ENEMY_TILE_Y-TILEY)*4 - lda enemy_data+ENEMY_DATA_TILEY,Y - sec - sbc TILEMAP_Y - asl - asl - sta YPOS +; lda enemy_data+ENEMY_DATA_TILEY,Y +; sec +; sbc TILEMAP_Y +; asl +; asl +; sta YPOS ; see if exploding - lda enemy_data+ENEMY_DATA_EXPLODING,Y - beq draw_proper_enemy -draw_exploding_enemy: - asl - tax - lda enemy_explosion_sprites,X - sta INL - lda enemy_explosion_sprites+1,X - sta INH +; lda enemy_data+ENEMY_DATA_EXPLODING,Y +; beq draw_proper_enemy +;draw_exploding_enemy: +; asl +; tax +; lda enemy_explosion_sprites,X +; sta INL +; lda enemy_explosion_sprites+1,X +; sta INH - lda FRAMEL - and #$3 - bne done_exploding +; lda FRAMEL +; and #$3 +; bne done_exploding ; move to next frame - lda enemy_data+ENEMY_DATA_EXPLODING,Y - clc - adc #1 - sta enemy_data+ENEMY_DATA_EXPLODING,Y +; lda enemy_data+ENEMY_DATA_EXPLODING,Y +; clc +; adc #1 +; sta enemy_data+ENEMY_DATA_EXPLODING,Y - cmp #4 - bne done_exploding - lda #0 - sta enemy_data+ENEMY_DATA_OUT,Y +; cmp #4 +; bne done_exploding +; lda #0 +; sta enemy_data+ENEMY_DATA_OUT,Y -done_exploding: - jmp draw_enemy +;done_exploding: +; jmp draw_enemy ; otherwise draw proper sprite draw_proper_enemy: - lda enemy_data+ENEMY_DATA_TYPE,Y - tax - lda enemy_sprites,X +; lda enemy_data+ENEMY_DATA_TYPE,Y +; tax +; lda enemy_sprites,X +; sta INL +; lda enemy_sprites+1,X +; sta INH + + lda #yorp_sprite_walking_right sta INH + lda enemy_data+ENEMY_DATA_X,Y + sta XPOS + lda enemy_data+ENEMY_DATA_Y,Y + sta YPOS + + + draw_enemy: tya pha @@ -207,6 +201,8 @@ draw_enemy: pla tay + ; also move enemy + jsr move_enemy done_draw_enemy: @@ -222,6 +218,7 @@ done_draw_enemy: exit_draw_enemy: rts +.if 0 enemy_sprites: .word enemy_camera_sprite1 .word enemy_camera_sprite2 @@ -229,39 +226,7 @@ enemy_sprites: .word enemy_crawler_sprite2 .word enemy_bot_sprite1 .word enemy_bot_sprite2 - - - -enemy_bot_sprite1: - .byte 2,2 - .byte $Ae,$e3 - .byte $6e,$0e - -enemy_bot_sprite2: - .byte 2,2 - .byte $e3,$Ae - .byte $0e,$6e - -enemy_crawler_sprite1: - .byte 2,2 - .byte $f5,$cA - .byte $f5,$Ac - -enemy_crawler_sprite2: - .byte 2,2 - .byte $5f,$cA - .byte $5f,$Ac - - -enemy_camera_sprite1: - .byte 2,2 - .byte $AA,$76 - .byte $f7,$A5 - -enemy_camera_sprite2: - .byte 2,2 - .byte $76,$AA - .byte $A5,$f7 +.endif enemy_explosion_sprites: .word enemy_explosion_sprite1 @@ -284,9 +249,11 @@ enemy_explosion_sprite3: .byte $7A,$5A .byte $A5,$A7 -ENEMY_CAMERA = 0 -ENEMY_CRAWLER = 4 -ENEMY_BOT = 8 +;ENEMY_CAMERA = 0 +;ENEMY_CRAWLER = 4 +;ENEMY_BOT = 8 + +ENEMY_YORP = 0 ENEMY_DATA_OUT = 0 ENEMY_DATA_EXPLODING = 1 @@ -304,36 +271,34 @@ enemy0: ; 156,92 (-80,-12) -> 76,80 -> (/4,/4) -> 19,20 .byte 1 ; out .byte 0 ; exploding - .byte ENEMY_CAMERA ; type + .byte ENEMY_YORP ; type .byte $ff ; direction .byte 19,20 ; tilex,tiley - .byte 0,0 ; x,y + .byte 10,10 ; x,y enemy1: ; 272,92 (-80,-12) -> 192,80 -> (/4,/4) -> 48,20 - .byte 1 ; out + .byte 0 ; out .byte 0 ; exploding - .byte ENEMY_CAMERA ; type + .byte ENEMY_YORP ; type .byte $ff ; direction .byte 48,20 ; tilex,tiley .byte 0,0 ; x,y enemy2: ; 156,112 (-80,-12) -> 76,100 -> (/4,/4) -> 19,25 - .byte 1 ; out + .byte 0 ; out .byte 0 ; exploding - .byte ENEMY_CRAWLER ; type + .byte ENEMY_YORP ; type .byte $ff ; direction .byte 19,25 ; tilex,tiley .byte 0,0 ; x,y enemy3: ; 184,116 (-80,-12) -> 104,104 -> (/4,/4) -> 26,26 - .byte 1 ; out + .byte 0 ; out .byte 0 ; exploding - .byte ENEMY_BOT ; type + .byte ENEMY_YORP ; type .byte $ff ; direction .byte 26,26 ; tilex,tiley .byte 0,0 ; x,y - - diff --git a/games/keen/keen_level1.s b/games/keen/keen_level1.s index a27622bc..9a9224f2 100644 --- a/games/keen/keen_level1.s +++ b/games/keen/keen_level1.s @@ -53,10 +53,6 @@ keen_start: ; ora #INV_RED_KEY ; sta INVENTORY -; lda #$10 -; sta SCORE0 - - lda #4 sta DRAW_PAGE diff --git a/games/keen/sprites/Makefile b/games/keen/sprites/Makefile index 94b6690d..3e25b5d7 100644 --- a/games/keen/sprites/Makefile +++ b/games/keen/sprites/Makefile @@ -25,6 +25,9 @@ keen_sprites.inc: keen_sprites.png $(PNG2SPRITES) keen_sprites.png keen_sprite_falling_left 6 32 4 8 >> keen_sprites.inc $(PNG2SPRITES) keen_sprites.png keen_sprite_shooting_right 11 2 4 8 >> keen_sprites.inc $(PNG2SPRITES) keen_sprites.png keen_sprite_shooting_left 16 2 4 8 >> keen_sprites.inc + $(PNG2SPRITES) keen_sprites.png yorp_sprite_walking_left 16 22 4 8 >> keen_sprites.inc + $(PNG2SPRITES) keen_sprites.png yorp_sprite_walking_right 11 22 4 8 >> keen_sprites.inc + $(PNG2SPRITES) keen_sprites.png yorp_sprite_standing 11 32 4 8 >> keen_sprites.inc #### diff --git a/games/keen/sprites/keen_sprites.png b/games/keen/sprites/keen_sprites.png index 451c6c56908fbb00783414188a39d825402bf6c0..97dffb3f46faaefcd6df6a114e07e11b5596dbb7 100644 GIT binary patch delta 1157 zcmV;01bX|-N8=@sBYyzydQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+Ko|BuEZb+ z{Pz@l1Oya4j@`D&yTLpDj*8puCNFt3(qW)5(s2C#oZ-=p3kOYBa?P1wTD5WmC^T&w zK9UYUEO`p?jSsRC45|lCRCfLV4;($NJ|wRC)o6j(fYOy{&42mr&Trn3%XcGJAaPEn z-9PX~!mdbX{B%XR7Q0<-f70E`bySRV%Fz^FnapwpE=+3J=iY^ijqw!Lq(!WFl`=H( zAyEikBu|ynk4nQ^;DG}Q`_n)hd=eguC;UoCK;t?apN-zj{M^m8qd)9F*9tE!!*zew zl!U_o00Dz(Lz7Yy8-GQSs)GeZI%KF$c2N<>T7@E12(?114knj=L6e3g#l=x@EjakG zSaoo5*44pP5ClI!oE@ALU8KbSC509-9vt`M-Mz=%J3weum}Ygw0Zq5fbTT1kbE{&{ zD}ort03ry<%rfRADFxs0b&mjF?_xa5|Jtj8+nEzVk{ z##;B}FAU}Nm1VBej39|cEJ1<@1vQjWfsGigIw=;?w4d+gyR`~alYd@PC;@c8IL^ly(6b9P>yGn%>^RL6AovVi>1}_t0nC1qUT${ujJ1B^TwvMIY#kfu;50Pkn?O*vrb7U)~^dTZ_D^a03FSE(D|;1C!uQueyf zyL&r(`}a(%zaM4Ia-o+m#mE2v4qItdSaeuTOgdw4ZL{kXe*z;pI5lH9WM(ogG&Ny1 zEi^PaFfC$cWH2o?GGRG2H#lN7He!>F7pM&}GBq_eH#0UeIX5;ilR_A93oG*mD!Iy5&rH8ZpB8Eyy!{F$>MlVBoW2p9w}HK%A| zeUrx`Cw~DhNklz8|t(aUZmZ#M|XY4m6CCsB$gMUdG0%}PKK{mw<)RGc{b5PEifz%%Z zxz`X%fhxrej8T@%b}mJLP`iOKwyB5_7+JCrNIAgIK-5r&=T8dsAxWu~jco+#Num8^ zV;g~bQh1kP?ct<|Z90H@QrOtAw#nG-fwVL>v;j!JDFM>10!YuJ`uU`^pW%Qrg}!As zP)17%nWY=3B?Y_N3EWBwY|{bUO3DCmediijGMyxH=aMsplVS#*At~!r3?}6d{4U@f XJ~v3Cp~eOS00000NkvXXu0mjfz03G{ delta 5660 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