dos33fsprogs/duke/draw_duke.s

175 lines
2.1 KiB
ArmAsm
Raw Normal View History

2020-12-11 00:24:05 +00:00
;=========================
; move duke
;=========================
2020-11-28 05:51:57 +00:00
move_duke:
2020-12-11 00:59:34 +00:00
jsr check_falling
2020-12-11 05:44:55 +00:00
jsr handle_jumping
2020-12-11 00:24:05 +00:00
lda DUKE_WALKING
beq done_move_duke
2020-11-28 05:51:57 +00:00
2020-12-11 00:24:05 +00:00
lda DUKE_DIRECTION
bmi move_left
lda DUKE_X
cmp #22
bcc duke_walk_right
duke_scroll_right:
inc TILEMAP_X
jsr copy_tilemap_subset
jmp done_move_duke
duke_walk_right:
inc DUKE_X
jmp done_move_duke
move_left:
2020-11-28 05:51:57 +00:00
2020-12-11 00:24:05 +00:00
lda DUKE_X
cmp #14
bcs duke_walk_left
duke_scroll_left:
dec TILEMAP_X
jsr copy_tilemap_subset
jmp done_move_duke
duke_walk_left:
dec DUKE_X
jmp done_move_duke
done_move_duke:
rts
2020-12-11 00:59:34 +00:00
;=========================
; duke collide
;=========================
; only check above head if jumping
duke_collide:
rts
2020-12-11 05:44:55 +00:00
;=========================
; check_jumping
;=========================
handle_jumping:
lda DUKE_JUMPING
beq done_handle_jumping
dec DUKE_Y
dec DUKE_Y
dec DUKE_JUMPING
done_handle_jumping:
rts
2020-12-11 00:59:34 +00:00
;=========================
; check_falling
;=========================
check_falling:
2020-12-11 05:44:55 +00:00
lda DUKE_JUMPING
bne done_check_falling
2020-12-11 00:59:34 +00:00
; check below feet
; block index below feet is (y+10)*16/4 + (x/2) + 1
lda DUKE_Y
clc
adc #10
asl
asl
asl
clc
adc DUKE_X
lsr ; have location of head
; clc
; adc #1 ; point under feet
tax
lda TILEMAP,X
; if < 32 then we fall
cmp #32
bcs done_check_below
; scroll
inc TILEMAP_Y
jsr copy_tilemap_subset
done_check_below:
2020-12-11 05:44:55 +00:00
done_check_falling:
2020-12-11 00:59:34 +00:00
rts
2020-12-11 00:24:05 +00:00
;=========================
; draw duke
;=========================
2020-11-28 05:51:57 +00:00
draw_duke:
lda DUKE_X
sta XPOS
lda DUKE_Y
sta YPOS
lda DUKE_DIRECTION
bmi duke_facing_left
lda #<duke_sprite_stand_right
sta INL
lda #>duke_sprite_stand_right
jmp actually_draw_duke
duke_facing_left:
lda #<duke_sprite_stand_left
sta INL
lda #>duke_sprite_stand_left
actually_draw_duke:
sta INH
jsr put_sprite_crop
rts
duke_sprite_stand_right:
.byte 4,5
.byte $AA,$dA,$dA,$AA
.byte $AA,$dd,$bb,$AA
.byte $AA,$b3,$7A,$7A
.byte $AA,$66,$6b,$AA
.byte $AA,$56,$65,$AA
duke_sprite_stand_left:
.byte 4,5
.byte $AA,$dA,$dA,$AA
.byte $AA,$bb,$dd,$AA
.byte $7A,$7A,$b3,$AA
.byte $AA,$6b,$66,$AA
.byte $AA,$65,$56,$AA