240 lines
3.5 KiB
ArmAsm
240 lines
3.5 KiB
ArmAsm
NUM_ENEMIES = 4
|
|
|
|
|
|
;=======================
|
|
; move enemies
|
|
;=======================
|
|
|
|
move_enemies:
|
|
|
|
ldy #0
|
|
|
|
move_enemies_loop:
|
|
|
|
; only move if out
|
|
|
|
lda enemy_data+ENEMY_DATA_OUT,Y
|
|
beq done_move_enemy
|
|
|
|
; check if falling
|
|
|
|
|
|
; check if moving right/left
|
|
|
|
; lda enemy_data+ENEMY_DATA_X,Y
|
|
; clc
|
|
; adc #1
|
|
; sta enemy_data+ENEMY_DATA_X,Y
|
|
|
|
; cmp #36
|
|
; bcc done_move_enemy
|
|
|
|
; lda #0
|
|
; sta enemy_data+ENEMY_DATA_OUT,Y
|
|
|
|
done_move_enemy:
|
|
|
|
iny
|
|
cpy #NUM_ENEMIES
|
|
bne move_enemies_loop
|
|
|
|
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
|
|
|
|
; 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
|
|
;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
|
|
|
|
; move to next frame
|
|
; 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
|
|
|
|
;done_exploding:
|
|
; jmp draw_enemy
|
|
|
|
; otherwise draw proper sprite
|
|
draw_proper_enemy:
|
|
; 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
|
|
sta INL
|
|
|
|
lda #>yorp_sprite_walking_right
|
|
sta INH
|
|
|
|
lda enemy_data+ENEMY_DATA_X,Y
|
|
sta XPOS
|
|
lda enemy_data+ENEMY_DATA_Y,Y
|
|
sta YPOS
|
|
|
|
|
|
|
|
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
|
|
|
|
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
|
|
|
|
|
|
enemy_data:
|
|
|
|
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
|