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 ef50ad46..fb53591a 100644 Binary files a/games/keen/sprites/keen_sprites.png and b/games/keen/sprites/keen_sprites.png differ diff --git a/games/keen/zp.inc b/games/keen/zp.inc index 7940948e..acb340fc 100644 --- a/games/keen/zp.inc +++ b/games/keen/zp.inc @@ -126,8 +126,8 @@ KEEN_FALLING = $95 KEEN_SHOOTING = $96 SOUND_OFFSET = $97 SUPPRESS_WALK = $98 -ENEMY_DATAL = $99 -ENEMY_DATAH = $9A +;ENEMY_DATAL = $99 +;ENEMY_DATAH = $9A POGO = $9B LASER_TILE = $9C TILE_TEMP = $9D