more DarkLink formatting

This commit is contained in:
scawful
2024-06-06 21:22:30 -04:00
parent 38bb68ee72
commit 34d5b704ce

View File

@@ -38,47 +38,44 @@ Sprite_DarkLink_Long:
; ADD GANON CODE if subtype == 05 ; ADD GANON CODE if subtype == 05
LDA.w SprSubtype, X : CMP #$05 : BNE .NotGanon LDA.w SprSubtype, X : CMP #$05 : BNE .NotGanon
JSR Sprite_Ganon_Draw JSR Sprite_Ganon_Draw
JSL Sprite_CheckActive ; Check if game is not paused (Prevent timers from running if game is paused) JSL Sprite_CheckActive ; Check if game is not paused (Prevent timers from running if game is paused)
BCC .SpriteIsNotActive2 ; Skip Main code is sprite is innactive BCC .SpriteIsNotActive2 ; Skip Main code is sprite is innactive
JSR Sprite_Ganon_Main ; do ganon instead JSR Sprite_Ganon_Main ; do ganon instead
.SpriteIsNotActive2 .SpriteIsNotActive2
PLB ; Get back the databank we stored previously PLB ; Get back the databank we stored previously
RTL ; Go back to original code RTL ; Go back to original code
.NotGanon .NotGanon
LDA.w SprAction, X : CMP.b #$01 : BNE .normaldraw LDA.w SprAction, X : CMP.b #$01 : BNE .normal_draw
;JSR Sprite_DarkLink_Draw ; Call the draw code ; JSR Sprite_DarkLink_Draw ; Call the draw code
.sworddraw .sword_draw
JSR Sprite_DarkLink_Draw_Sprite_SwordAttack_Draw JSR Sprite_DarkLink_Draw_Sprite_SwordAttack_Draw
BRA .skipnormaldraw BRA .skipnormal_draw
.normaldraw .normal_draw
CMP.b #$09 : BEQ .sworddraw CMP.b #$09 : BEQ .sword_draw
LDA.w SprSubtype, X : BNE .skipnormaldraw LDA.w SprSubtype, X : BNE .skipnormal_draw
JSR Sprite_DarkLink_Draw JSR Sprite_DarkLink_Draw
.skipnormaldraw .skipnormal_draw
LDA.w SprAction, X : CMP.b #11 : BCS .notdying LDA.w SprAction, X : CMP.b #11 : BCS .notdying
LDA.w SprHealth, X : CMP.b #$10 : BCS .notdying LDA.w SprHealth, X : CMP.b #$10 : BCS .notdying
LDA.w SprMiscC, X : BNE +
; check if action is 00 otherwise wait
LDA.w SprAction, X : BNE .notdying
%GotoAction(15) ; enraging instead
BRA .SpriteIsNotActive
+
LDA.w SprMiscC, X : BNE + LDA #$30 : STA.w SprTimerA, X
; check if action is 00 otherwise wait LDA #$08 : STA.w SprTimerB, X
LDA.w SprAction, X : BNE .notdying STZ.w SprFrame, X
; enraging instead STZ.w SprMiscF, X
%GotoAction(15) STZ.w SprMiscD, X
BRA .SpriteIsNotActive %GotoAction(11)
+ BRA .SpriteIsNotActive
LDA #$30 : STA.w SprTimerA, X
LDA #$08 : STA.w SprTimerB, X
STZ.w SprFrame, X
STZ.w SprMiscF, X
STZ.w SprMiscD, X
%GotoAction(11)
BRA .SpriteIsNotActive
.notdying .notdying
JSL Sprite_CheckActive ; Check if game is not paused JSL Sprite_CheckActive ; Check if game is not paused
BCC .SpriteIsNotActive ; Skip Main code is sprite is innactive BCC .SpriteIsNotActive ; Skip Main code is sprite is innactive
@@ -96,12 +93,11 @@ Sprite_DarkLink_Prep:
PHB : PHK : PLB PHB : PHK : PLB
REP #$20 ; P is still on stack, so we don't even need to fix this REP #$20 ; P is still on stack, so we don't even need to fix this
LDX #$20 LDX #$20
-- --
LDA dlinkPal, X : STA $7EC600, X LDA DarkLink_Palette, X : STA $7EC600, X
DEX : DEX : BNE -- DEX : DEX : BNE --
INC $15 ;Refresh Palettes INC $15 ; Refresh Palettes
SEP #$20 SEP #$20
PLB PLB
@@ -111,27 +107,26 @@ Sprite_DarkLink_Prep:
LDA #$CF : STA.w SprTimerA, X ; wait timer before falling LDA #$CF : STA.w SprTimerA, X ; wait timer before falling
LDA #$7F : STA.w SprHeight, X LDA #$7F : STA.w SprHeight, X
%GotoAction(4)
LDA #$78 : STA.w SprX, X LDA #$78 : STA.w SprX, X
LDA #$58 : STA.w SprY, X LDA #$58 : STA.w SprY, X
LDA #$00 : STA.w SprMiscE, X LDA #$00 : STA.w SprMiscE, X
LDA #$00 : STA.w SprMiscC, X ; Enraging LDA #$00 : STA.w SprMiscC, X ; Enraging
LDA #$50 : STA.w SprHealth, X LDA #$50 : STA.w SprHealth, X
%GotoAction(4)
RTL RTL
} }
dlinkPal: DarkLink_Palette:
dw #$7FFF, #$14A5, #$2108, #$294A, #$1CF5, #$7E4E, #$3DEF, #$6FF4 dw #$7FFF, #$14A5, #$2108, #$294A, #$1CF5, #$7E4E, #$3DEF, #$6FF4
; ========================================================= ; =========================================================
Sprite_DarkLink_Main: Sprite_DarkLink_Main:
{ {
LDA.w SprAction, X; Load the SprAction LDA.w SprAction, X : JSL UseImplicitRegIndexedLocalJumpTable
JSL UseImplicitRegIndexedLocalJumpTable; Goto the SprAction we are currently in
dw Handler dw Handler
dw SwordSlash dw SwordSlash
dw JumpBack dw JumpBack
@@ -152,30 +147,29 @@ Sprite_DarkLink_Main:
Handler: Handler:
{ {
LDA.w SprSubtype, X : CMP #$01 : BNE + LDA.w SprSubtype, X : CMP #$01 : BNE +
%SetTimerA(16) %SetTimerA(16)
%GotoAction(10) %GotoAction(10)
RTS RTS
+ +
LDA.w SprMiscF, X : BNE .nodamage LDA.w SprMiscF, X : BNE .no_damage
JSL Sprite_CheckDamageFromPlayer : BCC .nodamage JSL Sprite_CheckDamageFromPlayer : BCC .no_damage
LDA.w SprTimerA, X : BNE .alreadytakingdamage LDA.w SprTimerA, X : BNE .already_taking_damage
LDA.w $02B2 : CMP #$03 : BNE .notmoredamage LDA.w $02B2 : CMP #$03 : BNE .not_more_damage
LDA.w SprHealth, X : SEC : SBC #$04 : STA.w SprHealth, X LDA.w SprHealth, X : SEC : SBC #$04 : STA.w SprHealth, X
.notmoredamage .not_more_damage
.alreadytakingdamage .already_taking_damage
LDA #$20
LDA #$20 JSL Sprite_ApplySpeedTowardsPlayer
JSL Sprite_ApplySpeedTowardsPlayer LDA.w SprXSpeed, X : EOR #$FF : STA.w SprXSpeed, X
LDA.w SprXSpeed, X : EOR #$FF : STA.w SprXSpeed, X LDA.w SprYSpeed, X : EOR #$FF : STA.w SprYSpeed, X
LDA.w SprYSpeed, X : EOR #$FF : STA.w SprYSpeed, X LDA.b #$10 : STA.w $0F80,X
LDA.b #$10 : STA.w $0F80,X LDA.b #$20 : STA.w SprTimerA, X
LDA.b #$20 : STA.w SprTimerA, X LDA #$26 : STA.w $012E
LDA #$26 : STA.w $012E %GotoAction(8)
%GotoAction(8) RTS
RTS .no_damage
.nodamage
JSL Sprite_CheckDamageToPlayer JSL Sprite_CheckDamageToPlayer
@@ -203,29 +197,27 @@ Sprite_DarkLink_Main:
.dosword .dosword
SEP #$20 SEP #$20
LDA.w SprTimerC, X : BNE ++ LDA.w SprTimerC, X : BNE ++
; attempt a slash if we can ; attempt a slash if we can
LDA.w SprMiscD, X : BNE + LDA.w SprMiscD, X : BNE +
STZ.w SprFrame, X STZ.w SprFrame, X
BRA .skipdirections BRA .skipdirections
+ +
LDA.w SprMiscD, X : CMP #$01 : BNE + LDA.w SprMiscD, X : CMP #$01 : BNE +
LDA.b #06 : STA.w SprFrame, X LDA.b #06 : STA.w SprFrame, X
BRA .skipdirections BRA .skipdirections
+ +
LDA.w SprMiscD, X : CMP #$02 : BNE + LDA.w SprMiscD, X : CMP #$02 : BNE +
LDA.b #12 : STA.w SprFrame, X LDA.b #12 : STA.w SprFrame, X
BRA .skipdirections BRA .skipdirections
+ +
LDA.b #18 : STA.w SprFrame, X LDA.b #18 : STA.w SprFrame, X
+ +
.skipdirections .skipdirections
JSR SpawnSwordDamage
JSR SpawnSwordDamage %GotoAction(1)
%GotoAction(1)
++ ++
REP #$20 REP #$20
.toofarsword .toofarsword
@@ -431,114 +423,120 @@ Sprite_DarkLink_Main:
Bomb: Bomb:
TYX ; get back sprite index {
TYX ; get back sprite index
;second guess itself because it can spawn too many bombs ;second guess itself because it can spawn too many bombs
LDA $1A : AND #$01 : BNE .spawn_failed ; 50/50 chances LDA $1A : AND #$01 : BNE .spawn_failed ; 50/50 chances
LDA.b #$4A LDA.b #$4A
LDY.b #$0B LDY.b #$0B
JSL $1DF65F : BMI .spawn_failed JSL $1DF65F : BMI .spawn_failed
JSL $09AE64 JSL $09AE64
; ... but once spawned, transmute it to an enemy bomb. ; ... but once spawned, transmute it to an enemy bomb.
JSL $06AD50 JSL $06AD50
JSL GetRandomInt : AND #$7F : CLC : ADC #$20 JSL GetRandomInt : AND #$7F : CLC : ADC #$20
STA $0E00, Y STA $0E00, Y
.spawn_failed .spawn_failed
RTS RTS
}
BombThrow: BombThrow:
TYX ; get back sprite index {
TYX ; get back sprite index
;second guess itself because it can spawn too many bombs ;second guess itself because it can spawn too many bombs
LDA $1A : AND #$01 : BNE .spawn_failed ; 50/50 chances LDA $1A : AND #$01 : BNE .spawn_failed ; 50/50 chances
LDA.b #$4A LDA.b #$4A
LDY.b #$0B LDY.b #$0B
JSL $1DF65F : BMI .spawn_failed JSL $1DF65F : BMI .spawn_failed
JSL $09AE64 JSL $09AE64
; ... but once spawned, transmute it to an enemy bomb. ; ... but once spawned, transmute it to an enemy bomb.
JSL $06AD50 JSL $06AD50
PHX PHX
TYX TYX
LDA.b #$28 : JSL Sprite_ApplySpeedTowardsPlayer LDA.b #$28 : JSL Sprite_ApplySpeedTowardsPlayer
LDA.b #$01 : STA $0DB0, X LDA.b #$01 : STA $0DB0, X
LDA.b #$16 : STA $0F80, X LDA.b #$16 : STA $0F80, X
JSL GetRandomInt : AND #$7F : CLC : ADC #$20 JSL GetRandomInt : AND #$7F : CLC : ADC #$20
STA $0E00, X STA $0E00, X
PLX PLX
.spawn_failed .spawn_failed
RTS RTS
}
Cape: Cape:
TYX ; get back sprite index {
LDA.w SprMiscF, X : BNE + TYX ; get back sprite index
LDA $1A : AND #$01 : BNE .nocape ; 50/50 chances LDA.w SprMiscF, X : BNE +
+ LDA $1A : AND #$01 : BNE .nocape ; 50/50 chances
JSL $05AB9C +
LDA.w SprMiscF, X : EOR #$01 : STA.w SprMiscF, X JSL $05AB9C
.nocape LDA.w SprMiscF, X : EOR #$01 : STA.w SprMiscF, X
RTS .nocape
RTS
Walk: Walk:
TYX ; get back sprite index TYX ; get back sprite index
%GotoAction(7) %GotoAction(7)
JSL GetRandomInt : AND #$1F : CLC : ADC #$18 JSL GetRandomInt : AND #$1F : CLC : ADC #$18
STA.w SprTimerA, X STA.w SprTimerA, X
JSL GetRandomInt JSL GetRandomInt
AND #$03 AND #$03
TAY TAY
LDA speedTableX, Y : STA SprXSpeed, X LDA speedTableX, Y : STA SprXSpeed, X
LDA speedTableY, Y : STA SprYSpeed, X LDA speedTableY, Y : STA SprYSpeed, X
RTS
RTS }
JumpAttack: JumpAttack:
TYX ; get back sprite index {
LDA #$20 TYX ; get back sprite index
JSL Sprite_ApplySpeedTowardsPlayer LDA #$20
LDA.b #$28 : STA.w $0F80,X JSL Sprite_ApplySpeedTowardsPlayer
LDA.b #$10 : STA.w SprTimerA, X LDA.b #$28 : STA.w $0F80,X
%GotoAction(5) LDA.b #$10 : STA.w SprTimerA, X
JSL GetRandomInt : AND #$3F : CLC : ADC #$50 %GotoAction(5)
STA.w SprTimerD, X JSL GetRandomInt : AND #$3F : CLC : ADC #$50
; that one is popping the RTS to end sprite entirely STA.w SprTimerD, X
;PLA : PLA ; that one is popping the RTS to end sprite entirely
RTS ;PLA : PLA
RTS
}
SpawnSwordDamage: SpawnSwordDamage:
{
LDA #24 : STA.w SprTimerC, X LDA #24 : STA.w SprTimerC, X
LDA.w SprMiscC, X : BEQ + LDA.w SprMiscC, X : BEQ +
LDA #15 : STA.w SprTimerC, X ;faster if enraged LDA #15 : STA.w SprTimerC, X ;faster if enraged
+ +
LDA #$06 : STA.w SprTimerB, X LDA #$06 : STA.w SprTimerB, X
LDA #$03 : STA.w $012E LDA #$03 : STA.w $012E
LDA #$C1 ; SET THE RIGHT SPRITE ID!! ======================CHANGE======================== LDA #$C1 ; SPRID
JSL Sprite_SpawnDynamically JSL Sprite_SpawnDynamically
JSL Sprite_SetSpawnedCoords JSL Sprite_SetSpawnedCoords
PHX PHX
LDA #$01 : STA.w SprSubtype, Y LDA #$01 : STA.w SprSubtype, Y
LDA.w SprMiscD, X LDA.w SprMiscD, X
TYX TYX
TAY TAY
LDA.w SprX, X : CLC : ADC.w DirOffsetX, Y : STA.w SprX, X LDA.w SprX, X : CLC : ADC.w DirOffsetX, Y : STA.w SprX, X
LDA.w SprY, X : CLC : ADC.w DirOffsetY, Y : STA.w SprY, X LDA.w SprY, X : CLC : ADC.w DirOffsetY, Y : STA.w SprY, X
PLX
PLX RTS
RTS }
DirOffsetX: DirOffsetX:
db $00, $00, $0E, $F2 db $00, $00, $0E, $F2
@@ -548,12 +546,12 @@ Sprite_DarkLink_Main:
SwordSlash: SwordSlash:
{ {
JSL Sprite_CheckDamageFromPlayer : BCC .nodamage JSL Sprite_CheckDamageFromPlayer : BCC .no_damage
LDA.w SprTimerA, X : BNE .alreadytakingdamage LDA.w SprTimerA, X : BNE .already_taking_damage
LDA.w $02B2 : CMP #$03 : BNE .notmoredamage LDA.w $02B2 : CMP #$03 : BNE .not_more_damage
LDA.w SprHealth, X : SEC : SBC #$04 : STA.w SprHealth, X LDA.w SprHealth, X : SEC : SBC #$04 : STA.w SprHealth, X
.notmoredamage .not_more_damage
.alreadytakingdamage .already_taking_damage
LDA #$05 : STA.w $012E ; clinking sound LDA #$05 : STA.w $012E ; clinking sound
LDA #$20 LDA #$20
@@ -576,7 +574,7 @@ Sprite_DarkLink_Main:
RTS RTS
.nodamage .no_damage
;LDA.w SprTimerD, X : BEQ + ;LDA.w SprTimerD, X : BEQ +
@@ -770,8 +768,6 @@ Sprite_DarkLink_Main:
LDA.b #$1F : STA $012C LDA.b #$1F : STA $012C
.nomessage .nomessage
; IF health is a certain level spawn crumbling tiles ; IF health is a certain level spawn crumbling tiles
;2, 3, 4, 5 ;2, 3, 4, 5
LDA.w SprMiscC, X : BEQ .tilesAreFallingAlready LDA.w SprMiscC, X : BEQ .tilesAreFallingAlready
@@ -807,12 +803,12 @@ Sprite_DarkLink_Main:
WalkAction: WalkAction:
{ {
JSL Sprite_CheckDamageFromPlayer : BCC .nodamage JSL Sprite_CheckDamageFromPlayer : BCC .no_damage
LDA.w SprTimerA, X : BNE .alreadytakingdamage LDA.w SprTimerA, X : BNE .already_taking_damage
LDA.w $02B2 : CMP #$03 : BNE .notmoredamage LDA.w $02B2 : CMP #$03 : BNE .not_more_damage
LDA.w SprHealth, X : SEC : SBC #$04 : STA.w SprHealth, X LDA.w SprHealth, X : SEC : SBC #$04 : STA.w SprHealth, X
.notmoredamage .not_more_damage
.alreadytakingdamage .already_taking_damage
LDA #$20 LDA #$20
JSL Sprite_ApplySpeedTowardsPlayer JSL Sprite_ApplySpeedTowardsPlayer
@@ -823,10 +819,9 @@ Sprite_DarkLink_Main:
%GotoAction(8) %GotoAction(8)
RTS RTS
.nodamage .no_damage
JSL Sprite_CheckDamageToPlayer JSL Sprite_CheckDamageToPlayer
LDA.w SprTimerA, X : BNE + LDA.w SprTimerA, X : BNE +
JSL GetRandomInt : AND #$3F : CLC : ADC #$50 JSL GetRandomInt : AND #$3F : CLC : ADC #$50
@@ -835,7 +830,6 @@ Sprite_DarkLink_Main:
+ +
STZ $02 ; x direction if non zero = negative STZ $02 ; x direction if non zero = negative
STZ $03 ; y direction STZ $03 ; y direction
@@ -873,10 +867,8 @@ Sprite_DarkLink_Main:
+ +
DEC.w SprYSpeed, X DEC.w SprYSpeed, X
.next .next
LDA.w SprXSpeed, X : BPL + LDA.w SprXSpeed, X : BPL +
INC.w SprXSpeed, X INC.w SprXSpeed, X
BRA .done BRA .done
@@ -929,8 +921,6 @@ Sprite_DarkLink_Main:
CMP #$10 : BCS + ; only check for damage if sword has reached halfway CMP #$10 : BCS + ; only check for damage if sword has reached halfway
JSL Sprite_CheckDamageToPlayer JSL Sprite_CheckDamageToPlayer
+ +
RTS RTS
} }
@@ -962,62 +952,66 @@ Sprite_DarkLink_Main:
db $00, $02, $01, $03 db $00, $02, $01, $03
DeadDespawn: DeadDespawn:
LDA.w SprTimerB, X : BNE + {
LDA.b #45 : STA.w SprFrame, X LDA.w SprTimerB, X : BNE +
LDA.b #45 : STA.w SprFrame, X
+ +
LDA.w SprTimerA, X : CMP #$28 : BCS + LDA.w SprTimerA, X : CMP #$28 : BCS +
AND #$04 AND #$04
STA.w SprMiscF, X STA.w SprMiscF, X
+ +
LDA.w SprTimerA, X : BNE + LDA.w SprTimerA, X : BNE +
%GotoAction(13) %GotoAction(13)
+ +
RTS RTS
}
OpenDoor: OpenDoor:
INC.w SprMiscF, X {
;LDA #$1A : STA.b $11 ; ganon open door routine INC.w SprMiscF, X
; handled by the room tag? ;LDA #$1A : STA.b $11 ; ganon open door routine
STZ.w $0DD0, X ; handled by the room tag?
STZ.w $0DD0, X
%GotoAction(14) %GotoAction(14)
RTS RTS
}
Dead: Dead:
{
RTS
RTS }
Enraging: Enraging:
{
PHX
REP #$20 ; P is still on stack, so we don't even need to fix this
LDX #$20
--
LDA dlinkPalRed, X : STA $7EC600, X
DEX : DEX : BNE --
INC $15 ;Refresh Palettes
SEP #$20
PLX
PHX INC.w SprMiscC, X ; Enraging
REP #$20 ; P is still on stack, so we don't even need to fix this
LDX #$20
--
LDA dlinkPalRed, X : STA $7EC600, X
DEX : DEX : BNE --
INC $15 ;Refresh Palettes
SEP #$20
PLX
INC.w SprMiscC, X ; Enraging LDA #$50 : STA.w SprHealth, X
LDA #$50 : STA.w SprHealth, X %ShowUnconditionalMessage($170)
%ShowUnconditionalMessage($170) %GotoAction(00)
%GotoAction(00)
RTS
RTS
}
dlinkPalRed: dlinkPalRed:
dw #$7FFF, #$14A5, #$2108, #$294A, #$1CF5, #$7E4E, #$001D, #$6FF4 dw #$7FFF, #$14A5, #$2108, #$294A, #$1CF5, #$7E4E, #$001D, #$6FF4
@@ -1546,59 +1540,61 @@ GanonInit:
Sprite_Ganon_Main: Sprite_Ganon_Main:
{ {
LDA.w SprAction, X; Load the SprAction LDA.w SprAction, X : JSL UseImplicitRegIndexedLocalJumpTable
JSL UseImplicitRegIndexedLocalJumpTable; Goto the SprAction we are currently in
dw Wait dw Wait
dw ShowMessage dw ShowMessage
dw Fall dw Fall
dw FellWait dw FellWait
dw FadingAwait dw FadingAwait
Wait: Wait:
LDA.w SprTimerA, X : BNE .wait {
LDA.b #$30 : STA.w SprTimerA, X JSR ApplyDarkLinkGraphics
%ShowUnconditionalMessage($46) LDA.w SprTimerA, X : BNE .wait
%GotoAction(1) LDA.b #$30 : STA.w SprTimerA, X
.wait %ShowUnconditionalMessage($46)
%GotoAction(1)
RTS .wait
RTS
}
ShowMessage: ShowMessage:
LDA.w SprTimerA, X : BNE .wait {
LDA.b #$90 : STA.w SprTimerA, X LDA.w SprTimerA, X : BNE .wait
%GotoAction(2) LDA.b #$90 : STA.w SprTimerA, X
.wait %GotoAction(2)
.wait
RTS RTS
}
Fall: Fall:
LDA.w SprTimerA, X : BNE .wait {
LDA.b #$50 : STA.w SprTimerA, X LDA.w SprTimerA, X : BNE .wait
LDA #$01 : STA.w SprFrame, X LDA.b #$50 : STA.w SprTimerA, X
INC.w SprMiscA, X LDA #$01 : STA.w SprFrame, X
%GotoAction(3) INC.w SprMiscA, X
.wait %GotoAction(3)
.wait
RTS
RTS }
FellWait: FellWait:
LDA.w SprTimerA, X : BNE .wait {
LDA.b #$30 : STA.w SprTimerA, X LDA.w SprTimerA, X : BNE .wait
%GotoAction(4) LDA.b #$30 : STA.w SprTimerA, X
.wait %GotoAction(4)
.wait
RTS
RTS }
FadingAwait: FadingAwait:
LDA.w SprTimerA, X : BNE .wait {
STZ.w SprState, X LDA.w SprTimerA, X : BNE .wait
.wait STZ.w SprState, X
.wait
RTS
RTS }
} }
; ========================================================= ; =========================================================