Crystal Switch
From TLoZ: ALTTP Hacking Resources
| 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
}