Files
alttpr-baserom/pendantcrystalhud.asm
2017-09-05 22:37:03 -04:00

446 lines
14 KiB
NASM

;================================================================================
; Pendant / Crystal HUD Fix
;--------------------------------------------------------------------------------
;CheckPendantHUD:
; LDA !HUD_FLAG : CMP.b #$40 ; check for hud flag instead
;RTL
;================================================================================
FlipLWDWFlag:
PHP
SEP #$20 ; set 8-bit accumulator
LDA $7EF3CA : EOR.b #$40 : STA $7EF3CA
BEQ +
LDA.b #07 : BRA ++ ; dark world - crystals
+
LDA.b #03 ; light world - pendants
++
STA $7EF3C7
PLP
RTL
;================================================================================
GetCrystalNumber:
PHX
TXA : ASL : TAX
LDA $7EF3CA : EOR.b #$40 : BNE +
INX
+
LDA.l CrystalNumberTable-16, X
PLX
RTL
;================================================================================
!INVENTORY_MAP = "$7EF368"
OverworldMap_CheckObject:
PHX
;CPX.b #$01 : BNE + : BRL ++ : + : BRL .fail
LDA $7EF3CA : AND.b #$40 : BNE +
;LW Map
LDA.l MapMode : BEQ +++
LDA.l !INVENTORY_MAP : AND.b #$01 : BNE +++
PHX
LDA.l .lw_map_offsets, X : TAX ; put map offset into X
LDA.l !INVENTORY_MAP, X
PLX
AND.l .lw_map_masks, X : BNE +++
BRL .fail
+++
LDA.l .lw_offsets, X
BPL +++ : CLC : BRA .done : +++ ; don't display master sword
TAX : BRA ++
+
;DW Map
LDA.l MapMode : BEQ +++
LDA.l !INVENTORY_MAP : AND.b #$02 : BNE +++
PHX
LDA.l .dw_map_offsets, X : TAX ; put map offset into X
LDA.l !INVENTORY_MAP, X
PLX
AND.l .dw_map_masks, X : BNE +++
BRL .fail
+++
LDA.l .dw_offsets, X
TAX : BRA ++
SEC
PLX
RTL
++
LDA.l CrystalPendantFlags_2, X
AND.b #$40 : BNE .checkCrystal
.checkPendant
LDA $7EF374 : AND.l CrystalPendantFlags, X : BNE .fail
CLC : BRA .done
.checkCrystal
LDA $7EF37A : AND.l CrystalPendantFlags, X : BNE .fail
CLC : BRA .done
.fail
SEC
.done
PLX
RTL
.lw_offsets
db $02, $0A, $03, $FF
.dw_offsets
db $06, $08, $0C, $0B, $07, $09, $05
.lw_map_offsets
db $01, $00, $01
.dw_map_offsets
db $01, $01, $00, $00, $00, $01, $00
.lw_map_masks
db $20, $20, $10, $00
.dw_map_masks
db $02, $04, $80, $10, $40, $01, $04
;================================================================================
SetLWDWMap:
PHP
SEP #$20 ; set 8-bit accumulator
LDA $7EF3CA : EOR.b #$40
BNE +
LDA.b #07 : BRA ++ ; dark world - crystals
+
LDA.b #03 ; light world - pendants
++
STA $7EF3C7
PLP
RTL
;================================================================================
GetMapMode:
LDA $7EF3CA : AND.b #$40 : BEQ +
LDA.b #07 ; dark world - crystals
RTL
+
LDA.b #03 ; light world - pendants
RTL
;================================================================================
CheckHeraObject:
LDA CrystalPendantFlags_2_hera : AND.w #$00FF : BNE .crystal
.pendant
LDA $7EF374 : AND.l CrystalPendantFlags_hera : AND.w #$00FF
RTL
.crystal
LDA $7EF37A : AND.l CrystalPendantFlags_hera : AND.w #$00FF
RTL
;================================================================================
;GetPendantCrystalWorld:
; PHB : PHK : PLB
; PHX
; LDA $040C : LSR : TAX
; LDA .dungeon_worlds, X
; PLX : PLB
; CMP.b #$00
;RTL
;================================================================================
ShowDungeonItems:
LDA $040C : AND.w #$00FF : CMP.w #$00FF : BNE + : RTL : + ; return normal result if outdoors or in a cave
;LDA $F0 : AND.w #$0020 ; check for select
LDA !HUD_FLAG : AND.w #$0020 ; check hud flag
BEQ + : LDA.w #$0000 : RTL : + ; if set, send the zero onwards
LDA $040C : AND.w #$00FF : CMP.w #$00FF ; original logic
RTL
;--------------------------------------------------------------------------------
DrawHUDDungeonItems:
; left side
;LDA.w #$2871 : STA $1604 ; dungeon row
LDA.w #$2810 : STA $1644 ; small keys
LDA.w #$2811 : STA $1684 ; big key
LDA.w #$2821 : STA $16C4 ; map
LDA.w #$2C20 : STA $1704 ; compass
; dungeon names
LDA.w #$2D50 : STA $1606 ; sewers
LDA.w #$2D51 : STA $1608 ; Eastern
LDA.w #$2D52 : STA $160A ; Desert
LDA.w #$2D53 : STA $160C ; Hera
LDA.w #$2D54 : STA $160E ; Agahnims Tower
LDA.w #$2D55 : STA $1612 ; PoD
LDA.w #$2D56 : STA $1614 ; Swamp
LDA.w #$2D57 : STA $1616 ; Skull Woods
LDA.w #$2D58 : STA $1618 ; Thieves Town
LDA.w #$2D59 : STA $161A ; Ice
LDA.w #$2D5A : STA $161C ; Mire
LDA.w #$2D5B : STA $161E ; Turtle Rock
LDA.w #$2D5C : STA $1622 ; Ganon's Tower
SEP #$20 ; set 8-bit accumulator
; Small Keys
LDA.b #$16 : !ADD $7EF37C : STA $1646 : LDA.b #$28 : ADC #$00 : sta $1646+1 ; sewers
LDA.b #$16 : !ADD $7EF37E : STA $1648 : LDA.b #$28 : ADC #$00 : sta $1648+1 ; Eastern
LDA.b #$16 : !ADD $7EF37F : STA $164A : LDA.b #$28 : ADC #$00 : sta $164A+1 ; Desert
LDA.b #$16 : !ADD $7EF386 : STA $164C : LDA.b #$28 : ADC #$00 : sta $164C+1 ; Hera
LDA.b #$16 : !ADD $7EF380 : STA $164E : LDA.b #$28 : ADC #$00 : sta $164E+1 ; Agahnims Tower
LDA.b #$16 : !ADD $7EF382 : STA $1652 : LDA.b #$28 : ADC #$00 : sta $1652+1 ; PoD
LDA.b #$16 : !ADD $7EF381 : STA $1654 : LDA.b #$28 : ADC #$00 : sta $1654+1 ; Swamp
LDA.b #$16 : !ADD $7EF384 : STA $1656 : LDA.b #$28 : ADC #$00 : sta $1656+1 ; Skull Woods
LDA.b #$16 : !ADD $7EF387 : STA $1658 : LDA.b #$28 : ADC #$00 : sta $1658+1 ; Thieves Town
LDA.b #$16 : !ADD $7EF385 : STA $165A : LDA.b #$28 : ADC #$00 : sta $165A+1 ; Ice
LDA.b #$16 : !ADD $7EF383 : STA $165C : LDA.b #$28 : ADC #$00 : sta $165C+1 ; Mire
LDA.b #$16 : !ADD $7EF388 : STA $165E : LDA.b #$28 : ADC #$00 : sta $165E+1 ; Turtle Rock
LDA.b #$16 : !ADD $7EF389 : STA $1662 : LDA.b #$28 : ADC #$00 : sta $1662+1 ; Ganon's Tower
REP #$20 ; set 16-bit accumulator
; Big Keys
LDA $7EF367 : AND.w #$0080 : BEQ + ; sewers
LDA.w #$2826 : STA $1686
+
LDA $7EF367 : AND.w #$0020 : BEQ + ; Eastern
LDA.w #$2826 : STA $1688
+
LDA $7EF367 : AND.w #$0010 : BEQ + ; Desert
LDA.w #$2826 : STA $168A
+
LDA $7EF366 : AND.w #$0020 : BEQ + ; Hera
LDA.w #$2826 : STA $168C
+
LDA $7EF367 : AND.w #$0008 : BEQ + ; Agahnims Tower
LDA.w #$2826 : STA $168E
+
LDA $7EF367 : AND.w #$0002 : BEQ + ; PoD
LDA.w #$2826 : STA $1692
+
LDA $7EF367 : AND.w #$0004 : BEQ + ; Swamp
LDA.w #$2826 : STA $1694
+
LDA $7EF366 : AND.w #$0080 : BEQ + ; Skull Woods
LDA.w #$2826 : STA $1696
+
LDA $7EF366 : AND.w #$0010 : BEQ + ; Thieves Town
LDA.w #$2826 : STA $1698
+
LDA $7EF366 : AND.w #$0040 : BEQ + ; Ice
LDA.w #$2826 : STA $169A
+
LDA $7EF367 : AND.w #$0001 : BEQ + ; Mire
LDA.w #$2826 : STA $169C
+
LDA $7EF366 : AND.w #$0008 : BEQ + ; Turtle Rock
LDA.w #$2826 : STA $169E
+
LDA $7EF366 : AND.w #$0004 : BEQ + ; Ganon's Tower
LDA.w #$2826 : STA $16A2
+
; Maps
LDA $7EF369 : AND.w #$0080 : BEQ + ; sewers
LDA.w #$2826 : STA $16C6
+
LDA $7EF369 : AND.w #$0020 : BEQ + ; Eastern
LDA.w #$2826 : STA $16C8
+
LDA $7EF369 : AND.w #$0010 : BEQ + ; Desert
LDA.w #$2826 : STA $16CA
+
LDA $7EF368 : AND.w #$0020 : BEQ + ; Hera
LDA.w #$2826 : STA $16CC
+
LDA $7EF369 : AND.w #$0008 : BEQ + ; Agahnims Tower
LDA.w #$2826 : STA $16CE
+
LDA $7EF369 : AND.w #$0002 : BEQ + ; PoD
LDA.w #$2826 : STA $16D2
+
LDA $7EF369 : AND.w #$0004 : BEQ + ; Swamp
LDA.w #$2826 : STA $16D4
+
LDA $7EF368 : AND.w #$0080 : BEQ + ; Skull Woods
LDA.w #$2826 : STA $16D6
+
LDA $7EF368 : AND.w #$0010 : BEQ + ; Thieves Town
LDA.w #$2826 : STA $16D8
+
LDA $7EF368 : AND.w #$0040 : BEQ + ; Ice
LDA.w #$2826 : STA $16DA
+
LDA $7EF369 : AND.w #$0001 : BEQ + ; Mire
LDA.w #$2826 : STA $16DC
+
LDA $7EF368 : AND.w #$0008 : BEQ + ; Turtle Rock
LDA.w #$2826 : STA $16DE
+
LDA $7EF368 : AND.w #$0004 : BEQ + ; Ganon's Tower
LDA.w #$2826 : STA $16E2
+
; Compasses
LDA $7EF365 : AND.w #$0080 : BEQ + ; sewers
LDA.w #$2C26 : STA $1706
+
LDA $7EF365 : AND.w #$0020 : BEQ + ; Eastern
LDA.w #$2C26 : STA $1708
+
LDA $7EF365 : AND.w #$0010 : BEQ + ; Desert
LDA.w #$2C26 : STA $170A
+
LDA $7EF364 : AND.w #$0020 : BEQ + ; Hera
LDA.w #$2C26 : STA $170C
+
LDA $7EF365 : AND.w #$0008 : BEQ + ; Agahnims Tower
LDA.w #$2C26 : STA $170E
+
LDA $7EF365 : AND.w #$0002 : BEQ + ; PoD
LDA.w #$2C26 : STA $1712
+
LDA $7EF365 : AND.w #$0004 : BEQ + ; Swamp
LDA.w #$2C26 : STA $1714
+
LDA $7EF364 : AND.w #$0080 : BEQ + ; Skull Woods
LDA.w #$2C26 : STA $1716
+
LDA $7EF364 : AND.w #$0010 : BEQ + ; Thieves Town
LDA.w #$2C26 : STA $1718
+
LDA $7EF364 : AND.w #$0040 : BEQ + ; Ice
LDA.w #$2C26 : STA $171A
+
LDA $7EF365 : AND.w #$0001 : BEQ + ; Mire
LDA.w #$2C26 : STA $171C
+
LDA $7EF364 : AND.w #$0008 : BEQ + ; Turtle Rock
LDA.w #$2C26 : STA $171E
+
LDA $7EF364 : AND.w #$0004 : BEQ + ; Ganon's Tower
LDA.w #$2C26 : STA $1722
+
LDA.w #$11CE : STA $00 ; thing we wrote over
RTL
;--------------------------------------------------------------------------------
;================================================================================
DrawPendantCrystalDiagram:
PHP : PHB : PHK : PLB
REP #$30 ; Set 16-bit accumulator & index registers
LDX.w #$0000 ; Paint entire box black & draw empty pendants and crystals
-
LDA .row0, X : STA $12EA, X
LDA .row1, X : STA $132A, X
LDA .row2, X : STA $136A, X
LDA .row3, X : STA $13AA, X
LDA .row4, X : STA $13EA, X
LDA .row5, X : STA $142A, X
LDA .row6, X : STA $146A, X
LDA .row7, X : STA $14AA, X
LDA .row8, X : STA $14EA, X
INX #2 : CPX.w #$0014 : BCC -
;pendants
LDA $7EF374 : AND.w #$0004 : BEQ + ; pendant of courage (green)
LDA.w #$3D2B : STA $1332
LDA.w #$3D2C : STA $1334
LDA.w #$3D2D : STA $1372
LDA.w #$3D2E : STA $1374
+ LDA $7EF374 : AND.w #$0002 : BEQ + ; pendant of power (blue)
LDA.w #$2D2B : STA $13AE
LDA.w #$2D2C : STA $13B0
LDA.w #$2D2D : STA $13EE
LDA.w #$2D2E : STA $13F0
+ LDA $7EF374 : AND.w #$0001 : BEQ + ; pendant of wisdom (red)
LDA.w #$252B : STA $13B6
LDA.w #$252C : STA $13B8
LDA.w #$252D : STA $13F6
LDA.w #$252E : STA $13F8
+
;crystals
LDA $7EF37A : AND.w #$0002 : BEQ + ; crystal 1
LDA.w #$2D44 : STA $14AC
LDA.w #$2D45 : STA $14AE
+ LDA $7EF37A : AND.w #$0010 : BEQ + ; crystal 2
LDA.w #$2D44 : STA $146E
LDA.w #$2D45 : STA $1470
+ LDA $7EF37A : AND.w #$0040 : BEQ + ; crystal 3
LDA.w #$2D44 : STA $14B0
LDA.w #$2D45 : STA $14B2
+ LDA $7EF37A : AND.w #$0020 : BEQ + ; crystal 4
LDA.w #$2D44 : STA $1472
LDA.w #$2D45 : STA $1474
+ LDA $7EF37A : AND.w #$0004 : BEQ + ; crystal 5
LDA.w #$2544 : STA $14B4
LDA.w #$2545 : STA $14B6
+ LDA $7EF37A : AND.w #$0001 : BEQ + ; crystal 6
LDA.w #$2544 : STA $1476
LDA.w #$2545 : STA $1478
+ LDA $7EF37A : AND.w #$0008 : BEQ + ; crystal 7
LDA.w #$2D44 : STA $14B8
LDA.w #$2D45 : STA $14BA
+
PLB : PLP
RTL
;================================================================================
.row0 dw $28FB, $28F9, $28F9, $28F9, $28F9, $28F9, $28F9, $28F9, $28F9, $68FB
.row1 dw $28FC, $24F5, $24F5, $24F5, $312B, $312C, $24F5, $24F5, $24F5, $68FC
.row2 dw $28FC, $24F5, $24F5, $24F5, $313D, $312E, $24F5, $24F5, $24F5, $68FC
.row3 dw $28FC, $24F5, $312B, $312C, $24F5, $24F5, $312B, $312C, $24F5, $68FC
.row4 dw $28FC, $24F5, $313D, $312E, $24F5, $24F5, $313D, $312E, $24F5, $68FC
.row5 dw $28FC, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $68FC
.row6 dw $28FC, $24F5, $3146, $3147, $3146, $3147, $3146, $3147, $24F5, $68FC
.row7 dw $28FC, $3146, $3147, $3146, $3147, $3146, $3147, $3146, $3147, $68FC
.row8 dw $A8FB, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $E8FB
;================================================================================
;Crystal 1: $02
;Crystal 2: $10
;Crystal 3: $40
;Crystal 4: $20
;Crystal 5: $04
;Crystal 6: $01
;Crystal 7: $08
;;blank pendant
;db $2B, $31, $2C, $31, $3D, $31, $2E, $31
;
;;red pendant
;db $2B, $25, $2C, $25, $2D, $25, $2E, $25
;
;;blue pendant
;db $2B, $2D, $2C, $2D, $2D, $2D, $2E, $2D
;
;;green pendant
;db $2B, $3D, $2C, $3D, $2D, $3D, $2E, $3D
;================================================================================
.pendants
dw $28FB, $28F9, $28F9, $28F9, $28F9, $28F9, $28F9, $28F9, $28F9, $68FB
dw $28FC, $2521, $2522, $2523, $2524, $253F, $24F5, $24F5, $24F5, $68FC
dw $28FC, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $68FC
dw $28FC, $24F5, $24F5, $24F5, $213B, $213C, $24F5, $24F5, $24F5, $68FC
dw $28FC, $24F5, $24F5, $24F5, $213D, $213E, $24F5, $24F5, $24F5, $68FC
dw $28FC, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $68FC
dw $28FC, $24F5, $213B, $213C, $24F5, $24F5, $213B, $213C, $24F5, $68FC
dw $28FC, $24F5, $213D, $213E, $24F5, $24F5, $213D, $213E, $24F5, $68FC
dw $A8FB, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $E8FB
.crystals
dw $28FB, $28F9, $28F9, $28F9, $28F9, $28F9, $28F9, $28F9, $28F9, $68FB
dw $28FC, $252F, $2534, $2535, $2536, $2537, $24F5, $24F5, $24F5, $68FC
dw $28FC, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $68FC
dw $28FC, $24F5, $24F5, $3146, $3147, $3146, $3147, $24F5, $24F5, $68FC
dw $28FC, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $68FC
dw $28FC, $24F5, $3146, $3147, $3146, $3147, $3146, $3147, $24F5, $68FC
dw $28FC, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $68FC
dw $28FC, $24F5, $24F5, $3146, $3147, $3146, $3147, $24F5, $24F5, $68FC
dw $A8FB, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $E8FB
;================================================================================
; DATA - Dungeon Worlds
;.dungeon_worlds
;db $00, $00, $00, $00, $00, $40, $40, $40
;db $40, $40, $00, $40, $40, $40, $FF, $FF
;================================================================================
;0x00 - Sewer Passage
;0x02 - Hyrule Castle
;0x04 - Eastern Palace
;0x06 - Desert Palace
;0x08 - Hyrule Castle 2
;0x0A - Swamp Palace
;0x0C - Palace of Darkness
;0x0E - Misery Mire
;0x10 - Skull Woods
;0x12 - Ice Palace
;0x14 - Tower of Hera
;0x16 - Thieves' Town
;0x18 - Turtle Rock
;0x1A - Ganon's Tower
;0x1C - ??? possibly unused. (Were they planning two extra dungeons perhaps?)
;0x1E - ??? possibly unused.
;================================================================================