bulk replace SprX/SprY labels to all sprites, .w qualifiers on STAs

This commit is contained in:
scawful
2024-06-30 12:34:42 -04:00
parent 7c4e1841ec
commit 61dffd7017
26 changed files with 348 additions and 362 deletions

View File

@@ -125,10 +125,10 @@ LinkItem_FishingRod:
LDA.b #$74
JSL $1DF65D ; Sprite_SpawnDynamically because whatever
LDA.b $22 : STA.w $0D10, Y
LDA.b $23 : STA.w $0D30, Y
LDA.b $20 : STA.w $0D00, Y
LDA.b $21 : STA.w $0D20, Y
LDA.b $22 : STA.w SprX, Y
LDA.b $23 : STA.w SprXH, Y
LDA.b $20 : STA.w SprY, Y
LDA.b $21 : STA.w SprYH, Y
LDA.b #$01 : STA.w $0E70, Y ; is floater
TYA : STA.l $7F5BA3 ; keep the index of the sprite
TYX

View File

@@ -87,14 +87,14 @@ macro SpawnPortal(x_offset, y_offset)
REP #$20
LDA $22 : CLC : ADC.w #<x_offset>
SEP #$20
STA $0D10, Y ; SprX
XBA : STA $0D30, Y ; SprXH
STA.w SprX, Y ; SprX
XBA : STA.w SprXH, Y ; SprXH
REP #$20
LDA $20 : CLC : ADC.w #<y_offset>
SEP #$20
STA $0D00, Y ; SprY
XBA : STA $0D20, Y ; SprYH
STA.w SprY, Y ; SprY
XBA : STA.w SprYH, Y ; SprYH
endmacro
LinkItem_FirePortal:

View File

@@ -490,8 +490,8 @@ Sprite_DarkLink_Main:
JSL GetRandomInt
AND #$03
TAY
LDA speedTableX, Y : STA SprXSpeed, X
LDA speedTableY, Y : STA SprYSpeed, X
LDA speedTableX, Y : STA.w SprXSpeed, X
LDA speedTableY, Y : STA.w SprYSpeed, X
RTS
}
@@ -1527,11 +1527,11 @@ GanonInit:
LDA #$C1
JSL Sprite_SpawnDynamically
LDA #$05 : STA.w SprSubtype, Y
LDA $00 : STA $0D10, Y
LDA $01 : STA.w $0D30, Y
LDA $00 : STA.w SprX, Y
LDA $01 : STA.w SprXH, Y
LDA $02 : STA.w $0D00, Y
LDA $03 : STA.w $0D20, Y
LDA $02 : STA.w SprY, Y
LDA $03 : STA.w SprYH, Y
LDA.b #$30 : STA.w SprTimerA, Y
LDA #$1C : STA.w $012C

View File

@@ -104,7 +104,7 @@ Sprite_Kydreeok_CheckIfDead:
RTS
.dead
LDA.b #$60 : STA.w SprTimerA, X
LDA.b #$05 : STA SprAction, X
LDA.b #$05 : STA.w SprAction, X
LDA.b #$13 : STA $012C
.not_dead
RTS
@@ -153,7 +153,7 @@ Sprite_Kydreeok_Main:
LDY #$00
JSR ApplyKydreeokGraphics
JSR ApplyPalette
LDA.b #$01 : STA SprMiscD, X
LDA.b #$01 : STA.w SprMiscD, X
.go
JSL Sprite_PlayerCantPassThrough
@@ -290,10 +290,10 @@ Sprite_Kydreeok_Main:
LDA.b #$04 : STA.w $0DD0,Y
LDA.b #$03 : STA.w $0E40,Y
LDA.b #$0C : STA.w $0F50,Y
LDA.w $0FD8 : STA.w $0D10,Y
LDA.w $0FD9 : STA.w $0D30,Y
LDA.w $0FDA : STA.w $0D00,Y
LDA.w $0FDB : STA.w $0D20,Y
LDA.w $0FD8 : STA.w SprX,Y
LDA.w $0FD9 : STA.w SprXH,Y
LDA.w $0FDA : STA.w SprY,Y
LDA.w $0FDB : STA.w SprYH,Y
LDA.b #$1F
STA.w $0DF0,Y
@@ -543,7 +543,7 @@ StopIfOutOfBounds:
LDA SprCachedX : CMP.w #$0118 : BCS .not_out_of_bounds_Left
SEP #$20
LDA.w SprXSpeed : CMP.b #$7F : BCC .not_out_of_bounds_Left
LDA.b #-10 : STA.w SprXSpeed : STA SprXRound
LDA.b #-10 : STA.w SprXSpeed : STA.w SprXRound
LDA $19EA : SEC : SBC #$04 : STA $19EA
LDA $19EC : SEC : SBC #$04 : STA $19EC
LDA $19EE : SEC : SBC #$04 : STA $19EE
@@ -559,7 +559,7 @@ StopIfOutOfBounds:
LDA SprCachedX : CMP.w #$01D8 : BCC .not_out_of_bounds_Right
SEP #$20
LDA.w SprXSpeed : CMP.b #$80 : BCS .not_out_of_bounds_Right
LDA.b #$00 : STA.w SprXSpeed : STA SprXRound
LDA.b #$00 : STA.w SprXSpeed : STA.w SprXRound
LDA $19EA : CLC : ADC #$04 : STA $19EA
LDA $19EC : CLC : ADC #$04 : STA $19EC
LDA $19EE : CLC : ADC #$04 : STA $19EE
@@ -576,7 +576,7 @@ StopIfOutOfBounds:
LDA SprCachedY : CMP.w #$0020 : BCS .not_out_of_bounds_Up
SEP #$20
LDA.w SprYSpeed : CMP.b #$7F : BCC .not_out_of_bounds_Up
LDA.b #$00 : STA.w SprYSpeed : STA SprYRound
LDA.b #$00 : STA.w SprYSpeed : STA.w SprYRound
LDA $19EA : SEC : SBC #$04 : STA $19EA
LDA $19EC : SEC : SBC #$04 : STA $19EC
LDA $19EE : SEC : SBC #$04 : STA $19EE
@@ -588,7 +588,7 @@ StopIfOutOfBounds:
LDA SprCachedY : CMP.w #$00D0 : BCC .not_out_of_bounds_Down
SEP #$20
LDA.w SprYSpeed : CMP.b #$80 : BCS .not_out_of_bounds_Down
LDA.b #-10 : STA.w SprYSpeed : STA SprYRound ; Reverse the direction
LDA.b #-10 : STA.w SprYSpeed : STA.w SprYRound ; Reverse the direction
; Modify the neck position
; Makes them move away from each other a bit

View File

@@ -400,8 +400,8 @@ MoveWithBody:
Neck1_Control:
{
; Set head pos
LDA $19EE : STA SprX, X
LDA $19EF : STA SprY, X
LDA $19EE : STA.w SprX, X
LDA $19EF : STA.w SprY, X
LDA.w SprX, X : STA.w SprMiscC, X
LDA.w SprY, X : STA.w SprMiscD, X
@@ -503,8 +503,8 @@ Neck1_Control:
Neck2_Control:
{
; Set head pos
LDA $19F4 : STA SprX, X
LDA $19F5 : STA SprY, X
LDA $19F4 : STA.w SprX, X
LDA $19F5 : STA.w SprY, X
LDA.w SprX, X : STA.w SprMiscC, X
LDA.w SprY, X : STA.w SprMiscD, X

View File

@@ -196,7 +196,7 @@ Sprite_Kydrog_Draw:
TYA : LSR #2 : TAY
LDA .sizes, X : ORA $0F : STA ($92), Y ; store size in oam buffer
LDA.b #$02 : ORA $0F : STA ($92), Y ; store size in oam buffer
PLY : INY
@@ -220,6 +220,4 @@ Sprite_Kydrog_Draw:
db $CC, $CE, $EE, $EC, $E8, $EA
.properties
db $39, $39, $39, $39, $39, $39
.sizes
db $02, $02, $02, $02, $02, $02
}

View File

@@ -94,7 +94,7 @@ Sprite_KydrogBoss_Prep:
LDA.b #$80 : STA $0CAA, X
LDA.b #$03 : STA $0F60, X ; hitbox settings
LDA.b #$07 : STA SprBump, X ; bump damage type
LDA.b #$07 : STA.w SprBump, X ; bump damage type
LDA $0E60, X : AND.b #$BF : STA $0E60, X ; Not invincible
JSR KydrogBoss_Set_Damage ; Set the damage table
@@ -103,7 +103,7 @@ Sprite_KydrogBoss_Prep:
%SetSpriteSpeedX(15)
%SetHarmless(00)
LDA #$80 : STA SprTimerD, X ; intro timer
LDA #$80 : STA.w SprTimerD, X ; intro timer
PLB
RTL
@@ -423,9 +423,9 @@ Sprite_KydrogBoss_Main:
; Increase the Z for a bit until he is off screen
LDA SprHeight, X : CLC : ADC.b #$04
STA SprHeight, X : CMP.b #$B0 : BCC .not_off_screen
STA.w SprHeight, X : CMP.b #$B0 : BCC .not_off_screen
;
LDA #$40 : STA SprTimerD, X
LDA #$40 : STA.w SprTimerD, X
%GotoAction($0B)
.not_off_screen
@@ -441,15 +441,15 @@ Sprite_KydrogBoss_Main:
LDA SprTimerD, X : BEQ .no_track_player
LDA $20 : STA SprY, X
LDA $22 : STA SprX, X
LDA $20 : STA.w SprY, X
LDA $22 : STA.w SprX, X
; PHX : JSL $01F3EC : PLX ; Light Torch
LDA SprTimerD, X : BNE .wait_a_second
.no_track_player
; Decrease the Z for a bit until he is at level with Link
LDA SprHeight, X : SEC : SBC.b #$04 : STA SprHeight, X
LDA SprHeight, X : SEC : SBC.b #$04 : STA.w SprHeight, X
CMP.b #$04 : BCS .not_off_screen
%GotoAction(1)
.not_off_screen
@@ -669,8 +669,8 @@ Kydrog_ThrowBoneAtPlayer:
TYX
LDA SprX, X : CLC : ADC.b #$10 : STA SprX, X
LDA SprY, X : SEC : SBC.b #$04 : STA SprY, X
LDA SprX, X : CLC : ADC.b #$10 : STA.w SprX, X
LDA SprY, X : SEC : SBC.b #$04 : STA.w SprY, X
LDA.b #$20 : JSL Sprite_ApplySpeedTowardsPlayer
@@ -680,13 +680,13 @@ Kydrog_ThrowBoneAtPlayer:
LDA.b #$48 : STA $0CAA, X
LDA.b #$10 : STA SprTimerC, X
LDA.b #$10 : STA.w SprTimerC, X
LDA.b #$14 : STA $0F60, X
LDA.b #$07 : STA $0F50, X
LDA.b #$20 : STA SprBump, X
LDA.b #$20 : STA.w SprBump, X
PLX

View File

@@ -147,11 +147,11 @@ Lanmola_Mound: ;0x01
; ALTERNATE ENTRY POINT
.Lanmola_SetScatterSandPosition
LDA $0D30, X : STA $0DC0, X
LDA $0D20, X : STA $0EB0, X
LDA SprXH, X : STA $0DC0, X
LDA SprYH, X : STA $0EB0, X
LDA $0D10, X : STA $0DE0, X
LDA $0D00, X : STA $0E70, X
LDA SprX, X : STA $0DE0, X
LDA SprY, X : STA $0E70, X
LDA.b #$4A : STA $0E00, X
@@ -196,13 +196,13 @@ Lanmola_Fly: ;0x02
.dontSwitchDirections
LDA $0DA0, X : STA $04
LDA $0D30, X : STA $05
LDA SprXH, X : STA $05
LDA $0DB0, X : STA $06
LDA $0D20, X : STA $07
LDA $0D10, X : STA $00
LDA $0D30, X : STA $01
LDA $0D00, X : STA $02
LDA $0D20, X : STA $03
LDA SprYH, X : STA $07
LDA SprX, X : STA $00
LDA SprXH, X : STA $01
LDA SprY, X : STA $02
LDA SprYH, X : STA $03
REP #$20
@@ -272,10 +272,10 @@ Lanmola_Reset: ;0x04
TXY
JSL GetRandomInt : AND.b #$07 : TAX
LDA $7EEAA8, X : STA $0D10, Y ; Get random X pos to have the lanmola fly to. ;.randXPos
LDA $7EEAA8, X : STA.w SprX, Y ; Get random X pos to have the lanmola fly to. ;.randXPos
JSL GetRandomInt : AND.b #$07 : TAX
LDA $7EEAB0, X : STA $0D00, Y ; Get random Y pos to have the lanmola fly to. ;.randYPos
LDA $7EEAB0, X : STA.w SprY, Y ; Get random Y pos to have the lanmola fly to. ;.randYPos
TYX
.wait
@@ -348,10 +348,10 @@ Lanmola_Death: ;0x05
LDA.b #$1F : STA $0DF0, Y : STA $0D90, Y
LDA $0A : STA $0D10, Y
LDA $0B : STA $0D30, Y
LDA $0C : STA $0D00, Y
LDA $0D : STA $0D20, Y
LDA $0A : STA.w SprX, Y
LDA $0B : STA.w SprXH, Y
LDA $0C : STA.w SprY, Y
LDA $0D : STA.w SprYH, Y
LDA.b #$03 : STA $0E40, Y

View File

@@ -292,10 +292,10 @@ Lanmola_MoveSegment:
; Store the current position, angle, and hieght of the sprite
; so that we can set the other segments to them later.
LDA $0D30, X : PHA ;high x
LDA $0D20, X : PHA ;high y
LDA $0D10, X : PHA ;lower x
LDA $0D00, X : PHA ;lower y
LDA SprXH, X : PHA ;high x
LDA SprYH, X : PHA ;high y
LDA SprX, X : PHA ;lower x
LDA SprY, X : PHA ;lower y
LDA $0F70, X : PHA ;height
LDA $0F : PHA ;angle

View File

@@ -493,7 +493,7 @@ Manhandla_StopIfOutOfBounds:
LDA SprCachedX : CMP.w #$153A : BCS .not_out_of_bounds_Left
SEP #$20
LDA.w SprXSpeed : CMP.b #$7F : BCC .not_out_of_bounds_Left
LDA.b #-08 : STA.w SprXSpeed : STA SprXRound
LDA.b #-08 : STA.w SprXSpeed : STA.w SprXRound
.not_out_of_bounds_Left
SEP #$20
@@ -502,7 +502,7 @@ Manhandla_StopIfOutOfBounds:
LDA SprCachedX : CMP.w #$15C8 : BCC .not_out_of_bounds_Right
SEP #$20
LDA.w SprXSpeed : CMP.b #$80 : BCS .not_out_of_bounds_Right
LDA.b #$08 : STA.w SprXSpeed : STA SprXRound
LDA.b #$08 : STA.w SprXSpeed : STA.w SprXRound
.not_out_of_bounds_Right
SEP #$20
@@ -512,7 +512,7 @@ Manhandla_StopIfOutOfBounds:
LDA SprCachedY : CMP.w #$0B3A : BCS .not_out_of_bounds_Up
SEP #$20
LDA.w SprYSpeed : CMP.b #$7F : BCC .not_out_of_bounds_Up
LDA.b #$08 : STA.w SprYSpeed : STA SprYRound
LDA.b #$08 : STA.w SprYSpeed : STA.w SprYRound
.not_out_of_bounds_Up
SEP #$20
@@ -521,7 +521,7 @@ Manhandla_StopIfOutOfBounds:
LDA SprCachedY : CMP.w #$0BA6 : BCC .not_out_of_bounds_Down
SEP #$20
LDA.w SprYSpeed : CMP.b #$80 : BCS .not_out_of_bounds_Down
LDA.b #-08 : STA.w SprYSpeed : STA SprYRound ; Reverse the direction
LDA.b #-08 : STA.w SprYSpeed : STA.w SprYRound ; Reverse the direction
.not_out_of_bounds_Down
SEP #$20
@@ -817,7 +817,7 @@ Mothula_SpawnBeams:
LDA.b $02 : SEC : SBC.b $04
CLC : ADC.b #$03 : STA.w $0D00,Y
CLC : ADC.b #$03 : STA.w SprY,Y
LDA.b #$10 : STA.w $0DF0,Y : STA.w $0BA0,Y
@@ -826,7 +826,7 @@ Mothula_SpawnBeams:
LDX.w $0FB5
LDA.b $00 : CLC : ADC.w .speed_and_offset_x,X
STA.w $0D10,Y
STA.w SprX,Y
LDA.w .speed_and_offset_x,X : STA.w $0D50,Y

View File

@@ -180,7 +180,7 @@ Sprite_Octoboss_Main:
LDA.b #$49
LDY.b #$00
JSL Sprite_ShowMessageUnconditional
LDA #$16 : STA SprTimerC, X
LDA #$16 : STA.w SprTimerC, X
INC.w SprAction, X
+
RTS
@@ -919,20 +919,20 @@ SpawnBossPoof:
LDA.b $00
CLC
ADC.b #$10
STA.w $0D10,Y
STA.w SprX,Y
LDA.b $01
ADC.b #$00
STA.w $0D30,Y
STA.w SprXH,Y
LDA.b $02
CLC
ADC.b #$08
STA.w $0D00,Y
STA.w SprY,Y
LDA.b $03
ADC.b #$00
STA.w $0D20,Y
STA.w SprYH,Y
LDA.b #$0F
STA.w $0DC0,Y
@@ -978,18 +978,18 @@ HandleMovingSplash:
STA.l $7FF800,X
STA.w $0FB4
LDA.w $0D10,Y
LDA.w SprX,Y
STA.l $7FF83C,X
LDA.w $0D30,Y
LDA.w SprXH,Y
STA.l $7FF878,X
LDA.w $0D00,Y
LDA.w SprY,Y
CLC
ADC.b #$18
STA.l $7FF81E,X
LDA.w $0D20,Y
LDA.w SprYH,Y
STA.l $7FF85A,X
LDA.b #$0F

View File

@@ -61,13 +61,13 @@ Sprite_Twinrova_CheckIfDead:
LDA SprAction, X : CMP.b #$0A : BEQ .not_dead
; If health is negative, set back to zero
LDA SprHealth, X : CMP.b #$C3 : BCC .health_not_negative
LDA.b #$00 : STA SprHealth, X
LDA.b #$00 : STA.w SprHealth, X
.health_not_negative
LDA SprHealth, X : BNE .not_dead
PHX
LDA.b #$04 : STA $0DD0, X ; Kill sprite boss style
LDA.b #$0A : STA SprAction, X ; Go to Twinrova_Dead stage
LDA.b #$0A : STA.w SprAction, X ; Go to Twinrova_Dead stage
LDA.b #$10 : STA.w $0D90, X
PLX
.not_dead
@@ -85,7 +85,7 @@ Sprite_Twinrova_Prep:
STZ.w $0DD0, X
.prep_twinrova
LDA.b #$5A : STA SprHealth, X ; Health
LDA.b #$5A : STA.w SprHealth, X ; Health
LDA.b #$80 : STA $0CAA, X
LDA.b #$04 : STA $0CD2, X ; Bump damage type (4 hearts, green tunic)
LDA $0E60, X : AND.b #$BF : STA $0E60, X ; Not invincible
@@ -192,11 +192,11 @@ Sprite_Twinrova_Main:
; -------------------------------------------
; Phase 2
LDA SprTimerE, X : BNE .kotake
LDA #$70 : STA SprTimerD, X
LDA #$70 : STA.w SprTimerD, X
%GotoAction(8) ; Koume Mode
RTS
.kotake
LDA #$70 : STA SprTimerD, X
LDA #$70 : STA.w SprTimerD, X
%GotoAction(9) ; Kotake Mode
RTS
@@ -228,11 +228,11 @@ Sprite_Twinrova_Main:
RTS
.random_strafe
JSL GetRandomInt : AND.b #$01 : BEQ .strafe_left
LDA #$10 : STA SprXSpeed, X
LDA #$10 : STA.w SprXSpeed, X
%GotoAction(2) ; Move Forwards with strafe
RTS
.strafe_left
LDA #$F0 : STA SprXSpeed, X
LDA #$F0 : STA.w SprXSpeed, X
%GotoAction(2) ; Move Forwards with strafe
RTS
@@ -375,7 +375,7 @@ Sprite_Twinrova_Main:
.PerformDodge
JSR DoRandomStrafe
LDA.b #$20 : STA.w SprTimerA, X ; Set timer for dodge duration
LDA.b #$02 : STA SprMiscA, X ; Set state to random strafe
LDA.b #$02 : STA.w SprMiscA, X ; Set state to random strafe
RTS
.PerformRetaliate
@@ -431,7 +431,7 @@ Sprite_Twinrova_Main:
JSR RageModeMove
LDA SprTimerD, X : BNE +
LDA #$70 : STA SprTimerE, X
LDA #$70 : STA.w SprTimerE, X
%GotoAction(1)
+
RTS
@@ -511,24 +511,24 @@ RageModeMove:
CMP.b #$0E
BCC .SetRandomDodge ; 11-14 -> Random dodge
; 15 -> Stay in place
LDA.b #$04 : STA SprMiscA, X
LDA.b #$30 : STA SprTimerA, X ; Set timer for 48 frames
LDA.b #$04 : STA.w SprMiscA, X
LDA.b #$30 : STA.w SprTimerA, X ; Set timer for 48 frames
RTS
BRA .StayInPlace
.SetMoveTowardsPlayer
LDA.b #$01 : STA SprMiscA, X
LDA.b #$30 : STA SprTimerA, X ; Set timer for 48 frames
LDA.b #$01 : STA.w SprMiscA, X
LDA.b #$30 : STA.w SprTimerA, X ; Set timer for 48 frames
BRA .MoveTowardsPlayer
.SetRandomStrafe
LDA.b #$02 : STA SprMiscA, X
LDA.b #$30 : STA SprTimerA, X ; Set timer for 48 frames
LDA.b #$02 : STA.w SprMiscA, X
LDA.b #$30 : STA.w SprTimerA, X ; Set timer for 48 frames
BRA .RandomStrafe
.SetRandomDodge
LDA.b #$03 : STA SprMiscA, X
LDA.b #$30 : STA SprTimerA, X ; Set timer for 48 frames
LDA.b #$03 : STA.w SprMiscA, X
LDA.b #$30 : STA.w SprTimerA, X ; Set timer for 48 frames
BRA .RandomDodge
.MoveTowardsPlayer
@@ -547,9 +547,9 @@ RageModeMove:
JSL GetRandomInt
AND.b #$03
TAY
LDA VelocityOffsets+4, Y : STA SprXSpeed, X
LDA VelocityOffsets+4, Y : STA.w SprXSpeed, X
INY
LDA VelocityOffsets, Y : STA SprYSpeed, X
LDA VelocityOffsets, Y : STA.w SprYSpeed, X
LDA.b #$10 : STA.w SprHeight, X ; Set height
BRA .UpdatePosition
@@ -565,9 +565,9 @@ RageModeMove:
JSL GetRandomInt
AND.b #$03
TAY
LDA VelocityOffsets, Y : EOR #$FF : INC : STA SprXSpeed, X
LDA VelocityOffsets, Y : EOR #$FF : INC : STA.w SprXSpeed, X
INY
LDA VelocityOffsets+4, Y : EOR #$FF : INC : STA SprYSpeed, X
LDA VelocityOffsets+4, Y : EOR #$FF : INC : STA.w SprYSpeed, X
LDA.b #$10 : STA.w SprHeight, X ; Set height
BRA .UpdatePosition
@@ -595,9 +595,9 @@ DoRandomStrafe:
JSL GetRandomInt
AND.b #$03
TAY
LDA VelocityOffsets, Y : STA SprXSpeed, X
LDA VelocityOffsets, Y : STA.w SprXSpeed, X
INY
LDA VelocityOffsets+4, Y : STA SprYSpeed, X
LDA VelocityOffsets+4, Y : STA.w SprYSpeed, X
LDA.b #$10 : STA.w SprHeight, X ; Set height
RTS
}
@@ -1085,23 +1085,23 @@ ReleaseFireballs:
LDA.w .speed_y,Y
STA.w $0D40,X
LDA.w $0D10,X
LDA.w SprX,X
CLC
ADC.w .offset_x_low,Y
STA.w $0D10,X
STA.w SprX,X
LDA.w $0D30,X
LDA.w SprXH,X
ADC.w .offset_x_high,Y
STA.w $0D30,X
STA.w SprXH,X
LDA.w $0D00,X
LDA.w SprY,X
CLC
ADC.w .offset_y_low,Y
STA.w $0D00,X
STA.w SprY,X
LDA.w $0D20,X
LDA.w SprYH,X
ADC.w .offset_y_high,Y
STA.w $0D20,X
STA.w SprYH,X
PLX
@@ -1243,10 +1243,10 @@ Blind_SpawnFromMaiden:
LDA.b #$CE : STA.w $0E20,X
; Load the position cache from the maiden follower
LDA.b $00 : STA.w $0D10,X
LDA.b $01 : STA.w $0D30,X
LDA.b $02 : SEC : SBC.b #$10 : STA.w $0D00,X
LDA.b $03 : STA.w $0D20,X
LDA.b $00 : STA.w SprX,X
LDA.b $01 : STA.w SprXH,X
LDA.b $02 : SEC : SBC.b #$10 : STA.w SprY,X
LDA.b $03 : STA.w SprYH,X
; Removed because it was causing the sprite to disappear
; JSL SpritePrep_LoadProperties
@@ -1360,18 +1360,18 @@ BlindLaser_SpawnTrailGarnish:
TYA
STA.l $7FF92C,X
LDA.w $0D10,Y
LDA.w SprX,Y
STA.l $7FF83C,X
LDA.w $0D30,Y
LDA.w SprXH,Y
STA.l $7FF878,X
LDA.w $0D00,Y
LDA.w SprY,Y
CLC
ADC.b #$10
STA.l $7FF81E,X
LDA.w $0D20,Y
LDA.w SprYH,Y
ADC.b #$00
STA.l $7FF85A,X
@@ -1409,11 +1409,11 @@ pullpc
NewMantlePrep:
{
LDA $0D00, X : CLC : ADC.b #$07 : STA $0D00, X
LDA $0D10, X : CLC : ADC.b #$08 : STA $0D10, X
LDA SprY, X : CLC : ADC.b #$07 : STA.w SprY, X
LDA SprX, X : CLC : ADC.b #$08 : STA.w SprX, X
LDA $7EF0DA : AND #$0F : BEQ +
LDA $0D10, X : CLC : ADC.b #$28 : STA $0D10, X
LDA SprX, X : CLC : ADC.b #$28 : STA.w SprX, X
+
RTL

View File

@@ -73,9 +73,9 @@ Sprite_Wolfos_Prep:
Sprite_Wolfos_CheckIfDefeated:
{
LDA.w SprHealth, X : CMP.b #$10 : BCS .not_defeated
LDA.b #$06 : STA SprAction, X ; Set to defeated
LDA.b #$09 : STA SprState, X
LDA.b #$40 : STA SprHealth, X ; Refill the health of the sprite
LDA.b #$06 : STA.w SprAction, X ; Set to defeated
LDA.b #$09 : STA.w SprState, X
LDA.b #$40 : STA.w SprHealth, X ; Refill the health of the sprite
STZ.w SprMiscD, X
RTS
.not_defeated
@@ -104,9 +104,9 @@ Wolfos_DecideAction:
JSL Sprite_DirectionToFacePlayer
LDA $0E ; y distance from player
STA SprMiscC, X
STA.w SprMiscC, X
LDA $0F ; x distance from player
STA SprMiscB, X
STA.w SprMiscB, X
LDA SprMiscC, X
CMP #$10 ; Check if y distance is significant
@@ -165,7 +165,7 @@ Sprite_Wolfos_Main:
STA.w SprYSpeed, X
LDA #$30
STA SprTimerA, X
STA.w SprTimerA, X
RTS
}
@@ -179,7 +179,7 @@ Sprite_Wolfos_Main:
STA.w SprYSpeed, X
LDA #$30
STA SprTimerA, X
STA.w SprTimerA, X
RTS
}
@@ -199,7 +199,7 @@ Sprite_Wolfos_Main:
+
LDA #$30
STA SprTimerA, X
STA.w SprTimerA, X
RTS
}
@@ -219,7 +219,7 @@ Sprite_Wolfos_Main:
+
LDA #$30
STA SprTimerA, X
STA.w SprTimerA, X
RTS
}
@@ -274,7 +274,7 @@ Sprite_Wolfos_Main:
; Run the dialogue and wait for a song of healing flag to be set
LDA SprMiscD, X : BNE .wait
%ShowUnconditionalMessage($0F)
LDA.b #$01 : STA SprMiscD, X
LDA.b #$01 : STA.w SprMiscD, X
.wait
LDA $FE : BEQ .ninguna_cancion
STZ $FE

View File

@@ -62,7 +62,7 @@ Sprite_AntiKirby_Prep:
LDY $0FFF
LDA .bump_damage, Y : STA.w SprBump, X
LDA .health, Y : STA.w SprHealth, X
LDA .prize_pack, Y : STA SprPrize, X
LDA .prize_pack, Y : STA.w SprPrize, X
PLB
RTL
@@ -115,7 +115,7 @@ Sprite_AntiKirby_Main:
; Randomly Suck
JSL GetRandomInt : AND #$3F : BNE .not_done
LDA #$04 : STA SprTimerA, X
LDA #$04 : STA.w SprTimerA, X
%GotoAction(2)
RTS
.not_done
@@ -123,7 +123,7 @@ Sprite_AntiKirby_Main:
%PlayAnimation(0, 2, 10) ; Start
JSL Sprite_CheckDamageFromPlayerLong : BCC .NoDamage
LDA #!RecoilTime : STA SprTimerA, X
LDA #!RecoilTime : STA.w SprTimerA, X
%GotoAction(1) ; Hurt
RTS
.NoDamage
@@ -153,7 +153,7 @@ Sprite_AntiKirby_Main:
%PlayAnimation(4, 5, 10) ; Suck
JSL Sprite_CheckDamageFromPlayerLong : BCC .NoDamage
LDA #!RecoilTime : STA SprTimerA, X
LDA #!RecoilTime : STA.w SprTimerA, X
%GotoAction(1) ; Hurt
RTS
.NoDamage
@@ -235,7 +235,7 @@ Sprite_AntiKirby_Main:
JSL Sprite_PlayerCantPassThrough
JSL Sprite_CheckDamageFromPlayerLong : BCC .NoDamage
LDA #!RecoilTime : STA SprTimerA, X
LDA #!RecoilTime : STA.w SprTimerA, X
%GotoAction(6) ; Hurt
.NoDamage

View File

@@ -53,7 +53,7 @@ Sprite_DekuScrubEnemy_Prep:
PHB : PHK : PLB
LDA SprSubtype, X : CMP #$01 : BNE .normal_scrub
LDA.b #$06 : STA SprAction, X ; Pea Shot State
LDA.b #$06 : STA.w SprAction, X ; Pea Shot State
LDA.b #$20 : STA.b SprPrize, X
.normal_scrub
@@ -102,7 +102,7 @@ Sprite_DekuScrubEnemy_Main:
LDA SprY, X : STA $05
JSL GetDistance8bit_Long : CMP.b #$24 : BCC .too_close
; The player is below the scrub, so it should pop up
LDA #$20 : STA SprTimerA, X
LDA #$20 : STA.w SprTimerA, X
%GotoAction(1)
.too_close
.is_below_player
@@ -120,7 +120,7 @@ Sprite_DekuScrubEnemy_Main:
LDA SprTimerA, X : BNE .not_done
JSR SpawnPeaShot
LDA #$50 : STA SprTimerA, X
LDA #$50 : STA.w SprTimerA, X
INC.w SprAction, X
.not_done
@@ -166,7 +166,7 @@ Sprite_DekuScrubEnemy_Main:
; Play the spinning animation for a bit before proceeding
LDA SprTimerA, X : BNE .not_done
LDA #$40 : STA SprTimerA, X
LDA #$40 : STA.w SprTimerA, X
INC.w SprAction, X
.not_done
@@ -222,7 +222,7 @@ Sprite_DekuScrubEnemy_Main:
JSL Sprite_CheckDamageFromPlayerLong : BCC .no_damage
; Apply force in the opposite direction
LDA #-16 : STA SprYSpeed, X
LDA #-16 : STA.w SprYSpeed, X
.no_damage
RTS
}
@@ -258,14 +258,14 @@ DekuScrub_GiveRandomPrize:
CheckForPeaShotRedirect:
{
LDA.w $0D10, X : STA.b $00
LDA.w $0D30, X : STA.b $08
LDA.w SprX, X : STA.b $00
LDA.w SprXH, X : STA.b $08
LDA.b #$04 : STA.b $02
STZ $03
LDA.w $0D00, X : STA.b $01
LDA.w $0D20, X : STA.b $09
LDA.w SprY, X : STA.b $01
LDA.w SprYH, X : STA.b $09
PHX
LDA.w Offspring1_Id : TAX
@@ -305,19 +305,19 @@ SpawnPeaShot:
REP #$20
LDA $0FD8
SEP #$20
STA $0D10, Y : XBA : STA $0D30, Y
STA.w SprX, Y : XBA : STA.w SprXH, Y
REP #$20
LDA $0FDA : CLC : ADC.w #$000C
SEP #$20
STA $0D00, Y : XBA : STA $0D20, Y
STA.w SprY, Y : XBA : STA.w SprYH, Y
TYX
STZ $0D70, X
LDA #$10 : STA SprYSpeed, X
STA SprYRound, X
LDA #$10 : STA.w SprYSpeed, X
STA.w SprYRound, X
STX.w Offspring1_Id

View File

@@ -60,7 +60,7 @@ Sprite_HelmetChuchu_Prep:
PHB : PHK : PLB
LDA.b #$0C : STA.w SprHealth, X
JSL GetRandomInt : AND.b #$02 : STA SprAction, X
JSL GetRandomInt : AND.b #$02 : STA.w SprAction, X
STZ.w SprMiscB, X
LDA.w SprAction, X : BNE +

View File

@@ -84,7 +84,7 @@ Sprite_PolsVoice_Main:
%DoDamageToPlayerSameLayerOnContact()
JSL GetRandomInt : AND #$3F : BNE .not_done
LDA #$04 : STA SprTimerA, X
LDA #$04 : STA.w SprTimerA, X
%GotoAction(1)
.not_done
@@ -102,9 +102,9 @@ Sprite_PolsVoice_Main:
LDA #$20 : STA.w SprXSpeed, X
BRA .not_left
.not_right
LDA #$E0 : STA SprXSpeed, X
LDA #$E0 : STA.w SprXSpeed, X
.not_left
LDA #$04 : STA SprTimerA, X
LDA #$04 : STA.w SprTimerA, X
%GotoAction(1)
.no_damage
RTS

View File

@@ -218,7 +218,7 @@ Sprite_Farore_Main:
}
; 07
; Look at the RAM $0D00 to $0D60, the first few are the actual positions of the sprite
; Look at the RAM SprY to $0D60, the first few are the actual positions of the sprite
; that you can just set manually or $0D40 and $0D50 are the "speeds" of the sprites irrc
; You can set one of the speeds and then call the function called Sprite_Move
; And then that will handle it applying the speed for you

View File

@@ -63,7 +63,7 @@ Sprite_Korok_Prep:
{
PHB : PHK : PLB
LDA SprSubtype, X : STA SprAction,X
LDA SprSubtype, X : STA.w SprAction,X
PLB
RTL

View File

@@ -16,10 +16,10 @@ pullpc
RanchGirl_Message:
{
LDA $7EF34C : CMP.b #$01 : BCS .has_ocarina
%ShowUnconditionalMessage($017D)
LDA #$01 : STA SprMiscD, X
RTL
.has_ocarina
%ShowUnconditionalMessage($017D)
LDA #$01 : STA.w SprMiscD, X
RTL
.has_ocarina
%ShowUnconditionalMessage($010E)
RTL
}
@@ -68,27 +68,27 @@ pushpc
org $01AFECF
ChickenLady:
{
#_1AFECF: JSR .main
#_1AFECF: JSR .main
#_1AFED2: RTL
#_1AFED2: RTL
.main
#_1AFED3: LDA.b #$01
#_1AFED5: STA.w $0DE0,X
#_1AFED3: LDA.b #$01
#_1AFED5: STA.w $0DE0,X
#_1AFED8: JSL SpriteDraw_RaceGameLady
#_1AFEDC: JSR Sprite_CheckIfActive_Bank1A
#_1AFED8: JSL SpriteDraw_RaceGameLady
#_1AFEDC: JSR Sprite_CheckIfActive_Bank1A
#_1AFEDF: LDA.w $0DF0,X
#_1AFEE2: CMP.b #$01
#_1AFEE4: BNE .no_message
#_1AFEDF: LDA.w $0DF0,X
#_1AFEE2: CMP.b #$01
#_1AFEE4: BNE .no_message
JSL RanchGirl_Message
JSL RanchGirl_Message
.no_message
JSL RanchGirl_TeachSong
JSL RanchGirl_TeachSong
.return
#_1AFEFF: RTS
#_1AFEFF: RTS
}
warnpc $01AFEFF

View File

@@ -32,27 +32,27 @@
Sprite_IceBlock_Long:
{
PHB : PHK : PLB
PHB : PHK : PLB
LDA.w $0DE0, X : BEQ .not_being_pushed
STZ.w $0DE0, X
STZ.b $5E : STZ.b $48
LDA.w SprMiscC, X : BEQ .not_being_pushed
STZ.w SprMiscC, X
STZ.b $5E : STZ.b $48
.not_being_pushed
LDA.w $0DF0, X : BEQ .retain_momentum
LDA.b #$01 : STA.w $0DE0, X
LDA #$84 : STA $48
LDA.b #$04 : STA.b $5E
LDA.w $0DF0, X : BEQ .retain_momentum
LDA.b #$01 : STA.w SprMiscC, X
LDA.b #$84 : STA $48
LDA.b #$04 : STA.b $5E
.retain_momentum
JSR Sprite_IceBlock_Draw ; Call the draw code
JSL Sprite_CheckActive ; Check if game is not paused
BCC .SpriteIsNotActive ; Skip Main code is sprite is innactive
JSR Sprite_IceBlock_Draw ; Call the draw code
JSL Sprite_CheckActive ; Check if game is not paused
BCC .SpriteIsNotActive ; Skip Main code is sprite is innactive
JSR Sprite_IceBlock_Main ; Call the main sprite code
JSR Sprite_IceBlock_Main ; Call the main sprite code
.SpriteIsNotActive
PLB ; Get back the databank we stored previously
RTL ; Go back to original code
PLB ; Get back the databank we stored previously
RTL ; Go back to original code
}
Sprite_IceBlock_Prep:
@@ -60,10 +60,10 @@ Sprite_IceBlock_Prep:
PHB : PHK : PLB
; Cache Sprite position
LDA SprX, X : STA SprMiscD, X
LDA SprY, X : STA SprMiscE, X
LDA SprXH, X : STA SprMiscF, X
LDA SprYH, X : STA SprMiscG, X
LDA SprX, X : STA.w SprMiscD, X
LDA SprY, X : STA.w SprMiscE, X
LDA SprXH, X : STA.w SprMiscF, X
LDA SprYH, X : STA.w SprMiscG, X
STZ.w $0CAA, X
@@ -71,7 +71,6 @@ Sprite_IceBlock_Prep:
RTL
}
StatueDirection:
db $04, $06, $00, $02
@@ -85,8 +84,6 @@ db -16, 16 ; bleeds into next
.y
db 0, 0, -16, 16
Sprite_IceBlock_Main:
{
LDA.w SprAction, X
@@ -98,54 +95,53 @@ Sprite_IceBlock_Main:
; 0x00
MovementHandler:
{
%PlayAnimation(0, 0, 1)
%PlayAnimation(0, 0, 1)
JSR Statue_BlockSprites
JSR Statue_BlockSprites
JSL Sprite_CheckDamageFromPlayerLong
BCC .no_damage
LDA SprMiscD, X : STA SprX, X
LDA SprMiscE, X : STA SprY, X
LDA SprMiscF, X : STA SprXH, X
LDA SprMiscG, X : STA SprYH, X
STZ.w SprXSpeed, X : STZ.w SprYSpeed, X
JSL Sprite_CheckDamageFromPlayerLong
BCC .no_damage
LDA SprMiscD, X : STA.w SprX, X
LDA SprMiscE, X : STA.w SprY, X
LDA SprMiscF, X : STA.w SprXH, X
LDA SprMiscG, X : STA.w SprYH, X
STZ.w SprXSpeed, X : STZ.w SprYSpeed, X
.no_damage
; JSR IceBlock_CheckForGround
STZ.w $0642
JSR Sprite_IceBlock_CheckForSwitch : BCC .no_switch
STZ.w SprXSpeed, X : STZ.w SprYSpeed, X
LDA.b #$01 : STA.w $0642
; JSR IceBlock_CheckForGround
STZ.w $0642
JSR Sprite_IceBlock_CheckForSwitch : BCC .no_switch
STZ.w SprXSpeed, X : STZ.w SprYSpeed, X
LDA.b #$01 : STA.w $0642
.no_switch
JSL Sprite_Move ; Sprite MoveXY
JSL Sprite_Get_16_bit_Coords ; Get 16bit coords
JSL Sprite_CheckTileCollision ; Check Tile collision
JSL Sprite_CheckDamageToPlayerSameLayer
BCC NotInContact
JSR ApplyPush
; Set timer
LDA.b #$07 : STA.w $0DF0, X
JSL Sprite_Move ; Sprite MoveXY
JSL Sprite_Get_16_bit_Coords ; Get 16bit coords
JSL Sprite_CheckTileCollision ; Check Tile collision
JSL Sprite_CheckDamageToPlayerSameLayer
BCC NotInContact
JSR ApplyPush
; Set timer
LDA.b #$07 : STA.w $0DF0, X
JSL $079291 ; Sprite_RepelDash_long
JSL $079291 ; Sprite_RepelDash_long
LDA.w $0E00,X : BNE Statue_CancelHookshot
; JSL Sprite_DirectionToFacePlayer
; LDA.w StatueSpeed_x,Y
; STA.w $0D50,X
; LDA.w StatueSpeed_y,Y
; STA.w $0D40,X
; JSR Statue_HandleGrab
LDA SprX, X : AND #$F0 : STA SprX, X
LDA SprY, X : AND #$F0 : STA SprY, X
RTS
LDA.w $0E00,X : BNE Statue_CancelHookshot
; JSL Sprite_DirectionToFacePlayer
; LDA.w StatueSpeed_x,Y
; STA.w SprXSpeed,X
; LDA.w StatueSpeed_y,Y
; STA.w SprYSpeed,X
; JSR Statue_HandleGrab
LDA SprX, X : AND #$F0 : STA.w SprX, X
LDA SprY, X : AND #$F0 : STA.w SprY, X
RTS
.not_in_contact
%GotoAction(1)
%GotoAction(1)
.dont_move
RTS
RTS
}
Statue_CancelHookshot:
@@ -164,12 +160,12 @@ Sprite_IceBlock_Main:
.delay_timer
REP #$20
LDA.w $0FD8
LDA.w SprCachedX
SEC : SBC.b $22
CLC : ADC.w #$0010
CMP.w #$0023 : BCS .reset_contact
LDA.w $0FDA
LDA.w SprCachedY
SEC : SBC.b $20
CLC : ADC.w #$000C
CMP.w #$0024 : BCS .reset_contact
@@ -181,7 +177,7 @@ Sprite_IceBlock_Main:
; CMP.w StatueDirection,Y : BNE .reset_contact
; LDA.w $0372 : BNE .reset_contact
; LDA.b #$01 : STA.w $02FA
; LDA.b #$01 : STA.w $0D90,X
; LDA.b #$01 : STA.w SprFrame,X
; LDA.w $0376 : AND.b #$02 : BEQ .exit
; LDA.b $F0 : AND.w StatuePressMask,Y : BEQ .exit
@@ -190,17 +186,17 @@ Sprite_IceBlock_Main:
; TYA : EOR.b #$01 : TAY
; LDA.w StatueSpeed_x,Y : STA.w $0D50,X
; LDA.w StatueSpeed_x,Y : STA.w SprXSpeed,X
; LDA.w StatueSpeed_y,Y : STA.w $0D40,X
; LDA.w StatueSpeed_y,Y : STA.w SprYSpeed,X
; JMP.w Statue_HandleGrab
.reset_contact
SEP #$30
LDA.w $0D90,X : BEQ .exit
STZ.w $0D90,X
LDA.w SprFrame,X : BEQ .exit
STZ.w SprFrame,X
STZ.b $5E
STZ.w $0376
@@ -222,20 +218,20 @@ Sprite_IceBlock_Main:
CMP.b #$08 : BEQ .push_up
.push_right
LDA #16 : STA.w $0D50,X
LDA #00 : STA.w $0D40,X
LDA #16 : STA.w SprXSpeed,X
LDA #00 : STA.w SprYSpeed,X
JMP .push_done
.push_left
LDA #-16 : STA.w $0D50,X
LDA #00 : STA.w $0D40,X
LDA #-16 : STA.w SprXSpeed,X
LDA #00 : STA.w SprYSpeed,X
JMP .push_done
.push_down
LDA #00 : STA.w $0D50,X
LDA #16 : STA.w $0D40,X
LDA #00 : STA.w SprXSpeed,X
LDA #16 : STA.w SprYSpeed,X
JMP .push_done
.push_up
LDA #00 : STA.w $0D50,X
LDA #-16 : STA.w $0D40,X
LDA #00 : STA.w SprXSpeed,X
LDA #-16 : STA.w SprYSpeed,X
.push_done
@@ -247,10 +243,10 @@ Sprite_IceBlock_Main:
; Currently unused as it doesnt play well with the hitbox choices
IceBlock_CheckForGround:
{
LDA.w $0D00,X : CLC : ADC.b #$08 : STA.b $00
LDA.w $0D20,X : ADC.b #$00 : STA.b $01
LDA.w $0D10,X : STA.b $02
LDA.w $0D30,X : ADC.b #$00 : STA.b $03
LDA.w SprY,X : CLC : ADC.b #$08 : STA.b $00
LDA.w SprYH,X : ADC.b #$00 : STA.b $01
LDA.w SprX,X : STA.b $02
LDA.w SprXH,X : ADC.b #$00 : STA.b $03
LDA.w $0F20,X
PHY
JSL $06E87B ; GetTileType_long
@@ -261,43 +257,43 @@ IceBlock_CheckForGround:
SEC
RTS
.stop
STZ.w $0D50,X
STZ.w $0D40,X
STZ.w SprXSpeed,X
STZ.w SprYSpeed,X
CLC
RTS
}
Sprite_IceBlock_CheckForSwitch:
{
LDY.b #$03
LDY.b #$03
.next_tile
LDA.w $0D00,X : CLC : ADC.w .offset_y,Y : STA.b $00
LDA.w $0D20,X : ADC.b #$00 : STA.b $01
LDA.w $0D10,X : CLC : ADC.w .offset_x,Y : STA.b $02
LDA.w $0D30,X : ADC.b #$00 : STA.b $03
LDA.w $0F20,X
LDA.w SprY,X : CLC : ADC.w .offset_y,Y : STA.b $00
LDA.w SprYH,X : ADC.b #$00 : STA.b $01
LDA.w SprX,X : CLC : ADC.w .offset_x,Y : STA.b $02
LDA.w SprXH,X : ADC.b #$00 : STA.b $03
LDA.w $0F20,X
PHY
JSL $06E87B ; GetTileType_long
PLY
PHY
JSL $06E87B ; GetTileType_long
PLY
LDA.w $0FA5
CMP.w .tile_id+0 : BEQ .switch_tile
CMP.w .tile_id+1 : BEQ .switch_tile
CMP.w .tile_id+2 : BEQ .switch_tile
CMP.w .tile_id+3 : BNE .fail
LDA.w $0FA5
CMP.w .tile_id+0 : BEQ .switch_tile
CMP.w .tile_id+1 : BEQ .switch_tile
CMP.w .tile_id+2 : BEQ .switch_tile
CMP.w .tile_id+3 : BNE .fail
.switch_tile
DEY
BPL .next_tile
DEY
BPL .next_tile
SEC
RTS
SEC
RTS
.fail
CLC
RTS
CLC
RTS
.offset_x
db 3, 12, 3, 12
@@ -331,21 +327,21 @@ Statue_BlockSprites:
CMP.b #$09
BCC .skip
LDA.w $0D10,Y
LDA.w SprX,Y
STA.b $04
LDA.w $0D30,Y
LDA.w SprXH,Y
STA.b $05
LDA.w $0D00,Y
LDA.w SprY,Y
STA.b $06
LDA.w $0D20,Y
LDA.w SprYH,Y
STA.b $07
REP #$20
LDA.w $0FD8
LDA.w SprCachedX
SEC
SBC.b $04
CLC
@@ -354,7 +350,7 @@ Statue_BlockSprites:
CMP.w #$0018
BCS .skip
LDA.w $0FDA
LDA.w SprCachedY
SEC
SBC.b $06
CLC
@@ -396,7 +392,7 @@ Sprite_IceBlock_Draw:
JSL Sprite_PrepOamCoord
JSL Sprite_OAM_AllocateDeferToPlayer
LDA $0DC0, X : CLC : ADC $0D90, X : TAY;Animation Frame
LDA $0DC0, X : CLC : ADC SprFrame, X : TAY;Animation Frame
LDA .start_index, Y : STA $06

View File

@@ -100,13 +100,13 @@ Sprite_Minecart_Prep:
; If the subtype is > 4, then it's an active cart
LDA.w SprSubtype, X : CMP.b #$04 : BCC .continue
LDA.w SprSubtype, X : SEC : SBC.b #$04 : STA.w SprSubtype, X
LDA.b #$01 : STA SprMiscF, X ; Set the auto-move flag
LDA.b #$01 : STA.w SprMiscF, X ; Set the auto-move flag
.continue
LDA #$00 : STA $0CAA, X ; Sprite persist in dungeon
LDA #$04 : STA $0E40, X ; Nbr Oam Entries
LDA #$40 : STA $0E60, x ; Impervious props
LDA #$E0 : STA $0F60, X ; Persist
LDA #$00 : STA SprBump, X ; No bump damage
LDA #$00 : STA.w SprBump, X ; No bump damage
LDA #$00 : STA $0B6B, X ; Set interactive hitbox?
STZ.w !MinecartDirection
@@ -187,31 +187,31 @@ HandleToss:
CMP.b #$04 : BEQ .toss_east
CMP.b #$06 : BEQ .toss_west
.toss_north
LDA.b #-!DoubleSpeed : STA SprYSpeed, X
LDA #$00 : STA SprSubtype, X : STA !SpriteDirection, X
LDA.b #-!DoubleSpeed : STA.w SprYSpeed, X
LDA #$00 : STA.w SprSubtype, X : STA !SpriteDirection, X
%GotoAction(1) ; Minecart_WaitVert
JMP .continue
.toss_south
LDA.b #!DoubleSpeed : STA SprYSpeed, X
LDA #$02 : STA SprSubtype, X
LDA.b #!DoubleSpeed : STA.w SprYSpeed, X
LDA #$02 : STA.w SprSubtype, X
LDA #$01 : STA !SpriteDirection, X
%GotoAction(1) ; Minecart_WaitVert
JMP .continue
.toss_east
LDA.b #-!DoubleSpeed : STA SprXSpeed, X
LDA #$01 : STA SprSubtype, X
LDA.b #-!DoubleSpeed : STA.w SprXSpeed, X
LDA #$01 : STA.w SprSubtype, X
LDA #$03 : STA !SpriteDirection, X
%GotoAction(0) ; Minecart_WaitHoriz
JMP .continue
.toss_west
LDA.b #!DoubleSpeed : STA SprXSpeed, X
LDA #$03 : STA SprSubtype, X
LDA.b #!DoubleSpeed : STA.w SprXSpeed, X
LDA #$03 : STA.w SprSubtype, X
LDA #$02 : STA !SpriteDirection, X
%GotoAction(0) ; Minecart_WaitHoriz
.continue
LDA #$01 : STA SprMiscG, X
LDA #$12 : STA SprTimerC, X
STA SprYRound, X : STA SprXRound, X
LDA #$01 : STA.w SprMiscG, X
LDA #$12 : STA.w SprTimerC, X
STA.w SprYRound, X : STA.w SprXRound, X
RTS
}
@@ -236,8 +236,8 @@ HandleTossedCart:
.low_enough
LDA.w SprTimerC, X : BNE .not_tossed
LDA SprX, X : AND.b #$F8 : STA SprX, X
LDA SprY, X : AND.b #$F8 : STA SprY, X
LDA SprX, X : AND.b #$F8 : STA.w SprX, X
LDA SprY, X : AND.b #$F8 : STA.w SprY, X
STZ.w SprMiscG, X
STZ.w SprYSpeed, X
STZ.w SprXSpeed, X
@@ -339,10 +339,10 @@ Sprite_Minecart_Main:
%InitMovement()
LDA $36 : BNE .fast_speed
LDA.b #-!MinecartSpeed : STA SprYSpeed, X
LDA.b #-!MinecartSpeed : STA.w SprYSpeed, X
JMP .continue
.fast_speed
LDA.b #-!DoubleSpeed : STA SprYSpeed, X
LDA.b #-!DoubleSpeed : STA.w SprYSpeed, X
.continue
JSL Sprite_MoveVert
@@ -389,10 +389,10 @@ Sprite_Minecart_Main:
%InitMovement()
LDA $36 : BNE .fast_speed
LDA.b #!MinecartSpeed : STA SprYSpeed, X
LDA.b #!MinecartSpeed : STA.w SprYSpeed, X
JMP .continue
.fast_speed
LDA.b #!DoubleSpeed : STA SprYSpeed, X
LDA.b #!DoubleSpeed : STA.w SprYSpeed, X
.continue
JSL Sprite_MoveVert
@@ -439,7 +439,7 @@ Sprite_Minecart_Main:
%StopCart()
LDA SprTimerD, X : BNE .not_ready
LDA #$40 : STA SprTimerA, X
LDA #$40 : STA.w SprTimerA, X
LDA.w !SpriteDirection, X : CMP.b #$00 : BEQ .vert
CMP.b #$02 : BEQ .vert
JMP .horiz
@@ -478,7 +478,7 @@ HandleTileDirections:
CMP.b #$02 : BNE .not_out_of_bounds
; If the tile is out of bounds, release the cart
LDA #$40 : STA SprTimerD, X
LDA #$40 : STA.w SprTimerD, X
%GotoAction(6) ; Minecart_Release
RTS
@@ -492,13 +492,13 @@ HandleTileDirections:
.stop_north
; Set the new direction to north and flip the cart's orientation
LDA.b #South : STA SprSubtype, X : STA.w !MinecartDirection
LDA.b #South : STA.w SprSubtype, X : STA.w !MinecartDirection
LDA #$01 : STA !SpriteDirection, X
JMP .go_vert
.stop_south
; Set the new direction to south and flip the cart's orientation
LDA.b #North : STA SprSubtype, X : STZ.w !MinecartDirection
LDA.b #North : STA.w SprSubtype, X : STZ.w !MinecartDirection
LDA #$00 : STA !SpriteDirection, X
; -----------------------------------------------
@@ -511,13 +511,13 @@ HandleTileDirections:
.stop_east
; Set the new direction to east and flip the cart's orientation
LDA.b #West : STA SprSubtype, X : STA.w !MinecartDirection
LDA.b #West : STA.w SprSubtype, X : STA.w !MinecartDirection
LDA #$02 : STA !SpriteDirection, X
JMP .go_horiz
.stop_west
; Set the new direction to west and flip the cart's orientation
LDA.b #East : STA SprSubtype, X : STA.w !MinecartDirection
LDA.b #East : STA.w SprSubtype, X : STA.w !MinecartDirection
LDA #$03 : STA !SpriteDirection, X
; -----------------------------------------------
@@ -541,20 +541,20 @@ HandleTileDirections:
.horiz
; Are we moving left or right?
LDA SprSubtype, X : CMP.b #$03 : BEQ .inverse_horiz_velocity
LDA.b #!MinecartSpeed : STA SprXSpeed, X
LDA.b #!MinecartSpeed : STA.w SprXSpeed, X
LDA.b #East : STA !MinecartDirection
JMP .done
.inverse_horiz_velocity
LDA.b #-!MinecartSpeed : STA SprXSpeed, X
LDA.b #-!MinecartSpeed : STA.w SprXSpeed, X
LDA.b #West : STA !MinecartDirection
JMP .done
.vert
; Are we moving up or down?
LDA SprSubtype, X : CMP.b #$00 : BEQ .inverse_vert_velocity
LDA.b #!MinecartSpeed : STA SprYSpeed, X
LDA.b #!MinecartSpeed : STA.w SprYSpeed, X
JMP .done
.inverse_vert_velocity
LDA.b #-!MinecartSpeed : STA SprYSpeed, X
LDA.b #-!MinecartSpeed : STA.w SprYSpeed, X
JMP .done
.check_direction
@@ -575,31 +575,31 @@ HandleTileDirections:
JMP .done
.move_north
LDA #$00 : STA SprSubtype, X : STA !MinecartDirection
LDA #$00 : STA.w SprSubtype, X : STA !MinecartDirection
STA !SpriteDirection, X
%GotoAction(2) ; Minecart_MoveNorth
LDA SprX, X : AND #$F8 : STA SprX, X
LDA SprX, X : AND #$F8 : STA.w SprX, X
RTS
.move_east
LDA #$01 : STA SprSubtype, X : STA !MinecartDirection
LDA #$01 : STA.w SprSubtype, X : STA !MinecartDirection
STA !MinecartDirection
LDA #$03 : STA !SpriteDirection, X
LDA SprY, X : AND #$F8 : STA SprY, X
LDA SprY, X : AND #$F8 : STA.w SprY, X
%GotoAction(3) ; Minecart_MoveEast
RTS
.move_south
LDA #$02 : STA SprSubtype, X : STA !MinecartDirection
LDA #$02 : STA.w SprSubtype, X : STA !MinecartDirection
LDA #$01 : STA !SpriteDirection, X
%GotoAction(4) ; Minecart_MoveSouth
LDA SprX, X : AND #$F8 : STA SprX, X
LDA SprX, X : AND #$F8 : STA.w SprX, X
RTS
.move_west
LDA #$03 : STA SprSubtype, X : STA !MinecartDirection
LDA #$03 : STA.w SprSubtype, X : STA !MinecartDirection
LDA #$02 : STA !SpriteDirection, X
LDA SprY, X : AND #$F8 : STA SprY, X
LDA SprY, X : AND #$F8 : STA.w SprY, X
%GotoAction(5) ; Minecart_MoveWest
.done
LDA #$04 : STA SprTimerA, X
LDA #$04 : STA.w SprTimerA, X
RTS
; Direction to move on tile collision
@@ -658,36 +658,36 @@ HandleDynamicSwitchTileDirections:
.east_or_west
LDA SwitchRam : BNE .go_west
LDA #$01 : STA SprSubtype, X
LDA #$01 : STA.w SprSubtype, X
STA.w !MinecartDirection
LDA #$03 : STA !SpriteDirection, X
%GotoAction(3) ; Minecart_MoveEast
; LDA SprY, X : AND #$F8 : STA SprY, X
; LDA SprY, X : AND #$F8 : STA.w SprY, X
RTS
.go_west
LDA #$03 : STA SprSubtype, X
LDA #$03 : STA.w SprSubtype, X
STA.w !MinecartDirection
LDA #$02 : STA !SpriteDirection, X
%GotoAction(5) ; Minecart_MoveWest
; LDA SprY, X : AND #$F8 : STA SprY, X
; LDA SprY, X : AND #$F8 : STA.w SprY, X
RTS
.north_or_south
LDA SwitchRam : BNE .go_south
LDA #$00 : STA SprSubtype, X
LDA #$00 : STA.w SprSubtype, X
STA.w !MinecartDirection
STA !SpriteDirection, X
%GotoAction(2) ; Minecart_MoveNorth
; LDA SprX, X : AND #$F8 : STA SprX, X
; LDA SprX, X : AND #$F8 : STA.w SprX, X
RTS
.go_south
LDA #$02 : STA SprSubtype, X
LDA #$02 : STA.w SprSubtype, X
STA.w !MinecartDirection
LDA #$01 : STA !SpriteDirection, X
%GotoAction(4) ; Minecart_MoveSouth
; LDA SprX, X : AND #$F8 : STA SprX, X
; LDA SprX, X : AND #$F8 : STA.w SprX, X
RTS
@@ -753,7 +753,7 @@ CheckForPlayerInput:
LDA.b #$01 : STA !SpriteDirection, X
LDA.b #South : STA !MinecartDirection
STA SprSubtype, X
STA.w SprSubtype, X
%GotoAction(4) ; Minecart_MoveSouth
BRA .return
@@ -762,7 +762,7 @@ CheckForPlayerInput:
LDA.b #$02 : STA !SpriteDirection, X
LDA.b #West : STA !MinecartDirection
STA SprSubtype, X
STA.w SprSubtype, X
%GotoAction(5) ; Minecart_MoveWest
BRA .return
@@ -1070,15 +1070,15 @@ DrawMinecartFollower:
JSL Sprite_SetSpawnedCoords
LDA.w !MinecartDirection : CMP.b #$00 : BEQ .vert_adjust
CMP.b #$02 : BEQ .vert_adjust
LDA POSY : CLC : ADC #$08 : STA SprY, X
LDA POSX : STA SprX, X
LDA POSY : CLC : ADC #$08 : STA.w SprY, X
LDA POSX : STA.w SprX, X
JMP .finish_prep
.vert_adjust
LDA POSY : STA SprY, X
LDA POSX : CLC : ADC #$02 : STA SprX, X
LDA POSY : STA.w SprY, X
LDA POSX : CLC : ADC #$02 : STA.w SprX, X
.finish_prep
LDA POSYH : STA SprYH, X
LDA POSXH : STA SprXH, X
LDA POSYH : STA.w SprYH, X
LDA POSXH : STA.w SprXH, X
LDA.w !MinecartDirection : CLC : ADC.b #$04 : STA.w SprSubtype, X
LDA .direction_to_anim, X : STA $0D90, X
JSL Sprite_Minecart_Prep

View File

@@ -56,7 +56,7 @@ Sprite_LeverSwitch_Prep:
PHB : PHK : PLB
LDA.b #$00 : STA.w SprDefl, X
LDA SprSubtype, X : STA SprAction, X
LDA SprSubtype, X : STA.w SprAction, X
LDA.b #$00 : STA.w SprTileDie, X
STZ.w SprBulletproof, X
@@ -88,7 +88,7 @@ Sprite_LeverSwitch_Main:
LDA #$25 : STA $012F
STZ.w $37
LDA #$10 : STA SprTimerA, X
LDA #$10 : STA.w SprTimerA, X
%GotoAction(1)
.NoDamage
@@ -106,7 +106,7 @@ Sprite_LeverSwitch_Main:
LDA #$25 : STA $012F
LDA #$01 : STA $37
LDA #$10 : STA SprTimerA, X
LDA #$10 : STA.w SprTimerA, X
%GotoAction(0)
.NoDamage

View File

@@ -61,7 +61,7 @@ Sprite_Portal_Prep:
; Persist outside of camera
LDA #$00 : STA $0CAA, X
LDA SprHitbox, X : AND.b #$C0 : STA SprHitbox, X
LDA SprHitbox, X : AND.b #$C0 : STA.w SprHitbox, X
STZ.w $0B6B, X
LDA.b #$FF : STA.w $0BA0, X
@@ -114,8 +114,8 @@ Sprite_Portal_Main:
LDA $7E0FA6 : BNE .BluePortal
LDA #$01 : STA $0307
TXA : STA.w OrangeSpriteIndex
LDA $0D00, X : STA OrangePortal_X
LDA $0D10, X : STA OrangePortal_Y
LDA SprY, X : STA OrangePortal_X
LDA SprX, X : STA OrangePortal_Y
LDA.b #$01 : STA.w SprSubtype, X
%GotoAction(2)
@@ -123,8 +123,8 @@ Sprite_Portal_Main:
.BluePortal
LDA #$02 : STA $0307
TXA : STA.w BlueSpriteIndex
LDA $0D00, X : STA BluePortal_X
LDA $0D10, X : STA BluePortal_Y
LDA SprY, X : STA BluePortal_X
LDA SprX, X : STA BluePortal_Y
LDA.b #$02 : STA.w SprSubtype, X
%GotoAction(1)
@@ -211,10 +211,10 @@ Sprite_Portal_Main:
PHX
LDA OrangeSpriteIndex : TAX
LDA #$40 : STA SprTimerD, X
LDA $0D00, X : STA $7EC184
LDA #$40 : STA.w SprTimerD, X
LDA SprY, X : STA $7EC184
STA BluePortal_Y
LDA $0D10, X : STA $7EC186
LDA SprX, X : STA $7EC186
STA BluePortal_X
PLX
@@ -240,10 +240,10 @@ Sprite_Portal_Main:
PHX
LDA BlueSpriteIndex : TAX
LDA #$40 : STA SprTimerD, X
LDA $0D00, X : STA $7EC184
LDA #$40 : STA.w SprTimerD, X
LDA SprY, X : STA $7EC184
STA OrangePortal_Y
LDA $0D10, X : STA $7EC186
LDA SprX, X : STA $7EC186
STA OrangePortal_X
PLX
@@ -266,7 +266,7 @@ Sprite_Portal_Main:
PHX ; Infinite loop prevention protocol
LDA OrangeSpriteIndex : TAX
LDA #$40 : STA SprTimerD, X
LDA #$40 : STA.w SprTimerD, X
PLX
@@ -290,7 +290,7 @@ Sprite_Portal_Main:
PHX
LDA BlueSpriteIndex : TAX
LDA #$40 : STA SprTimerD, X
LDA #$40 : STA.w SprTimerD, X
PLX
LDA #$01 : STA $5D

View File

@@ -56,7 +56,7 @@ Sprite_RotatingTrack_Prep:
PHB : PHK : PLB
LDA.b #$80 : STA $0CAA, X
LDA SprSubtype, X : STA SprAction,X
LDA SprSubtype, X : STA.w SprAction,X
PLB
RTL

View File

@@ -137,8 +137,8 @@ Sprite_FloatTowardPlayer:
Sprite_FloatAwayFromPlayer:
{
LDA SprXSpeed, X : EOR.b #$FF : INC : STA SprXSpeed, X
LDA SprYSpeed, X : EOR.b #$FF : INC : STA SprYSpeed, X
LDA SprXSpeed, X : EOR.b #$FF : INC : STA.w SprXSpeed, X
LDA SprYSpeed, X : EOR.b #$FF : INC : STA.w SprYSpeed, X
JSL Sprite_MoveAltitude
@@ -159,20 +159,12 @@ Sprite_BounceFromTileCollision:
; =========================================================
Sprite_BounceOffWall:
LDA.w SprCollision, X
AND.b #$03
BEQ .no_horizontal_collision
JSL Sprite_InvertSpeed_X
.no_horizontal_collision
LDA.w SprCollision, X
AND.b #$0C
BEQ .no_vertical_collision
JSL Sprite_InvertSpeed_Y
.no_vertical_collision
LDA.w SprCollision, X : AND.b #$03 : BEQ .no_horizontal_collision
JSL Sprite_InvertSpeed_X
.no_horizontal_collision
LDA.w SprCollision, X : AND.b #$0C : BEQ .no_vertical_collision
JSL Sprite_InvertSpeed_Y
.no_vertical_collision
RTL
; =========================================================