Deleted several unused modules and some commented code Reorganized some routines to clean up modules Moved some memory into mirrored WRAM Refactored NMI hook aux routine Removed old fake flipper fix
219 lines
6.6 KiB
NASM
219 lines
6.6 KiB
NASM
;================================================================================
|
|
|
|
;--------------------------------------------------------------------------------
|
|
AssignKiki:
|
|
LDA.b #$00 : STA.l FollowerDropped ; defuse bomb
|
|
LDA.b #$0A : STA.l FollowerIndicator ; assign kiki as follower
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
|
|
;--------------------------------------------------------------------------------
|
|
; Name: AllowSQ
|
|
; Returns: Accumulator = 0 if S&Q is disallowed, 1 if allowed
|
|
;--------------------------------------------------------------------------------
|
|
AllowSQ:
|
|
LDA.l ProgressIndicator : BEQ .done ; thing we overwrote - check if link is in his bed
|
|
LDA.l BusyItem : EOR.b #$01
|
|
.done
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
|
|
;--------------------------------------------------------------------------------
|
|
;0 = Reset Music
|
|
;1 = Don't Reset Music
|
|
MSMusicReset:
|
|
LDA.b $8A : CMP.b #$80 : BNE +
|
|
LDA.b $23
|
|
+
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
|
|
;--------------------------------------------------------------------------------
|
|
;0 = Become (Perma)bunny
|
|
DecideIfBunny:
|
|
LDA.l MoonPearlEquipment : BNE .done
|
|
LDA.l CurrentWorld : AND.b #$40
|
|
PHA : LDA.l InvertedMode : BNE .inverted
|
|
.normal
|
|
PLA : EOR.b #$40
|
|
BRA .done
|
|
.inverted
|
|
PLA
|
|
.done
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
;0 = Become (Perma)bunny
|
|
DecideIfBunnyByScreenIndex:
|
|
; If indoors we don't have a screen index. Return non-bunny to make mirror-based
|
|
; superbunny work
|
|
LDA.b $1B : BNE .done
|
|
LDA.l MoonPearlEquipment : BNE .done
|
|
LDA.b $8A : AND.b #$40 : PHA
|
|
LDA.l InvertedMode : BNE .inverted
|
|
.normal
|
|
PLA : EOR #$40
|
|
BRA .done
|
|
.inverted
|
|
PLA
|
|
.done
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
FixBunnyOnExitToLightWorld:
|
|
LDA.w $02E0 : BEQ +
|
|
JSL.l DecideIfBunny : BEQ +
|
|
STZ.b $5D ; set player mode to Normal
|
|
STZ.w $02E0 : STZ.b $56 ; return player graphics to normal
|
|
+
|
|
RTS
|
|
;--------------------------------------------------------------------------------
|
|
|
|
;--------------------------------------------------------------------------------
|
|
; fix issue where if a player beats aga1 without moon pearl, they don't turn into
|
|
; bunny on the pyramid
|
|
FixAga2Bunny:
|
|
LDA.l FixFakeWorld : BEQ + ; Only use this fix is fakeworld fix is in use
|
|
LDA.l InvertedMode : BEQ +++
|
|
LDA.b #$00 : STA.l CurrentWorld ; Switch to light world
|
|
BRA ++
|
|
+++
|
|
LDA.b #$40 : STA.l CurrentWorld ; Switch to dark world
|
|
++
|
|
JSL DecideIfBunny : BNE +
|
|
JSR MakeBunny
|
|
LDA.b #$04 : STA.w $012C ; play bunny music
|
|
BRA .done
|
|
+
|
|
LDA.b #$09 : STA.w $012C ; what we wrote over
|
|
.done
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
|
|
;--------------------------------------------------------------------------------
|
|
MakeBunny:
|
|
PHX : PHY
|
|
LDA.b #$17 : STA.b $5D ; set player mode to permabunny
|
|
LDA.b #$01 : STA.w $02E0 : STA.b $56 ; make player look like bunny
|
|
JSL LoadGearPalettes_bunny
|
|
PLY : PLX
|
|
RTS
|
|
;--------------------------------------------------------------------------------
|
|
|
|
;--------------------------------------------------------------------------------
|
|
; fix issue where cross world caves (in Entrance randomizer) don't cause
|
|
; frog to become smith or vice versa.
|
|
FixFrogSmith:
|
|
LDA.l CurrentWorld : BNE .darkWorld
|
|
LDA.l FollowerIndicator : CMP.b #$07 : BNE .done
|
|
LDA.b #$08 ; make frog into smith in light world
|
|
BRA .loadgfx
|
|
.darkWorld
|
|
LDA.l FollowerIndicator : CMP.b #$08 : BNE .done
|
|
LDA.b #$07 ; make smith into frog in dark world
|
|
.loadgfx
|
|
STA.l FollowerIndicator
|
|
JSL Tagalong_LoadGfx
|
|
.done
|
|
RTS
|
|
;--------------------------------------------------------------------------------
|
|
|
|
;--------------------------------------------------------------------------------
|
|
; Fix for SQ jumping causing accidental Exploration Glitch
|
|
SQEGFix:
|
|
LDA.l Bugfix_PodEG : BEQ ++
|
|
STZ.w $047A ; disarm exploration glitch
|
|
++ RTL
|
|
|
|
;--------------------------------------------------------------------------------
|
|
; Fix crystal not spawning when using somaria vs boss
|
|
TryToSpawnCrystalUntilSuccess:
|
|
STX.w $02D8 ; what we overwrote
|
|
JSL AddAncillaLong : BCS .failed ; a clear carry flag indicates success
|
|
.spawned
|
|
STZ.b $AE ; the "trying to spawn crystal" flag
|
|
STZ.b $AF ; the "trying to spawn pendant" flag
|
|
.failed
|
|
RTL
|
|
|
|
;--------------------------------------------------------------------------------
|
|
; Fix crystal not spawning when using somaria vs boss
|
|
WallmasterCameraFix:
|
|
STZ.b $A7 ; disable vertical camera scrolling for current room
|
|
REP #$20
|
|
STZ.w $0618 ; something about scrolling, setting these to 0 tricks the game
|
|
STZ.w $061A ; into thinking we're at the edge of the room so it doesn't scroll.
|
|
SEP #$20
|
|
JML Sound_SetSfx3PanLong ; what we wrote over, also this will RTL
|
|
|
|
;--------------------------------------------------------------------------------
|
|
; Fix losing glove colors
|
|
LoadActualGearPalettesWithGloves:
|
|
REP #$20
|
|
LDA.l SwordEquipment : STA.b Scrap0C
|
|
LDA.l ArmorEquipment : AND.w #$00FF
|
|
JSL LoadGearPalettes_variable
|
|
JSL SpriteSwap_Palette_ArmorAndGloves_part_two
|
|
RTL
|
|
|
|
;--------------------------------------------------------------------------------
|
|
; Fix Bunny Palette Map Bug
|
|
LoadGearPalette_safe_for_bunny:
|
|
LDA.b $10
|
|
CMP.w #$030E : BEQ .new ; opening dungeon map
|
|
CMP.w #$070E : BEQ .new ; opening overworld map
|
|
.original
|
|
-
|
|
LDA.b [Scrap00]
|
|
STA.l $7EC300, X
|
|
STA.l $7EC500, X
|
|
INC.b Scrap00 : INC.b Scrap00
|
|
INX #2
|
|
DEY
|
|
BPL -
|
|
RTL
|
|
.new
|
|
-
|
|
LDA.b [Scrap00]
|
|
STA.l $7EC500, X
|
|
INC.b Scrap00 : INC.b Scrap00
|
|
INX #2
|
|
DEY
|
|
BPL -
|
|
RTL
|
|
|
|
;--------------------------------------------------------------------------------
|
|
; Fix pedestal pull overlay
|
|
PedestalPullOverlayFix:
|
|
LDA.b #$09 : STA.w $039F, X ; the thing we wrote over
|
|
LDA.b $1B : BNE +
|
|
LDA.b $8A : CMP.b #$80 : BNE +
|
|
LDA.b $8C : CMP.b #$97
|
|
+
|
|
RTL
|
|
|
|
;--------------------------------------------------------------------------------
|
|
FixJingleGlitch:
|
|
LDA.b $11
|
|
BEQ .set_doors
|
|
|
|
LDA.l AllowAccidentalMajorGlitch
|
|
BEQ .exit
|
|
|
|
.set_doors
|
|
LDA.b #$05
|
|
STA.b $11
|
|
|
|
.exit
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
; Fix spawning with more hearts than capacity when less than 3 heart containers
|
|
pushpc
|
|
org $09F4AC ; <- module_death.asm:331
|
|
db $08, $08, $10
|
|
pullpc
|
|
;--------------------------------------------------------------------------------
|
|
SetOverworldTransitionFlags:
|
|
LDA.b #$01
|
|
STA.w $0ABF ; used by witch
|
|
STA.w $021B ; used by race game
|
|
RTL
|