keen: working on yorp support

This commit is contained in:
Vince Weaver 2024-03-25 00:53:05 -04:00
parent 9637633996
commit 662437c5cd
6 changed files with 122 additions and 136 deletions

View File

@ -55,3 +55,22 @@ Level1:
tilemap copies 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

View File

@ -1,12 +1,15 @@
hi-res version
+ enemy movement + enemy movement
+ animate enemies?
+ check raygun count before shooting + check raygun count before shooting
+ fix background tile when get item + fix background tile when get item
+ fix keybindings + fix keybindings
+ play jingle entering/leaving level + play jingle entering/leaving level
+ implement leaving level + implement leaving level
+ animate enemies?
+ animate death + animate death
hi-res version
~~~~~~~~~~~~~~
+

View File

@ -66,44 +66,25 @@ exit_laser_enemy:
; move enemy ; move enemy
;======================= ;=======================
; which one is in Y ; which one is in Y
; assume yorp for now
move_enemy: move_enemy:
lda enemy_data+ENEMY_DATA_TYPE,Y lda enemy_data+ENEMY_DATA_X,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
clc clc
adc TILEMAP_X adc #1
sta enemy_data+ENEMY_DATA_X,Y
cmp enemy_data+ENEMY_DATA_TILEX,Y cmp #36
bcc aim_camera_left 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 lda #0
sta enemy_data+ENEMY_DATA_TYPE,Y sta enemy_data+ENEMY_DATA_OUT,Y
move_enemy_good:
done_move_enemy:
rts rts
@ -123,81 +104,94 @@ draw_enemies_loop:
; check if on screen ; check if on screen
lda TILEMAP_X ; lda TILEMAP_X
cmp enemy_data+ENEMY_DATA_TILEX,Y ; cmp enemy_data+ENEMY_DATA_TILEX,Y
bcs done_draw_enemy ; bcs done_draw_enemy
clc ; clc
adc #14 ; adc #14
cmp enemy_data+ENEMY_DATA_TILEX,Y ; cmp enemy_data+ENEMY_DATA_TILEX,Y
bcc done_draw_enemy ; bcc done_draw_enemy
lda TILEMAP_Y ; lda TILEMAP_Y
cmp enemy_data+ENEMY_DATA_TILEY,Y ; cmp enemy_data+ENEMY_DATA_TILEY,Y
bcs done_draw_enemy ; bcs done_draw_enemy
clc ; clc
adc #10 ; adc #10
cmp enemy_data+ENEMY_DATA_TILEY,Y ; cmp enemy_data+ENEMY_DATA_TILEY,Y
bcc done_draw_enemy ; bcc done_draw_enemy
; set X and Y value ; set X and Y value
; convert tile values to X,Y ; convert tile values to X,Y
; X = (ENEMY_TILE_X-TILEX)*2 + 6 ; X = (ENEMY_TILE_X-TILEX)*2 + 6
lda enemy_data+ENEMY_DATA_TILEX,Y ; lda enemy_data+ENEMY_DATA_TILEX,Y
sec ; sec
sbc TILEMAP_X ; sbc TILEMAP_X
asl ; asl
clc ; clc
adc #4 ; adc #4
sta XPOS ; sta XPOS
; Y = (ENEMY_TILE_Y-TILEY)*4 ; Y = (ENEMY_TILE_Y-TILEY)*4
lda enemy_data+ENEMY_DATA_TILEY,Y ; lda enemy_data+ENEMY_DATA_TILEY,Y
sec ; sec
sbc TILEMAP_Y ; sbc TILEMAP_Y
asl ; asl
asl ; asl
sta YPOS ; sta YPOS
; see if exploding ; see if exploding
lda enemy_data+ENEMY_DATA_EXPLODING,Y ; lda enemy_data+ENEMY_DATA_EXPLODING,Y
beq draw_proper_enemy ; beq draw_proper_enemy
draw_exploding_enemy: ;draw_exploding_enemy:
asl ; asl
tax ; tax
lda enemy_explosion_sprites,X ; lda enemy_explosion_sprites,X
sta INL ; sta INL
lda enemy_explosion_sprites+1,X ; lda enemy_explosion_sprites+1,X
sta INH ; sta INH
lda FRAMEL ; lda FRAMEL
and #$3 ; and #$3
bne done_exploding ; bne done_exploding
; move to next frame ; move to next frame
lda enemy_data+ENEMY_DATA_EXPLODING,Y ; lda enemy_data+ENEMY_DATA_EXPLODING,Y
clc ; clc
adc #1 ; adc #1
sta enemy_data+ENEMY_DATA_EXPLODING,Y ; sta enemy_data+ENEMY_DATA_EXPLODING,Y
cmp #4 ; cmp #4
bne done_exploding ; bne done_exploding
lda #0 ; lda #0
sta enemy_data+ENEMY_DATA_OUT,Y ; sta enemy_data+ENEMY_DATA_OUT,Y
done_exploding: ;done_exploding:
jmp draw_enemy ; jmp draw_enemy
; otherwise draw proper sprite ; otherwise draw proper sprite
draw_proper_enemy: draw_proper_enemy:
lda enemy_data+ENEMY_DATA_TYPE,Y ; lda enemy_data+ENEMY_DATA_TYPE,Y
tax ; tax
lda enemy_sprites,X ; lda enemy_sprites,X
; sta INL
; lda enemy_sprites+1,X
; sta INH
lda #<yorp_sprite_walking_right
sta INL sta INL
lda enemy_sprites+1,X
lda #>yorp_sprite_walking_right
sta INH sta INH
lda enemy_data+ENEMY_DATA_X,Y
sta XPOS
lda enemy_data+ENEMY_DATA_Y,Y
sta YPOS
draw_enemy: draw_enemy:
tya tya
pha pha
@ -207,6 +201,8 @@ draw_enemy:
pla pla
tay tay
; also move enemy
jsr move_enemy jsr move_enemy
done_draw_enemy: done_draw_enemy:
@ -222,6 +218,7 @@ done_draw_enemy:
exit_draw_enemy: exit_draw_enemy:
rts rts
.if 0
enemy_sprites: enemy_sprites:
.word enemy_camera_sprite1 .word enemy_camera_sprite1
.word enemy_camera_sprite2 .word enemy_camera_sprite2
@ -229,39 +226,7 @@ enemy_sprites:
.word enemy_crawler_sprite2 .word enemy_crawler_sprite2
.word enemy_bot_sprite1 .word enemy_bot_sprite1
.word enemy_bot_sprite2 .word enemy_bot_sprite2
.endif
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
enemy_explosion_sprites: enemy_explosion_sprites:
.word enemy_explosion_sprite1 .word enemy_explosion_sprite1
@ -284,9 +249,11 @@ enemy_explosion_sprite3:
.byte $7A,$5A .byte $7A,$5A
.byte $A5,$A7 .byte $A5,$A7
ENEMY_CAMERA = 0 ;ENEMY_CAMERA = 0
ENEMY_CRAWLER = 4 ;ENEMY_CRAWLER = 4
ENEMY_BOT = 8 ;ENEMY_BOT = 8
ENEMY_YORP = 0
ENEMY_DATA_OUT = 0 ENEMY_DATA_OUT = 0
ENEMY_DATA_EXPLODING = 1 ENEMY_DATA_EXPLODING = 1
@ -304,36 +271,34 @@ enemy0:
; 156,92 (-80,-12) -> 76,80 -> (/4,/4) -> 19,20 ; 156,92 (-80,-12) -> 76,80 -> (/4,/4) -> 19,20
.byte 1 ; out .byte 1 ; out
.byte 0 ; exploding .byte 0 ; exploding
.byte ENEMY_CAMERA ; type .byte ENEMY_YORP ; type
.byte $ff ; direction .byte $ff ; direction
.byte 19,20 ; tilex,tiley .byte 19,20 ; tilex,tiley
.byte 0,0 ; x,y .byte 10,10 ; x,y
enemy1: enemy1:
; 272,92 (-80,-12) -> 192,80 -> (/4,/4) -> 48,20 ; 272,92 (-80,-12) -> 192,80 -> (/4,/4) -> 48,20
.byte 1 ; out .byte 0 ; out
.byte 0 ; exploding .byte 0 ; exploding
.byte ENEMY_CAMERA ; type .byte ENEMY_YORP ; type
.byte $ff ; direction .byte $ff ; direction
.byte 48,20 ; tilex,tiley .byte 48,20 ; tilex,tiley
.byte 0,0 ; x,y .byte 0,0 ; x,y
enemy2: enemy2:
; 156,112 (-80,-12) -> 76,100 -> (/4,/4) -> 19,25 ; 156,112 (-80,-12) -> 76,100 -> (/4,/4) -> 19,25
.byte 1 ; out .byte 0 ; out
.byte 0 ; exploding .byte 0 ; exploding
.byte ENEMY_CRAWLER ; type .byte ENEMY_YORP ; type
.byte $ff ; direction .byte $ff ; direction
.byte 19,25 ; tilex,tiley .byte 19,25 ; tilex,tiley
.byte 0,0 ; x,y .byte 0,0 ; x,y
enemy3: enemy3:
; 184,116 (-80,-12) -> 104,104 -> (/4,/4) -> 26,26 ; 184,116 (-80,-12) -> 104,104 -> (/4,/4) -> 26,26
.byte 1 ; out .byte 0 ; out
.byte 0 ; exploding .byte 0 ; exploding
.byte ENEMY_BOT ; type .byte ENEMY_YORP ; type
.byte $ff ; direction .byte $ff ; direction
.byte 26,26 ; tilex,tiley .byte 26,26 ; tilex,tiley
.byte 0,0 ; x,y .byte 0,0 ; x,y

View File

@ -53,10 +53,6 @@ keen_start:
; ora #INV_RED_KEY ; ora #INV_RED_KEY
; sta INVENTORY ; sta INVENTORY
; lda #$10
; sta SCORE0
lda #4 lda #4
sta DRAW_PAGE sta DRAW_PAGE

View File

@ -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_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_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 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
#### ####

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB