dos33fsprogs/games/peasant/hgr_7x30_sprite.s
Vince Weaver 17a1d69f7a peasant: use lookup table for HPOSN
not sure if it's that noticable
2021-08-12 20:36:32 -04:00

157 lines
1.8 KiB
ArmAsm

;======================
; hgr 7x30 draw sprite
;======================
; SPRITE in INL/INH
; Location at CURSOR_X CURSOR_Y
; left sprite AT INL/INH
; right sprite at INL/INH + 14
; left mask at INL/INH + 28
; right mask at INL/INH + 42
hgr_draw_sprite_7x30:
; set up pointers
lda INL
sta h730_smc1+1
lda INH
sta h730_smc1+2
clc
lda INL
adc #30
sta h730_smc3+1
lda INH
adc #0
sta h730_smc3+2
ldx #0
hgr_7x30_sprite_yloop:
txa
pha
clc
adc CURSOR_Y
ldx #0
ldy #0
; calc GBASL/GBASH
; jsr HPOSN ; (Y,X),(A) (values stored in HGRX,XH,Y)
tax
lda hposn_low,X
sta GBASL
lda hposn_high,X
sta GBASH
pla
tax
ldy CURSOR_X
lda (GBASL),Y
h730_smc3:
and $d000,X ; mask
h730_smc1:
ora $d000,X ; sprite
sta (GBASL),Y
inx
cpx #30
bne hgr_7x30_sprite_yloop
rts
;======================
; save bg 7x30
;======================
save_bg_7x30:
ldx #0
save_yloop:
txa
pha
clc
adc CURSOR_Y
ldx #0
ldy #0
; calc GBASL/GBASH
; jsr HPOSN ; (Y,X),(A) (values stored in HGRX,XH,Y)
tax
lda hposn_low,X
sta GBASL
lda hposn_high,X
sta GBASH
pla
tax
ldy CURSOR_X
lda (GBASL),Y
sta save_sprite_7x30,X
inx
cpx #30
bne save_yloop
rts
;======================
; restore bg 7x30
;======================
restore_bg_7x30:
ldx #0
restore_yloop:
txa
pha
clc
adc CURSOR_Y
ldx #0
ldy #0
; calc GBASL/GBASH
; jsr HPOSN ; (Y,X),(A) (values stored in HGRX,XH,Y)
tax
lda hposn_low,X
sta GBASL
lda hposn_high,X
sta GBASH
pla
tax
ldy CURSOR_X
lda save_sprite_7x30,X
sta (GBASL),Y
inx
cpx #30
bne restore_yloop
rts
;====================
; save area
;====================
save_sprite_7x30:
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00