From 1ed3c2053316d9a9d9ce1e659fda339c65d64c63 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Thu, 4 Apr 2024 22:34:47 -0400 Subject: [PATCH] keen: improve enemy logic --- games/keen/handle_laser.s | 8 +- games/keen/level1.s | 5 -- games/keen/level1_enemies.s | 127 ++++++++++++++-------------- games/keen/sprites/keen_sprites.png | Bin 5082 -> 5052 bytes games/keen/zp.inc | 4 +- 5 files changed, 71 insertions(+), 73 deletions(-) diff --git a/games/keen/handle_laser.s b/games/keen/handle_laser.s index 738a312c..bc760010 100644 --- a/games/keen/handle_laser.s +++ b/games/keen/handle_laser.s @@ -111,18 +111,18 @@ laser_enemies_loop: ; see if out - lda enemy_data+ENEMY_DATA_OUT,Y + lda enemy_data_out,Y beq done_laser_enemy ; get local tilemap co-ord sec - lda enemy_data+ENEMY_DATA_TILEX,Y + lda enemy_data_tilex,Y sbc TILEMAP_X sta TILE_TEMP sec - lda enemy_data+ENEMY_DATA_TILEY,Y + lda enemy_data_tiley,Y sbc TILEMAP_Y asl asl @@ -141,7 +141,7 @@ hit_something: sta FRAMEL ; sta enemy_data+ENEMY_DATA_OUT,Y lda #1 - sta enemy_data+ENEMY_DATA_EXPLODING,Y + sta enemy_data_exploding,Y ; jsr enemy_noise diff --git a/games/keen/level1.s b/games/keen/level1.s index 533fc91c..5f60e6c4 100644 --- a/games/keen/level1.s +++ b/games/keen/level1.s @@ -42,11 +42,6 @@ keen_start: sta KEEN_SHOOTING sta KEYCARDS - lda #enemy_data - sta ENEMY_DATAH - lda #4 sta DRAW_PAGE diff --git a/games/keen/level1_enemies.s b/games/keen/level1_enemies.s index 813f583f..6e1cbaa5 100644 --- a/games/keen/level1_enemies.s +++ b/games/keen/level1_enemies.s @@ -7,24 +7,50 @@ NUM_ENEMIES = 4 move_enemies: - ldy #0 + ldx #0 move_enemies_loop: ; only move if out - lda enemy_data+ENEMY_DATA_OUT,Y + lda enemy_data_out,X beq done_move_enemy + ;======================================= ; check if falling + ; i.e., if something under feet + ;======================================= + clc + lda enemy_data_tiley,X + adc #2 ; point to feet + + adc #>big_tilemap + sta load_foot1_smc+2 + + ldy enemy_data_tilex,X +load_foot1_smc: + + lda tilemap,Y + cmp #ALLHARD_TILES + bcs no_enemy_fall ; if hard tile, don't fall + + inc enemy_data_tiley,X ; fall one tiles worth + +no_enemy_fall: + + + ;======================================= + ; move sideways + ; until you hit something + ;======================================= ; check if moving right/left -; lda enemy_data+ENEMY_DATA_X,Y -; clc -; adc #1 -; sta enemy_data+ENEMY_DATA_X,Y + lda enemy_data_tilex,X + clc + adc #1 + sta enemy_data_tilex,X ; cmp #36 ; bcc done_move_enemy @@ -34,17 +60,17 @@ move_enemies_loop: done_move_enemy: - iny - cpy #NUM_ENEMIES + inx + cpx #NUM_ENEMIES bne move_enemies_loop rts - ;======================= - ; draw and move enemies - ;======================= + ;================= + ; draw enemies + ;================= draw_enemies: ldy #0 @@ -52,7 +78,7 @@ draw_enemies_loop: ; see if out - lda enemy_data+ENEMY_DATA_OUT,Y + lda enemy_data_out,Y beq done_draw_enemy ; check if on screen @@ -138,13 +164,27 @@ draw_proper_enemy: lda #>yorp_sprite_walking_right sta INH - lda enemy_data+ENEMY_DATA_X,Y + ;====================== + ; calculate X and Y + ; tiles are 2x4 in size + + sec + lda enemy_data_tilex,Y + sbc TILEMAP_X + asl + clc + adc enemy_data_x,Y ; Add in X offset sta XPOS - lda enemy_data+ENEMY_DATA_Y,Y + + sec + lda enemy_data_tiley,Y + sbc TILEMAP_Y + asl + asl + clc + adc enemy_data_y,Y ; Add in Y offset sta YPOS - - draw_enemy: tya pha @@ -188,52 +228,15 @@ enemy_explosion_sprite3: .byte $7A,$5A .byte $A5,$A7 -ENEMY_YORP = 0 - -ENEMY_DATA_OUT = 0 -ENEMY_DATA_EXPLODING = 1 -ENEMY_DATA_TYPE = 2 -ENEMY_DATA_DIRECTION = 3 -ENEMY_DATA_TILEX = 4 -ENEMY_DATA_TILEY = 5 -ENEMY_DATA_X = 6 -ENEMY_DATA_Y = 7 +YORP = 0 -enemy_data: +enemy_data_out: .byte 1, 0, 0, 0 +enemy_data_exploding: .byte 0, 0, 0, 0 +enemy_data_type: .byte YORP, YORP, YORP, YORP +enemy_data_direction: .byte $FF, $FF, $FF, $FF +enemy_data_tilex: .byte 5, 48, 19, 26 +enemy_data_tiley: .byte 6, 20, 25, 26 +enemy_data_x: .byte 0, 0, 0, 0 +enemy_data_y: .byte 0, 0, 0, 0 -enemy0: - ; 156,92 (-80,-12) -> 76,80 -> (/4,/4) -> 19,20 - .byte 1 ; out - .byte 0 ; exploding - .byte ENEMY_YORP ; type - .byte $ff ; direction - .byte 19,20 ; tilex,tiley - .byte 10,10 ; x,y - -enemy1: - ; 272,92 (-80,-12) -> 192,80 -> (/4,/4) -> 48,20 - .byte 0 ; out - .byte 0 ; exploding - .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 0 ; out - .byte 0 ; exploding - .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 0 ; out - .byte 0 ; exploding - .byte ENEMY_YORP ; type - .byte $ff ; direction - .byte 26,26 ; tilex,tiley - .byte 0,0 ; x,y diff --git a/games/keen/sprites/keen_sprites.png b/games/keen/sprites/keen_sprites.png index ef50ad467cc4ebaedd35ca8283e0eb2e174ff27d..fb53591a7700e34cbb2358cc4e34975428d248b0 100644 GIT binary patch delta 727 zcmV;|0x133C%h++BmwG?B_Drn4#OY_{qHGu1ip%L9J{v3Zm{DI71wpilD$L<4+>9A z`}1+6TLTqJvgD$s3Jx(bs_qmRSi41#ZabDpd3@m$&jdNuf*_27-<@|KBeocVvwk+3 z4p#S;Gf`{s>y=-lA(ih&p@4BrhAn=GMoghdMtl!NY9(K;w%y^1avoISOu8s$aVrEl ztGQnYB>O(MCX{m@4{1)C#EfStxhC2f8Qe1KP|58GSO11hUWjZx&~C9W9{ed?f;YC& z_^9w+=I3tC9sR&R*Gexf5_Nr~>lEU%9045!BV=MTGcz`0H!U|XG&LU1?VKp>3 zEjKY_Vly`~W@R}ylUxO;4Kgw}F*!CeF)}hRH!zbC25t>BIxsX;F*!OgHaajdlZ*x- z4KzA1G*mG;IxsdmFfp^b22cVdGB9O1IWaS1EoC`4W-T;gHZUz=Fg7nDaapIRoRbOae6r_!ziqs_;t6Bq_BXG9kr{P!t(1YWW6ahxWR_6B?WPHfyXl~&r3Okf}| z#%cfkInv{VxFlPO=bAGCR;@~d<20~#%VgblERjNd;D6$bhLs70?Zdco$bcb1A$FxXZG8cn2 zp;B^%??P6v&+QbdrH`jHCrx6;vs9o-c4Z}4)jU+{c}yF=3aiQqg}4?1R_~Pe#S@+q z641Dg#z&*~GCy~7?dT8u=UV9nE(&#kgL-#0vljs!1S4iKH85ghF=j1fIAJg?G%z?h zEnzY_V=ZAcGG#DgW;HlDFq2mWs0}eVHZn6YIWRObG&wYr3}1er!GtdsB&UI_yq1rjHsEC~gZ zR}v_HK}keGR7l6|mVt`HAP_{AMj>kO|NpjKhGm;}Lo>1M-GviU2Eo@g&cqG#?h*El z4**M9Zljb}iU3Yityo;^G(kPjQ5D)^tLt%&0A4PoU@^2mM*wTJYE;E2zj$IKfjL_> zqWw7vXqat90AuVOi+jiRyt$t<_Lq{9Zey)~29q)b^pcX29SRNfl9EygP$AGjsZW7g zYf7y_wMGMTwk@ljTQeZkZeY&qROAedZJ7j04)8HBHB{l>PYU!~lG3{xn*{nvk@Hn! zlR!Tyddjf&a8k@R2Y`N3)Yz~#W$g8Z^k{5o0w|v;1InoaD9^n*eNxu1;SG0+yvxH_ zKrbm`7H#ZkpqCV!?mWw%(e2z;Qp7CsI_QRTD=7jzRH4^%>6TMk7V_4Uo5Xr9yHk)4 n>B3IfeLbgQFe(4Q-vzt^uhU3%n_+>|00000NkvXXu0mjfh