Data in initialsramtable.asm gets copied to SRAM on save file init Frontend will be responsible for setting this, requires frontend changes Changed some label names to disambiguate WRAM and SRAM labels Deleted open mode
265 lines
7.5 KiB
NASM
265 lines
7.5 KiB
NASM
|
|
|
|
; Does tile modification for... the pyramid of power hole
|
|
; after Ganon slams into it in bat form?
|
|
Overworld_CreatePyramidHoleModified:
|
|
LDA.l InvertedMode : BNE +
|
|
JMP .originalBehaviour
|
|
+
|
|
.invertedBehavior
|
|
REP #$30
|
|
|
|
LDX.w #$0440
|
|
LDA.w #$0E39
|
|
|
|
JSL Overworld_DrawPersistentMap16
|
|
|
|
LDX.w #$04BC
|
|
LDA.w #$0E3A
|
|
|
|
JSL C9DE_LONG
|
|
JSL C9DE_LONG
|
|
JSL C9DE_LONG
|
|
JSL C9DE_LONG
|
|
|
|
LDX.w #$053C
|
|
|
|
JSL C9DE_LONG
|
|
JSL C9DE_LONG
|
|
JSL C9DE_LONG
|
|
JSL C9DE_LONG
|
|
|
|
LDX.w #$05BE
|
|
LDA.w #$0490
|
|
|
|
JSL C9DE_LONG
|
|
JSL C9DE_LONG
|
|
|
|
LDA.w #$FFFF : STA $1012, Y
|
|
|
|
JMP .ending
|
|
.originalBehaviour
|
|
REP #$30
|
|
|
|
LDX.w #$03BC
|
|
LDA.w #$0E39
|
|
|
|
JSL Overworld_DrawPersistentMap16
|
|
|
|
LDX.w #$03BE
|
|
LDA.w #$0E3A
|
|
|
|
JSL C9DE_LONG
|
|
JSL C9DE_LONG
|
|
|
|
LDX.w #$043C
|
|
|
|
JSL C9DE_LONG
|
|
JSL C9DE_LONG
|
|
JSL C9DE_LONG
|
|
|
|
LDX.w #$04BC
|
|
|
|
JSL C9DE_LONG
|
|
JSL C9DE_LONG
|
|
JSL C9DE_LONG
|
|
|
|
LDA.w #$FFFF : STA $1012, Y
|
|
|
|
.ending
|
|
LDA.w #$3515 : STA $012D
|
|
|
|
SEP #$30
|
|
|
|
LDA OverworldEventDataWRAM+$5B : ORA.b #$20 : STA OverworldEventDataWRAM+$5B
|
|
|
|
LDA.b #$03 : STA $012F
|
|
|
|
LDA.b #$01 : STA $14
|
|
|
|
RTL
|
|
;------------------------------------------------------------------------------
|
|
Draw_PyramidOverlay:
|
|
LDA.l InvertedMode : AND.w #$00FF : BNE .done
|
|
.normal
|
|
LDA.w #$0E39 : STA $23BC
|
|
INC A : STA $23BE
|
|
INC A : STA $23C0
|
|
INC A : STA $243C
|
|
INC A : STA $243E
|
|
INC A : STA $2440
|
|
INC A : STA $24BC
|
|
INC A : STA $24BE
|
|
INC A : STA $24C0
|
|
.done
|
|
RTL
|
|
;------------------------------------------------------------------------------
|
|
|
|
Inverted_TR_TileAttributes:
|
|
db $27, $27, $27, $27, $27, $27, $02, $02, $01, $01, $01, $00, $00, $00, $00, $00
|
|
db $27, $01, $01, $01, $01, $01, $02, $02, $27, $27, $27, $00, $00, $00, $00, $00
|
|
db $27, $01, $01, $01, $20, $01, $02, $02, $27, $27, $27, $00, $00, $00, $00, $00
|
|
db $27, $01, $01, $01, $01, $20, $02, $02, $02, $02, $02, $00, $00, $00, $00, $00
|
|
db $01, $01, $01, $01, $1A, $01, $12, $01, $01, $02, $01, $01, $28, $2E, $2A, $2B
|
|
db $01, $01, $18, $18, $1A, $01, $12, $01, $01, $2C, $02, $2D, $29, $2F, $02, $02
|
|
db $01, $01, $01, $01, $01, $01, $02, $01, $02, $2E, $00, $00, $2C, $00, $4E, $4F
|
|
db $01, $01, $01, $01, $01, $01, $02, $01, $02, $00, $2E, $00, $00, $00, $02, $22
|
|
db $01, $01, $02, $00, $00, $00, $18, $12, $02, $02, $00, $48, $00, $00, $00, $00
|
|
db $01, $01, $02, $00, $01, $01, $10, $1A, $02, $00, $00, $48, $00, $00, $00, $00
|
|
db $10, $10, $02, $00, $01, $01, $01, $01, $00, $00, $48, $00, $00, $09, $00, $00
|
|
db $02, $02, $02, $00, $01, $01, $2B, $00, $00, $09, $00, $00, $00, $00, $00, $00
|
|
db $01, $01, $01, $01, $01, $01, $02, $02, $02, $02, $02, $02, $02, $00, $00, $00
|
|
db $01, $01, $01, $01, $01, $01, $02, $02, $02, $02, $02, $02, $02, $00, $00, $00
|
|
db $01, $01, $01, $46, $01, $01, $02, $02, $02, $02, $02, $02, $02, $00, $00, $00
|
|
db $01, $01, $01, $01, $01, $01, $02, $02, $02, $02, $02, $02, $02, $00, $00, $00
|
|
db $02, $02, $42, $02, $02, $02, $02, $02, $02, $02, $29, $22, $00, $00, $00, $00
|
|
db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $29, $22, $00, $00, $00, $00
|
|
db $00, $02, $02, $02, $00, $00, $02, $02, $02, $02, $00, $00, $00, $00, $00, $00
|
|
db $00, $02, $02, $02, $02, $29, $02, $02, $02, $02, $00, $00, $00, $00, $00, $00
|
|
db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $02, $44
|
|
db $01, $01, $01, $01, $01, $01, $01, $01, $02, $02, $02, $00, $00, $00, $02, $44
|
|
db $01, $01, $01, $01, $01, $01, $01, $01, $02, $02, $02, $00, $00, $00, $00, $00
|
|
db $01, $01, $43, $01, $01, $01, $01, $01, $02, $02, $02, $00, $00, $00, $00, $00
|
|
db $50, $02, $54, $51, $57, $57, $56, $56, $27, $27, $27, $00, $40, $40, $48, $48
|
|
db $50, $02, $54, $51, $57, $2A, $56, $56, $27, $27, $27, $00, $40, $40, $57, $48
|
|
db $27, $02, $52, $53, $02, $01, $12, $18, $55, $55, $00, $00, $48, $02, $02, $00
|
|
db $27, $02, $52, $53, $09, $01, $1A, $10, $55, $55, $00, $00, $48, $02, $02, $00
|
|
db $02, $02, $18, $08, $08, $08, $09, $09, $08, $08, $29, $02, $02, $02, $1A, $02
|
|
db $08, $08, $10, $08, $12, $00, $09, $09, $09, $09, $09, $48, $09, $29, $00, $4B
|
|
db $02, $02, $02, $00, $08, $02, $02, $00, $00, $00, $00, $01, $00, $00, $20, $00
|
|
db $02, $02, $02, $02, $02, $02, $02, $00, $00, $01, $01, $01, $02, $00, $08, $00
|
|
|
|
Electric_Barrier:
|
|
LDA InvertedMode : BEQ .done
|
|
LDA OverworldEventDataWRAM, X : ORA #$40 : STA OverworldEventDataWRAM, X ;set barrier dead
|
|
.done
|
|
LDA OverworldEventDataWRAM, X ; what we wrote over
|
|
RTL
|
|
|
|
|
|
GanonTowerAnimation:
|
|
LDA InvertedMode : BEQ .done
|
|
LDA.b #$1B : STA $012F
|
|
STZ $04C6
|
|
STZ $B0
|
|
STZ $0710
|
|
STZ $02E4
|
|
|
|
STZ $0FC1
|
|
|
|
STZ $011A
|
|
STZ $011B
|
|
STZ $011C
|
|
STZ $011D
|
|
LDA.b #$02 : STA $012C
|
|
LDA.b #$09 : STA $012D
|
|
RTL
|
|
.done
|
|
LDA.b #$05 : STA $04C6 ;what we wrote over
|
|
STZ $B0 ; (continued)
|
|
STZ $C8 ; (continued)
|
|
RTL
|
|
|
|
GanonTowerInvertedCheck:
|
|
{
|
|
LDA InvertedMode : BEQ .done
|
|
LDA #$01 ; Load a random value so it doesn't BEQ
|
|
RTL
|
|
.done
|
|
LDA $8A : CMP.b #$43 ;what we wrote over
|
|
RTL
|
|
}
|
|
|
|
|
|
;Hard coded rock removed in LW for Inverted mode
|
|
HardcodedRocks:
|
|
|
|
LDA InvertedMode : AND.w #$00FF : BEQ .normalrocks
|
|
BRA .noRock2
|
|
.normalrocks
|
|
LDA.w #$020F : LDX $8A : CPX.w #$0033 : BNE .noRock
|
|
STA $7E22A8
|
|
.noRock
|
|
CPX.w #$002F : BNE .noRock2
|
|
STA $7E2BB2
|
|
.noRock2
|
|
RTL
|
|
|
|
TurtleRockPegSolved:
|
|
LDA.l InvertedMode : AND.w #$00FF : BNE +
|
|
LDA.l OverworldEventDataWRAM+07 ; What we wrote over (reading flags for this screen)
|
|
RTL
|
|
+
|
|
LDA.w #$0020 ; We always treat puzzle as pre solved (overlay flag set) for inverted mode.
|
|
RTL
|
|
|
|
MirrorBonk:
|
|
; must preserve X/Y, and must preserve $00-$0F
|
|
LDA.l InvertedMode : BEQ .normal
|
|
|
|
; Goal: use $20 and $22 to decide to force a bonk
|
|
; if we want to bonk branch to .forceBonk
|
|
; otherwise fall through to .normal
|
|
PHX : PHP
|
|
PHB : PHK : PLB
|
|
LDA $8A : AND.b #$40 : BEQ .endLoop ;World we're in? branch if we are in LW we don't want bonks
|
|
REP #$30
|
|
LDX #$0000
|
|
.loop
|
|
LDA.l .bonkRectanglesTable, X ;Load X1
|
|
CMP $22 : !BGE ++
|
|
;IF X > X1
|
|
LDA.l .bonkRectanglesTable+2, X ; Load X2
|
|
CMP $22 : !BLT ++
|
|
;IF X < X2
|
|
LDA.l .bonkRectanglesTable+4, X ;Load Y1
|
|
CMP $20 : !BGE ++
|
|
;IF Y > Y1
|
|
LDA.l .bonkRectanglesTable+6, X ; Load Y2
|
|
CMP $20 : !BLT ++
|
|
;IF Y < Y2
|
|
;Bonk Here
|
|
PLB : PLP : PLX
|
|
BRA .forceBonk
|
|
++
|
|
TXA : !ADD #$0008 : CMP #.tableEnd-.bonkRectanglesTable : BEQ .endLoop
|
|
TAX
|
|
BRA .loop
|
|
.endbonkRectanglesTable
|
|
|
|
.endLoop
|
|
PLB : PLP : PLX
|
|
.normal
|
|
;Not forcing a bonk, so the vanilla bonk detection run.
|
|
LDA $0C : ORA $0E
|
|
JML.l MirrorBonk_NormalReturn
|
|
.forceBonk
|
|
JML.l MirrorBonk_BranchGamma
|
|
|
|
.bonkRectanglesTable
|
|
;X1 X2 Y1 Y2
|
|
dw #$0290, #$02C8, #$0CA8, #$0CF8 ;Desert checkerboard cave2
|
|
dw #$05F8, #$0A00, #$0600, #$0660 ;Castle Top
|
|
dw #$05B0, #$06A0, #$0660, #$0830 ;Castle Top
|
|
dw #$06A0, #$0770, #$0660, #$0680 ;Castle Top
|
|
dw #$0880, #$0950, #$0660, #$0688 ;Castle Top
|
|
dw #$0950, #$0A00, #$0660, #$0830 ;Castle Top
|
|
dw #$07B8, #$0848, #$08E0, #$0970 ;Castle Bridge
|
|
dw #$02EF, #$0321, #$0C16, #$0CA2 ;Desert (Mazeblock cave)
|
|
dw #$0048, #$008F, #$0B10, #$0B48
|
|
dw #$0358, #$0440, #$0E08, #$0ED0
|
|
dw #$03B8, #$0420, #$0ED0, #$0FE8
|
|
dw #$0360, #$03C8, #$0EC0, #$0F20
|
|
dw #$0C68, #$0D00, #$0D78, #$0DC8
|
|
dw #$0F40, #$0F70, #$0618, #$0640 ;Pod/eastern entrance
|
|
dw #$0E28, #$0E78, #$0298, #$02E8
|
|
dw #$0F10, #$0F80, #$01F8, #$0238
|
|
dw #$0AA8, #$0B90, #$02C8, #$0320
|
|
dw #$0D18, #$0D80, #$0040, #$0070
|
|
dw #$0EF0, #$0F30, #$0120, #$0160
|
|
dw #$0AD0, #$0B00, #$0B50, #$0B70 ;Bridge Left
|
|
dw #$0B30, #$0B60, #$0B50, #$0B70 ;Bridge Right
|
|
dw #$0678, #$06F0, #$0010, #$0040 ;Ether Island
|
|
dw #$02A8, #$02E8, #$0C90, #$0CC0 ;Desert Checkerboard Cave3
|
|
.tableEnd
|