dos33fsprogs/games/keen/level1_enemies.s

240 lines
3.5 KiB
ArmAsm
Raw Normal View History

2024-03-10 05:44:20 +00:00
NUM_ENEMIES = 4
2024-04-04 20:21:19 +00:00
2024-03-10 05:44:20 +00:00
;=======================
2024-04-04 20:21:19 +00:00
; move enemies
2024-03-10 05:44:20 +00:00
;=======================
2024-04-04 20:21:19 +00:00
move_enemies:
2024-03-10 05:44:20 +00:00
2024-04-04 20:21:19 +00:00
ldy #0
2024-03-10 05:44:20 +00:00
2024-04-04 20:21:19 +00:00
move_enemies_loop:
2024-03-10 05:44:20 +00:00
2024-04-04 20:21:19 +00:00
; only move if out
2024-03-10 05:44:20 +00:00
2024-04-04 20:21:19 +00:00
lda enemy_data+ENEMY_DATA_OUT,Y
beq done_move_enemy
2024-03-10 05:44:20 +00:00
2024-04-04 20:21:19 +00:00
; check if falling
2024-03-10 05:44:20 +00:00
2024-04-04 20:21:19 +00:00
; check if moving right/left
2024-03-10 05:44:20 +00:00
2024-04-04 20:21:19 +00:00
; lda enemy_data+ENEMY_DATA_X,Y
; clc
; adc #1
; sta enemy_data+ENEMY_DATA_X,Y
2024-03-10 05:44:20 +00:00
2024-04-04 20:21:19 +00:00
; cmp #36
; bcc done_move_enemy
2024-03-10 05:44:20 +00:00
2024-04-04 20:21:19 +00:00
; lda #0
; sta enemy_data+ENEMY_DATA_OUT,Y
2024-03-25 04:53:05 +00:00
2024-04-04 20:21:19 +00:00
done_move_enemy:
2024-03-25 04:53:05 +00:00
2024-04-04 20:21:19 +00:00
iny
cpy #NUM_ENEMIES
bne move_enemies_loop
2024-03-10 05:44:20 +00:00
rts
;=======================
; draw and move enemies
;=======================
draw_enemies:
ldy #0
draw_enemies_loop:
; see if out
lda enemy_data+ENEMY_DATA_OUT,Y
beq done_draw_enemy
; check if on screen
2024-03-25 04:53:05 +00:00
; lda TILEMAP_X
; cmp enemy_data+ENEMY_DATA_TILEX,Y
; bcs done_draw_enemy
2024-03-10 05:44:20 +00:00
2024-03-25 04:53:05 +00:00
; clc
; adc #14
; cmp enemy_data+ENEMY_DATA_TILEX,Y
; bcc done_draw_enemy
2024-03-10 05:44:20 +00:00
2024-03-25 04:53:05 +00:00
; lda TILEMAP_Y
; cmp enemy_data+ENEMY_DATA_TILEY,Y
; bcs done_draw_enemy
2024-03-10 05:44:20 +00:00
2024-03-25 04:53:05 +00:00
; clc
; adc #10
; cmp enemy_data+ENEMY_DATA_TILEY,Y
; bcc done_draw_enemy
2024-03-10 05:44:20 +00:00
; set X and Y value
; convert tile values to X,Y
; X = (ENEMY_TILE_X-TILEX)*2 + 6
2024-03-25 04:53:05 +00:00
; lda enemy_data+ENEMY_DATA_TILEX,Y
; sec
; sbc TILEMAP_X
; asl
; clc
; adc #4
; sta XPOS
2024-03-10 05:44:20 +00:00
; Y = (ENEMY_TILE_Y-TILEY)*4
2024-03-25 04:53:05 +00:00
; lda enemy_data+ENEMY_DATA_TILEY,Y
; sec
; sbc TILEMAP_Y
; asl
; asl
; sta YPOS
2024-03-10 05:44:20 +00:00
; see if exploding
2024-03-25 04:53:05 +00:00
; 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
2024-03-10 05:44:20 +00:00
; move to next frame
2024-03-25 04:53:05 +00:00
; 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
2024-03-10 05:44:20 +00:00
2024-03-25 04:53:05 +00:00
;done_exploding:
; jmp draw_enemy
2024-03-10 05:44:20 +00:00
; otherwise draw proper sprite
draw_proper_enemy:
2024-03-25 04:53:05 +00:00
; 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
2024-03-10 05:44:20 +00:00
sta INL
2024-03-25 04:53:05 +00:00
lda #>yorp_sprite_walking_right
2024-03-10 05:44:20 +00:00
sta INH
2024-03-25 04:53:05 +00:00
lda enemy_data+ENEMY_DATA_X,Y
sta XPOS
lda enemy_data+ENEMY_DATA_Y,Y
sta YPOS
2024-03-10 05:44:20 +00:00
draw_enemy:
tya
pha
jsr put_sprite_crop
pla
tay
done_draw_enemy:
tya
clc
adc #8
tay
cpy #(NUM_ENEMIES*8)
beq exit_draw_enemy
jmp draw_enemies_loop
exit_draw_enemy:
rts
enemy_explosion_sprites:
.word enemy_explosion_sprite1
.word enemy_explosion_sprite1
.word enemy_explosion_sprite2
.word enemy_explosion_sprite3
enemy_explosion_sprite1:
.byte 2,2
.byte $d9,$d9
.byte $9d,$9d
enemy_explosion_sprite2:
.byte 2,2
.byte $9A,$9A
.byte $A9,$A9
enemy_explosion_sprite3:
.byte 2,2
.byte $7A,$5A
.byte $A5,$A7
2024-03-25 04:53:05 +00:00
ENEMY_YORP = 0
2024-03-10 05:44:20 +00:00
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
enemy_data:
enemy0:
; 156,92 (-80,-12) -> 76,80 -> (/4,/4) -> 19,20
.byte 1 ; out
.byte 0 ; exploding
2024-03-25 04:53:05 +00:00
.byte ENEMY_YORP ; type
2024-03-10 05:44:20 +00:00
.byte $ff ; direction
.byte 19,20 ; tilex,tiley
2024-03-25 04:53:05 +00:00
.byte 10,10 ; x,y
2024-03-10 05:44:20 +00:00
enemy1:
; 272,92 (-80,-12) -> 192,80 -> (/4,/4) -> 48,20
2024-03-25 04:53:05 +00:00
.byte 0 ; out
2024-03-10 05:44:20 +00:00
.byte 0 ; exploding
2024-03-25 04:53:05 +00:00
.byte ENEMY_YORP ; type
2024-03-10 05:44:20 +00:00
.byte $ff ; direction
.byte 48,20 ; tilex,tiley
.byte 0,0 ; x,y
enemy2:
; 156,112 (-80,-12) -> 76,100 -> (/4,/4) -> 19,25
2024-03-25 04:53:05 +00:00
.byte 0 ; out
2024-03-10 05:44:20 +00:00
.byte 0 ; exploding
2024-03-25 04:53:05 +00:00
.byte ENEMY_YORP ; type
2024-03-10 05:44:20 +00:00
.byte $ff ; direction
.byte 19,25 ; tilex,tiley
.byte 0,0 ; x,y
enemy3:
; 184,116 (-80,-12) -> 104,104 -> (/4,/4) -> 26,26
2024-03-25 04:53:05 +00:00
.byte 0 ; out
2024-03-10 05:44:20 +00:00
.byte 0 ; exploding
2024-03-25 04:53:05 +00:00
.byte ENEMY_YORP ; type
2024-03-10 05:44:20 +00:00
.byte $ff ; direction
.byte 26,26 ; tilex,tiley
.byte 0,0 ; x,y