Code: Select all
DAT.Animation.Pacman.Walk:
.db $08 ; Animation Timer Speed (Number of NMIs before transition)
.db $03 ; Animation # of Frames
.dw DAT.Sprite.Pacman.Walk3
.dw DAT.Sprite.Pacman.Walk2
.dw DAT.Sprite.Pacman.Walk1
.dw DAT.Sprite.Pacman.Walk2
DAT.Sprite.Pacman.Walk1:
.db $04 ; Number of Sprites
.db $10 ; X Adjustment When Flipped
.db $F8, $8A, %00000001, $00
.db $F8, $8B, %00000001, $08
.db $F0, $9B, %00000001, $00
.db $F0, $9A, %00000001, $08
DAT.Sprite.Pacman.Walk2:
.db $04 ; Number of Sprites
.db $10 ; X Adjustment When Flipped
.db $F8, $B4, %00000001, $00
.db $F8, $c4, %00000001, $08
.db $F0, $B7, %00000001, $00
.db $F0, $C6, %00000001, $08
DAT.Sprite.Pacman.Walk3:
.db $04 ; Number of Sprites
.db $10 ; X Adjustment When Flipped
.db $F8, $BA, %00000001, $00
.db $F8, $BB, %00000001, $08
.db $F0, $BC, %00000001, $00
.db $F0, $BD, %00000001, $08
Code: Select all
LBL.Draw.Player:
; Set the Pointer to the Frame Data
LDA VAR.Player.Animation.Frame
ASL
TAY
INY
INY
LDA (VAR.Player.Animation.Data),Y
STA VAR.TEMP
INY
LDA (VAR.Player.Animation.Data),Y
STA VAR.TEMP+1
; Set the Tile Byte Counter
LDY #$00
LDA (VAR.TEMP),Y
ASL
ASL
TAY
INY
INY
STY VAR.TEMP+2
; Set the Horizontal Flipping Offset
LDY #$01
LDA (VAR.TEMP),Y
STA VAR.TEMP+3
LDY #$02
LDX #$00
LBL.Draw.Player.Loop:
; Copy Vertical Position Data
LDA (VAR.TEMP),Y
CLC
ADC VAR.Player.Y
STA BUF.Sprites,X
; Copy Tile
INY
INX
LDA (VAR.TEMP),Y
STA BUF.Sprites,X
; Copy Tile Attributes
INY
INX
LDA (VAR.TEMP),Y
STA BUF.Sprites,X
; Check if Horizontally Flipped
LDA VAR.Player.VX.Dir
BEQ LBL.Draw.Player.SetX
LDA (VAR.TEMP),Y
EOR #%01000000
STA BUF.Sprites,X
; Copy Horizontal Position Data
LBL.Draw.Player.SetX:
INY
INX
LDA (VAR.TEMP),Y
CLC
ADC VAR.Player.X
STA BUF.Sprites,X
; Check if Flipped
LDA VAR.Player.VX.Dir
BEQ LBL.Draw.Player.Loop.Continue
LDA VAR.Player.X
SEC
SBC (VAR.TEMP),Y
SEC
SBC #$08
CLC
ADC VAR.TEMP+3
STA BUF.Sprites,X
LBL.Draw.Player.Loop.Continue:
INY
INX
CPY VAR.TEMP+2
BNE LBL.Draw.Player.Loop
LDA TRUE
STA FLAG.UpdateSprites
RTS
1. I need to indicate where in the sprite buffer the sprite attributes need to go (since the player can go "behind" other sprites)
2. Indicate where the tile date should be put in CHR-RAM (tile index) when it's loaded.
How do you handle this?