From c35754d8a6b822f68ea80a87a7cac0d4cbcf3090 Mon Sep 17 00:00:00 2001 From: scawful Date: Mon, 17 Jun 2024 11:47:39 -0400 Subject: [PATCH] cleanup octoboss --- Sprites/Bosses/octoboss.asm | 1693 +++++++++++++++++------------------ 1 file changed, 832 insertions(+), 861 deletions(-) diff --git a/Sprites/Bosses/octoboss.asm b/Sprites/Bosses/octoboss.asm index 69f237d..96d97e6 100644 --- a/Sprites/Bosses/octoboss.asm +++ b/Sprites/Bosses/octoboss.asm @@ -1,1124 +1,1095 @@ ; ========================================================= ; Octoboss by Zarby89 -; Replaces Sprite 0x3C KidInKak -org $06C04E -JSL Sprite_Octoboss_Long +; TODO: Find a sprite to inject this into +; JSL Sprite_Octoboss_Long BrotherSpr = $0EB0 Sprite_Octoboss_Long: -PHB : PHK : PLB +{ + PHB : PHK : PLB -LDA.w SprMiscD, X : BNE + ; is the sprite already init -LDA #$04 : STA.w $0E40, X -;LDA.w SprHitbox, X : AND.b #$E0 : ORA.b #$23 : STA.w SprHitbox, X -;LDA.w $0CAA, X : AND #$7F : ORA.b #$81 : STA.w $0CAA, X -;LDA.b #$20 : STA.w SprHealth, X -STZ.w $0BA0, X + LDA.w SprMiscD, X : BNE + ; is the sprite already init + LDA #$04 : STA.w $0E40, X + ;LDA.w SprHitbox, X : AND.b #$E0 : ORA.b #$23 : STA.w SprHitbox, X + ;LDA.w $0CAA, X : AND #$7F : ORA.b #$81 : STA.w $0CAA, X + ;LDA.b #$20 : STA.w SprHealth, X + STZ.w $0BA0, X -; TODO: Add a safety check to prevent player from leaving without the item -; example if player left without the item, item will be on the ground still -; when he'll came back on that screen -PHX + ; TODO: Add a safety check to prevent player from leaving without the item + ; example if player left without the item, item will be on the ground still + ; when he'll came back on that screen + PHX -LDX.b $8A -LDA.l $7EF280, X : AND.b #$40 : BEQ .notKiledYet -PLX ; get back SPR index -; Is is killed? do we have the quake medallion tho ? -LDA.l $7EF349 : BNE .weHaveMedallion -; Spawn the medallion -STZ.w $0DD0, X -JSR SpawnMedallionAlt ; spawn standing medallion -BRA .SpriteIsNotActive + LDX.b $8A + LDA.l $7EF280, X : AND.b #$40 : BEQ .notKiledYet + PLX ; get back SPR index + ; Is is killed? do we have the quake medallion tho ? + LDA.l $7EF349 : BNE .weHaveMedallion + ; Spawn the medallion + STZ.w $0DD0, X + JSR SpawnMedallionAlt ; spawn standing medallion + BRA .SpriteIsNotActive -.weHaveMedallion -; Do nothing just kill this sprite + .weHaveMedallion + ; Do nothing just kill this sprite -STZ.w $0DD0, X -BRA .SpriteIsNotActive + STZ.w $0DD0, X + BRA .SpriteIsNotActive -.notKiledYet + .notKiledYet -PLX + PLX -;LDA.w $0E60, X : AND.b #$BF : STA.w $0E60, X -;LDA.w $0F50, X : AND.b #$BF : STA.w $0F50, X + ;LDA.w $0E60, X : AND.b #$BF : STA.w $0E60, X + ;LDA.w $0F50, X : AND.b #$BF : STA.w $0F50, X -LDA.b #15 : STA.w SprFrame, X -LDA.b #$87 : STA.l $7EC664 : STA.l $7EC684 -LDA.b #$55 : STA.l $7EC665 : STA.l $7EC685 -INC.b $15 -INC.w SprMiscD, X ; increase it so sprite is initialized -LDA.l $7EF343 : INC : STA.l $7EF343 -+ + LDA.b #15 : STA.w SprFrame, X + LDA.b #$87 : STA.l $7EC664 : STA.l $7EC684 + LDA.b #$55 : STA.l $7EC665 : STA.l $7EC685 + INC.b $15 + INC.w SprMiscD, X ; increase it so sprite is initialized + LDA.l $7EF343 : INC : STA.l $7EF343 + + -LDA.w SprMiscF, X : BNE + -JSR Sprite_Octoboss_Draw ; Call the draw code -BRA ++ -+ -JSR Sprite_Octoboss_Draw2 ; Call the draw code -++ + LDA.w SprMiscF, X : BNE + + JSR Sprite_Octoboss_Draw ; Call the draw code + BRA ++ + + + JSR Sprite_Octoboss_Draw2 ; Call the draw code + ++ -JSL Sprite_CheckActive ; Check if game is not paused -BCC .SpriteIsNotActive ; Skip Main code is sprite is innactive + JSL Sprite_CheckActive ; Check if game is not paused + BCC .SpriteIsNotActive ; Skip Main code is sprite is innactive -LDA.w SprMiscF, X : BNE + + LDA.w SprMiscF, X : BNE + -JSR Sprite_Octoboss_Main ; Call the main sprite code -BRA .SpriteIsNotActive -+ -JSR Sprite_Octoboss_Secondary ; Call the Secondary sprite code - -.SpriteIsNotActive -PLB ; Get back the databank we stored previously -RTL ; Go back to original code + JSR Sprite_Octoboss_Main ; Call the main sprite code + BRA .SpriteIsNotActive + + + JSR Sprite_Octoboss_Secondary ; Call the Secondary sprite code + .SpriteIsNotActive + PLB ; Get back the databank we stored previously + RTL ; Go back to original code +} Sprite_Octoboss_Main: -LDA.w SprAction, X; Load the SprAction -JSL UseImplicitRegIndexedLocalJumpTable; Goto the SprAction we are currently in -dw WaitForPlayerToApproach ; 00 -dw Emerge ; 01 -dw EmergedShowMessage ; 02 -dw SpawnAndAwakeHisBrother ; 03 -dw WaitForBrotherEmerge ; 04 -dw SpawnPirateHats ; 05 +{ + LDA.w SprAction, X; Load the SprAction + JSL UseImplicitRegIndexedLocalJumpTable; Goto the SprAction we are currently in + dw WaitForPlayerToApproach ; 00 + dw Emerge ; 01 + dw EmergedShowMessage ; 02 + dw SpawnAndAwakeHisBrother ; 03 + dw WaitForBrotherEmerge ; 04 + dw SpawnPirateHats ; 05 -dw IdlePhase ; 06 -dw PickDirection ; 07 -dw Moving ; 08 + dw IdlePhase ; 06 + dw PickDirection ; 07 + dw Moving ; 08 -dw WaitMessageBeforeSurrender ; 09 -dw RemoveHat ; 0A -dw Submerge ; 0B -dw SubmergeWaitWall ; 0C -dw EmergeWaitGiveItem ; 0D -dw SubmergeForeverKill ; 0E + dw WaitMessageBeforeSurrender ; 09 + dw RemoveHat ; 0A + dw Submerge ; 0B + dw SubmergeWaitWall ; 0C + dw EmergeWaitGiveItem ; 0D + dw SubmergeForeverKill ; 0E -Sprite_Octoboss_Secondary: -LDA.w SprAction, X; Load the SprAction -JSL UseImplicitRegIndexedLocalJumpTable; Goto the SprAction we are currently in -dw WaitForPlayerToApproach ; 00 -dw Emerge ; 01 -dw WaitDialog ; 02 -dw IdlePhase ; 03 -dw PickDirection ; 04 -dw Moving2 ; 05 + Sprite_Octoboss_Secondary: + LDA.w SprAction, X; Load the SprAction + JSL UseImplicitRegIndexedLocalJumpTable; Goto the SprAction we are currently in + dw WaitForPlayerToApproach ; 00 + dw Emerge ; 01 + dw WaitDialog ; 02 + dw IdlePhase ; 03 + dw PickDirection ; 04 + dw Moving2 ; 05 -dw IdleWait ; 06 -dw SubmergeForeverKill ; 07 + dw IdleWait ; 06 + dw SubmergeForeverKill ; 07 -WaitForPlayerToApproach: -REP #$20 -LDA.b $20 : CMP #$08C8 -SEP #$20 -BCS .TooFar -INC.w SprAction, X -STZ.w SprFrame, X -JSR SpawnSplash -.TooFar -RTS + WaitForPlayerToApproach: + REP #$20 + LDA.b $20 : CMP #$08C8 + SEP #$20 + BCS .TooFar + INC.w SprAction, X + STZ.w SprFrame, X + JSR SpawnSplash + .TooFar + RTS -; 08B8 + ; 08B8 -Emerge: -INC.w $02E4 ; prevent link from moving -LDA.w SprTimerB, X : BNE + -LDA.w SprFrame, X : INC : STA.w SprFrame, X : CMP.b #8 : BCC .noframereset -INC.w SprAction, X -.noframereset -LDA.b #2 : STA.w SprTimerB, X -+ -RTS + Emerge: + INC.w $02E4 ; prevent link from moving + LDA.w SprTimerB, X : BNE + + LDA.w SprFrame, X : INC : STA.w SprFrame, X : CMP.b #8 : BCC .noframereset + INC.w SprAction, X + .noframereset + LDA.b #2 : STA.w SprTimerB, X + + + RTS -EmergedShowMessage: -LDA.b #$48 -LDY.b #$00 -JSL Sprite_ShowMessageUnconditional -INC.w SprAction, X -RTS - -WaitDialog: - -RTS - - -SpawnAndAwakeHisBrother: -LDA.b #$40 : STA.w SprTimerC, X ; Will need to adjust -LDA.b #$3C -JSL Sprite_SpawnDynamically -TYA -STA.w BrotherSpr, X ; keep the brother id -LDA.b #$D0 : STA.w SprY, Y -LDA.b #$08 : STA.w SprYH, Y - -LDA.b #$20 : STA.w SprX, Y -LDA.b #$09 : STA.w SprXH, Y - - -LDA.b #$01 : STA.w SprMiscF, Y -LDA.b #$00 : STA.w SprFrame, Y -; Do the spawning code -INC.w SprAction, X - - -RTS - - -WaitForBrotherEmerge: -LDA.w SprTimerC, X : BNE + - LDA.b #$49 + EmergedShowMessage: + LDA.b #$48 LDY.b #$00 JSL Sprite_ShowMessageUnconditional - LDA #$16 : STA SprTimerC, X INC.w SprAction, X -+ -RTS + RTS -SpawnPirateHats: -LDA.w SprTimerC, X : CMP #$14 : BNE + -PHX -JSR SpawnBossPoof -PLX + WaitDialog: + RTS -PHX -LDA.w BrotherSpr, X : TAX -JSR SpawnBossPoof -PLX -+ -LDY.w BrotherSpr, X -LDA.w SprTimerC, X : CMP #$0A : BNE + -LDA.b #10 : STA.w SprFrame, X -LDA.b #10 : STA.w SprFrame, Y -+ + SpawnAndAwakeHisBrother: + LDA.b #$40 : STA.w SprTimerC, X ; Will need to adjust + LDA.b #$3C + JSL Sprite_SpawnDynamically + TYA + STA.w BrotherSpr, X ; keep the brother id + LDA.b #$D0 : STA.w SprY, Y + LDA.b #$08 : STA.w SprYH, Y -; Spawn Walls too -LDA.w SprTimerC, X : BNE + + LDA.b #$20 : STA.w SprX, Y + LDA.b #$09 : STA.w SprXH, Y -LDA.w SprAction, Y : INC : STA.w SprAction, Y -LDA.b #$40 -STA.w SprTimerC, Y -STA.w SprTimerC, X -STZ.w $02E4 ; allow link to move again + LDA.b #$01 : STA.w SprMiscF, Y + LDA.b #$00 : STA.w SprFrame, Y + ; Do the spawning code + INC.w SprAction, X -INC.w SprAction, X + RTS -; All the tiles spawned by the sprite -; you can use a sprite/item to get location from ZS -; and use the macro GetTilePos($x,$y) -;------------------------------------------------------------- -PHX -REP #$30 -%GetTilePos($0F, $07) -LDA.w #$068F -JSL $1BC97C ; Overworld_DrawMap16_Persist + WaitForBrotherEmerge: + LDA.w SprTimerC, X : BNE + + LDA.b #$49 + LDY.b #$00 + JSL Sprite_ShowMessageUnconditional + LDA #$16 : STA SprTimerC, X + INC.w SprAction, X + + + RTS -%GetTilePos($10, $07) -LDA.w #$068F -JSL $1BC97C ; Overworld_DrawMap16_Persist + SpawnPirateHats: + LDA.w SprTimerC, X : CMP #$14 : BNE + + PHX + JSR SpawnBossPoof + PLX + + PHX + LDA.w BrotherSpr, X : TAX + JSR SpawnBossPoof + PLX + + -%GetTilePos($11, $07) -LDA.w #$068F -JSL $1BC97C ; Overworld_DrawMap16_Persist + LDY.w BrotherSpr, X + LDA.w SprTimerC, X : CMP #$0A : BNE + + LDA.b #10 : STA.w SprFrame, X + LDA.b #10 : STA.w SprFrame, Y + + + ; Spawn Walls too + LDA.w SprTimerC, X : BNE + -%GetTilePos($0F, $08) -LDA.w #$06A4 -JSL $1BC97C ; Overworld_DrawMap16_Persist + LDA.w SprAction, Y : INC : STA.w SprAction, Y + LDA.b #$40 + STA.w SprTimerC, Y + STA.w SprTimerC, X -%GetTilePos($10, $08) -LDA.w #$06A4 -JSL $1BC97C ; Overworld_DrawMap16_Persist + STZ.w $02E4 ; allow link to move again -%GetTilePos($11, $08) -LDA.w #$06A4 -JSL $1BC97C ; Overworld_DrawMap16_Persist -SEP #$30 -PLX -LDA.b #$01 -STA.b $14 -;------------------------------------------------------------- + INC.w SprAction, X + ; All the tiles spawned by the sprite + ; you can use a sprite/item to get location from ZS + ; and use the macro GetTilePos($x,$y) + ;------------------------------------------------------------- + PHX + REP #$30 + %GetTilePos($0F, $07) + LDA.w #$068F + JSL $1BC97C ; Overworld_DrawMap16_Persist + %GetTilePos($10, $07) + LDA.w #$068F + JSL $1BC97C ; Overworld_DrawMap16_Persist -+ + %GetTilePos($11, $07) + LDA.w #$068F + JSL $1BC97C ; Overworld_DrawMap16_Persist + %GetTilePos($0F, $08) + LDA.w #$06A4 + JSL $1BC97C ; Overworld_DrawMap16_Persist -RTS + %GetTilePos($10, $08) + LDA.w #$06A4 + JSL $1BC97C ; Overworld_DrawMap16_Persist + %GetTilePos($11, $08) + LDA.w #$06A4 + JSL $1BC97C ; Overworld_DrawMap16_Persist + SEP #$30 + PLX + LDA.b #$01 + STA.b $14 + ;------------------------------------------------------------- + + + RTS + IdlePhase: + LDA.w SprTimerC, X : CMP.b #$08 : BNE + + JSL Sprite_SpawnFireball + + + LDA.w SprTimerC, X : BNE + + INC.w SprAction, X + + + LDA.w SprTimerB, X : BNE + + LDA.b #$01 : STA.w SprHeight, X + LDA.w SprFrame, X : INC : STA.w SprFrame, X : CMP.b #12 : BCC .noframereset + LDA.b #10 : STA.w SprFrame, X + STZ.w SprHeight, X + .noframereset + LDA.b #18 : STA.w SprTimerB, X + + + LDA.w SprMiscF, X : BNE + ; is it the red octopus? (blue doesn't need to run that) + JSR ReturnTotalHealth ; return the health total of both sprite + CMP.b #$30 : BCS .tooMuchHealth + LDA.b #$09 : STA.w SprAction, X ; go to wait message action + .tooMuchHealth + + -IdlePhase: -LDA.w SprTimerC, X : CMP.b #$08 : BNE + -JSL Sprite_SpawnFireball -+ + JSL Sprite_CheckDamageFromPlayer + RTS + PickDirection: + JSL GetRandomInt : AND.b #$1F : SEC : SBC #$10 : STA.w SprXSpeed, X + JSL GetRandomInt : AND.b #$1F : SEC : SBC #$10 : STA.w SprYSpeed, X + INC.w SprAction, X -LDA.w SprTimerC, X : BNE + -INC.w SprAction, X -+ -LDA.w SprTimerB, X : BNE + -LDA.b #$01 : STA.w SprHeight, X -LDA.w SprFrame, X : INC : STA.w SprFrame, X : CMP.b #12 : BCC .noframereset -LDA.b #10 : STA.w SprFrame, X -STZ.w SprHeight, X -.noframereset -LDA.b #18 : STA.w SprTimerB, X -+ + JSL GetRandomInt : AND.b #$4F : CLC : ADC.b #$1F : STA.w SprTimerC, X -LDA.w SprMiscF, X : BNE + ; is it the red octopus? (blue doesn't need to run that) -JSR ReturnTotalHealth ; return the health total of both sprite -CMP.b #$30 : BCS .tooMuchHealth -LDA.b #$09 : STA.w SprAction, X ; go to wait message action -.tooMuchHealth -+ -JSL Sprite_CheckDamageFromPlayer -RTS + RTS -PickDirection: -JSL GetRandomInt : AND.b #$1F : SEC : SBC #$10 : STA.w SprXSpeed, X -JSL GetRandomInt : AND.b #$1F : SEC : SBC #$10 : STA.w SprYSpeed, X -INC.w SprAction, X -JSL GetRandomInt : AND.b #$4F : CLC : ADC.b #$1F : STA.w SprTimerC, X + Moving: + LDA.w SprTimerC, X : BNE + + DEC.w SprAction, X + DEC.w SprAction, X + JSL GetRandomInt : AND.b #$4F : CLC : ADC.b #$1F : STA.w SprTimerC, X + + -RTS + JSL Sprite_Move + LDA.w SprTimerB, X : BNE + + LDA.b #$01 : STA.w SprHeight, X + LDA.w SprFrame, X : INC : STA.w SprFrame, X : CMP.b #12 : BCC .noframereset + LDA.b #10 : STA.w SprFrame, X + STZ.w SprHeight, X + .noframereset + LDA.b #10 : STA.w SprTimerB, X + + -Moving: -LDA.w SprTimerC, X : BNE + -DEC.w SprAction, X -DEC.w SprAction, X -JSL GetRandomInt : AND.b #$4F : CLC : ADC.b #$1F : STA.w SprTimerC, X -+ + LDA.w SprX, X : CMP.b #$E2 : BCC .notTooFarRight + LDA.w SprXSpeed, X : BMI .notTooFarRight + EOR.b #$FF : STA.w SprXSpeed, X + .notTooFarRight -JSL Sprite_Move -LDA.w SprTimerB, X : BNE + -LDA.b #$01 : STA.w SprHeight, X -LDA.w SprFrame, X : INC : STA.w SprFrame, X : CMP.b #12 : BCC .noframereset -LDA.b #10 : STA.w SprFrame, X -STZ.w SprHeight, X -.noframereset -LDA.b #10 : STA.w SprTimerB, X -+ + LDA.w SprX, X : CMP.b #$80 : BCS .notTooFarLeft + LDA.w SprXSpeed, X : BPL .notTooFarLeft + EOR.b #$FF : STA.w SprXSpeed, X + .notTooFarLeft -LDA.w SprX, X : CMP.b #$E2 : BCC .notTooFarRight -LDA.w SprXSpeed, X : BMI .notTooFarRight -EOR.b #$FF : STA.w SprXSpeed, X -.notTooFarRight + LDA.w SprY, X : CMP.b #$FB : BCC .notTooFarDown + LDA.w SprYSpeed, X : BMI .notTooFarDown + EOR.b #$FF : STA.w SprYSpeed, X + .notTooFarDown -LDA.w SprX, X : CMP.b #$80 : BCS .notTooFarLeft -LDA.w SprXSpeed, X : BPL .notTooFarLeft -EOR.b #$FF : STA.w SprXSpeed, X -.notTooFarLeft + LDA.w SprY, X : CMP.b #$B8 : BCS .notTooFarUp + LDA.w SprYSpeed, X : BPL .notTooFarUp + EOR.b #$FF : STA.w SprYSpeed, X + .notTooFarUp + JSR HandleMovingSplash -LDA.w SprY, X : CMP.b #$FB : BCC .notTooFarDown -LDA.w SprYSpeed, X : BMI .notTooFarDown -EOR.b #$FF : STA.w SprYSpeed, X -.notTooFarDown + JSL Sprite_CheckDamageFromPlayer + JSR ReturnTotalHealth ; return the health total of both sprite + CMP.b #$30 : BCS .tooMuchHealth + LDA.b #$09 : STA.w SprAction, X ; go to wait message action + .tooMuchHealth + RTS -LDA.w SprY, X : CMP.b #$B8 : BCS .notTooFarUp -LDA.w SprYSpeed, X : BPL .notTooFarUp -EOR.b #$FF : STA.w SprYSpeed, X -.notTooFarUp -JSR HandleMovingSplash + Moving2: + LDA.w SprTimerC, X : BNE + + DEC.w SprAction, X + DEC.w SprAction, X + JSL GetRandomInt : AND.b #$4F : CLC : ADC.b #$1F : STA.w SprTimerC, X + + -JSL Sprite_CheckDamageFromPlayer -JSR ReturnTotalHealth ; return the health total of both sprite -CMP.b #$30 : BCS .tooMuchHealth -LDA.b #$09 : STA.w SprAction, X ; go to wait message action -.tooMuchHealth -RTS + JSL Sprite_Move + LDA.w SprTimerB, X : BNE + + LDA.b #$01 : STA.w SprHeight, X + LDA.w SprFrame, X : INC : STA.w SprFrame, X : CMP.b #12 : BCC .noframereset + LDA.b #10 : STA.w SprFrame, X + STZ.w SprHeight, X + .noframereset + LDA.b #10 : STA.w SprTimerB, X + + + LDA.w SprX, X : CMP.b #$78 : BCC .notTooFarRight + LDA.w SprXSpeed, X : BMI .notTooFarRight + EOR.b #$FF : STA.w SprXSpeed, X + .notTooFarRight + LDA.w SprX, X : CMP.b #$10 : BCS .notTooFarLeft + LDA.w SprXSpeed, X : BPL .notTooFarLeft + EOR.b #$FF : STA.w SprXSpeed, X + .notTooFarLeft + LDA.w SprY, X : CMP.b #$FB : BCC .notTooFarDown + LDA.w SprYSpeed, X : BMI .notTooFarDown + EOR.b #$FF : STA.w SprYSpeed, X + .notTooFarDown -Moving2: -LDA.w SprTimerC, X : BNE + -DEC.w SprAction, X -DEC.w SprAction, X -JSL GetRandomInt : AND.b #$4F : CLC : ADC.b #$1F : STA.w SprTimerC, X -+ + LDA.w SprY, X : CMP.b #$B8 : BCS .notTooFarUp + LDA.w SprYSpeed, X : BPL .notTooFarUp + EOR.b #$FF : STA.w SprYSpeed, X + .notTooFarUp -JSL Sprite_Move -LDA.w SprTimerB, X : BNE + -LDA.b #$01 : STA.w SprHeight, X -LDA.w SprFrame, X : INC : STA.w SprFrame, X : CMP.b #12 : BCC .noframereset -LDA.b #10 : STA.w SprFrame, X -STZ.w SprHeight, X -.noframereset -LDA.b #10 : STA.w SprTimerB, X -+ + JSR HandleMovingSplash + JSL Sprite_CheckDamageFromPlayer + + RTS + + + WaitMessageBeforeSurrender: + ; display message 4A ; Wait! WAIT! please! + LDY.w BrotherSpr, X + LDA.b #$06 : STA.w SprAction, Y ; set brother to action 6 + LDA.b #$50 : STA.w SprTimerC, X ; set timer to remove hat, surrender + LDA.b #$4A + LDY.b #$00 + JSL Sprite_ShowMessageUnconditional + INC.w SprAction, X ; go to remove hat routine + + RTS + + RemoveHat: + INC.w $02E4 + STZ.b $5D ; kill link action + ; Use timer to remove hat like when it's spawning + LDA.w SprTimerC, X : CMP #$34 : BNE + + PHX + JSR SpawnBossPoof + PLX -LDA.w SprX, X : CMP.b #$78 : BCC .notTooFarRight -LDA.w SprXSpeed, X : BMI .notTooFarRight -EOR.b #$FF : STA.w SprXSpeed, X -.notTooFarRight + PHX + LDA.w BrotherSpr, X : TAX + JSR SpawnBossPoof + PLX + + + LDY.w BrotherSpr, X + LDA.w SprTimerC, X : CMP #$3A : BNE + + LDA.b #9 : STA.w SprFrame, X + LDA.b #9 : STA.w SprFrame, Y + + -LDA.w SprX, X : CMP.b #$10 : BCS .notTooFarLeft -LDA.w SprXSpeed, X : BPL .notTooFarLeft -EOR.b #$FF : STA.w SprXSpeed, X -.notTooFarLeft + LDA.w SprTimerC, X : BNE + + LDA.b #$4B + LDY.b #$00 + JSL Sprite_ShowMessageUnconditional + INC.w SprAction, X ; surrender message + + + RTS + + + Submerge: + ; display message 4B ; Surrender message + LDA.w SprTimerB, X : BNE + + LDA.w SprFrame, X : DEC : STA.w SprFrame, X : CMP.b #01 : BCS .noframereset + JSR SpawnSplash + INC.w SprAction, X ; surrender message + LDA.b #15 : STA.w SprFrame, X + LDA.b #$B0 : STA.w SprX, X + LDA.b #$08 : STA.w SprXH, X : STA.w SprYH, X + LDA.b #$D4 : STA.w SprY, X + LDA.b #$90 : STA.w SprTimerC, X + .noframereset + LDA.b #2 : STA.w SprTimerB, X + + + RTS + SubmergeWaitWall: + ; go under water to get the item - move back to original position -LDA.w SprY, X : CMP.b #$FB : BCC .notTooFarDown -LDA.w SprYSpeed, X : BMI .notTooFarDown -EOR.b #$FF : STA.w SprYSpeed, X -.notTooFarDown + LDA.w SprTimerC, X : BNE + + STZ.w SprFrame, X + INC.w SprAction, X + LDA.b #$40 : STA.w SprTimerC, X + + + LDA.w SprTimerC, X : CMP.b #$40 : BNE + + ;------------------------------------------------------------- + PHX + REP #$30 + %GetTilePos($0F, $07) + LDA.w #$0034 + JSL $1BC97C ; Overworld_DrawMap16_Persist -LDA.w SprY, X : CMP.b #$B8 : BCS .notTooFarUp -LDA.w SprYSpeed, X : BPL .notTooFarUp -EOR.b #$FF : STA.w SprYSpeed, X -.notTooFarUp + %GetTilePos($10, $07) + LDA.w #$0034 + JSL $1BC97C ; Overworld_DrawMap16_Persist -JSR HandleMovingSplash + %GetTilePos($11, $07) + LDA.w #$0034 + JSL $1BC97C ; Overworld_DrawMap16_Persist -JSL Sprite_CheckDamageFromPlayer -RTS + %GetTilePos($0F, $08) + LDA.w #$0034 + JSL $1BC97C ; Overworld_DrawMap16_Persist + %GetTilePos($10, $08) + LDA.w #$0034 + JSL $1BC97C ; Overworld_DrawMap16_Persist + %GetTilePos($11, $08) + LDA.w #$0034 + JSL $1BC97C ; Overworld_DrawMap16_Persist + SEP #$30 + PLX + LDA.b #$01 + STA.b $14 + ;------------------------------------------------------------- + + + RTS -WaitMessageBeforeSurrender: + EmergeWaitGiveItem: + ; Emerge back wait few frames, throw item in the middle moat, despawn wall -; display message 4A ; Wait! WAIT! please! -LDY.w BrotherSpr, X -LDA.b #$06 : STA.w SprAction, Y ; set brother to action 6 -LDA.b #$50 : STA.w SprTimerC, X ; set timer to remove hat, surrender -LDA.b #$4A -LDY.b #$00 -JSL Sprite_ShowMessageUnconditional -INC.w SprAction, X ; go to remove hat routine + LDA.w SprTimerB, X : BNE + + LDA.w SprFrame, X : INC : STA.w SprFrame, X : CMP.b #9 : BCC .noframereset + LDA.b #$09 : STA.w SprFrame, X + .noframereset + LDA.b #2 : STA.w SprTimerB, X + + -RTS -RemoveHat: -INC.w $02E4 -STZ.b $5D ; kill link action -; Use timer to remove hat like when it's spawning -LDA.w SprTimerC, X : CMP #$34 : BNE + -PHX -JSR SpawnBossPoof -PLX -PHX -LDA.w BrotherSpr, X : TAX -JSR SpawnBossPoof -PLX -+ + LDA.w SprTimerC, X : BNE .noItemYet + INC.w SprAction, X -LDY.w BrotherSpr, X -LDA.w SprTimerC, X : CMP #$3A : BNE + -LDA.b #9 : STA.w SprFrame, X -LDA.b #9 : STA.w SprFrame, Y -+ + JSR SpawnMedallion -LDA.w SprTimerC, X : BNE + -LDA.b #$4B -LDY.b #$00 -JSL Sprite_ShowMessageUnconditional -INC.w SprAction, X ; surrender message -+ -RTS + LDY.w BrotherSpr, X + LDA.b #$07 : STA.w SprAction, Y + ; Throw item here + PHX + LDX.b $8A + LDA.l $7EF280, X : ORA.b #$40 : STA.l $7EF280, X ; save in HP sram + PLX -Submerge: -; display message 4B ; Surrender message -LDA.w SprTimerB, X : BNE + -LDA.w SprFrame, X : DEC : STA.w SprFrame, X : CMP.b #01 : BCS .noframereset -JSR SpawnSplash -INC.w SprAction, X ; surrender message -LDA.b #15 : STA.w SprFrame, X -LDA.b #$B0 : STA.w SprX, X -LDA.b #$08 : STA.w SprXH, X : STA.w SprYH, X -LDA.b #$D4 : STA.w SprY, X -LDA.b #$90 : STA.w SprTimerC, X -.noframereset -LDA.b #2 : STA.w SprTimerB, X -+ + .noItemYet -RTS + RTS -SubmergeWaitWall: -; go under water to get the item - move back to original position + SubmergeForeverKill: + ; Set overworld sram flag for object collected on that screen + STZ.w $02E4 ; allow link to move -LDA.w SprTimerC, X : BNE + -STZ.w SprFrame, X -INC.w SprAction, X -LDA.b #$40 : STA.w SprTimerC, X -+ + LDA.w SprTimerB, X : BNE + + LDA.w SprFrame, X : DEC : STA.w SprFrame, X : CMP.b #01 : BCS .noframereset + JSR SpawnSplash + STZ.w $0DD0, X + .noframereset + LDA.b #2 : STA.w SprTimerB, X + + + RTS -LDA.w SprTimerC, X : CMP.b #$40 : BNE + -;------------------------------------------------------------- -PHX -REP #$30 -%GetTilePos($0F, $07) -LDA.w #$0034 -JSL $1BC97C ; Overworld_DrawMap16_Persist -%GetTilePos($10, $07) -LDA.w #$0034 -JSL $1BC97C ; Overworld_DrawMap16_Persist -%GetTilePos($11, $07) -LDA.w #$0034 -JSL $1BC97C ; Overworld_DrawMap16_Persist + IdleWait: + RTS -%GetTilePos($0F, $08) -LDA.w #$0034 -JSL $1BC97C ; Overworld_DrawMap16_Persist -%GetTilePos($10, $08) -LDA.w #$0034 -JSL $1BC97C ; Overworld_DrawMap16_Persist -%GetTilePos($11, $08) -LDA.w #$0034 -JSL $1BC97C ; Overworld_DrawMap16_Persist -SEP #$30 -PLX -LDA.b #$01 -STA.b $14 -;------------------------------------------------------------- -+ -RTS + ReturnTotalHealth: + LDY.w BrotherSpr, X + LDA.w SprHealth, Y : STA.b $00 -EmergeWaitGiveItem: -; Emerge back wait few frames, throw item in the middle moat, despawn wall + LDA.w SprHealth, X : CLC : ADC.b $00 + RTS +} -LDA.w SprTimerB, X : BNE + -LDA.w SprFrame, X : INC : STA.w SprFrame, X : CMP.b #9 : BCC .noframereset -LDA.b #$09 : STA.w SprFrame, X -.noframereset -LDA.b #2 : STA.w SprTimerB, X -+ -LDA.w SprTimerC, X : BNE .noItemYet -INC.w SprAction, X - -JSR SpawnMedallion - -LDY.w BrotherSpr, X -LDA.b #$07 : STA.w SprAction, Y -; Throw item here - -PHX -LDX.b $8A -LDA.l $7EF280, X : ORA.b #$40 : STA.l $7EF280, X ; save in HP sram -PLX - -.noItemYet - -RTS - -SubmergeForeverKill: -; Set overworld sram flag for object collected on that screen -STZ.w $02E4 ; allow link to move - -LDA.w SprTimerB, X : BNE + -LDA.w SprFrame, X : DEC : STA.w SprFrame, X : CMP.b #01 : BCS .noframereset -JSR SpawnSplash -STZ.w $0DD0, X -.noframereset -LDA.b #2 : STA.w SprTimerB, X -+ - -RTS - - - -IdleWait: - -RTS - - - - -ReturnTotalHealth: -LDY.w BrotherSpr, X -LDA.w SprHealth, Y : STA.b $00 - -LDA.w SprHealth, X : CLC : ADC.b $00 -RTS - - - - - -;================================================================================================== +; ========================================================= ; Sprite Draw code -; -------------------------------------------------------------------------------------------------- ; Draw the tiles on screen with the data provided by the sprite maker editor -;================================================================================================== +; ========================================================= Sprite_Octoboss_Draw: -JSL Sprite_PrepOamCoord -JSL Sprite_OAM_AllocateDeferToPlayer +{ + JSL Sprite_PrepOamCoord + JSL Sprite_OAM_AllocateDeferToPlayer -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.b $05 : ORA.w .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.b $05 : ORA.w .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 -;================================================================================================== -; Sprite Draw Generated Data -; -------------------------------------------------------------------------------------------------- -; This is where the generated Data for the sprite go -;================================================================================================== -.start_index -db $00, $04, $0A, $10, $16, $1C, $20, $24, $28, $2C, $30, $34, $38, $3C, $40, $44 -.nbr_of_tiles -db 3, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0 -.x_offsets -dw -8, 8, -8, 8 -dw -8, 8, -8, 8, -8, 8 -dw -8, 8, -8, 8, -8, 8 -dw -8, 8, -8, 8, -8, 8 -dw -8, 8, -8, 8, -8, 8 -dw -8, 8, -8, 8 -dw -8, 8, -8, 8 -dw -8, 8, -8, 8 -dw -8, 8, -8, 8 -dw -8, 8, -8, 8 -dw -8, 8, -8, 8 -dw -8, 8, -8, 8 -dw -8, 8, -8, 8 -dw -8, 8, -8, 8 -dw -8, 8, -8, 8 -dw 0 -.y_offsets -dw 6, 6, 16, 16 -dw 16, 16, 0, 0, 16, 16 -dw 12, 12, -4, -4, 16, 16 -dw 8, 8, -8, -8, 16, 16 -dw 4, 4, -12, -12, 16, 16 -dw 0, 0, -16, -16 -dw -2, -2, -18, -18 -dw 0, 0, -16, -16 -dw -16, -16, 0, 0 -dw 0, 0, -16, -16 -dw 0, 0, -16, -16 -dw 0, 0, -16, -16 -dw 0, 0, -16, -16 -dw 0, 0, -16, -16 -dw 0, 0, -16, -16 -dw 0 -.chr -db $02, $04, $0E, $0E -db $2C, $2E, $02, $04, $0E, $0E -db $2C, $2E, $02, $04, $0E, $0E -db $2C, $2E, $02, $04, $0E, $0E -db $2C, $2E, $02, $04, $0E, $0E -db $2C, $2E, $02, $04 -db $2C, $2E, $02, $04 -db $2C, $2E, $02, $04 -db $02, $04, $24, $26 -db $20, $22, $02, $08 -db $20, $22, $00, $00 -db $28, $2A, $00, $00 -db $2C, $2E, $00, $00 -db $2C, $2E, $00, $00 -db $24, $26, $00, $00 -db $0E -.properties -db $37, $37, $37, $37 -db $37, $37, $37, $37, $37, $37 -db $37, $37, $37, $37, $37, $37 -db $37, $37, $37, $37, $37, $37 -db $37, $37, $37, $37, $37, $37 -db $37, $37, $37, $37 -db $37, $37, $37, $37 -db $37, $37, $37, $37 -db $37, $37, $37, $37 -db $37, $37, $37, $37 -db $37, $37, $37, $77 -db $37, $37, $37, $77 -db $37, $37, $37, $77 -db $37, $37, $37, $77 -db $37, $37, $37, $77 -db $37 -.sizes -db $02, $02, $02, $02 -db $02, $02, $02, $02, $02, $02 -db $02, $02, $02, $02, $02, $02 -db $02, $02, $02, $02, $02, $02 -db $02, $02, $02, $02, $02, $02 -db $02, $02, $02, $02 -db $02, $02, $02, $02 -db $02, $02, $02, $02 -db $02, $02, $02, $02 -db $02, $02, $02, $02 -db $02, $02, $02, $02 -db $02, $02, $02, $02 -db $02, $02, $02, $02 -db $02, $02, $02, $02 -db $02, $02, $02, $02 -db $02 + ; ========================================================= + ; Sprite Draw Generated Data + ; This is where the generated Data for the sprite go + ; ========================================================= + .start_index + db $00, $04, $0A, $10, $16, $1C, $20, $24, $28, $2C, $30, $34, $38, $3C, $40, $44 + .nbr_of_tiles + db 3, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0 + .x_offsets + dw -8, 8, -8, 8 + dw -8, 8, -8, 8, -8, 8 + dw -8, 8, -8, 8, -8, 8 + dw -8, 8, -8, 8, -8, 8 + dw -8, 8, -8, 8, -8, 8 + dw -8, 8, -8, 8 + dw -8, 8, -8, 8 + dw -8, 8, -8, 8 + dw -8, 8, -8, 8 + dw -8, 8, -8, 8 + dw -8, 8, -8, 8 + dw -8, 8, -8, 8 + dw -8, 8, -8, 8 + dw -8, 8, -8, 8 + dw -8, 8, -8, 8 + dw 0 + .y_offsets + dw 6, 6, 16, 16 + dw 16, 16, 0, 0, 16, 16 + dw 12, 12, -4, -4, 16, 16 + dw 8, 8, -8, -8, 16, 16 + dw 4, 4, -12, -12, 16, 16 + dw 0, 0, -16, -16 + dw -2, -2, -18, -18 + dw 0, 0, -16, -16 + dw -16, -16, 0, 0 + dw 0, 0, -16, -16 + dw 0, 0, -16, -16 + dw 0, 0, -16, -16 + dw 0, 0, -16, -16 + dw 0, 0, -16, -16 + dw 0, 0, -16, -16 + dw 0 + .chr + db $02, $04, $0E, $0E + db $2C, $2E, $02, $04, $0E, $0E + db $2C, $2E, $02, $04, $0E, $0E + db $2C, $2E, $02, $04, $0E, $0E + db $2C, $2E, $02, $04, $0E, $0E + db $2C, $2E, $02, $04 + db $2C, $2E, $02, $04 + db $2C, $2E, $02, $04 + db $02, $04, $24, $26 + db $20, $22, $02, $08 + db $20, $22, $00, $00 + db $28, $2A, $00, $00 + db $2C, $2E, $00, $00 + db $2C, $2E, $00, $00 + db $24, $26, $00, $00 + db $0E + .properties + db $37, $37, $37, $37 + db $37, $37, $37, $37, $37, $37 + db $37, $37, $37, $37, $37, $37 + db $37, $37, $37, $37, $37, $37 + db $37, $37, $37, $37, $37, $37 + db $37, $37, $37, $37 + db $37, $37, $37, $37 + db $37, $37, $37, $37 + db $37, $37, $37, $37 + db $37, $37, $37, $37 + db $37, $37, $37, $77 + db $37, $37, $37, $77 + db $37, $37, $37, $77 + db $37, $37, $37, $77 + db $37, $37, $37, $77 + db $37 + .sizes + db $02, $02, $02, $02 + db $02, $02, $02, $02, $02, $02 + db $02, $02, $02, $02, $02, $02 + db $02, $02, $02, $02, $02, $02 + db $02, $02, $02, $02, $02, $02 + db $02, $02, $02, $02 + db $02, $02, $02, $02 + db $02, $02, $02, $02 + db $02, $02, $02, $02 + db $02, $02, $02, $02 + db $02, $02, $02, $02 + db $02, $02, $02, $02 + db $02, $02, $02, $02 + db $02, $02, $02, $02 + db $02, $02, $02, $02 + db $02 +} - - - -;================================================================================================== +; ========================================================= ; Sprite Draw code -; -------------------------------------------------------------------------------------------------- ; Draw the tiles on screen with the data provided by the sprite maker editor -;================================================================================================== +; ========================================================= Sprite_Octoboss_Draw2: -JSL Sprite_PrepOamCoord -JSL Sprite_OAM_AllocateDeferToPlayer +{ + JSL Sprite_PrepOamCoord + JSL Sprite_OAM_AllocateDeferToPlayer -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.b $05 : ORA.w .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.b $05 : ORA.w .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 -;================================================================================================== -; Sprite Draw Generated Data -; -------------------------------------------------------------------------------------------------- -; This is where the generated Data for the sprite go -;================================================================================================== -.start_index -db $00, $04, $0A, $10, $16, $1C, $20, $24, $28, $2C, $30, $34, $38, $3C, $40, $44 -.nbr_of_tiles -db 3, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0 -.x_offsets -dw -8, 8, -8, 8 -dw -8, 8, -8, 8, -8, 8 -dw 8, -8, -8, 8, -8, 8 -dw 8, -8, -8, 8, -8, 8 -dw 8, -8, -8, 8, -8, 8 -dw 8, -8, -8, 8 -dw 8, -8, -8, 8 -dw 8, -8, -8, 8 -dw -8, 8, 8, -8 -dw 8, -8, -8, 8 -dw 8, -8, -8, 8 -dw 8, -8, -8, 8 -dw 8, -8, -8, 8 -dw 8, -8, -8, 8 -dw 8, -8, -8, 8 -dw 0 -.y_offsets -dw 6, 6, 16, 16 -dw 16, 16, 0, 0, 16, 16 -dw 12, 12, -4, -4, 16, 16 -dw 8, 8, -8, -8, 16, 16 -dw 4, 4, -12, -12, 16, 16 -dw 0, 0, -16, -16 -dw -2, -2, -18, -18 -dw 0, 0, -16, -16 -dw -16, -16, 0, 0 -dw 0, 0, -16, -16 -dw 0, 0, -16, -16 -dw 0, 0, -16, -16 -dw 0, 0, -16, -16 -dw 0, 0, -16, -16 -dw 0, 0, -16, -16 -dw 0 -.chr -db $02, $04, $0E, $0E -db $2C, $2E, $02, $04, $0E, $0E -db $2C, $2E, $02, $04, $0E, $0E -db $2C, $2E, $02, $04, $0E, $0E -db $2C, $2E, $02, $04, $0E, $0E -db $2C, $2E, $02, $04 -db $2C, $2E, $02, $04 -db $2C, $2E, $02, $04 -db $02, $04, $24, $26 -db $20, $22, $02, $08 -db $20, $22, $00, $00 -db $28, $2A, $00, $00 -db $2C, $2E, $00, $00 -db $2C, $2E, $00, $00 -db $24, $26, $00, $00 -db $0E -.properties -db $39, $39, $39, $39 -db $39, $39, $39, $39, $39, $39 -db $79, $79, $39, $39, $39, $39 -db $79, $79, $39, $39, $39, $39 -db $79, $79, $39, $39, $39, $39 -db $79, $79, $39, $39 -db $79, $79, $39, $39 -db $79, $79, $39, $39 -db $39, $39, $79, $79 -db $79, $79, $39, $39 -db $79, $79, $39, $79 -db $79, $79, $39, $79 -db $79, $79, $39, $79 -db $79, $79, $39, $79 -db $79, $79, $39, $79 -db $39 -.sizes -db $02, $02, $02, $02 -db $02, $02, $02, $02, $02, $02 -db $02, $02, $02, $02, $02, $02 -db $02, $02, $02, $02, $02, $02 -db $02, $02, $02, $02, $02, $02 -db $02, $02, $02, $02 -db $02, $02, $02, $02 -db $02, $02, $02, $02 -db $02, $02, $02, $02 -db $02, $02, $02, $02 -db $02, $02, $02, $02 -db $02, $02, $02, $02 -db $02, $02, $02, $02 -db $02, $02, $02, $02 -db $02, $02, $02, $02 -db $02 - + ; ========================================================= + ; Sprite Draw Generated Data + + ; This is where the generated Data for the sprite go + ; ========================================================= + .start_index + db $00, $04, $0A, $10, $16, $1C, $20, $24, $28, $2C, $30, $34, $38, $3C, $40, $44 + .nbr_of_tiles + db 3, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0 + .x_offsets + dw -8, 8, -8, 8 + dw -8, 8, -8, 8, -8, 8 + dw 8, -8, -8, 8, -8, 8 + dw 8, -8, -8, 8, -8, 8 + dw 8, -8, -8, 8, -8, 8 + dw 8, -8, -8, 8 + dw 8, -8, -8, 8 + dw 8, -8, -8, 8 + dw -8, 8, 8, -8 + dw 8, -8, -8, 8 + dw 8, -8, -8, 8 + dw 8, -8, -8, 8 + dw 8, -8, -8, 8 + dw 8, -8, -8, 8 + dw 8, -8, -8, 8 + dw 0 + .y_offsets + dw 6, 6, 16, 16 + dw 16, 16, 0, 0, 16, 16 + dw 12, 12, -4, -4, 16, 16 + dw 8, 8, -8, -8, 16, 16 + dw 4, 4, -12, -12, 16, 16 + dw 0, 0, -16, -16 + dw -2, -2, -18, -18 + dw 0, 0, -16, -16 + dw -16, -16, 0, 0 + dw 0, 0, -16, -16 + dw 0, 0, -16, -16 + dw 0, 0, -16, -16 + dw 0, 0, -16, -16 + dw 0, 0, -16, -16 + dw 0, 0, -16, -16 + dw 0 + .chr + db $02, $04, $0E, $0E + db $2C, $2E, $02, $04, $0E, $0E + db $2C, $2E, $02, $04, $0E, $0E + db $2C, $2E, $02, $04, $0E, $0E + db $2C, $2E, $02, $04, $0E, $0E + db $2C, $2E, $02, $04 + db $2C, $2E, $02, $04 + db $2C, $2E, $02, $04 + db $02, $04, $24, $26 + db $20, $22, $02, $08 + db $20, $22, $00, $00 + db $28, $2A, $00, $00 + db $2C, $2E, $00, $00 + db $2C, $2E, $00, $00 + db $24, $26, $00, $00 + db $0E + .properties + db $39, $39, $39, $39 + db $39, $39, $39, $39, $39, $39 + db $79, $79, $39, $39, $39, $39 + db $79, $79, $39, $39, $39, $39 + db $79, $79, $39, $39, $39, $39 + db $79, $79, $39, $39 + db $79, $79, $39, $39 + db $79, $79, $39, $39 + db $39, $39, $79, $79 + db $79, $79, $39, $39 + db $79, $79, $39, $79 + db $79, $79, $39, $79 + db $79, $79, $39, $79 + db $79, $79, $39, $79 + db $79, $79, $39, $79 + db $39 + .sizes + db $02, $02, $02, $02 + db $02, $02, $02, $02, $02, $02 + db $02, $02, $02, $02, $02, $02 + db $02, $02, $02, $02, $02, $02 + db $02, $02, $02, $02, $02, $02 + db $02, $02, $02, $02 + db $02, $02, $02, $02 + db $02, $02, $02, $02 + db $02, $02, $02, $02 + db $02, $02, $02, $02 + db $02, $02, $02, $02 + db $02, $02, $02, $02 + db $02, $02, $02, $02 + db $02, $02, $02, $02 + db $02, $02, $02, $02 + db $02 +} SpawnSplash: + LDA.b #$EC ; SPRITE EC + JSL Sprite_SpawnDynamically + BMI .exit -LDA.b #$EC ; SPRITE EC -JSL Sprite_SpawnDynamically -BMI .exit + JSL Sprite_SetSpawnedCoords -JSL Sprite_SetSpawnedCoords + LDA.b #$03 + STA.w $0DD0,Y -LDA.b #$03 -STA.w $0DD0,Y + LDA.b #$0F + STA.w $0DF0,Y -LDA.b #$0F -STA.w $0DF0,Y + LDA.b #$00 + STA.w $0D80,Y -LDA.b #$00 -STA.w $0D80,Y + LDA.b #$03 + STA.w $0E40,Y -LDA.b #$03 -STA.w $0E40,Y + LDA.b #$28 ; SFX2.28 + JSL Sound_SetSfx2PanLong -LDA.b #$28 ; SFX2.28 -JSL Sound_SetSfx2PanLong + .exit -.exit - -RTS + RTS SpawnBossPoof: -LDA.b #$0C ; SFX2.0C -STA.w $012E + LDA.b #$0C ; SFX2.0C + STA.w $012E -LDA.b #$CE ; SPRITE CE -JSL Sprite_SpawnDynamically + LDA.b #$CE ; SPRITE CE + JSL Sprite_SpawnDynamically -LDA.b $00 -CLC -ADC.b #$10 -STA.w $0D10,Y + LDA.b $00 + CLC + ADC.b #$10 + STA.w $0D10,Y -LDA.b $01 -ADC.b #$00 -STA.w $0D30,Y + LDA.b $01 + ADC.b #$00 + STA.w $0D30,Y -LDA.b $02 -CLC -ADC.b #$08 -STA.w $0D00,Y + LDA.b $02 + CLC + ADC.b #$08 + STA.w $0D00,Y -LDA.b $03 -ADC.b #$00 -STA.w $0D20,Y + LDA.b $03 + ADC.b #$00 + STA.w $0D20,Y -LDA.b #$0F -STA.w $0DC0,Y + LDA.b #$0F + STA.w $0DC0,Y -LDA.b #$01 -STA.w $0D90,Y + LDA.b #$01 + STA.w $0D90,Y -LDA.b #$2F -STA.w $0DF0,Y + LDA.b #$2F + STA.w $0DF0,Y -LDA.b #$09 -STA.w $0E40,Y -STA.w $0BA0,Y + LDA.b #$09 + STA.w $0E40,Y + STA.w $0BA0,Y -RTS + RTS HandleMovingSplash: -LDA.b $1A -AND.b #$0F -BNE .exit + LDA.b $1A + AND.b #$0F + BNE .exit -LDA.b #$28 ; SFX2.28 -JSL Sound_SetSfx2PanLong + LDA.b #$28 ; SFX2.28 + JSL Sound_SetSfx2PanLong -PHX + PHX -TXY -LDX.b #$1D + TXY + LDX.b #$1D -LDA.w $0D40,Y -BMI .next_slot + LDA.w $0D40,Y + BMI .next_slot -LDX.b #$0E + LDX.b #$0E -.next_slot -LDA.l $7FF800,X -BNE .slot_occupied + .next_slot + LDA.l $7FF800,X + BNE .slot_occupied -LDA.b #$15 ; GARNISH 15 -STA.l $7FF800,X -STA.w $0FB4 + LDA.b #$15 ; GARNISH 15 + STA.l $7FF800,X + STA.w $0FB4 -LDA.w $0D10,Y -STA.l $7FF83C,X + LDA.w $0D10,Y + STA.l $7FF83C,X -LDA.w $0D30,Y -STA.l $7FF878,X + LDA.w $0D30,Y + STA.l $7FF878,X -LDA.w $0D00,Y -CLC -ADC.b #$18 -STA.l $7FF81E,X + LDA.w $0D00,Y + CLC + ADC.b #$18 + STA.l $7FF81E,X -LDA.w $0D20,Y -STA.l $7FF85A,X + LDA.w $0D20,Y + STA.l $7FF85A,X -LDA.b #$0F -STA.l $7FF90E,X + LDA.b #$0F + STA.l $7FF90E,X -PLX + PLX -RTS + RTS -;--------------------------------------------------------------------------------------------------- + ; --------------------------------------------------------- -.slot_occupied -DEX -BPL .next_slot + .slot_occupied + DEX + BPL .next_slot -PLX - -.exit -RTS + PLX + .exit + RTS SpawnMedallion: -LDA.b #$C0 ; SPRITE C0 -JSL Sprite_SpawnDynamically -BMI .exit + LDA.b #$C0 ; SPRITE C0 + JSL Sprite_SpawnDynamically + BMI .exit -JSL $09AE64 ; Sprite_SetSpawnedCoordinates + JSL $09AE64 ; Sprite_SetSpawnedCoordinates -PHX -TYX + PHX + TYX -LDA.b #$10 -STA.w $0D50, X + LDA.b #$10 + STA.w $0D50, X -LDA.b #$30 -STA.w $0F80, X + LDA.b #$30 + STA.w $0F80, X -LDA.b #$11 ; ITEMGET 11 -STA.w $0D90, X + LDA.b #$11 ; ITEMGET 11 + STA.w $0D90, X -LDA.b #$20 ; SFX2.20 -JSL $0DBB7C ; SpriteSFX_QueueSFX2WithPan + LDA.b #$20 ; SFX2.20 + JSL $0DBB7C ; SpriteSFX_QueueSFX2WithPan -LDA.b #$83 -STA.w $0E40,X + LDA.b #$83 + STA.w $0E40,X -LDA.b #$58 -STA.w $0E60,X + LDA.b #$58 + STA.w $0E60,X -AND.b #$0F -STA.w $0F50,X + AND.b #$0F + STA.w $0F50,X -PLX + PLX -PHX -PHY + PHX + PHY -LDA.b #$1C -JSL $00D4ED ; WriteTo4BPPBuffer_item_gfx + LDA.b #$1C + JSL $00D4ED ; WriteTo4BPPBuffer_item_gfx -PLY -PLX + PLY + PLX -.exit -RTS + .exit + RTS SpawnMedallionAlt: + LDA.b #$C0 ; SPRITE C0 + JSL Sprite_SpawnDynamically + BMI .exit -LDA.b #$C0 ; SPRITE C0 -JSL Sprite_SpawnDynamically -BMI .exit + PHX + TYX -PHX -TYX + LDA.b #$11 ; ITEMGET 11 + STA.w $0D90, X -LDA.b #$11 ; ITEMGET 11 -STA.w $0D90, X + LDA.b #$83 + STA.w $0E40,X -LDA.b #$83 -STA.w $0E40,X + LDA.b #$58 + STA.w $0E60,X -LDA.b #$58 -STA.w $0E60,X + AND.b #$0F + STA.w $0F50,X -AND.b #$0F -STA.w $0F50,X + LDA.b #$DC : STA.w SprY, X + LDA.b #$F7 : STA.w SprX, X + LDA.b #$08 : STA.w SprYH, X : STA.w SprXH, X + PLX -LDA.b #$DC : STA.w SprY, X -LDA.b #$F7 : STA.w SprX, X -LDA.b #$08 : STA.w SprYH, X : STA.w SprXH, X -PLX + PHX + PHY -PHX -PHY + LDA.b #$1C + JSL $00D4ED ; WriteTo4BPPBuffer_item_gfx -LDA.b #$1C -JSL $00D4ED ; WriteTo4BPPBuffer_item_gfx + PLY + PLX -PLY -PLX - -.exit -RTS \ No newline at end of file + .exit + RTS