diff --git a/Sprites/Bosses/dark_link.asm b/Sprites/Bosses/dark_link.asm index 90584af..2ea4e1f 100644 --- a/Sprites/Bosses/dark_link.asm +++ b/Sprites/Bosses/dark_link.asm @@ -1,6 +1,6 @@ -;============================================================================== -; Sprite Properties -;============================================================================== +; ========================================================= +; Dark Link Boss + !SPRID = $C1 ; The sprite ID you are overwriting (HEX) !NbrTiles = 4 ; Number of tiles used in a frame !Harmless = 00 ; 00 = Sprite is Harmful, 01 = Sprite is Harmless @@ -30,12 +30,8 @@ !Boss = 00 ; 00 = normal sprite, 01 = sprite is a boss %Set_Sprite_Properties(Sprite_DarkLink_Prep, Sprite_DarkLink_Long); -;============================================================================== -; Sprite Long Hook for that sprite -; ----------------------------------------------------------------------------- -; This code can be left unchanged -; handle the draw code and if the sprite is active and should move or not -;============================================================================== +; ========================================================= + Sprite_DarkLink_Long: { PHB : PHK : PLB @@ -91,25 +87,20 @@ Sprite_DarkLink_Long: .SpriteIsNotActive PLB ; Get back the databank we stored previously RTL ; Go back to original code - } -;============================================================================== -; Sprite initialization -; ----------------------------------------------------------------------------- -; this code only get called once perfect to initialize sprites substate or timers -; this code as soon as the room transitions/ overworld transition occurs -;============================================================================== +; ========================================================= + Sprite_DarkLink_Prep: { PHB : PHK : PLB REP #$20 ; P is still on stack, so we don't even need to fix this - LDX #$20 - -- - LDA dlinkPal, X : STA $7EC600, X - DEX : DEX : BNE -- - INC $15 ;Refresh Palettes + LDX #$20 + -- + LDA dlinkPal, X : STA $7EC600, X + DEX : DEX : BNE -- + INC $15 ;Refresh Palettes SEP #$20 @@ -135,12 +126,8 @@ Sprite_DarkLink_Prep: dlinkPal: dw #$7FFF, #$14A5, #$2108, #$294A, #$1CF5, #$7E4E, #$3DEF, #$6FF4 -;================================================================================================== -; Sprite Main routines code -; -------------------------------------------------------------------------------------------------- -; This is the main local code of your sprite -; This contains all the Subroutines of your sprites you can add more below -;================================================================================================== +; ========================================================= + Sprite_DarkLink_Main: { LDA.w SprAction, X; Load the SprAction @@ -560,253 +547,254 @@ Sprite_DarkLink_Main: } SwordSlash: - JSL Sprite_CheckDamageFromPlayer : BCC .nodamage - LDA.w SprTimerA, X : BNE .alreadytakingdamage - LDA.w $02B2 : CMP #$03 : BNE .notmoredamage - LDA.w SprHealth, X : SEC : SBC #$04 : STA.w SprHealth, X - .notmoredamage - .alreadytakingdamage + { + JSL Sprite_CheckDamageFromPlayer : BCC .nodamage + LDA.w SprTimerA, X : BNE .alreadytakingdamage + LDA.w $02B2 : CMP #$03 : BNE .notmoredamage + LDA.w SprHealth, X : SEC : SBC #$04 : STA.w SprHealth, X + .notmoredamage + .alreadytakingdamage - LDA #$05 : STA.w $012E ; clinking sound - LDA #$20 - JSL Sprite_ApplySpeedTowardsPlayer - ;restore life removed by the checkdamage - STZ.w $0CE2, X + LDA #$05 : STA.w $012E ; clinking sound + LDA #$20 + JSL Sprite_ApplySpeedTowardsPlayer + ;restore life removed by the checkdamage + STZ.w $0CE2, X + + + LDA #$20 : STA $29 : STA $C7 + + STZ $24 + STZ $25 + + LDA.w SprYSpeed, X : STA $27 : EOR #$FF : STA.w SprYSpeed, X + LDA.w SprXSpeed, X : STA $28 : EOR #$FF : STA.w SprXSpeed, X + LDA.b #$08 : STA.w $0F80, X + LDA.b #$10 : STA $47 : STA $46 + %SetTimerC(16) + %GotoAction(09) + + RTS + + .nodamage + + ;LDA.w SprTimerD, X : BEQ + + + ;RTS + ;+ + + LDA.w SprMiscD, X : BNE .notdown + LDA.w SprTimerB, X : BNE .notdown + LDA.w SprFrame, X : INC : STA.w SprFrame, X : CMP.b #6 : BCC .noframereset1 + .resetframe1 + LDA.b #0 : STA.w SprFrame, X + .noframereset1 + LDA.b #4 : STA.w SprTimerB, X + BRA .end + + .notdown + LDA.w SprMiscD, X : CMP #$01 : BNE .notup + LDA.w SprTimerB, X : BNE .notup + LDA.w SprFrame, X : INC : STA.w SprFrame, X : CMP.b #12 : BCC .noframereset2 + .resetframe2 + LDA.b #6 : STA.w SprFrame, X + .noframereset2 + CMP #6 : BCC .resetframe2 + LDA.b #4 : STA.w SprTimerB, X + BRA .end + .notup + LDA.w SprMiscD, X : CMP #$02 : BNE .notright + + LDA.w SprTimerB, X : BNE .notright + LDA.w SprFrame, X : INC : STA.w SprFrame, X : CMP.b #18 : BCC .noframereset3 + .resetframe3 + LDA.b #12 : STA.w SprFrame, X + .noframereset3 + CMP #12 : BCC .resetframe3 + LDA.b #4 : STA.w SprTimerB, X + BRA .end + + .notright + LDA.w SprMiscD, X : CMP #$03 : BNE .notleft + LDA.w SprTimerB, X : BNE .end + LDA.w SprFrame, X : INC : STA.w SprFrame, X : CMP.b #24 : BCC .noframereset4 + .resetframe4 + LDA.b #18 : STA.w SprFrame, X + .noframereset4 + CMP #18 : BCC .resetframe4 + LDA.b #4 : STA.w SprTimerB, X + .notleft + .end + + LDA.w SprTimerC, X : BNE + + %SetTimerC(20) + %GotoAction(00) + + - - LDA #$20 : STA $29 : STA $C7 - - STZ $24 - STZ $25 - - LDA.w SprYSpeed, X : STA $27 : EOR #$FF : STA.w SprYSpeed, X - LDA.w SprXSpeed, X : STA $28 : EOR #$FF : STA.w SprXSpeed, X - LDA.b #$08 : STA.w $0F80, X - LDA.b #$10 : STA $47 : STA $46 - %SetTimerC(16) - %GotoAction(09) - RTS - - .nodamage - - ;LDA.w SprTimerD, X : BEQ + - - ;RTS - ;+ - - LDA.w SprMiscD, X : BNE .notdown - LDA.w SprTimerB, X : BNE .notdown - LDA.w SprFrame, X : INC : STA.w SprFrame, X : CMP.b #6 : BCC .noframereset1 - .resetframe1 - LDA.b #0 : STA.w SprFrame, X - .noframereset1 - LDA.b #4 : STA.w SprTimerB, X - BRA .end - - .notdown - LDA.w SprMiscD, X : CMP #$01 : BNE .notup - LDA.w SprTimerB, X : BNE .notup - LDA.w SprFrame, X : INC : STA.w SprFrame, X : CMP.b #12 : BCC .noframereset2 - .resetframe2 - LDA.b #6 : STA.w SprFrame, X - .noframereset2 - CMP #6 : BCC .resetframe2 - LDA.b #4 : STA.w SprTimerB, X - BRA .end - .notup - LDA.w SprMiscD, X : CMP #$02 : BNE .notright - - LDA.w SprTimerB, X : BNE .notright - LDA.w SprFrame, X : INC : STA.w SprFrame, X : CMP.b #18 : BCC .noframereset3 - .resetframe3 - LDA.b #12 : STA.w SprFrame, X - .noframereset3 - CMP #12 : BCC .resetframe3 - LDA.b #4 : STA.w SprTimerB, X - BRA .end - - .notright - LDA.w SprMiscD, X : CMP #$03 : BNE .notleft - LDA.w SprTimerB, X : BNE .end - LDA.w SprFrame, X : INC : STA.w SprFrame, X : CMP.b #24 : BCC .noframereset4 - .resetframe4 - LDA.b #18 : STA.w SprFrame, X - .noframereset4 - CMP #18 : BCC .resetframe4 - LDA.b #4 : STA.w SprTimerB, X - .notleft - .end - - LDA.w SprTimerC, X : BNE + - %SetTimerC(20) - %GotoAction(00) - + - - - - RTS + } JumpBack: - JSL Sprite_MoveXyz + { + JSL Sprite_MoveXyz - DEC.w $0F80,X : DEC.w $0F80,X + DEC.w $0F80,X : DEC.w $0F80,X - LDA.w $0F70,X : BPL .aloft + LDA.w $0F70,X : BPL .aloft - STZ.w $0F70,X - %GotoAction(0) + STZ.w $0F70,X + %GotoAction(0) - .aloft + .aloft - JSL Sprite_CheckTileCollision + JSL Sprite_CheckTileCollision - RTS + RTS + } JumpAttackUp: - JSL Sprite_MoveXyz - LDA.w $0F80,X : BEQ + - DEC.w $0F80,X - + - LDA #36 : STA.w SprFrame, X + { + JSL Sprite_MoveXyz + LDA.w $0F80,X : BEQ + + DEC.w $0F80,X + + + LDA #36 : STA.w SprFrame, X - REP #$20 + REP #$20 - LDA $20 : STA $06 - LDA $22 : STA $04 + LDA $20 : STA $06 + LDA $22 : STA $04 - SEP #$20 - LDA.w SprMiscC, X : BEQ + - LDA #$28 : BRA .movespeed - + - LDA #$20 - .movespeed - JSL Sprite_ProjectSpeedTowardsEntityLong - LDA.b $01 : STA.w SprXSpeed, X - LDA.b $00 : STA.w SprYSpeed, X + SEP #$20 + LDA.w SprMiscC, X : BEQ + + LDA #$28 : BRA .movespeed + + + LDA #$20 + .movespeed + JSL Sprite_ProjectSpeedTowardsEntityLong + LDA.b $01 : STA.w SprXSpeed, X + LDA.b $00 : STA.w SprYSpeed, X - REP #$20 + REP #$20 - LDA $0FD8 ; Sprite X - SEC : SBC $22 ; - Player X - BPL + - EOR #$FFFF - + - STA $00 ; Distance X (ABS) + LDA $0FD8 ; Sprite X + SEC : SBC $22 ; - Player X + BPL + + EOR #$FFFF + + + STA $00 ; Distance X (ABS) - LDA $0FDA ; Sprite Y - SEC : SBC $20 ; - Player Y - BPL + - EOR #$FFFF - + - ; Add it back to X Distance - CLC : ADC $00 : STA $02 ; distance total X, Y (ABS) + LDA $0FDA ; Sprite Y + SEC : SBC $20 ; - Player Y + BPL + + EOR #$FFFF + + + ; Add it back to X Distance + CLC : ADC $00 : STA $02 ; distance total X, Y (ABS) - CMP #$0008 : BCS .toofar - SEP #$20 - STZ.w SprXSpeed, X - STZ.w SprYSpeed, X - %GotoAction(4) - .toofar - SEP #$20 + CMP #$0008 : BCS .toofar + SEP #$20 + STZ.w SprXSpeed, X + STZ.w SprYSpeed, X + %GotoAction(4) + .toofar + SEP #$20 - - - - - RTS + RTS + } JumpAttackDown: + { + LDA.w SprTimerA, X : BNE .wait - LDA.w SprTimerA, X : BNE .wait + JSL Sprite_MoveXyz + JSL Sprite_CheckDamageToPlayer + + LDA #37 : STA.w SprFrame, X + + DEC.w $0F80,X : DEC.w $0F80,X : DEC.w $0F80,X : DEC.w $0F80,X + + LDA.w $0F70,X : BPL .aloft - JSL Sprite_MoveXyz - JSL Sprite_CheckDamageToPlayer + STZ.w $0F70,X - LDA #37 : STA.w SprFrame, X + LDA.b #$90 : STA.w SprTimerC, X + LDA.b #$10 : STA.w SprTimerA, X - DEC.w $0F80,X : DEC.w $0F80,X : DEC.w $0F80,X : DEC.w $0F80,X + LDA.b #$0C : STA $012E + %GotoAction(06) - LDA.w $0F70,X : BPL .aloft + .aloft + .wait - STZ.w $0F70,X - - LDA.b #$90 : STA.w SprTimerC, X - LDA.b #$10 : STA.w SprTimerA, X - - LDA.b #$0C : STA $012E - %GotoAction(06) - - .aloft - - .wait - - RTS + RTS + } JumpAttackPrep: - LDA #35 : STA.w SprFrame, X + { + LDA #35 : STA.w SprFrame, X - LDA.w SprTimerA, X : BNE + - %GotoAction(3) - + + LDA.w SprTimerA, X : BNE + + %GotoAction(3) + + - RTS + RTS + } JumpAttackShake: - PHX - JSL Sprite_CheckDamageToPlayer + { + PHX + JSL Sprite_CheckDamageToPlayer - REP #$20 + REP #$20 - ; Load the frame counter. - LDA $1A : AND.w #$0001 : ASL A : TAX + ; Load the frame counter. + LDA $1A : AND.w #$0001 : ASL A : TAX - ; Shake the earth! This is the earthquake type effect. - LDA.l $01C961, X : STA $011A - LDA.l $01C965, X : STA $011C + ; Shake the earth! This is the earthquake type effect. + LDA.l $01C961, X : STA $011A + LDA.l $01C965, X : STA $011C - SEP #$20 - PLX - LDA.w SprTimerA, X : BNE + + SEP #$20 + PLX + LDA.w SprTimerA, X : BNE + - LDA.w SprMiscA, X : BNE .nomessage - LDA #$01 : STA.w SprMiscA, X - %ShowUnconditionalMessage($016F) + LDA.w SprMiscA, X : BNE .nomessage + LDA #$01 : STA.w SprMiscA, X + %ShowUnconditionalMessage($016F) - LDA.b #$1F : STA $012C - .nomessage + LDA.b #$1F : STA $012C + .nomessage - ; IF health is a certain level spawn crumbling tiles - ;2, 3, 4, 5 - LDA.w SprMiscC, X : BEQ .tilesAreFallingAlready - LDA.w $0B00 : BNE .tilesAreFallingAlready - LDY.w SprMiscE, X - LDA.w CrumbleSpr, Y - STA.w $0B00 ; overlord index 00 - LDA.b $23 : STA.w $0B10 ; x high byte - LDA.b $21 : STA.w $0B20 ; y high byte - LDA.w CrumbleSprX, Y : STA.w $0B08 - LDA.w CrumbleSprY, Y : STA.w $0B18 - STZ.w $0B30 - STZ.w $0B38 - STZ.w $0B28 - INC.w SprMiscE, X - .tilesAreFallingAlready + ; IF health is a certain level spawn crumbling tiles + ;2, 3, 4, 5 + LDA.w SprMiscC, X : BEQ .tilesAreFallingAlready + LDA.w $0B00 : BNE .tilesAreFallingAlready + LDY.w SprMiscE, X + LDA.w CrumbleSpr, Y + STA.w $0B00 ; overlord index 00 + LDA.b $23 : STA.w $0B10 ; x high byte + LDA.b $21 : STA.w $0B20 ; y high byte + LDA.w CrumbleSprX, Y : STA.w $0B08 + LDA.w CrumbleSprY, Y : STA.w $0B18 + STZ.w $0B30 + STZ.w $0B38 + STZ.w $0B28 + INC.w SprMiscE, X + .tilesAreFallingAlready - %GotoAction(0) + %GotoAction(0) - + + + - - - - RTS + RTS + } CrumbleSpr: db $0C, $0D, $0E, $0F @@ -818,154 +806,157 @@ Sprite_DarkLink_Main: db $28, $28, $D8, $D8 WalkAction: + { + JSL Sprite_CheckDamageFromPlayer : BCC .nodamage + LDA.w SprTimerA, X : BNE .alreadytakingdamage + LDA.w $02B2 : CMP #$03 : BNE .notmoredamage + LDA.w SprHealth, X : SEC : SBC #$04 : STA.w SprHealth, X + .notmoredamage + .alreadytakingdamage - JSL Sprite_CheckDamageFromPlayer : BCC .nodamage - LDA.w SprTimerA, X : BNE .alreadytakingdamage - LDA.w $02B2 : CMP #$03 : BNE .notmoredamage - LDA.w SprHealth, X : SEC : SBC #$04 : STA.w SprHealth, X - .notmoredamage - .alreadytakingdamage + LDA #$20 + JSL Sprite_ApplySpeedTowardsPlayer + LDA.w SprXSpeed, X : EOR #$FF : STA.w SprXSpeed, X + LDA.w SprYSpeed, X : EOR #$FF : STA.w SprYSpeed, X + LDA.b #$10 : STA.w $0F80,X + LDA.b #$20 : STA.w SprTimerA, X - LDA #$20 - JSL Sprite_ApplySpeedTowardsPlayer - LDA.w SprXSpeed, X : EOR #$FF : STA.w SprXSpeed, X - LDA.w SprYSpeed, X : EOR #$FF : STA.w SprYSpeed, X - LDA.b #$10 : STA.w $0F80,X - LDA.b #$20 : STA.w SprTimerA, X - - %GotoAction(8) - RTS - .nodamage - JSL Sprite_CheckDamageToPlayer + %GotoAction(8) + RTS + .nodamage + JSL Sprite_CheckDamageToPlayer - LDA.w SprTimerA, X : BNE + + LDA.w SprTimerA, X : BNE + - JSL GetRandomInt : AND #$3F : CLC : ADC #$50 - STA.w SprTimerA, X - %GotoAction(00) + JSL GetRandomInt : AND #$3F : CLC : ADC #$50 + STA.w SprTimerA, X + %GotoAction(00) - + + + - STZ $02 ; x direction if non zero = negative - STZ $03 ; y direction + STZ $02 ; x direction if non zero = negative + STZ $03 ; y direction - LDA.w SprXSpeed, X : BPL .positiveX - STA $02 - EOR #$FF - .positiveX - STA $00 ; X speed (abs) + LDA.w SprXSpeed, X : BPL .positiveX + STA $02 + EOR #$FF + .positiveX + STA $00 ; X speed (abs) - LDA.w SprYSpeed, X : BPL .positiveY - STA $03 - EOR #$FF - .positiveY - STA $01 ; Y speed (abs) + LDA.w SprYSpeed, X : BPL .positiveY + STA $03 + EOR #$FF + .positiveY + STA $01 ; Y speed (abs) - JMP Handler_DoWalk + JMP Handler_DoWalk - RTS + RTS + } ; right - - speedTableX: db 16, -16, 00, 00 speedTableY: db 00, 00, 16, -16 Damaged: - JSL Sprite_MoveXyz + { + JSL Sprite_MoveXyz - LDA.w SprYSpeed, X : BPL + - INC.w SprYSpeed, X - BRA .next - + - DEC.w SprYSpeed, X + LDA.w SprYSpeed, X : BPL + + INC.w SprYSpeed, X + BRA .next + + + DEC.w SprYSpeed, X - .next + .next - LDA.w SprXSpeed, X : BPL + - INC.w SprXSpeed, X - BRA .done - + - DEC.w SprXSpeed, X - .done + LDA.w SprXSpeed, X : BPL + + INC.w SprXSpeed, X + BRA .done + + + DEC.w SprXSpeed, X + .done - DEC.w $0F80,X : DEC.w $0F80,X + DEC.w $0F80,X : DEC.w $0F80,X - LDA.w $0F70,X : BPL .aloft + LDA.w $0F70,X : BPL .aloft - STZ.w SprYSpeed, X - STZ.w SprXSpeed, X + STZ.w SprYSpeed, X + STZ.w SprXSpeed, X - STZ.w $0F70,X + STZ.w $0F70,X - .aloft + .aloft - LDA.w SprTimerA, X : BNE + + LDA.w SprTimerA, X : BNE + - %GotoAction(0) - STZ.w SprTimerD, X - STZ.w SprMiscF, X - RTS - + - AND #$01 : STA.w SprMiscF, X ; flashing code + %GotoAction(0) + STZ.w SprTimerD, X + STZ.w SprMiscF, X + RTS + + + AND #$01 : STA.w SprMiscF, X ; flashing code - RTS + RTS + } RecoilSword: - JSL Sprite_MoveLong - LDA.w SprTimerC, X : BNE + - %SetTimerC(20) - %GotoAction(00) - + + { + JSL Sprite_MoveLong + LDA.w SprTimerC, X : BNE + + %SetTimerC(20) + %GotoAction(00) + + - JSL Sprite_CheckTileCollision + JSL Sprite_CheckTileCollision - RTS + RTS + } SwordSubtype: + { + LDA.w SprTimerA, X : BNE + + STZ.w SprState, X ; kill the sprite + + + CMP #$10 : BCS + ; only check for damage if sword has reached halfway + JSL Sprite_CheckDamageToPlayer + + - LDA.w SprTimerA, X : BNE + - STZ.w SprState, X ; kill the sprite - + - CMP #$10 : BCS + ; only check for damage if sword has reached halfway - JSL Sprite_CheckDamageToPlayer - + - - - RTS + RTS + } DyingSpin: - STZ.w SprHeight, X - LDA.w SprTimerB, X : BNE ++ + { + STZ.w SprHeight, X + LDA.w SprTimerB, X : BNE ++ - LDA.b #$08 : STA.w SprTimerB, X - LDA.w SprMiscD, X : INC : STA.w SprMiscD, X : CMP #$04 : BNE + - STZ.w SprMiscD, X - LDA #$00 - + - TAY - LDA.w dyingframes, Y : STA.w SprFrame, X + LDA.b #$08 : STA.w SprTimerB, X + LDA.w SprMiscD, X : INC : STA.w SprMiscD, X : CMP #$04 : BNE + + STZ.w SprMiscD, X + LDA #$00 + + + TAY + LDA.w dyingframes, Y : STA.w SprFrame, X - ++ + ++ - - - LDA.w SprTimerA, X : BNE + - LDA.b #$60 : STA.w SprTimerA, X - LDA.b #$12 : STA.w SprTimerB, X - LDA.b #44 : STA.w SprFrame, X - %GotoAction(12) - + - RTS + LDA.w SprTimerA, X : BNE + + LDA.b #$60 : STA.w SprTimerA, X + LDA.b #$12 : STA.w SprTimerB, X + LDA.b #44 : STA.w SprFrame, X + %GotoAction(12) + + + RTS + } dyingframes: db $00, $02, $01, $03 @@ -1031,11 +1022,9 @@ Sprite_DarkLink_Main: dlinkPalRed: dw #$7FFF, #$14A5, #$2108, #$294A, #$1CF5, #$7E4E, #$001D, #$6FF4 } -;================================================================================================== -; Sprite Draw code -; -------------------------------------------------------------------------------------------------- -; Draw the tiles on screen with the data provided by the sprite maker editor -;================================================================================================== + +; ========================================================= + Sprite_DarkLink_Draw: { JSL Sprite_PrepOamCoord @@ -1292,12 +1281,8 @@ Sprite_DarkLink_Draw: db $02, $02, $02 db $02, $02 + ; ========================================================= - ;================================================================================================== - ; Sprite Draw Generated Data - ; -------------------------------------------------------------------------------------------------- - ; This is where the generated Data for the sprite go - ;================================================================================================== .start_index db $00, $02, $04, $06, $08, $0A, $0C, $0E, $10, $12, $14, $16, $18, $1A, $1C, $1E, $20, $22, $24, $26, $28, $2A, $2C, $2E, $30, $32, $34, $36, $38, $3A, $3C, $3E, $40, $42, $44, $45, $48, $4B, $4E, $50, $52, $54, $56, $58, $5A, $5C .nbr_of_tiles @@ -1539,145 +1524,170 @@ Sprite_DarkLink_Draw: db $02, $02 } - - - +; ========================================================= GanonInit: { -LDA #$C1 -JSL Sprite_SpawnDynamically - LDA #$05 : STA.w SprSubtype, Y - LDA $00 : STA $0D10, Y - LDA $01 : STA.w $0D30, Y - - LDA $02 : STA.w $0D00, Y - LDA $03 : STA.w $0D20, Y + LDA #$C1 + JSL Sprite_SpawnDynamically + LDA #$05 : STA.w SprSubtype, Y + LDA $00 : STA $0D10, Y + LDA $01 : STA.w $0D30, Y + + LDA $02 : STA.w $0D00, Y + LDA $03 : STA.w $0D20, Y - LDA.b #$30 : STA.w SprTimerA, Y - LDA #$1E : STA.w $012C -RTL + LDA.b #$30 : STA.w SprTimerA, Y + LDA #$1E : STA.w $012C + RTL } +; ========================================================= Sprite_Ganon_Main: -LDA.w SprAction, X; Load the SprAction -JSL UseImplicitRegIndexedLocalJumpTable; Goto the SprAction we are currently in -dw Wait -dw ShowMessage -dw Fall -dw FellWait -dw FadingAwait +{ + LDA.w SprAction, X; Load the SprAction + JSL UseImplicitRegIndexedLocalJumpTable; Goto the SprAction we are currently in + dw Wait + dw ShowMessage + dw Fall + dw FellWait + dw FadingAwait -Wait: -LDA.w SprTimerA, X : BNE .wait -LDA.b #$30 : STA.w SprTimerA, X -%ShowUnconditionalMessage($46) -%GotoAction(1) -.wait + Wait: + LDA.w SprTimerA, X : BNE .wait + LDA.b #$30 : STA.w SprTimerA, X + %ShowUnconditionalMessage($46) + %GotoAction(1) + .wait -RTS + RTS -ShowMessage: -LDA.w SprTimerA, X : BNE .wait -LDA.b #$90 : STA.w SprTimerA, X -%GotoAction(2) -.wait + ShowMessage: + LDA.w SprTimerA, X : BNE .wait + LDA.b #$90 : STA.w SprTimerA, X + %GotoAction(2) + .wait -RTS + RTS -Fall: -LDA.w SprTimerA, X : BNE .wait -LDA.b #$50 : STA.w SprTimerA, X -LDA #$01 : STA.w SprFrame, X -INC.w SprMiscA, X -%GotoAction(3) -.wait + Fall: + LDA.w SprTimerA, X : BNE .wait + LDA.b #$50 : STA.w SprTimerA, X + LDA #$01 : STA.w SprFrame, X + INC.w SprMiscA, X + %GotoAction(3) + .wait -RTS + RTS -FellWait: -LDA.w SprTimerA, X : BNE .wait -LDA.b #$30 : STA.w SprTimerA, X -%GotoAction(4) -.wait + FellWait: + LDA.w SprTimerA, X : BNE .wait + LDA.b #$30 : STA.w SprTimerA, X + %GotoAction(4) + .wait -RTS + RTS -FadingAwait: -LDA.w SprTimerA, X : BNE .wait -STZ.w SprState, X -.wait + FadingAwait: + LDA.w SprTimerA, X : BNE .wait + STZ.w SprState, X + .wait -RTS + RTS +} +; ========================================================= Sprite_Ganon_Draw: -LDA.w SprAction, X : CMP #$04 : BNE + -LDA.w SprTimerA, X : AND #$04 : BEQ + -RTS +{ + LDA.w SprAction, X : CMP #$04 : BNE + + LDA.w SprTimerA, X : AND #$04 : BEQ + + RTS -+ -JSL Sprite_PrepOamCoord -LDA #$18 -JSL OAM_AllocateFromRegionB + + + JSL Sprite_PrepOamCoord + LDA #$18 + JSL OAM_AllocateFromRegionB -LDA $0DC0, X : CLC : ADC $0D90, X : TAY;Animation Frame -LDA .start_index, Y : STA $06 + LDA $0DC0, X : CLC : ADC $0D90, X : TAY;Animation Frame + LDA .start_index, Y : STA $06 -PHX -LDX .nbr_of_tiles, Y ;amount of tiles -1 -LDY.b #$00 -.nextTile + PHX + LDX .nbr_of_tiles, Y ;amount of tiles -1 + LDY.b #$00 + .nextTile -PHX ; Save current Tile Index? - -TXA : CLC : ADC $06 ; Add Animation Index Offset + PHX ; Save current Tile Index? + + TXA : CLC : ADC $06 ; Add Animation Index Offset -PHA ; Keep the value with animation index offset? + PHA ; Keep the value with animation index offset? -ASL A : TAX + ASL A : TAX -REP #$20 + REP #$20 -LDA $00 : CLC : ADC .x_offsets, X : STA ($90), Y -AND.w #$0100 : STA $0E -INY -LDA $02 : CLC : ADC .y_offsets, X : STA ($90), Y -CLC : ADC #$0010 : CMP.w #$0100 -SEP #$20 -BCC .on_screen_y + LDA $00 : CLC : ADC .x_offsets, X : STA ($90), Y + AND.w #$0100 : STA $0E + INY + LDA $02 : CLC : ADC .y_offsets, X : STA ($90), Y + CLC : ADC #$0010 : CMP.w #$0100 + SEP #$20 + BCC .on_screen_y -LDA.b #$F0 : STA ($90), Y ;Put the sprite out of the way -STA $0E -.on_screen_y + LDA.b #$F0 : STA ($90), Y ;Put the sprite out of the way + STA $0E + .on_screen_y -PLX ; Pullback Animation Index Offset (without the *2 not 16bit anymore) -INY -LDA .chr, X : STA ($90), Y -INY -LDA .properties, X : STA ($90), Y + PLX ; Pullback Animation Index Offset (without the *2 not 16bit anymore) + INY + LDA .chr, X : STA ($90), Y + INY + LDA .properties, X : STA ($90), Y -PHY - -TYA : LSR #2 : TAY - -LDA .sizes, X : ORA $0F : STA ($92), Y ; store size in oam buffer - -PLY : INY - -PLX : DEX : BPL .nextTile + PHY + + TYA : LSR #2 : TAY + + LDA .sizes, X : ORA $0F : STA ($92), Y ; store size in oam buffer + + PLY : INY + + PLX : DEX : BPL .nextTile -PLX + PLX -RTS + RTS + .start_index + db $00, $0C + .nbr_of_tiles + db 11, 11 + .x_offsets + dw 0, 16, 28, 28, 0, 0, 16, 16, 0, 16, -12, -12 + dw 22, 22, -5, -5, -3, 18, 0, 16, 0, 16, 0, 16 + .y_offsets + dw 7, 7, -9, 7, -16, 0, 0, -16, -19, -19, -9, 7 + dw 10, 26, 11, 27, -21, -21, -11, -11, 5, 5, 10, 10 + .chr + db $E0, $E0, $C4, $E4, $C2, $E2, $E2, $C2, $C0, $C0, $C4, $E4 + db $C4, $E4, $C4, $E4, $E6, $E6, $C8, $C8, $E8, $E8, $C6, $C6 + .properties + db $3D, $7D, $7D, $7D, $3B, $3B, $7B, $7B, $3D, $7D, $3D, $3D + db $7D, $7D, $3D, $3D, $3D, $7D, $3B, $7B, $3B, $7B, $3D, $7D + .sizes + db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 + db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02 +} + +; ========================================================= ApplyDarkLinkGraphics: {