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
}