This commit is contained in:
2025-07-04 00:53:02 -05:00
parent 295b6a229b
commit 2ef95d4873
8 changed files with 190 additions and 6 deletions

View File

@@ -183,6 +183,7 @@ incsrc multiworld.asm
incsrc textrenderer.asm
incsrc crystalswitchbook.asm
incsrc mimicdash.asm
incsrc souls.asm
warnpc $A58000
org $A28000

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

@@ -2747,3 +2747,31 @@ LDA.b #$30
;--------------------------------------------------------------------------------
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

@@ -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

@@ -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)