Difference between revisions of "Crystal Switch"
From TLoZ: ALTTP Hacking Resources
(→Another Section) |
|||
Line 14: | Line 14: | ||
== Known Bugs == | == Known Bugs == | ||
− | == | + | == Disassembly == |
+ | |||
+ | Todo: | ||
+ | -Make ram addresses link to proper subsection of RAM map. | ||
+ | -Make sub jumps link to proper subsection of bank page. | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ; $338CE-$338CF DATA | ||
+ | pool Sprite_CrystalSwitch: | ||
+ | { | ||
+ | |||
+ | .palettes | ||
+ | db $02, $04 | ||
+ | } | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ; *$338D0-$3394B JUMP LOCATION | ||
+ | Sprite_CrystalSwitch: | ||
+ | { | ||
+ | ; AND the palette value with 0xF1 | ||
+ | LDA $0F50, X : AND.b #$F1 : STA $0F50, X | ||
+ | |||
+ | ; Blue / Orange barrier state | ||
+ | LDA $7EC172 : AND.b #$01 : TAY | ||
+ | |||
+ | ; Select the palette for the peg switch based on that state. | ||
+ | LDA .palettes, Y : ORA $0F50, X : STA $0F50, X | ||
+ | |||
+ | JSR OAM_AllocateDeferToPlayer | ||
+ | JSR Sprite_PrepAndDrawSingleLarge | ||
+ | JSR Sprite_CheckIfActive | ||
+ | |||
+ | JSR Sprite_CheckDamageToPlayer_same_layer : BCC .no_player_collision | ||
+ | |||
+ | JSL Sprite_NullifyHookshotDrag | ||
+ | |||
+ | STZ $5E | ||
+ | |||
+ | JSL Sprite_RepelDashAttackLong | ||
+ | |||
+ | .no_player_collision | ||
+ | |||
+ | LDA $0DF0, X : BNE .skipSparkleGeneration | ||
+ | |||
+ | LDA $1A : AND.b #$07 : STA $00 | ||
+ | STZ $01 | ||
+ | |||
+ | JSL GetRandomInt : AND.b #$07 : STA $02 | ||
+ | STZ $03 | ||
+ | |||
+ | ; Attempt to add a sparkle effect | ||
+ | JSL Sprite_SpawnSimpleSparkleGarnish | ||
+ | |||
+ | ; Restart sparkle countdown timer. | ||
+ | LDA.b #$1F : STA $0DF0, X | ||
+ | |||
+ | .skipSparkleGeneration | ||
+ | |||
+ | LDA $0EA0, X : BNE .switching_already_scheduled | ||
+ | |||
+ | LDA $3C : DEC A : CMP.b #$08 : BPL .ignore_player_poke_attack | ||
+ | |||
+ | JSR Sprite_CheckDamageFromPlayer | ||
+ | |||
+ | .ignore_player_poke_attack | ||
+ | |||
+ | RTS | ||
+ | |||
+ | .switching_already_scheduled | ||
+ | |||
+ | DEC $0EA0, X : CMP.b #$0B : BNE .dont_switch_state | ||
+ | |||
+ | ; Change the orange/blue barrier state | ||
+ | LDA $7EC172 : EOR.b #$01 : STA $7EC172 | ||
+ | |||
+ | LDA.b #$16 : STA $11 | ||
+ | |||
+ | LDA.b #$25 : JSL Sound_SetSfx3PanLong | ||
+ | |||
+ | .dont_switch_state | ||
+ | |||
+ | RTS | ||
+ | } |
Revision as of 03:40, 19 April 2016
Crystal Switch | |
---|---|
Sprite ID | $1E |
HP | $00 ($06B191) |
Damage | $00 ($06B284) |
Palette | $01 ($06B377) |
Found | Many Places |
Description
Activating a crystal switch raises or lowers colored pillars.
Combat Strategy
Known Bugs
Disassembly
Todo: -Make ram addresses link to proper subsection of RAM map. -Make sub jumps link to proper subsection of bank page.
; $338CE-$338CF DATA pool Sprite_CrystalSwitch: { .palettes db $02, $04 }
; *$338D0-$3394B JUMP LOCATION Sprite_CrystalSwitch: { ; AND the palette value with 0xF1 LDA $0F50, X : AND.b #$F1 : STA $0F50, X ; Blue / Orange barrier state LDA $7EC172 : AND.b #$01 : TAY ; Select the palette for the peg switch based on that state. LDA .palettes, Y : ORA $0F50, X : STA $0F50, X JSR OAM_AllocateDeferToPlayer JSR Sprite_PrepAndDrawSingleLarge JSR Sprite_CheckIfActive JSR Sprite_CheckDamageToPlayer_same_layer : BCC .no_player_collision JSL Sprite_NullifyHookshotDrag STZ $5E JSL Sprite_RepelDashAttackLong .no_player_collision LDA $0DF0, X : BNE .skipSparkleGeneration LDA $1A : AND.b #$07 : STA $00 STZ $01 JSL GetRandomInt : AND.b #$07 : STA $02 STZ $03 ; Attempt to add a sparkle effect JSL Sprite_SpawnSimpleSparkleGarnish ; Restart sparkle countdown timer. LDA.b #$1F : STA $0DF0, X .skipSparkleGeneration LDA $0EA0, X : BNE .switching_already_scheduled LDA $3C : DEC A : CMP.b #$08 : BPL .ignore_player_poke_attack JSR Sprite_CheckDamageFromPlayer .ignore_player_poke_attack RTS .switching_already_scheduled DEC $0EA0, X : CMP.b #$0B : BNE .dont_switch_state ; Change the orange/blue barrier state LDA $7EC172 : EOR.b #$01 : STA $7EC172 LDA.b #$16 : STA $11 LDA.b #$25 : JSL Sound_SetSfx3PanLong .dont_switch_state RTS }