;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Fake Gravestone
;;by Joey : ) (Masashi27)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

incsrc subroutinedefs_trasm.asm

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Initial Routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

dcb "INIT"
RTL

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Main Routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

dcb "MAIN"
PHB
PHK
PLB
JSR SpriteRoutine
PLB
RTL

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Sprite Routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

RightSpeed: dcb $00,$0B,$1B,$00,$00
LeftSpeed: dcb $00,$F5,$E5,$00,$00

Return21:
RTS

SpriteRoutine:
JSR Graphics
LDA $14C8,x
CMP #$08
BNE Return21
LDA $9D
BNE Return21
JSL SubOffscreenX3

LDA $1588,x
AND #$03
BEQ NoFlip
LDA $157C,x
EOR #$01
STA $157C,x

NoFlip:
LDA $1588,x
AND #$08
BEQ SetSpeed
LDA #$03
STA $1528,x
STZ $1534,x
LDA #$3D ;Go down
STA $AA,x
JSL $81802A
JMP Return

SetSpeed:
LDY $1528,x
LDA $157C,x
BEQ Right
LDA LeftSpeed,y
BRA StoreSpeed
Right:
LDA RightSpeed,y
StoreSpeed:
STA $B6,x
JSL $81802A

LDA $1528,x
BEQ StateA
CMP #$01
BEQ StateB
CMP #$02
BEQ StateC
CMP #$03
BEQ StateDsub

LDA $C2,x
BEQ Label33
STZ $15
STZ $16
STZ $7D                       ;\Disable X..
STZ $7B                       ;/ ..and Y speed
LDA #$0F                    ;\Mario's temporary
STA $13E0                  ;/pose

Label33:
LDA $1540,x
BEQ UnclogWC ;state = 1 stuff
JMP Return

UnclogWC:
STZ $C2,x
LDA #$01
STA $1528,x
LDA #$10
STA $AA,x
JSL $81802A
JMP Return

StateA:
JSL $81802A       
JSL SubHorizPos ;Follow Mario
TYA        
STA $157C,x
LDA $0F
CLC
ADC #$40
CMP #$80
BCS Return
INC $1528,x
LDA #$10
STA $AA,x
JSL $81802A
BRA Return

StateB:
JSL SubHorizPos ;Follow Mario
TYA        
STA $157C,x
LDA $1534,x
CMP #$54
BEQ Jump
INC $1534,x
BRA Return

StateDsub:
JMP StateD

Jump:
INC $1528,x
STZ $1534,x
BRA Return

StateC: ;aka Jump routine
LDA #$EA ;Jump!
STA $AA,x
JSL $81802A
LDA $1534,x
CMP #$30 ;Let the sprite jump for 30 frames (Hex)
BEQ Land
INC $1534,x
BRA Return

Land:
INC $1528,x
STZ $1534,x
BRA Return

StateD: ;aka Shake routine
LDA #$3D ;Go down
STA $AA,x
JSL $81802A
LDA $1588,x
AND #$04
BEQ Return
LDA #$10
STA $AA,x
JSL $81802A
LDA #$26
STA $1887
LDA #$09
STA $1DFC
LDA $77
AND #$04
BEQ NoInc
INC $C2,x
NoInc:
LDA #$26
STA $1540,x
INC $1528,x

Return:
JSL $81A7DC ;Check for Mario/Sprite Contact
RTS


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Graphics Routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Properties: dcb $09,$09
Properties2: dcb $49,$09
StationaryTiles: dcb $CC,$EC
ActivatedTiles: dcb $CA,$EA

Ydisp: dcb $10,$00

Graphics:
JSL GetDrawInfo

LDA $157C,x
STA $02
LDA $1528,x
STA $08

PHX
LDX #$01

Loop:
LDA $00
STA $0300,y

LDA $01
SEC
SBC Ydisp,x
STA $0301,y

LDA $08
BNE Activated

LDA StationaryTiles,x     ;Write these tiles if the sprite is stopped (1528,x = 0)
STA $0302,y
BRA Label63:

Activated:
LDA ActivatedTiles,x     ;Write these tiles if the sprite is moving/jumping (1528,x is 1, 2, 3 or 4.)
STA $0302,y

Label63:
LDA $08
BNE Activated2

PHX
LDX $02
LDA Properties,x
ORA $64
STA $0303,y
PLX
BRA Label31

Activated2:
PHX
LDX $02
LDA Properties2,x
ORA $64
STA $0303,y
PLX

Label31:

INY
INY
INY
INY
	
DEX


BPL Loop	
	
PLX

LDY #$02
LDA #$01


JSL $81B7B3
RTS

