From fbe3c22f0eafefd50a89d66ad45cf610db64dc7a Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Fri, 5 Apr 2024 01:00:54 -0400 Subject: [PATCH] keen: more yorp behavior --- games/keen/level1_enemies.s | 215 +++++++++++++++++++++++---------- games/keen/maps/level1_map.png | Bin 7811 -> 7829 bytes 2 files changed, 152 insertions(+), 63 deletions(-) diff --git a/games/keen/level1_enemies.s b/games/keen/level1_enemies.s index 6e1cbaa5..9c9a6a9d 100644 --- a/games/keen/level1_enemies.s +++ b/games/keen/level1_enemies.s @@ -13,8 +13,18 @@ move_enemies_loop: ; only move if out + ; only move every 4th frame + + lda FRAMEL + and #$3 + bne ergh + lda enemy_data_out,X - beq done_move_enemy + bne enemy_is_out +ergh: + jmp done_move_enemy +enemy_is_out: + ;======================================= ; check if falling @@ -23,7 +33,7 @@ move_enemies_loop: clc lda enemy_data_tiley,X - adc #2 ; point to feet + adc #2 ; point below feet adc #>big_tilemap sta load_foot1_smc+2 @@ -47,23 +57,122 @@ no_enemy_fall: ; check if moving right/left + lda enemy_data_direction,X + bmi enemy_facing_left +enemy_facing_right: + + ;============================== + ; check if barrier to the right + + clc + lda enemy_data_tiley,X + adc #1 ; point to feet + + adc #>big_tilemap + sta load_right_foot_smc+2 + + ldy enemy_data_tilex,X + iny ; to the right +load_right_foot_smc: + lda tilemap,Y + cmp #ALLHARD_TILES + bcc no_right_barrier ; skip if no right barrier + + ; hit right barrier + + lda enemy_data_direction,X + eor #$ff ; ff->00, 01->fe + clc + adc #1 + sta enemy_data_direction,X + + jmp done_move_enemy + + +no_right_barrier: + + ; move to the right + + lda enemy_data_x,X + clc + adc #1 + sta enemy_data_x,X + cmp #2 + bne move_right_noflo + + ; moved to next tile + lda #0 + sta enemy_data_x,X + lda enemy_data_tilex,X clc adc #1 sta enemy_data_tilex,X -; cmp #36 -; bcc done_move_enemy +move_right_noflo: + jmp done_move_enemy + +enemy_facing_left: + + ;============================== + ; check if barrier to the left + + clc + lda enemy_data_tiley,X + adc #1 ; point to feet + + adc #>big_tilemap + sta load_left_foot_smc+2 + + ldy enemy_data_tilex,X + dey ; look to the left +load_left_foot_smc: + lda tilemap,Y + cmp #ALLHARD_TILES + bcc no_left_barrier ; skip if no right barrier + + ; hit left barrier + + lda enemy_data_direction,X + eor #$ff ; ff->00, 01->fe + clc + adc #1 + sta enemy_data_direction,X + + jmp done_move_enemy + + +no_left_barrier: + + ; move to the left + + sec + lda enemy_data_x,X + sbc #1 + sta enemy_data_x,X + bpl move_left_noflo + + ; adjust tile + + lda #1 + sta enemy_data_x,X + + lda enemy_data_tilex,X + sec + sbc #1 + sta enemy_data_tilex,X + +move_left_noflo: -; lda #0 -; sta enemy_data+ENEMY_DATA_OUT,Y done_move_enemy: inx cpx #NUM_ENEMIES - bne move_enemies_loop + beq totally_done_move_enemies + jmp move_enemies_loop +totally_done_move_enemies: rts @@ -81,48 +190,9 @@ draw_enemies_loop: lda enemy_data_out,Y beq done_draw_enemy - ; check if on screen - -; 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 - -; 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 - - ; 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 - - ; Y = (ENEMY_TILE_Y-TILEY)*4 -; 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 + lda enemy_data_exploding,Y + beq draw_proper_enemy ;draw_exploding_enemy: ; asl ; tax @@ -158,10 +228,23 @@ draw_proper_enemy: ; lda enemy_sprites+1,X ; sta INH + lda enemy_data_direction,Y + bmi draw_enemy_left + +draw_enemy_right: lda #yorp_sprite_walking_right + jmp draw_enemy_common + +draw_enemy_left: + lda #yorp_sprite_walking_left + +draw_enemy_common: sta INH ;====================== @@ -195,12 +278,8 @@ draw_enemy: tay done_draw_enemy: - - tya - clc - adc #8 - tay - cpy #(NUM_ENEMIES*8) + iny + cpy #NUM_ENEMIES beq exit_draw_enemy jmp draw_enemies_loop @@ -229,14 +308,24 @@ enemy_explosion_sprite3: .byte $A5,$A7 YORP = 0 +LEFT = $FF +RIGHT = $1 + +enemy_data_out: .byte 1, 1, 0, 0, 0, 0, 0, 0,0 +enemy_data_exploding: .byte 0, 0, 0, 0, 0, 0, 0, 0,0 +enemy_data_type: .byte YORP, YORP, YORP, YORP, YORP, YORP, YORP,YORP,YORP +enemy_data_direction: .byte RIGHT, RIGHT, LEFT, LEFT, LEFT, LEFT, RIGHT,RIGHT,LEFT +enemy_data_tilex: .byte 5, 19, 38, 45, 69, 81, 89, 92,100 +enemy_data_tiley: .byte 6, 13, 4, 4, 13, 4, 4, 13,10 +enemy_data_x: .byte 0, 0, 0, 0, 0, 0, 0, 0,0 +enemy_data_y: .byte 0, 0, 0, 0, 0, 0, 0, 0,0 + +; question: when do they activate? When do they move when offscreen? + +; enemy behavior +; Yorp: +; two behaviors, walking with random jump +; walking, reverses direction if hits barrier +; stopping, looking left/right few times then walking at Keen -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 - diff --git a/games/keen/maps/level1_map.png b/games/keen/maps/level1_map.png index 724674e63d4c7afed2e41eab9ce3fb118e106d14..85c46907047fbc1df7e136991d2ec8b6a4cd976b 100644 GIT binary patch delta 3511 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