5 Commits

Author SHA1 Message Date
2ef95d4873 WIP 2025-07-04 00:53:02 -05:00
295b6a229b start of boss souls 2025-05-04 15:17:50 -05:00
e92aa018e3 Multiworld junk item shortening 2025-03-17 19:02:02 -05:00
66e4e91beb Dashing mimics and crystal books 2025-03-09 16:42:54 -05:00
bc966c0f99 Dark room modes 2025-03-09 13:25:22 -05:00
21 changed files with 508 additions and 71 deletions

View File

@@ -181,6 +181,9 @@ incsrc dungeonmap.asm
incsrc hextodec.asm
incsrc multiworld.asm
incsrc textrenderer.asm
incsrc crystalswitchbook.asm
incsrc mimicdash.asm
incsrc souls.asm
warnpc $A58000
org $A28000
@@ -190,6 +193,7 @@ fillbyte $00 : fill 32
incbin "data/customitems.4bpp"
PreloadedGraphicsROM:
incbin "data/preloadedgfx.4bpp"
incbin "data/bossicons.souls.4bpp"
warnpc $A2B000
org $A2B000
incsrc itemdatatables.asm ; Statically mapped

View File

@@ -267,9 +267,65 @@ ParadoxCaveGfxFix:
BRA .uploadLine
;--------------------------------------------------------------------------------
SetItemRiseTimer:
LDA.w ItemReceiptMethod : CMP.b #$01 : BNE .not_from_chest
LDA.b #$38 : STA.w AncillaTimer, X
RTL
.not_from_chest
TYA : STA.w AncillaTimer, X ; What we wrote over
LDA.w ItemReceiptMethod : CMP.b #$01 : BNE .not_from_chest
LDA.b #$38 : STA.w AncillaTimer, X
RTL
.not_from_chest
LDA.l MultiworldJunkItemTimer : BEQ .default
LDA.l !MULTIWORLD_ITEM_PLAYER_ID : BNE .multiworld
LDA.l !MULTIWORLD_RECEIVING_ITEM : BNE .multiworld
BRA .default
.multiworld
LDA.l !MULTIWORLD_ITEM_ID
JSL.l ItemIsJunk
BEQ .default
.junk
LDA.l MultiworldJunkItemTimer : STA.w AncillaTimer, X
RTL
.default
TYA : STA.w AncillaTimer, X ; What we wrote over
RTL
;--------------------------------------------------------------------------------
ItemIsJunk:
PHX
LDX.b #JunkItems_end-JunkItems-1
-
CMP.l JunkItems, X : BEQ .junk
DEX : BPL -
PLX
LDA.b #$00
RTL
.junk
PLX
LDA.b #$01
RTL
RTL
JunkItems:
db $27 ; Bomb
db $28 ; 3 bombs
db $31 ; 10 bombs
db $34 ; 1 rupee
db $35 ; 5 rupees
db $36 ; 20 rupees
db $40 ; 100 rupees
db $41 ; 50 rupees
db $42 ; Heart
db $43 ; Arrow
db $44 ; 10 arrows
db $45 ; Small magic
db $46 ; 300 rupees
db $47 ; 20 rupees green
db $59 ; Rupoor
db $D1 ; Apples
db $D2 ; Fairy
db $D3 ; Chicken
db $D4 ; Big Magic
db $D5 ; 5 Arrows
db $D6 ; Good Bee
.end
;--------------------------------------------------------------------------------

52
crystalswitchbook.asm Normal file
View File

@@ -0,0 +1,52 @@
pushpc
org $87A46E
JSL CheckBookTriggerSwitch
BCS +
skip 15
+
org $8296A8
JSL FinishPegChange
pullpc
FinishPegChange:
LDA.b #$20
TRB.w $037A
STZ.b $B0
STZ.b $11
RTL
CheckBookTriggerSwitch:
LDA.l CrystalSwitchBook
BEQ +
LDA.b $10
CMP.b #$07
BNE +
LDA.l $7EC172
EOR.b #$01
STA.l $7EC172
LDA.b #$16
STA.b $11
LDA.b #$20
TSB.w $037A
LDA.b #$25
JSL $8DBB8A
SEC
BRA .done
+ CLC
.done
; what we wrote over
LDA.b $3A
AND.b #$BF
STA.b $3A
RTL

View File

@@ -15,3 +15,27 @@ dw $0000, $7E4E, $6F44, $1CF5, $7399, $1CE7, $02F9, $0233
dw $7FFF, $7FFF, $0000, $5907, $6E0E, $0000, $7FBB, $7672
.off_black
dw $0000, $14A5, $14A5, $14A5, $14A5, $14A5, $14A5, $14A5
.armos
dw hexto555($000000), hexto555($F8F8F8), hexto555($D86060), hexto555($5070C8), hexto555($B090F8), hexto555($282828), hexto555($F0A068), hexto555($B06028)
.lanmolas
dw hexto555($787040), hexto555($585030), hexto555($484018), hexto555($50C090), hexto555($408858), hexto555($305830), hexto555($D8A800), hexto555($E06018)
.moldorm
dw hexto555($F8D018), hexto555($C8B818), hexto555($A89818), hexto555($806818), hexto555($503818), hexto555($903818), hexto555($D85800), hexto555($F8A828)
.agahnim
dw hexto555($000000), hexto555($F8F8F8), hexto555($C04080), hexto555($B08828), hexto555($E8C070), hexto555($282828), hexto555($90D038), hexto555($688020)
.helmasaur
dw hexto555($A00028), hexto555($D03828), hexto555($E88820), hexto555($4848B0), hexto555($7870E8), hexto555($A8A8F8), hexto555($F8F8F8), hexto555($181818)
.arrghus
dw hexto555($000000), hexto555($F8F8F8), hexto555($903018), hexto555($D85800), hexto555($F8A828), hexto555($282828), hexto555($E88068), hexto555($B04038)
.mothula
dw hexto555($000000), hexto555($F8F8F8), hexto555($4848B0), hexto555($7870E8), hexto555($A8A8F8), hexto555($282828), hexto555($F8A840), hexto555($D85820)
.blind
dw hexto555($88D0F8), hexto555($7890F8), hexto555($903018), hexto555($D85800), hexto555($F8A828), hexto555($282828), hexto555($E88068), hexto555($B04038)
.kholdstare
dw hexto555($7098C0), hexto555($58B0E8), hexto555($D0F8F8), hexto555($4828C8), hexto555($4828F0), hexto555($8070F8), hexto555($F8C8F8), hexto555($E088B0)
.vitreous
dw hexto555($000000), hexto555($F8F8F8), hexto555($50C090), hexto555($408858), hexto555($305830), hexto555($282828), hexto555($D8A800), hexto555($E06018)
.trinexx
dw hexto555($A00028), hexto555($A8A8F8), hexto555($7870E8), hexto555($4848B0), hexto555($505060), hexto555($788890), hexto555($78C0A8), hexto555($707068)
.ganon
dw hexto555($385088), hexto555($5088A8), hexto555($88C8A0), hexto555($B090F8), hexto555($C0A028), hexto555($886008), hexto555($B83010), hexto555($E86040)

BIN
data/bossicons.souls.4bpp Normal file

Binary file not shown.

View File

@@ -14,4 +14,4 @@ incsrc hooks/damage_hooks.asm
incsrc hooks/overworld_sprite_hooks.asm
incsrc hooks/underworld_sprite_hooks.asm
incsrc hooks/underworld_sprite_hooks.asm

View File

@@ -26,7 +26,7 @@ SpritePrep_Eyegore_become_mimic:
;JSL resetSprite_Mimic : NOP
org $86ED9E ; Sprite_ApplyCalculatedDamage, skip high sprite id early exit
JSL IsItReallyAMimic : NOP
; JSL IsItReallyAMimic : NOP ; now hooked into from souls.asm
org $86EDA6 ; Sprite_ApplyCalculatedDamage .not_absorbable
JSL notItemSprite_Mimic
@@ -108,4 +108,4 @@ notItemSprite_Mimic:
.continue
; restore code
REP #$20 : ASL #2
RTL
RTL

View File

@@ -2182,6 +2182,9 @@ JSL LampCheck
;--------------------------------------------------------------------------------
org $81F503 ; <- F503 - Bank01.asm:14994 (LDA.b #$01 : STA $1D)
JSL SetOverlayIfLamp
;--------------------------------------------------------------------------------
org $81B610 ; <- loading whether room is dark
JSL DarkRoomCheck
;================================================================================
;================================================================================
@@ -2736,4 +2739,39 @@ NOP #2 ; this fixes Link's direction after mirroring and falling after entering
; Enable new room header table
;--------------------------------------------------------------------------------
org $81B5E6
LDA.b #$30
LDA.b #$30
;===================================================================================================
;--------------------------------------------------------------------------------
; Mimic dash changes
;--------------------------------------------------------------------------------
org $9EC7BE
JSL MimicDirection
;===================================================================================================
;--------------------------------------------------------------------------------
; Boss souls changes
;--------------------------------------------------------------------------------
org $8DB866
JSL CheckBossSoul : BRA + : NOP #2 : +
org $86ED9E
JSL CheckInvincibleFlag : NOP
org $85DFFE
JSL SoulPaletteSet : BRA + : NOP #5 : +
org $85DFB7
JSL SoulPaletteApply : NOP #2
org $9E8086
JSL HelmasaurPaletteFix : BRA + : NOP #2 : +
org $9E838C
JSL HelmasaurHammerFix : NOP
org $9DD884
JSL MoldormPaletteFix_b : NOP
org $9DDB2E
JSL MoldormPaletteFix_d : NOP

View File

@@ -806,10 +806,19 @@ RTL
; A = item id being collected
ItemGetAlternateSFX:
PEA.w $C567 ; SNES to RTS to in bank 08
LDA.w AncillaGet,X : CMP.b #$4A : BNE +
LDA.w AncillaGet, X : CMP.b #$4A : BNE +
; collecting pre-activated flute
LDA.b #$13 : JML Ancilla_SFX2_Near
+ ; normal itemget sfx
+ ; not pre-activated flute
LDA.l !MULTIWORLD_RECEIVING_ITEM : BEQ .normal
LDA.l MultiworldJunkItemTimer : BEQ .normal
LDA.w AncillaGet, X
JSL.l ItemIsJunk : BEQ .normal
.multijunk
LDA.b #$3B : JML Ancilla_SFX3_Near ; what we wrote over
.normal
LDA.b #$0F : JML Ancilla_SFX3_Near ; what we wrote over
; A = item id being collected
@@ -818,6 +827,16 @@ CPY.b #$4A : BNE +
JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$13 : STA.w SFX2
RTL
+ ; normal itemget sfx
LDA.l !MULTIWORLD_RECEIVING_ITEM : BEQ .normal
LDA.l MultiworldJunkItemTimer : BEQ .normal
TYA
JSL.l ItemIsJunk : BEQ .normal
.multijunk
JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$3B : STA.w SFX3
RTL
.normal
JSL Sound_SetSfxPanWithPlayerCoords : ORA.b #$0F : STA.w SFX3 ; what we wrote over
RTL
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------

View File

@@ -377,16 +377,16 @@ endmacro
%ReceiptProps($ED, -4, 0, $49, $F36A, $FF, skip, skip) ; ED -
%ReceiptProps($EE, -4, 0, $49, $F36A, $FF, skip, skip) ; EE -
%ReceiptProps($EF, -4, 0, $49, $F36A, $FF, skip, skip) ; EF -
%ReceiptProps($F0, -4, 0, $49, $F36A, $FF, skip, skip) ; F0 -
%ReceiptProps($F1, -4, 0, $49, $F36A, $FF, skip, skip) ; F1 -
%ReceiptProps($F2, -4, 0, $49, $F36A, $FF, skip, skip) ; F2 -
%ReceiptProps($F3, -4, 0, $49, $F36A, $FF, skip, skip) ; F3 -
%ReceiptProps($F4, -4, 0, $49, $F36A, $FF, skip, skip) ; F4 -
%ReceiptProps($F5, -4, 0, $49, $F36A, $FF, skip, skip) ; F5 -
%ReceiptProps($F6, -4, 0, $49, $F36A, $FF, skip, skip) ; F6 -
%ReceiptProps($F7, -4, 0, $49, $F36A, $FF, skip, skip) ; F7 -
%ReceiptProps($F8, -4, 0, $49, $F36A, $FF, skip, skip) ; F8 -
%ReceiptProps($F9, -4, 0, $49, $F36A, $FF, skip, skip) ; F9 -
%ReceiptProps($F0, -4, 0, $51, $F36A, $FF, skip, skip) ; F0 - Armos Soul
%ReceiptProps($F1, -4, 0, $52, $F36A, $FF, skip, skip) ; F1 - Lanmolas Soul
%ReceiptProps($F2, -4, 0, $53, $F36A, $FF, skip, skip) ; F2 - Moldorm Soul
%ReceiptProps($F3, -4, 0, $54, $F36A, $FF, skip, skip) ; F3 - Helmasaur Soul
%ReceiptProps($F4, -4, 0, $55, $F36A, $FF, skip, skip) ; F4 - Arrghus Soul
%ReceiptProps($F5, -4, 0, $56, $F36A, $FF, skip, skip) ; F5 - Mothula Soul
%ReceiptProps($F6, -4, 0, $57, $F36A, $FF, skip, skip) ; F6 - Blind Soul
%ReceiptProps($F7, -4, 0, $58, $F36A, $FF, skip, skip) ; F7 - Kholdstare Soul
%ReceiptProps($F8, -4, 0, $59, $F36A, $FF, skip, skip) ; F8 - Vitreous Soul
%ReceiptProps($F9, -4, 0, $5A, $F36A, $FF, skip, skip) ; F9 - Trinexx Soul
%ReceiptProps($FA, -4, 0, $49, $F36A, $FF, skip, skip) ; FA -
%ReceiptProps($FB, -4, 0, $49, $F36A, $FF, skip, skip) ; FB -
%ReceiptProps($FC, -4, 0, $49, $F36A, $FF, skip, skip) ; FC -
@@ -656,16 +656,16 @@ endmacro
%SpriteProps($ED, 2, 2, $04, $04, $0000) ; ED -
%SpriteProps($EE, 2, 2, $04, $04, $0000) ; EE -
%SpriteProps($EF, 2, 2, $04, $04, $0000) ; EF -
%SpriteProps($F0, 2, 2, $04, $04, $0000) ; F0 -
%SpriteProps($F1, 2, 2, $04, $04, $0000) ; F1 -
%SpriteProps($F2, 2, 2, $04, $04, $0000) ; F2 -
%SpriteProps($F3, 2, 2, $04, $04, $0000) ; F3 -
%SpriteProps($F4, 2, 2, $04, $04, $0000) ; F4 -
%SpriteProps($F5, 2, 2, $04, $04, $0000) ; F5 -
%SpriteProps($F6, 2, 2, $04, $04, $0000) ; F6 -
%SpriteProps($F7, 2, 2, $04, $04, $0000) ; F7 -
%SpriteProps($F8, 2, 2, $04, $04, $0000) ; F8 -
%SpriteProps($F9, 2, 2, $04, $04, $0000) ; F9 -
%SpriteProps($F0, 2, 2, $83, $83, PalettesCustom_armos) ; F0 - Armos Soul
%SpriteProps($F1, 2, 2, $83, $83, PalettesCustom_lanmolas) ; F1 - Lanmolas Soul
%SpriteProps($F2, 2, 2, $83, $83, PalettesCustom_moldorm) ; F2 - Moldorm Soul
%SpriteProps($F3, 2, 2, $83, $83, PalettesCustom_helmasaur) ; F3 - Helmasuar Soul
%SpriteProps($F4, 2, 2, $83, $83, PalettesCustom_arrghus) ; F4 - Arrghus Soul
%SpriteProps($F5, 2, 2, $83, $83, PalettesCustom_mothula) ; F5 - Mothula Soul
%SpriteProps($F6, 2, 2, $83, $83, PalettesCustom_blind) ; F6 - Blind Soul
%SpriteProps($F7, 2, 2, $83, $83, PalettesCustom_kholdstare) ; F7 - Kholdstare Soul
%SpriteProps($F8, 2, 2, $83, $83, PalettesCustom_vitreous) ; F8 - Vitreous Soul
%SpriteProps($F9, 2, 2, $83, $83, PalettesCustom_trinexx) ; F9 - Trinexx Soul
%SpriteProps($FA, 2, 2, $04, $04, $0000) ; FA -
%SpriteProps($FB, 2, 2, $04, $04, $0000) ; FB -
%SpriteProps($FC, 2, 2, $04, $04, $0000) ; FC -
@@ -932,16 +932,16 @@ endmacro
%InventoryItem($ED, $0001, $0000, $0000) ; ED -
%InventoryItem($EE, $0001, $0000, $0000) ; EE -
%InventoryItem($EF, $0001, $0000, $0000) ; EF -
%InventoryItem($F0, $0001, $0000, $0000) ; F0 -
%InventoryItem($F1, $0001, $0000, $0000) ; F1 -
%InventoryItem($F2, $0001, $0000, $0000) ; F2 -
%InventoryItem($F3, $0001, $0000, $0000) ; F3 -
%InventoryItem($F4, $0001, $0000, $0000) ; F4 -
%InventoryItem($F5, $0001, $0000, $0000) ; F5 -
%InventoryItem($F6, $0001, $0000, $0000) ; F6 -
%InventoryItem($F7, $0001, $0000, $0000) ; F7 -
%InventoryItem($F8, $0001, $0000, $0000) ; F8 -
%InventoryItem($F9, $0001, $0000, $0000) ; F9 -
%InventoryItem($F0, $0081, $0000, $0000) ; F0 - Armos Soul
%InventoryItem($F1, $0081, $0000, $0000) ; F1 - Lanmolas Soul
%InventoryItem($F2, $0081, $0000, $0000) ; F2 - Moldorm Soul
%InventoryItem($F3, $0081, $0000, $0000) ; F3 - Helmasuar Soul
%InventoryItem($F4, $0081, $0000, $0000) ; F4 - Arrghus Soul
%InventoryItem($F5, $0081, $0000, $0000) ; F5 - Mothula Soul
%InventoryItem($F6, $0081, $0000, $0000) ; F6 - Blind Soul
%InventoryItem($F7, $0081, $0000, $0000) ; F7 - Kholdstare Soul
%InventoryItem($F8, $0081, $0000, $0000) ; F8 - Vitreous Soul
%InventoryItem($F9, $0081, $0000, $0000) ; F9 - Trinexx Soul
%InventoryItem($FA, $0001, $0000, $0000) ; FA -
%InventoryItem($FB, $0001, $0000, $0000) ; FB -
%InventoryItem($FC, $0001, $0000, $0000) ; FC -
@@ -1196,16 +1196,16 @@ ItemReceiptGraphicsOffsets:
dw $0 ; ED -
dw $0 ; EE -
dw $0 ; EF -
dw $0 ; F0 -
dw $0 ; F1 -
dw $0 ; F2 -
dw $0 ; F3 -
dw $0 ; F4 -
dw $0 ; F5 -
dw $0 ; F6 -
dw $0 ; F7 -
dw $0 ; F8 -
dw $0 ; F9 -
dw $1C20 ; F0 - Armos Soul
dw $1C60 ; F1 - Lanmolas Soul
dw $1CA0 ; F2 - Moldorm Soul
dw $1D20 ; F3 - Helmasuar Soul
dw $1D60 ; F4 - Arrghus Soul
dw $1DA0 ; F5 - Mothula Soul
dw $1DE0 ; F6 - Blind Soul
dw $2020 ; F7 - Kholdstare Soul
dw $2060 ; F8 - Vitreous Soul
dw $20A0 ; F9 - Trinexx Soul
dw $0 ; FA -
dw $0 ; FB -
dw $0 ; FC -
@@ -1466,16 +1466,16 @@ StandingItemGraphicsOffsets:
dw $0 ; ED -
dw $0 ; EE -
dw $0 ; EF -
dw $0 ; F0 -
dw $0 ; F1 -
dw $0 ; F2 -
dw $0 ; F3 -
dw $0 ; F4 -
dw $0 ; F5 -
dw $0 ; F6 -
dw $0 ; F7 -
dw $0 ; F8 -
dw $0 ; F9 -
dw $1C20 ; F0 - Armos Soul
dw $1C60 ; F1 - Lanmolas Soul
dw $1CA0 ; F2 - Moldorm Soul
dw $1D20 ; F3 - Helmasuar Soul
dw $1D60 ; F4 - Arrghus Soul
dw $1DA0 ; F5 - Mothula Soul
dw $1DE0 ; F6 - Blind Soul
dw $2020 ; F7 - Kholdstare Soul
dw $2060 ; F8 - Vitreous Soul
dw $20A0 ; F9 - Trinexx Soul
dw $0 ; FA -
dw $0 ; FB -
dw $0 ; FC -

View File

@@ -6,12 +6,30 @@
LampCheck:
LDA.l LightConeModifier : BNE .lamp
LDA.l LampEquipment : BNE .lamp ; skip if we already have lantern
LDA.l LampCone : AND.b #$10 : BNE .lamp
LDA.w DungeonID : CMP.b #$04 : BCS + ; are we en HC?
LDA.l LampConeSewers : RTL
LDA.l LampCone : AND.b #$01 : RTL
+ : TDC
.lamp
RTL
;================================================================================
; Dark Room checks
;--------------------------------------------------------------------------------
; Output: 0 for normal room, 1 for darkness
;--------------------------------------------------------------------------------
DarkRoomCheck:
LDA.l LampCone : AND.b #$20 : BNE .no_dark
LDA.b [$0D], Y
AND.b #$01
RTL
.no_dark
LDA.b $A0 : ORA.b $A1 : BNE .not_dark
LDA.b #$01 ; ganon's room
RTL
.not_dark
LDA.b #$00 ; not ganon's room, so no darkness
RTL
;================================================================================
;--------------------------------------------------------------------------------
; Output: 0 locked, 1 open
;--------------------------------------------------------------------------------

Binary file not shown.

View File

@@ -9,7 +9,7 @@ UploadMenuOnlyIcons:
REP #$20
LDA.w #MenuOnlyIcons : STA.w $4342
LDA.w #$1801 : STA.w $4340
LDA.w #$0240 : STA.w $4345
LDA.w #$03A0 : STA.w $4345
LDA.w #$0F800>>1 : STA.w $2116
SEP #$20
@@ -20,4 +20,4 @@ UploadMenuOnlyIcons:
RTL
MenuOnlyIcons:
incbin "drfont.2bpp"
incbin "drfont.2bpp"

22
mimicdash.asm Normal file
View File

@@ -0,0 +1,22 @@
;================================================================================
; Mimic Direction Check
;--------------------------------------------------------------------------------
; Output: 0 for darkness, 1 for lamp cone
;--------------------------------------------------------------------------------
MimicDirection:
LDA.b $F0
AND.b #$0F
BNE .done
LDA.l MimicDash
BEQ .done
LDA.w $0372
BEQ .done
LDA.w $0374
BNE .make_zero
LDA.b $67
.done
RTL
.make_zero
LDA.b #$00
RTL

View File

@@ -23,8 +23,14 @@ NewHUD_DrawBombs:
BRA .draw
.finite
LDA.w BombCapacity : BEQ .no_bomb_bag
LDA.w BombsEquipment
JSR HUDHex2Digit
BRA .draw
.no_bomb_bag
LDY.w #!BlankTile
TYX
.draw
STY.w HUDBombCount+0

View File

@@ -1818,4 +1818,4 @@ db $18, $0A, $D8 ; yx:{ 0x180, 0x0A0 }
db $18, $0F, $45 ; yx:{ 0x180, 0x0F0 }
db $FF ; END
org $89CA55
dw Overworld_Sprites_Screen1A_2&$FFFF
dw Overworld_Sprites_Screen1A_2&$FFFF

View File

@@ -464,7 +464,40 @@ dw $2990 ; green pendant
dw $298B ; blue pendant
dw $299B ; red pendant
;================================================================================
DrawBossSouls:
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.l .row0, X : STA.w GFXStripes+$02EA, X
LDA.l .row1, X : STA.w GFXStripes+$032A, X
LDA.l .row2, X : STA.w GFXStripes+$036A, X
LDA.l .row3, X : STA.w GFXStripes+$03AA, X
LDA.l .row4, X : STA.w GFXStripes+$03EA, X
LDA.l .row5, X : STA.w GFXStripes+$042A, X
LDA.l .row6, X : STA.w GFXStripes+$046A, X
LDA.l .row7, X : STA.w GFXStripes+$04AA, X
LDA.l .row8, X : STA.w GFXStripes+$04EA, X
INX #2 : CPX.w #$0014 : BCC -
PLB : PLP
RTL
;================================================================================
.row0 dw $28FB, $28F9, $28F9, $28F9, $28F9, $28F9, $28F9, $28F9, $28F9, $68FB
.row1 dw $28FC, $31A4, $31A5, $24F5, $31A6, $31A7, $24F5, $31A8, $31A9, $68FC
.row2 dw $28FC, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $68FC
.row3 dw $28FC, $31AA, $31AB, $24F5, $31AC, $31AD, $24F5, $31AE, $31AF, $68FC
.row4 dw $28FC, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $68FC
.row5 dw $28FC, $31B0, $31B1, $24F5, $31B2, $31B3, $24F5, $31B4, $31B5, $68FC
.row6 dw $28FC, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $24F5, $68FC
.row7 dw $28FC, $24F5, $31B6, $31B7, $24F5, $24F5, $31B8, $31B9, $24F5, $68FC
.row8 dw $A8FB, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $A8F9, $E8FB
;================================================================================
DrawPendantCrystalDiagram:
LDA.l HudFlag : AND.b #$40 : BEQ +
JML.l DrawBossSouls
+
PHP : PHB : PHK : PLB
REP #$30 ; Set 16-bit accumulator & index registers
LDX.w #$0000 ; Paint entire box black & draw empty pendants and crystals

View File

@@ -687,7 +687,8 @@ MapTotalsWRAM: skip $10 ; / on boot for tracking.
skip $20 ; Reserved for general dungeon tracking data. May have over
; allocated here. Feel free to reassign.
MapCompassFlag: skip 2 ; Used to flag overworld map drawing.
skip $3E ; Unused
SpriteInvincibilityFlag: skip $10 ; Used for boss soul shuffle
skip $2E ; Unused
skip $260 ; Unused
DialogBuffer: skip $100 ; Dialog Buffer
;

152
souls.asm Normal file
View File

@@ -0,0 +1,152 @@
;================================================================================
; Boss Souls
;================================================================================
SoulPaletteSet:
LDA.l SpriteInvincibilityFlag, X
BEQ .normal
LDA.b #$FF
STA.w $0CFE
RTL
.normal
CMP.b #$08
BNE +
LDA.l $7FFA3C, X
STA.w $0CFE
+
RTL
;================================================================================
SoulPaletteApply:
AND.w #$F1FF
PHA
LDA.w $0CFE
AND.w #$00FF
CMP.w #$00FF
BEQ .blackout
.ice
PLA
ORA.w #$0400
RTL
.blackout
PLA
ORA.w #$0600
RTL
;================================================================================
HelmasaurPaletteFix:
LDA.w $0B89, X
AND.b #$F1
PHA
LDA.l SpriteInvincibilityFlag, X
BEQ .normal
.blackout
PLA
ORA.b #$0A
STA.w $0B89, X
RTL
.normal
PLA
STA.w $0B89, X
RTL
;================================================================================
HelmasaurHammerFix:
LDA.l SpriteInvincibilityFlag, X
BEQ .normal
LDA.b #$00
RTL
.normal
LDA.w $0301
AND.b #$0A
RTL
;================================================================================
MoldormPaletteFix:
.b
LDA.b #$0B
BRA .apply
.d
LDA.b #$0D
.apply
PHA
LDA.l SpriteInvincibilityFlag, X
BEQ .normal
PLA
LDA.b #$07
BRA .write
.normal
PLA
.write
STA.w $0F50, X
RTL
;================================================================================
CheckInvincibleFlag:
LDA.l SpriteInvincibilityFlag, X
BEQ .normal
LDA.w $0E20, X
SEC
RTL
.normal
JML.l IsItReallyAMimic
;================================================================================
CheckBossSoul:
PHA : PHX
LDA.b #$00
STA.l SpriteInvincibilityFlag, X
; check if boss id
LDX.b #.boss_ids_end-.boss_ids-1
TYA
- CMP.l .boss_ids, X
BEQ .match
DEX
BPL -
.normal
PLX : PLA
STA.w $0E60, X
AND.b #$0F
STA.w $0F50, X
RTL
.match
; X is boss index
; make palette black
LDA.b #$00
LDX.b #$1D
- STA.l $7EC462, X
STA.l $7EC662, X
DEX
BPL -
LDA.b #$01
STA.b $15 ; update palette
PLX
LDA.b #$01
STA.l SpriteInvincibilityFlag, X
PLA
ORA.b #$40
STA.w $06E0, X
AND.b #$01
ORA.b #$06
STA.w $0F50, X
RTL
.boss_ids:
db $53 ; armos
db $54 ; lanmolas
db $09 ; moldorm
db $92 ; helma king
db $8C ; arrghus
db $8D ; arrghus puff
db $88 ; mothula
db $CE ; blind
db $A2 ; khold
db $A3 ; khold shell
db $BD ; vitreous big eye
db $BE ; vitreous small eye
db $CB ; trinexx
db $CC ; trinexx
db $CD ; trinexx
db $7A ; agahnim
..end

View File

@@ -237,7 +237,9 @@ CompassCountDisplay: skip 2 ; Compass count display flags (bitfield)
; High Byte: x c e d a s p m
; x = Sewers | c = Hyrule Castle | e = Eastern Palace | d = Desert Palace
; a = Castle Tower | s = Swamp Palace | p = PoD | m = Mire
skip 10 ;
BossSoulMissing: skip 2 ; bitfield for boss soul acquisition
; 0 = has soul, 1 = soul missing
skip 8 ;
Aga2Duck: skip 1 ; Used in lieu of pyramid hole for checking if the duck should come
; 0 = Haven't called post-Aga 2 bird | 1 = Have called post-Aga 2 bird
NpcFlags: skip 2 ; l - c s t k z o (bitfield)

View File

@@ -110,8 +110,8 @@ RupoorDeduction:
dw $000A ; #$0A - Default (10 decimal)
;--------------------------------------------------------------------------------
org $B08038 ; PC 0x180038
LampConeSewers:
db $01 ; #$00 = Off - #$01 = On (default)
LampCone:
db $01 ; #$00 = Off - #$01 = On in Sewers (default) - #$10 = On Always - #$20 = No Dark Rooms
;--------------------------------------------------------------------------------
org $B08039 ; PC 0x180039
ItemCounterHUD:
@@ -420,7 +420,17 @@ db $01 ; #$00 = Original Behavior - #$01 = Randomizer Behavior (Default)
Bugfix_PodEG:
db $01 ; #$00 = Original Behavior - #$01 = Randomizer Behavior (Default)
;--------------------------------------------------------------------------------
; 0x1800A5 - 0x1800AF (unused)
org $B080A5 ; PC 0x1800A5
MimicDash:
db $00 ; #$00 = Original Behavior (default) - #$01 = Mimics move when link dashes
CrystalSwitchBook:
db $00 ; #$00 = Original Behavior (default) - #$01 = Book can flip crystal switch
;--------------------------------------------------------------------------------
; 0x1800A7 - 0x1800AE (unused)
;--------------------------------------------------------------------------------
org $B080AF ; PC 0x1800AF
MultiworldJunkItemTimer:
db $00 ; number of frames to show junk items in a multiworld (#$00 = no change)
;--------------------------------------------------------------------------------
org $B080B0 ; 0x1800B0-0x1800BF
StaticDecryptionKey: