Continue labeling and documentation in ram.asm, main rando block
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
This commit is contained in:
@@ -90,10 +90,8 @@ incsrc halfmagicbat.asm
|
||||
incsrc mantle.asm
|
||||
incsrc swordswap.asm
|
||||
incsrc stats.asm
|
||||
incsrc scratchpad.asm
|
||||
incsrc dialog.asm
|
||||
incsrc entrances.asm
|
||||
incsrc clock.asm
|
||||
incsrc accessibility.asm
|
||||
incsrc heartbeep.asm
|
||||
incsrc capacityupgrades.asm
|
||||
@@ -102,7 +100,6 @@ incsrc doorframefixes.asm
|
||||
incsrc music.asm
|
||||
incsrc roomloading.asm
|
||||
incsrc icepalacegraphics.asm
|
||||
incsrc firebarlayer.asm
|
||||
warnpc $A18000
|
||||
|
||||
org $1C8000 ; text tables for translation
|
||||
@@ -169,9 +166,7 @@ if !FEATURE_NEW_TEXT
|
||||
endif
|
||||
warnpc $A58000
|
||||
|
||||
;org $228000 ; contrib area
|
||||
org $A28000 ; contrib area
|
||||
incsrc contrib.asm
|
||||
org $A28000
|
||||
|
||||
org $A38000
|
||||
incsrc stats/main.asm
|
||||
@@ -287,7 +282,7 @@ warnpc $B08000
|
||||
;Bank Map
|
||||
;$20 Code Bank
|
||||
;$21 Reserved (Frame Hook & Init)
|
||||
;$22 Contrib Code
|
||||
;$22 Unused
|
||||
;$23 Stats & Credits
|
||||
;$24 Code Bank
|
||||
;$29 External hooks (rest of bank not used)
|
||||
|
||||
@@ -9,7 +9,7 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
DrawLibraryItemGFX:
|
||||
PHA
|
||||
LDA $0E80, X ; Retrieve stored item type
|
||||
LDA.w $0E80, X ; Retrieve stored item type
|
||||
JSL.l DrawDynamicTile
|
||||
PLA
|
||||
RTL
|
||||
@@ -61,7 +61,7 @@ RTL
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
LoadBonkItem:
|
||||
LDA.b $A0 ; check room ID - only bonk keys in 2 rooms so we're just checking the lower byte
|
||||
LDA.b RoomIndex ; check room ID - only bonk keys in 2 rooms so we're just checking the lower byte
|
||||
CMP.b #115 : BNE + ; Desert Bonk Key
|
||||
LDA.l BonkKey_Desert
|
||||
BRA ++
|
||||
|
||||
47
bugfixes.asm
47
bugfixes.asm
@@ -46,9 +46,9 @@ RTL
|
||||
DecideIfBunnyByScreenIndex:
|
||||
; If indoors we don't have a screen index. Return non-bunny to make mirror-based
|
||||
; superbunny work
|
||||
LDA $1B : BNE .done
|
||||
LDA MoonPearlEquipment : BNE .done
|
||||
LDA $8A : AND.b #$40 : PHA
|
||||
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
|
||||
@@ -57,21 +57,12 @@ DecideIfBunnyByScreenIndex:
|
||||
PLA
|
||||
.done
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
;ReadInventoryPond:
|
||||
; CPX.b #$1B : BNE + : LDA.b #$01 : RTL : +
|
||||
; LDA EquipmentWRAM, X
|
||||
;RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
FixBunnyOnExitToLightWorld:
|
||||
LDA.w $02E0 : BEQ +
|
||||
JSL.l DecideIfBunny : BEQ +
|
||||
STZ $5D ; set player mode to Normal
|
||||
STZ $02E0 : STZ $56 ; return player graphics to normal
|
||||
STZ.b $5D ; set player mode to Normal
|
||||
STZ.w $02E0 : STZ.b $56 ; return player graphics to normal
|
||||
+
|
||||
RTS
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -82,10 +73,10 @@ RTS
|
||||
FixAga2Bunny:
|
||||
LDA.l FixFakeWorld : BEQ + ; Only use this fix is fakeworld fix is in use
|
||||
LDA.l InvertedMode : BEQ +++
|
||||
LDA.b #$00 : STA CurrentWorld ; Switch to light world
|
||||
LDA.b #$00 : STA.l CurrentWorld ; Switch to light world
|
||||
BRA ++
|
||||
+++
|
||||
LDA.b #$40 : STA CurrentWorld ; Switch to dark world
|
||||
LDA.b #$40 : STA.l CurrentWorld ; Switch to dark world
|
||||
++
|
||||
JSL DecideIfBunny : BNE +
|
||||
JSR MakeBunny
|
||||
@@ -100,8 +91,8 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
MakeBunny:
|
||||
PHX : PHY
|
||||
LDA.b #$17 : STA $5D ; set player mode to permabunny
|
||||
LDA.b #$01 : STA $02E0 : STA $56 ; make player look like bunny
|
||||
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
|
||||
@@ -172,8 +163,8 @@ CMP.w #$070E : BEQ .new ; opening overworld map
|
||||
.original
|
||||
-
|
||||
LDA.b [Scrap00]
|
||||
STA $7EC300, X
|
||||
STA $7EC500, X
|
||||
STA.l $7EC300, X
|
||||
STA.l $7EC500, X
|
||||
INC.b Scrap00 : INC.b Scrap00
|
||||
INX #2
|
||||
DEY
|
||||
@@ -182,7 +173,7 @@ RTL
|
||||
.new
|
||||
-
|
||||
LDA.b [Scrap00]
|
||||
STA $7EC500, X
|
||||
STA.l $7EC500, X
|
||||
INC.b Scrap00 : INC.b Scrap00
|
||||
INX #2
|
||||
DEY
|
||||
@@ -192,10 +183,10 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
; Fix pedestal pull overlay
|
||||
PedestalPullOverlayFix:
|
||||
LDA.b #$09 : STA $039F, X ; the thing we wrote over
|
||||
LDA $1B : BNE +
|
||||
LDA $8A : CMP.b #$80 : BNE +
|
||||
LDA $8C : CMP.b #$97
|
||||
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
|
||||
|
||||
@@ -221,7 +212,7 @@ pushpc
|
||||
pullpc
|
||||
;--------------------------------------------------------------------------------
|
||||
SetOverworldTransitionFlags:
|
||||
LDA #$01
|
||||
STA $0ABF ; used by witch
|
||||
STA $021B ; used by race game
|
||||
LDA.b #$01
|
||||
STA.w $0ABF ; used by witch
|
||||
STA.w $021B ; used by race game
|
||||
RTL
|
||||
|
||||
248
clock.asm
248
clock.asm
@@ -1,248 +0,0 @@
|
||||
;--------------------------------------------------------------------------------
|
||||
; http://problemkaputt.de/fullsnes.htm
|
||||
; 2800h-2801h S-RTC Real Time Clock I/O Ports
|
||||
; cartridge type change from #$02 to #$55 to enable S-RTC
|
||||
; SNES Cart S-RTC (Realtime Clock) (1 game)
|
||||
;
|
||||
; PCB "SHVC-LJ3R-01" with 24pin "Sharp S-RTC" chip. Used only by one japanese game:
|
||||
; Dai Kaiju Monogatari 2 (1996) Birthday/Hudson Soft (JP)
|
||||
;
|
||||
; S-RTC I/O Ports
|
||||
; 002800h S-RTC Read (R)
|
||||
; 002801h S-RTC Write (W)
|
||||
; Both registers are 4bits wide. When writing: Upper 4bit should be zero. When reading: Upper 4bit should be masked-off (they do possibly contain garbage, eg. open-bus).
|
||||
;
|
||||
; S-RTC Communication
|
||||
; The sequence for setting, and then reading the time is:
|
||||
; Send <0Eh,04h,0Dh,0Eh,00h,Timestamp(12 digits),0Dh> to [002801h]
|
||||
; If ([002800h] AND 0F)=0Fh then read <Timestamp(13 digits)>
|
||||
; If ([002800h] AND 0F)=0Fh then read <Timestamp(13 digits)>
|
||||
; If ([002800h] AND 0F)=0Fh then read <Timestamp(13 digits)>
|
||||
; If ([002800h] AND 0F)=0Fh then read <Timestamp(13 digits)>
|
||||
; etc.
|
||||
; The exact meaning of the bytes is unknown. 0Eh/0Dh seems to invoke/terminate commands, 04h might be some configuration stuff (like setting 24-hour mode). 00h is apparently the set-time command. There might be further commands (such like setting interrupts, alarm, 12-hour mode, reading battery low & error flags, etc.). When reading, 0Fh seems to indicate sth like "time available".
|
||||
; The 12/13-digit "SSMMHHDDMYYY(D)" Timestamps are having the following format:
|
||||
; Seconds.lo (BCD, 0..9)
|
||||
; Seconds.hi (BCD, 0..5)
|
||||
; Minutes.lo (BCD, 0..9)
|
||||
; Minutes.hi (BCD, 0..5)
|
||||
; Hours.lo (BCD, 0..9)
|
||||
; Hours.hi (BCD, 0..2)
|
||||
; Day.lo (BCD, 0..9)
|
||||
; Day.hi (BCD, 0..3)
|
||||
; Month (HEX, 01h..0Ch)
|
||||
; Year.lo (BCD, 0..9)
|
||||
; Year.hi (BCD, 0..9)
|
||||
; Century (HEX, 09h..0Ah for 19xx..20xx)
|
||||
; When READING the time, there is one final extra digit (the existing software doesn't transmit that extra digit on WRITING, though maybe it's possible to do writing, too):
|
||||
; Day of Week? (0..6) (unknown if RTC assigns sth like 0=Sunday or 0=Monday)
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
macro A_x10()
|
||||
ASL #1 : PHA
|
||||
ASL #2 : !ADD 1,s
|
||||
STA 1,s : PLA
|
||||
endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
macro A_x24()
|
||||
ASL #3 : PHA
|
||||
ASL #1 : !ADD 1,s
|
||||
STA 1,s : PLA
|
||||
endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
macro A_x60()
|
||||
ASL #2 : PHA
|
||||
ASL #4 : !SUB 1,s
|
||||
STA 1,s : PLA
|
||||
endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
macro Clock_ReadBCD()
|
||||
LDA $002800 : PHA
|
||||
LDA $002800 : %A_x10() : !ADD 1,s
|
||||
STA 1,s : PLA
|
||||
endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
Clock_Test:
|
||||
JSL.l Clock_Init
|
||||
JML.l Clock_IsSupported
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; Clock_Init
|
||||
;--------------------------------------------------------------------------------
|
||||
Clock_Init:
|
||||
LDA.b #$0E : STA $002801
|
||||
LDA.b #$04 : STA $002801
|
||||
LDA.b #$0D : STA $002801
|
||||
LDA.b #$0E : STA $002801
|
||||
LDA.b #$00 : STA $002801
|
||||
|
||||
LDA.b #$00 : STA $002801
|
||||
LDA.b #$00 : STA $002801
|
||||
LDA.b #$00 : STA $002801
|
||||
LDA.b #$00 : STA $002801
|
||||
LDA.b #$00 : STA $002801
|
||||
LDA.b #$00 : STA $002801
|
||||
LDA.b #$01 : STA $002801
|
||||
LDA.b #$00 : STA $002801
|
||||
LDA.b #$01 : STA $002801
|
||||
LDA.b #$00 : STA $002801
|
||||
LDA.b #$00 : STA $002801
|
||||
LDA.b #$0A : STA $002801
|
||||
|
||||
LDA.b #$0D : STA $002801
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; Clock_IsSupported
|
||||
;--------------------------------------------------------------------------------
|
||||
; Input: None (8-bit accumulator)
|
||||
;--------------------------------------------------------------------------------
|
||||
; Output:
|
||||
; Carry - unset if unsupported, set if supported
|
||||
; Zero - Undefined
|
||||
;--------------------------------------------------------------------------------
|
||||
; Side Effects:
|
||||
; S-RTC is ready for reading upon exit if supported
|
||||
;--------------------------------------------------------------------------------
|
||||
Clock_IsSupported:
|
||||
PHA : PHX
|
||||
LDX #$00;
|
||||
-
|
||||
LDA $002800 : AND.b #$0F : CMP #$0F : BEQ .done ; check for clock chip ready signal
|
||||
CPX.b #$0E : BCC ++ : CLC : BRA .done ; if we've read 14 bytes with no success, unset carry and exit
|
||||
++ INX
|
||||
BRA -
|
||||
.done
|
||||
PLX : PLA
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; Clock_QuickStamp
|
||||
;--------------------------------------------------------------------------------
|
||||
; Input: None
|
||||
;--------------------------------------------------------------------------------
|
||||
; Output:
|
||||
; $00.b - 24-bit timestamp (low)
|
||||
; $01.b - 24-bit timestamp (mid)
|
||||
; $02.b - 24-bit timestamp (high)
|
||||
; $03.b - zero
|
||||
; Carry - Unset if error, Set if success
|
||||
; Zero - Undefined
|
||||
;--------------------------------------------------------------------------------
|
||||
; Side Effects:
|
||||
; Requires Mode-7 Matrix Registers
|
||||
;--------------------------------------------------------------------------------
|
||||
Clock_QuickStamp:
|
||||
PHA : PHX : PHP
|
||||
SEP #$30 ; set 8-bit accumulator and index registers
|
||||
LDX #$00;
|
||||
-
|
||||
LDA $002800 : AND.b #$0F : CMP #$0F : BEQ .ready ; check for clock chip ready signal
|
||||
CPX.b #$0E : !BLT ++ : CLC : JMP .done : ++ ; if we've read 14 bytes with no success, unset carry and exit
|
||||
INX
|
||||
BRA -
|
||||
SEC ; indicate success
|
||||
|
||||
.ready
|
||||
%Clock_ReadBCD() : STA.b Scrap00 ; seconds
|
||||
%Clock_ReadBCD() : STA.b Scrap01 ; minutes
|
||||
%Clock_ReadBCD() : STA.b Scrap02 ; hours
|
||||
%Clock_ReadBCD() : STA.b Scrap03 ; days
|
||||
|
||||
REP $20 ; set 16-bit accumulator
|
||||
LDA.b Scrap01 : AND.w #$00FF : %A_x60() ; convert minutes to seconds
|
||||
STZ.b Scrap01 : !ADD Scrap00 : STA.b Scrap00 ; store running total seconds to $00
|
||||
|
||||
LDA.b Scrap03 : AND.w #$00FF : %A_x24() ; convert days to hours
|
||||
STZ.b Scrap03 : !ADD Scrap02 ; get total hours
|
||||
%A_x60() ; get total minutes
|
||||
|
||||
LDY #$60
|
||||
JSL.l Multiply_A16Y8
|
||||
STY.b Scrap02 : STZ.b Scrap03
|
||||
!ADD Scrap00 : BCC + : INC.b Scrap02 : +
|
||||
|
||||
.done
|
||||
PLP : PLX : PLA
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; Multiply_A16Y8:
|
||||
;--------------------------------------------------------------------------------
|
||||
; Expects:
|
||||
; Accumulator - 16-bit
|
||||
; Index Registers - 8-bit
|
||||
;--------------------------------------------------------------------------------
|
||||
; Notes:
|
||||
; Found a (wrong) version of this on wikibooks. This is cleaned up and fixed.
|
||||
;--------------------------------------------------------------------------------
|
||||
Multiply_A16Y8:
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
STY.w WRMPYA
|
||||
STA.w WRMPYB
|
||||
NOP #4
|
||||
LDA.w RDMPYL
|
||||
LDY.w RDMPYH
|
||||
XBA
|
||||
STA.w WRMPYB
|
||||
NOP #2
|
||||
TYA
|
||||
CLC
|
||||
ADC.w RDMPYL
|
||||
LDY.w RDMPYH
|
||||
BCC .carry_bit
|
||||
INY
|
||||
.carry_bit:
|
||||
XBA
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; Clock_GetTime
|
||||
;--------------------------------------------------------------------------------
|
||||
; Input: None
|
||||
;--------------------------------------------------------------------------------
|
||||
; Output:
|
||||
; $00.b - Seconds
|
||||
; $01.b - Minutes
|
||||
; $02.b - Hours
|
||||
; $03.b - Days
|
||||
; $04.b - Months
|
||||
; $05.w - Years
|
||||
; Carry - Unset if error, Set if success
|
||||
; Zero - Undefined
|
||||
;--------------------------------------------------------------------------------
|
||||
Clock_GetTime:
|
||||
PHA : PHX : PHY : PHP
|
||||
SEP #$30 ; set 8-bit accumulator and index registers
|
||||
LDX #$00;
|
||||
-
|
||||
LDA $002800 : AND.b #$0F : CMP #$0F : BEQ .ready ; check for clock chip ready signal
|
||||
CPX.b #$0E : !BLT ++ : CLC : JMP .done : ++ ; if we've read 14 bytes with no success, unset carry and exit
|
||||
INX
|
||||
BRA -
|
||||
SEC ; indicate success
|
||||
|
||||
.ready
|
||||
%Clock_ReadBCD() : STA.b Scrap00 ; seconds
|
||||
%Clock_ReadBCD() : STA.b Scrap01 ; minutes
|
||||
%Clock_ReadBCD() : STA.b Scrap02 ; hours
|
||||
%Clock_ReadBCD() : STA.b Scrap03 ; days
|
||||
LDA $002800 : STA.b Scrap04 ; months
|
||||
%Clock_ReadBCD() : STA.b Scrap05 ; years
|
||||
LDA $002800 : STA.b Scrap06 ; century
|
||||
|
||||
REP $20 ; set 16-bit accumulator
|
||||
STA.b Scrap06 : AND #$00FF : %A_x10() : %A_x10() : !ADD #1000 ; multiply century digit by 100 and add 1000
|
||||
STZ.b Scrap06 : !ADD Scrap05 : STA.b Scrap05 ; add lower 2 digits of the year and store
|
||||
|
||||
.done
|
||||
PLP : PLY : PLX : PLA
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -2,7 +2,7 @@
|
||||
ParadoxCaveGfxFix:
|
||||
; Always upload line unless you're moving into paradox cave (0x0FF) from above (0x0EF)
|
||||
LDA.b $1B : BEQ .uploadLine
|
||||
LDX.b $A0 : CPX.w #$00FF : BNE .uploadLine
|
||||
LDX.b RoomIndex : CPX.w #$00FF : BNE .uploadLine
|
||||
LDX.b $A2 : CPX.w #$00EF : BNE .uploadLine
|
||||
|
||||
;Ignore uploading four specific lines of tiles to VRAM
|
||||
|
||||
182
contrib.asm
182
contrib.asm
@@ -1,182 +0,0 @@
|
||||
;================================================================
|
||||
; Contributor: Myramong
|
||||
;================================================================
|
||||
;Sprite_ShowMessageFromPlayerContact_Edit:
|
||||
;{
|
||||
; STZ $1CE8
|
||||
; JSL.l Sprite_CheckDamageToPlayerSameLayerLong : BCC .dont_show
|
||||
;
|
||||
; LDA $4D : CMP.b #$02 : BEQ .dont_show
|
||||
;
|
||||
; JSL.l Sprite_DirectionToFacePlayerLong : TYA : EOR.b #$03
|
||||
; SEC
|
||||
;RTL
|
||||
;.dont_show
|
||||
; LDA $0DE0, X
|
||||
; CLC
|
||||
;RTL
|
||||
;}
|
||||
;================================================================
|
||||
;Sprite_ShowSolicitedMessageIfPlayerFacing_Edit:
|
||||
;{
|
||||
; JSL.l Sprite_CheckDamageToPlayerSameLayerLong : BCC .alpha
|
||||
; JSL.l Sprite_CheckIfPlayerPreoccupied : BCS .alpha
|
||||
; LDA $F6 : BPL .alpha
|
||||
; LDA $0F10, X : BNE .alpha
|
||||
;
|
||||
; LDA $4D : CMP.b #$02 : BEQ .alpha
|
||||
;
|
||||
; STZ $1CE8 ; set text choice to 1st option (usually yes/confirm/etc)
|
||||
; JSL.l Sprite_DirectionToFacePlayerLong : PHX : TYX
|
||||
;
|
||||
; ; Make sure that the sprite is facing towards the player, otherwise
|
||||
; ; talking can't happen. (What sprites actually use this???)
|
||||
; LDA $05E1A3, X : PLX : CMP $2F : BNE .not_facing_each_other
|
||||
; PHY
|
||||
; LDA.b #$40 : STA $0F10, X
|
||||
; PLA : EOR.b #$03
|
||||
; SEC
|
||||
;RTL
|
||||
;.not_facing_each_other
|
||||
;.alpha
|
||||
; LDA $0DE0, X
|
||||
; CLC
|
||||
;RTL
|
||||
;}
|
||||
;================================================================
|
||||
;OldMountainMan_TransitionFromTagalong_Edit:
|
||||
;{
|
||||
; PHA
|
||||
;
|
||||
; LDA.b #$AD : JSL Sprite_SpawnDynamically
|
||||
;
|
||||
; PLA : PHX : TAX
|
||||
;
|
||||
; LDA $1A64, X : AND.b #$03 : STA $0EB0, Y
|
||||
; STA $0DE0, Y
|
||||
;
|
||||
; LDA $1A00, X : CLC : ADC.b #$02 : STA $0D00, Y
|
||||
; LDA $1A14, X : ADC.b #$00 : STA $0D20, Y
|
||||
;
|
||||
; LDA $1A28, X : CLC : ADC.b #$02 : STA $0D10, Y
|
||||
; LDA $1A3C, X : ADC.b #$00 : STA $0D30, Y
|
||||
;
|
||||
; LDA $EE : STA $0F20, Y
|
||||
;
|
||||
; LDA.b #$01 : STA $0BA0, Y
|
||||
; STA $0E80, Y
|
||||
;
|
||||
; LDA.b #$01 : STA $02E4 ; OldMountainMan_FreezePlayer
|
||||
; STA $037B ; ^
|
||||
;
|
||||
; PLX
|
||||
;
|
||||
; LDA.b #$00 : STA FollowerIndicator
|
||||
;
|
||||
; STZ $5E
|
||||
;
|
||||
; JML $09A6B6 ; <- 4A6B6 tagalong.asm:1194 (SEP #$30 : RTS)
|
||||
;}
|
||||
;================================================================
|
||||
Sprite_ShowSolicitedMessageIfPlayerFacing_Alt:
|
||||
{
|
||||
STA $1CF0
|
||||
STY $1CF1
|
||||
|
||||
JSL Sprite_CheckDamageToPlayerSameLayerLong : BCC .alpha
|
||||
JSL Sprite_CheckIfPlayerPreoccupied : BCS .alpha
|
||||
|
||||
LDA $F6 : BPL .alpha
|
||||
LDA $0F10, X : BNE .alpha
|
||||
LDA $4D : CMP.b #$02 : BEQ .alpha
|
||||
|
||||
JSL Sprite_DirectionToFacePlayerLong : PHX : TYX
|
||||
|
||||
; Make sure that the sprite is facing towards the player, otherwise
|
||||
; talking can't happen. (What sprites actually use this???)
|
||||
LDA $05E1A3, X : PLX : CMP $2F : BNE .not_facing_each_other
|
||||
|
||||
PHY
|
||||
|
||||
LDA $1CF0
|
||||
LDY $1CF1
|
||||
|
||||
; Check what room we're in so we know which npc we're talking to
|
||||
LDA.b $A0 : CMP #$05 : BEQ .SahasrahlaDialogs
|
||||
CMP #$1C : BEQ .BombShopGuyDialog
|
||||
BRA .SayNothing
|
||||
|
||||
.SahasrahlaDialogs
|
||||
REP #$20 : LDA.l MapReveal_Sahasrahla : ORA MapOverlay : STA MapOverlay : SEP #$20
|
||||
JSL DialogSahasrahla : BRA .SayNothing
|
||||
|
||||
.BombShopGuyDialog
|
||||
REP #$20 : LDA.l MapReveal_BombShop : ORA MapOverlay : STA MapOverlay : SEP #$20
|
||||
JSL DialogBombShopGuy
|
||||
|
||||
.SayNothing
|
||||
|
||||
LDA.b #$40 : STA $0F10, X
|
||||
|
||||
PLA : EOR.b #$03
|
||||
|
||||
SEC
|
||||
|
||||
RTL
|
||||
|
||||
.not_facing_each_other
|
||||
.alpha
|
||||
|
||||
LDA $0DE0, X
|
||||
|
||||
CLC
|
||||
|
||||
RTL
|
||||
}
|
||||
;================================================================
|
||||
Sprite_ShowSolicitedMessageIfPlayerFacing_PreserveMessage:
|
||||
{
|
||||
PHY
|
||||
PHA
|
||||
|
||||
JSL Sprite_CheckDamageToPlayerSameLayerLong : BCC .alpha
|
||||
JSL Sprite_CheckIfPlayerPreoccupied : BCS .alpha
|
||||
|
||||
LDA $F6 : BPL .alpha
|
||||
LDA $0F10, X : BNE .alpha
|
||||
LDA $4D : CMP.b #$02 : BEQ .alpha
|
||||
|
||||
JSL Sprite_DirectionToFacePlayerLong : PHX : TYX
|
||||
|
||||
; Make sure that the sprite is facing towards the player, otherwise
|
||||
; talking can't happen. (What sprites actually use this???)
|
||||
LDA $05E1A3, X : PLX : CMP $2F : BNE .not_facing_each_other
|
||||
|
||||
PLA : XBA : PLA
|
||||
|
||||
PHY
|
||||
|
||||
TAY : XBA
|
||||
|
||||
JSL Sprite_ShowMessageUnconditional
|
||||
|
||||
LDA.b #$40 : STA $0F10, X
|
||||
|
||||
PLA : EOR.b #$03
|
||||
|
||||
SEC
|
||||
|
||||
RTL
|
||||
|
||||
.not_facing_each_other
|
||||
.alpha
|
||||
PLY
|
||||
PLA
|
||||
|
||||
LDA $0DE0, X
|
||||
|
||||
CLC
|
||||
|
||||
RTL
|
||||
}
|
||||
;================================================================
|
||||
@@ -22,7 +22,7 @@ InvertDPad:
|
||||
JML.l InvertDPadReturn
|
||||
|
||||
.crowd_control
|
||||
LDA.l DPadInverter : BNE +
|
||||
LDA.l ControllerInverter : BNE +
|
||||
|
||||
LDA.w JOY1L : STA.b Scrap00
|
||||
LDA.w JOY1H : STA.b Scrap01
|
||||
|
||||
80
crypto.asm
80
crypto.asm
@@ -20,20 +20,6 @@ macro ASL32Single(value)
|
||||
; ROL handles the carry from the lower byte for us
|
||||
endmacro
|
||||
|
||||
;macro LSR32(value,k)
|
||||
; LDX.b <k>
|
||||
; ?loop:
|
||||
; %LSR32Single(<value>,<k>)
|
||||
; DEX : CPX.b #$00 : BNE ?loop
|
||||
;endmacro
|
||||
|
||||
;macro ASL32(value,k)
|
||||
; LDX.b <k>
|
||||
; ?loop:
|
||||
; %LSR32Single(<value>,<k>)
|
||||
; DEX : CPX.b #$00 : BNE ?loop
|
||||
;endmacro
|
||||
|
||||
CryptoMX:
|
||||
PHX
|
||||
|
||||
@@ -222,69 +208,3 @@ db 32 ; n is 2
|
||||
;dd (23*$9e3779b9)&$ffffffff ; n is 3
|
||||
dd (32*$9e3779b9)&$ffffffff ; n is 2
|
||||
|
||||
;void btea(uint32_t *v, int n, uint32_t const key[4]) {
|
||||
; uint32_t y, z, sum;
|
||||
; unsigned p, rounds, e;
|
||||
|
||||
; } else if (n < -1) { /* Decoding Part */
|
||||
; n = -n;
|
||||
; rounds = 6 + 52/n;
|
||||
; sum = rounds*DELTA;
|
||||
; y = v[0];
|
||||
; do {
|
||||
; e = (sum >> 2) & 3;
|
||||
; for (p=n-1; p>0; p--) {
|
||||
; z = v[p-1];
|
||||
; y = v[p] -= MX;
|
||||
; }
|
||||
; z = v[n-1];
|
||||
; y = v[0] -= MX;
|
||||
; sum -= DELTA;
|
||||
; } while (--rounds);
|
||||
; }
|
||||
|
||||
;BTEA will encode or decode n words as a single block where n > 1
|
||||
;
|
||||
;v is the n word data vector
|
||||
;k is the 4 word key
|
||||
;n is negative for decoding
|
||||
;if n is zero result is 1 and no coding or decoding takes place, otherwise the result is zero
|
||||
;assumes 32 bit 'long' and same endian coding and decoding
|
||||
;#include <stdint.h>
|
||||
;#define DELTA 0x9e3779b9
|
||||
;#define MX ((((z>>5)^(y<<2)) + ((y>>3)^(z<<4))) ^ ((sum^y) + (key[(p&3)^e] ^ z)))
|
||||
;
|
||||
;void btea(uint32_t *v, int n, uint32_t const key[4]) {
|
||||
; uint32_t y, z, sum;
|
||||
; unsigned p, rounds, e;
|
||||
; if (n > 1) { /* Coding Part */
|
||||
; rounds = 6 + 52/n;
|
||||
; sum = 0;
|
||||
; z = v[n-1];
|
||||
; do {
|
||||
; sum += DELTA;
|
||||
; e = (sum >> 2) & 3;
|
||||
; for (p=0; p<n-1; p++) {
|
||||
; y = v[p+1];
|
||||
; z = v[p] += MX;
|
||||
; }
|
||||
; y = v[0];
|
||||
; z = v[n-1] += MX;
|
||||
; } while (--rounds);
|
||||
; } else if (n < -1) { /* Decoding Part */
|
||||
; n = -n;
|
||||
; rounds = 6 + 52/n;
|
||||
; sum = rounds*DELTA;
|
||||
; y = v[0];
|
||||
; do {
|
||||
; e = (sum >> 2) & 3;
|
||||
; for (p=n-1; p>0; p--) {
|
||||
; z = v[p-1];
|
||||
; y = v[p] -= MX;
|
||||
; }
|
||||
; z = v[n-1];
|
||||
; y = v[0] -= MX;
|
||||
; sum -= DELTA;
|
||||
; } while (--rounds);
|
||||
; }
|
||||
;}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
CheckReceivedItemPropertiesBeforeLoad:
|
||||
LDA $A0 : BEQ .normalCode
|
||||
LDA $7EC005 : BNE .lightOff
|
||||
LDA.b RoomIndex : BEQ .normalCode
|
||||
LDA.l $7EC005 : BNE .lightOff
|
||||
.normalCode
|
||||
LDA.l AddReceivedItemExpanded_properties, X ;Restore Rando Code
|
||||
RTL
|
||||
@@ -10,18 +10,18 @@ CheckReceivedItemPropertiesBeforeLoad:
|
||||
LDA.l AddReceivedItemExpanded_properties, X ; get palette
|
||||
|
||||
REP #$30
|
||||
AND #$0007 ; mask out palette
|
||||
AND.w #$0007 ; mask out palette
|
||||
ASL #5 ; multiply by 32
|
||||
ADC #$C610 ; offset to latter half
|
||||
ADC.w #$C610 ; offset to latter half
|
||||
|
||||
TAX ; give to destination
|
||||
LDY #$C610 ; target palette SP0 colors 8-F
|
||||
LDY.w #$C610 ; target palette SP0 colors 8-F
|
||||
|
||||
LDA #$000F ; 16 bytes
|
||||
LDA.w #$000F ; 16 bytes
|
||||
MVN $7E, $7E ; move palette
|
||||
|
||||
SEP #$30
|
||||
PLB : PLY : PLX
|
||||
INC $15
|
||||
LDA #$00
|
||||
INC.b $15
|
||||
LDA.b #$00
|
||||
RTL
|
||||
|
||||
@@ -28,8 +28,8 @@ SetDeathWorldChecked:
|
||||
JMP SetDeathWorldChecked_Inverted
|
||||
+
|
||||
LDA.b $1B : BEQ .outdoors
|
||||
LDA.w $040C : CMP #$FF : BNE .dungeon
|
||||
LDA.b $A0 : ORA.b $A1 : BNE ++
|
||||
LDA.w $040C : CMP.b #$FF : BNE .dungeon
|
||||
LDA.b RoomIndex : ORA.b RoomIndex+1 : BNE ++
|
||||
LDA.l GanonPyramidRespawn : BNE .pyramid ; if flag is set, force respawn at pyramid on death to ganon
|
||||
++
|
||||
.outdoors
|
||||
@@ -52,20 +52,20 @@ DoWorldFix_Inverted:
|
||||
.skip_mirror_check ; alt entrance point
|
||||
LDA.l ProgressIndicator : CMP.b #$03 : BCS .done ; check if agahnim 1 is alive
|
||||
.setDarkWorld
|
||||
LDA.b #$40 : STA CurrentWorld ; set flag to dark world
|
||||
LDA.b #$40 : STA.l CurrentWorld ; set flag to dark world
|
||||
LDA.l FollowerIndicator
|
||||
CMP.b #$07 : BEQ .clear ; clear frog
|
||||
CMP.b #$08 : BEQ .clear ; clear dwarf - consider flute implications
|
||||
BRA .done
|
||||
.clear
|
||||
LDA.b #$00 : STA FollowerIndicator ; clear follower
|
||||
LDA.b #$00 : STA.l FollowerIndicator ; clear follower
|
||||
.done
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
SetDeathWorldChecked_Inverted:
|
||||
LDA.b $1B : BEQ .outdoors
|
||||
LDA.w $040C : CMP #$FF : BNE .dungeon
|
||||
LDA.b $A0 : ORA $A1 : BNE ++
|
||||
LDA.w $040C : CMP.b #$FF : BNE .dungeon
|
||||
LDA.b RoomIndex : ORA.b RoomIndex+1 : BNE ++
|
||||
LDA.l GanonPyramidRespawn : BNE .castle ; if flag is set, force respawn at pyramid on death to ganon
|
||||
++
|
||||
.outdoors
|
||||
@@ -77,7 +77,7 @@ JMP DoWorldFix_Inverted_skip_mirror_check
|
||||
|
||||
.castle
|
||||
LDA.b #$00 : STA.l CurrentWorld ; set flag to dark world
|
||||
LDA.l FollowerIndicator : CMP.b #$07 : BNE + : LDA.b #$08 : STA FollowerIndicator : + ; convert frog to dwarf
|
||||
LDA.l FollowerIndicator : CMP.b #$07 : BNE + : LDA.b #$08 : STA.l FollowerIndicator : + ; convert frog to dwarf
|
||||
.done
|
||||
RTL
|
||||
;================================================================================
|
||||
|
||||
@@ -61,7 +61,7 @@ JML.l Dungeon_OpenKeyedObject_nextChest
|
||||
.nextChest
|
||||
|
||||
INX #2 : CPX.w #$0150 : BEQ .couldntFindChest
|
||||
LDA.l ChestData, X : AND.w #$7FFF : CMP.b $A0 : BNE .nextChest
|
||||
LDA.l ChestData, X : AND.w #$7FFF : CMP.b RoomIndex : BNE .nextChest
|
||||
|
||||
DEC.b Scrap0E : BNE .nextChest
|
||||
|
||||
|
||||
108
dialog.asm
108
dialog.asm
@@ -172,7 +172,7 @@ FreeDungeonItemNotice:
|
||||
|
||||
STZ.w $1CF0 : STZ.w $1CF1 ; reset decompression buffer
|
||||
LDA.b #$01 : STA.l AltTextFlag ; set alternate dialog flag
|
||||
STA.l $7F509F
|
||||
STA.l TextBoxDefer
|
||||
|
||||
;--------------------------------
|
||||
.skip
|
||||
@@ -415,6 +415,112 @@ CalculateSignIndex:
|
||||
.done
|
||||
RTL
|
||||
|
||||
;================================================================
|
||||
; Contributor: Myramong
|
||||
;================================================================
|
||||
Sprite_ShowSolicitedMessageIfPlayerFacing_Alt:
|
||||
{
|
||||
STA.w $1CF0
|
||||
STY.w $1CF1
|
||||
|
||||
JSL Sprite_CheckDamageToPlayerSameLayerLong : BCC .alpha
|
||||
JSL Sprite_CheckIfPlayerPreoccupied : BCS .alpha
|
||||
|
||||
LDA.b $F6 : BPL .alpha
|
||||
LDA.w $0F10, X : BNE .alpha
|
||||
LDA.b $4D : CMP.b #$02 : BEQ .alpha
|
||||
|
||||
JSL Sprite_DirectionToFacePlayerLong : PHX : TYX
|
||||
|
||||
; Make sure that the sprite is facing towards the player, otherwise
|
||||
; talking can't happen. (What sprites actually use this???)
|
||||
LDA.l $05E1A3, X : PLX : CMP.b $2F : BNE .not_facing_each_other
|
||||
|
||||
PHY
|
||||
|
||||
LDA.w $1CF0
|
||||
LDY.w $1CF1
|
||||
|
||||
; Check what room we're in so we know which npc we're talking to
|
||||
LDA.b RoomIndex
|
||||
CMP.b #$05 : BEQ .SahasrahlaDialogs
|
||||
CMP.b #$1C : BEQ .BombShopGuyDialog
|
||||
BRA .SayNothing
|
||||
|
||||
.SahasrahlaDialogs
|
||||
REP #$20 : LDA.l MapReveal_Sahasrahla : ORA.l MapOverlay : STA.l MapOverlay : SEP #$20
|
||||
JSL DialogSahasrahla : BRA .SayNothing
|
||||
|
||||
.BombShopGuyDialog
|
||||
REP #$20 : LDA.l MapReveal_BombShop : ORA.l MapOverlay : STA.l MapOverlay : SEP #$20
|
||||
JSL DialogBombShopGuy
|
||||
|
||||
.SayNothing
|
||||
|
||||
LDA.b #$40 : STA.w $0F10, X
|
||||
|
||||
PLA : EOR.b #$03
|
||||
|
||||
SEC
|
||||
|
||||
RTL
|
||||
|
||||
.not_facing_each_other
|
||||
.alpha
|
||||
|
||||
LDA.w $0DE0, X
|
||||
|
||||
CLC
|
||||
|
||||
RTL
|
||||
}
|
||||
;================================================================
|
||||
Sprite_ShowSolicitedMessageIfPlayerFacing_PreserveMessage:
|
||||
{
|
||||
PHY
|
||||
PHA
|
||||
|
||||
JSL Sprite_CheckDamageToPlayerSameLayerLong : BCC .alpha
|
||||
JSL Sprite_CheckIfPlayerPreoccupied : BCS .alpha
|
||||
|
||||
LDA.b $F6 : BPL .alpha
|
||||
LDA.w $0F10, X : BNE .alpha
|
||||
LDA.b $4D : CMP.b #$02 : BEQ .alpha
|
||||
|
||||
JSL Sprite_DirectionToFacePlayerLong : PHX : TYX
|
||||
|
||||
; Make sure that the sprite is facing towards the player, otherwise
|
||||
; talking can't happen. (What sprites actually use this???)
|
||||
LDA.l $05E1A3, X : PLX : CMP.b $2F : BNE .not_facing_each_other
|
||||
|
||||
PLA : XBA : PLA
|
||||
|
||||
PHY
|
||||
|
||||
TAY : XBA
|
||||
|
||||
JSL Sprite_ShowMessageUnconditional
|
||||
|
||||
LDA.b #$40 : STA.w $0F10, X
|
||||
|
||||
PLA : EOR.b #$03
|
||||
|
||||
SEC
|
||||
|
||||
RTL
|
||||
|
||||
.not_facing_each_other
|
||||
.alpha
|
||||
PLY
|
||||
PLA
|
||||
|
||||
LDA.w $0DE0, X
|
||||
|
||||
CLC
|
||||
|
||||
RTL
|
||||
}
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; A0 - A9 - 0 - 9
|
||||
; AA - C3 - A - Z
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
;--------------------------------------------------------------------------------
|
||||
StoreLastOverworldDoorID:
|
||||
TXA : INC
|
||||
STA $7F5099
|
||||
LDA $1BBB73, X : STA $010E
|
||||
STA.l PreviousOverworldDoor
|
||||
LDA.l $1BBB73, X : STA.w $010E
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -16,14 +16,14 @@ RTL
|
||||
; CacheDoorFrameData
|
||||
;--------------------------------------------------------------------------------
|
||||
CacheDoorFrameData:
|
||||
LDA $7F5099 : BEQ .originalBehaviour
|
||||
LDA.l PreviousOverworldDoor : BEQ .originalBehaviour
|
||||
DEC : ASL : TAX
|
||||
LDA EntranceDoorFrameTable, X : STA $0696
|
||||
LDA EntranceAltDoorFrameTable, X : STA $0698
|
||||
LDA.l EntranceDoorFrameTable, X : STA.w $0696
|
||||
LDA.l EntranceAltDoorFrameTable, X : STA.w $0698
|
||||
BRA .done
|
||||
.originalBehaviour
|
||||
LDA $D724, X : STA $0696
|
||||
STZ $0698
|
||||
LDA.w $D724, X : STA.w $0696
|
||||
STZ.w $0698
|
||||
.done
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -32,8 +32,8 @@ RTL
|
||||
; WalkDownIntoTavern
|
||||
;--------------------------------------------------------------------------------
|
||||
WalkDownIntoTavern:
|
||||
LDA $7F5099
|
||||
LDA.l PreviousOverworldDoor
|
||||
; tavern door has index 0x42 (saved off value is incremented by one)
|
||||
CMP #$43
|
||||
CMP.b #$43
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
; Dungeon & Boss Drop Fixes
|
||||
;--------------------------------------------------------------------------------
|
||||
DropSafeDungeon:
|
||||
LDA $040C : CMP #$08 : BEQ +
|
||||
LDA $01C6FC, X : JML Sprite_SpawnFallingItem
|
||||
LDA.w $040C : CMP.b #$08 : BEQ +
|
||||
LDA.l $01C6FC, X : JML Sprite_SpawnFallingItem
|
||||
+
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -7,7 +7,7 @@ EndingSequenceTableOverride:
|
||||
TYX
|
||||
LDA.l EndingSequenceText, X
|
||||
PLX
|
||||
STA $1008, X
|
||||
STA.w $1008, X
|
||||
PLY
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -15,7 +15,7 @@ EndingSequenceTableLookupOverride:
|
||||
PHY
|
||||
PHX
|
||||
TYX
|
||||
LDA.l EndingSequenceText, X : AND #$00FF
|
||||
LDA.l EndingSequenceText, X : AND.w #$00FF
|
||||
PLX
|
||||
PLY
|
||||
RTL
|
||||
|
||||
@@ -3,21 +3,25 @@
|
||||
; make sure bats always load LW stats
|
||||
;--------------------------------------------------------------------------------
|
||||
NewBatInit:
|
||||
CPY #$00 : BEQ .light_world
|
||||
CPY.b #$00 : BEQ .light_world
|
||||
;check if map id == 240 or 241
|
||||
LDA $A0 : CMP #$F0 : BEQ .light_world ;oldman cave1
|
||||
CMP #$F1 : BEQ .light_world ;oldman cave2
|
||||
CMP #$B0 : BEQ .light_world ;agahnim statue keese
|
||||
CMP #$D0 : BEQ .light_world ;agahnim darkmaze
|
||||
LDA.b RoomIndex : CMP.b #$F0 : BEQ .light_world ;oldman cave1
|
||||
CMP.b #$F1 : BEQ .light_world ;oldman cave2
|
||||
CMP.b #$B0 : BEQ .light_world ;agahnim statue keese
|
||||
CMP.b #$D0 : BEQ .light_world ;agahnim darkmaze
|
||||
|
||||
|
||||
LDA.b #$85 : STA $0CD2, X
|
||||
LDA.b #$04 : STA $0E50, X
|
||||
LDA.b #$85 : STA.w $0CD2, X
|
||||
LDA.b #$04 : STA.w $0E50, X
|
||||
RTL
|
||||
|
||||
.light_world
|
||||
LDA.b #$80 : STA $0CD2, X
|
||||
LDA.b #$01 : STA $0E50, X
|
||||
LDA.b #$80 : STA.w $0CD2, X
|
||||
LDA.b #$01 : STA.w $0E50, X
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
NewFireBarDamage:
|
||||
LDA.w $00EE : CMP.w $0F20, X : BNE .NotSameLayer
|
||||
JSL Sprite_AttemptDamageToPlayerPlusRecoilLong
|
||||
RTL
|
||||
.NotSameLayer
|
||||
RTL
|
||||
|
||||
@@ -8,7 +8,7 @@ LockAgahnimDoors:
|
||||
;#$0 = Never Locked
|
||||
LDA.w #$0000 : RTL
|
||||
+ : CMP.w #$0001 : BNE +
|
||||
LDA ProgressIndicator : AND.w #$000F : CMP.w #$0002 : !BGE .unlock ; if we rescued zelda, skip
|
||||
LDA.l ProgressIndicator : AND.w #$000F : CMP.w #$0002 : !BGE .unlock ; if we rescued zelda, skip
|
||||
JSR.w LockAgahnimDoorsCore : RTL
|
||||
+ : CMP.w #$0002 : BNE +
|
||||
JSR.w LockAgahnimDoorsCore : BEQ .unlock
|
||||
@@ -18,20 +18,20 @@ LockAgahnimDoors:
|
||||
REP #$30
|
||||
PLY : PLX
|
||||
!BGE .crystalOrUnlock
|
||||
LDA #$0001 : RTL
|
||||
LDA.w #$0001 : RTL
|
||||
.crystalOrUnlock
|
||||
LDA InvertedMode : AND.w #$00FF : BEQ .unlock
|
||||
LDA.l InvertedMode : AND.w #$00FF : BEQ .unlock
|
||||
|
||||
LDA OverworldEventDataWRAM+$43 : AND.w #$0020 : BNE .unlock ; Check if GT overlay is already on or not
|
||||
LDA $0308 : AND.w #$0080 : BEQ ++ ;If we are holding an item
|
||||
LDA.l OverworldEventDataWRAM+$43 : AND.w #$0020 : BNE .unlock ; Check if GT overlay is already on or not
|
||||
LDA.w $0308 : AND.w #$0080 : BEQ ++ ;If we are holding an item
|
||||
|
||||
.locked
|
||||
LDA #$0001 : RTL ;Keep the door locked
|
||||
LDA.w #$0001 : RTL ;Keep the door locked
|
||||
++
|
||||
SEP #$30
|
||||
JSL $099B6F ;Add tower break seal
|
||||
REP #$30
|
||||
LDA #$0001 ;Prevent door from opening that frame otherwise it glitchy
|
||||
LDA.w #$0001 ;Prevent door from opening that frame otherwise it glitchy
|
||||
RTL
|
||||
|
||||
+
|
||||
@@ -44,7 +44,7 @@ RTL
|
||||
FlagAgahnimDoor:
|
||||
LDA.l InvertedMode : BEQ .vanilla
|
||||
|
||||
LDA OverworldEventDataWRAM+$43 : ORA #$20 : STA OverworldEventDataWRAM+$43 ; activate GT overlay
|
||||
LDA.l OverworldEventDataWRAM+$43 : ORA.b #$20 : STA.l OverworldEventDataWRAM+$43 ; activate GT overlay
|
||||
|
||||
.vanilla
|
||||
LDA.b #$28 : STA.b $72
|
||||
@@ -53,9 +53,9 @@ FlagAgahnimDoor:
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
LockAgahnimDoorsCore:
|
||||
LDA $22 : CMP.w #1992 : !BLT + ; door too far left, skip
|
||||
LDA.b $22 : CMP.w #1992 : !BLT + ; door too far left, skip
|
||||
CMP.w #2088 : !BGE + ; door too rat right, skip
|
||||
LDA $20 : CMP.w #1720 : !BGE + ; door too low, skip
|
||||
LDA.b $20 : CMP.w #1720 : !BGE + ; door too low, skip
|
||||
LDA.w #$0001
|
||||
RTS
|
||||
+
|
||||
@@ -86,16 +86,15 @@ AllowStartFromSingleEntranceCave:
|
||||
BNE +
|
||||
JMP .done
|
||||
+
|
||||
|
||||
DEC
|
||||
STA.b Scrap00
|
||||
ASL #2 : !ADD Scrap00 : ASL #2 ; mult by 20
|
||||
TAX
|
||||
|
||||
LDA.w #$0016 : STA $7EC142 ; Cache the main screen designation
|
||||
LDA.w #$0016 : STA.l $7EC142 ; Cache the main screen designation
|
||||
LDA.l StartingAreaExitTable+$05, X : STA.l $7EC144 ; Cache BG1 V scroll
|
||||
LDA.l StartingAreaExitTable+$07, X : STA.l $7EC146 ; Cache BG1 H scroll
|
||||
LDA.l StartingAreaExitTable+$09, X : !ADD.w #$0010 : STA $7EC148 ; Cache Link's Y coordinate
|
||||
LDA.l StartingAreaExitTable+$09, X : !ADD.w #$0010 : STA.l $7EC148 ; Cache Link's Y coordinate
|
||||
LDA.l StartingAreaExitTable+$0B, X : STA.l $7EC14A ; Cache Link's X coordinate
|
||||
LDA.l StartingAreaExitTable+$0D, X : STA.l $7EC150 ; Cache Camera Y coord lower bound.
|
||||
LDA.l StartingAreaExitTable+$0F, X : STA.l $7EC152 ; Cache Camera X coord lower bound.
|
||||
@@ -113,19 +112,19 @@ AllowStartFromSingleEntranceCave:
|
||||
BIT.w #$0080 : BEQ + : ORA.w #$FF00 : + ; Sign extend
|
||||
STA.l $7EC16E
|
||||
|
||||
LDA.w #$0000 : !SUB.l $7EC16A : STA $7EC16C
|
||||
LDA.w #$0000 : !SUB.l $7EC16E : STA $7EC170
|
||||
LDA.w #$0000 : !SUB.l $7EC16A : STA.l $7EC16C
|
||||
LDA.w #$0000 : !SUB.l $7EC16E : STA.l $7EC170
|
||||
|
||||
LDA.l StartingAreaExitTable+$02, X : AND.w #$00FF
|
||||
STA $7EC14C ; Cache the overworld area number
|
||||
STA $7EC140 ; Cache the aux overworld area number
|
||||
STA.l $7EC14C ; Cache the overworld area number
|
||||
STA.l $7EC140 ; Cache the aux overworld area number
|
||||
|
||||
STZ $0698 ;zero out door overlays in case starting overworld door is not set
|
||||
STZ $0699 ;zero out door overlays in case starting overworld door is not set
|
||||
STZ.w $0698 ;zero out door overlays in case starting overworld door is not set
|
||||
STZ.w $0699 ;zero out door overlays in case starting overworld door is not set
|
||||
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
LDA $7EF3C8 : TAX
|
||||
LDA.l StartingAreaOverworldDoor, X : STA.l $7F5099 ;Load overworld door
|
||||
LDA.l $7EF3C8 : TAX
|
||||
LDA.l StartingAreaOverworldDoor, X : STA.l PreviousOverworldDoor ;Load overworld door
|
||||
REP #$20 ; reset 16-bit accumulator
|
||||
JSL.l CacheDoorFrameData
|
||||
|
||||
@@ -135,7 +134,7 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
AllowStartFromExit:
|
||||
|
||||
LDX $1CE8
|
||||
LDX.w $1CE8
|
||||
LDA.l ShouldStartatExit, X : BNE .doStart
|
||||
|
||||
LDA.l StartingEntrance ; what we wrote over
|
||||
@@ -146,21 +145,21 @@ JML.l AllowStartFromExitReturn
|
||||
LDA.l $028481, X ;Module_LocationMenu_starting_points
|
||||
ASL : TAX
|
||||
|
||||
LDA.l $02D8D2, X : STA $A0
|
||||
LDA.l $02D8D3, X : STA $A1
|
||||
LDA.l $02D8D2, X : STA.b RoomIndex
|
||||
LDA.l $02D8D3, X : STA.b RoomIndex+1
|
||||
|
||||
; Go to pre-overworld mode
|
||||
LDA.b #$08 : STA $10
|
||||
LDA.b #$08 : STA.b $10
|
||||
|
||||
STZ $11
|
||||
STZ $B0
|
||||
STZ.b $11
|
||||
STZ.b $B0
|
||||
|
||||
STZ $010A
|
||||
STZ.w $010A
|
||||
|
||||
STZ $04AA
|
||||
STZ.w $04AA
|
||||
JSL Equipment_SearchForEquippedItemLong
|
||||
JSL HUD_RebuildLong2
|
||||
JSL $0DDD32 ; Equipment_UpdateEquippedItemLong
|
||||
JSL Equipment_UpdateEquippedItemLong
|
||||
RTL
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -196,7 +195,7 @@ PreventEnterOnBonk:
|
||||
STA.b Scrap00 ; part of what we wrote over
|
||||
LDA.l InvertedMode : AND.w #$00FF : BEQ .done
|
||||
LDA.l $5D : AND.w #$00FF : CMP.w #$0014 : BNE .done ;in mirror mode?
|
||||
LDA.b $8A : AND.w #$0040 : CMP $7B : BEQ .done ; Are we bonking, or doing the superbunny glitch?
|
||||
LDA.b $8A : AND.w #$0040 : CMP.b $7B : BEQ .done ; Are we bonking, or doing the superbunny glitch?
|
||||
|
||||
; If in inverted, are in mirror mode, and are bonking then do not enter
|
||||
JML.l PreventEnterOnBonk_BRANCH_IX
|
||||
@@ -206,8 +205,8 @@ PreventEnterOnBonk:
|
||||
JML.l PreventEnterOnBonk_return
|
||||
;--------------------------------------------------------------------------------
|
||||
TurtleRockEntranceFix:
|
||||
LDA TurtleRockAutoOpenFix : BEQ .done
|
||||
LDA $8A : CMP.b #$47 : BNE .done
|
||||
LDA.l TurtleRockAutoOpenFix : BEQ .done
|
||||
LDA.b $8A : CMP.b #$47 : BNE .done
|
||||
;If exiting to turtle rock ensure the entrance is open
|
||||
LDA.l OverworldEventDataWRAM+$47 : ORA.b #$20 : STA.l OverworldEventDataWRAM+$47
|
||||
.done
|
||||
@@ -216,14 +215,14 @@ RTL
|
||||
AnimatedEntranceFix: ;when an entrance animation tries to start
|
||||
PHA
|
||||
LDA.l InvertedMode : BEQ + ;If we are in inverted mode
|
||||
LDA $8A : AND.b #$40 : BNE + ;and in the light world
|
||||
LDA.b $8A : AND.b #$40 : BNE + ;and in the light world
|
||||
PLA
|
||||
STZ $04C6 ; skip it.
|
||||
LDA #$00
|
||||
STZ.w $04C6 ; skip it.
|
||||
LDA.b #$00
|
||||
RTL
|
||||
+
|
||||
PLA
|
||||
STA $02E4 ;what we wrote over
|
||||
STA $0FC1 ;what we wrote over
|
||||
STA $0710 ;what we wrote over
|
||||
STA.w $02E4 ;what we wrote over
|
||||
STA.w $0FC1 ;what we wrote over
|
||||
STA.w $0710 ;what we wrote over
|
||||
RTL
|
||||
|
||||
35
events.asm
35
events.asm
@@ -148,13 +148,13 @@ OnNewFile:
|
||||
PHX : PHP
|
||||
; reset some values on new file that are otherwise only reset on hard reset
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
STZ $03C4 ; ancilla slot index
|
||||
STZ $047A ; EG
|
||||
STZ $0B08 : STZ $0B09 ; arc variable
|
||||
STZ $0CFB ; enemies killed (pull trees)
|
||||
STZ $0CFC ; times taken damage (pull trees)
|
||||
STZ $0FC7 : STZ $0FC8 : STZ $0FC9 : STZ $0FCA : STZ $0FCB : STZ $0FCC : STZ $0FCD ; prize packs
|
||||
LDA #$00 : STA.l $7EC011 ; mosaic
|
||||
STZ.w $03C4 ; ancilla slot index
|
||||
STZ.w $047A ; EG
|
||||
STZ.w $0B08 : STZ $0B09 ; arc variable
|
||||
STZ.w $0CFB ; enemies killed (pull trees)
|
||||
STZ.w $0CFC ; times taken damage (pull trees)
|
||||
STZ.w $0FC7 : STZ.w $0FC8 : STZ.w $0FC9 : STZ.w $0FCA : STZ.w $0FCB : STZ.w $0FCC : STZ.w $0FCD ; prize packs
|
||||
LDA.b #$00 : STA.l $7EC011 ; mosaic
|
||||
JSL InitRNGPointerTable ; boss RNG
|
||||
PLP : PLX
|
||||
RTL
|
||||
@@ -166,16 +166,12 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnLinkDamaged:
|
||||
JSL.l IncrementDamageTakenCounter_Arb
|
||||
;JSL.l FlipperKill
|
||||
JML.l OHKOTimer
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
OnEnterWater:
|
||||
JSL.l RegisterWaterEntryScreen
|
||||
|
||||
JSL.l MysteryWaterFunction
|
||||
LDX.b #$04
|
||||
RTL
|
||||
;OnEnterWater:
|
||||
; JSL.l UnequipCapeQuiet ; what we wrote over
|
||||
;RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnLinkDamagedFromPit:
|
||||
JSL.l OHKOTimer
|
||||
@@ -197,7 +193,6 @@ OnLinkDamagedFromPitOutdoors:
|
||||
;--------------------------------------------------------------------------------
|
||||
OnOWTransition:
|
||||
JSL.l FloodGateReset
|
||||
JSL.l FlipperFlag
|
||||
JSL.l StatTransitionCounter
|
||||
PHP
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
@@ -206,14 +201,14 @@ OnOWTransition:
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnLoadDuckMap:
|
||||
LDA.l ScratchBufferV
|
||||
LDA.l DuckMapFlag
|
||||
BNE +
|
||||
INC : STA.l ScratchBufferV
|
||||
INC : STA.l DuckMapFlag
|
||||
JSL OverworldMap_InitGfx : DEC $0200
|
||||
|
||||
RTL
|
||||
+
|
||||
LDA.b #$00 : STA.l ScratchBufferV
|
||||
LDA.b #$00 : STA.l DuckMapFlag
|
||||
JML OverworldMap_DarkWorldTilemap
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -228,10 +223,10 @@ RTL
|
||||
PostItemAnimation:
|
||||
LDA.b #$00 : STA.l BusyItem ; mark item as finished
|
||||
|
||||
LDA.l $7F509F : BEQ +
|
||||
LDA.l TextBoxDefer : BEQ +
|
||||
STZ.w $1CF0 : STZ.w $1CF1 ; reset decompression buffer
|
||||
JSL.l Main_ShowTextMessage_Alt
|
||||
LDA.b #$00 : STA.l $7F509F
|
||||
LDA.b #$00 : STA.l TextBoxDefer
|
||||
+
|
||||
|
||||
LDA.w $02E9 : CMP.b #$01 : BNE +
|
||||
|
||||
@@ -2,20 +2,20 @@
|
||||
; Fairy Changes & Fixes
|
||||
;--------------------------------------------------------------------------------
|
||||
RefillHealthPlusMagic:
|
||||
LDA BigFairyHealth : STA HeartsFiller
|
||||
LDA.l BigFairyHealth : STA.l HeartsFiller
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
RefillHealthPlusMagic8bit:
|
||||
LDA BigFairyHealth : STA HeartsFiller
|
||||
LDA BigFairyMagic : STA MagicFiller
|
||||
LDA.l BigFairyHealth : STA.l HeartsFiller
|
||||
LDA.l BigFairyMagic : STA.l MagicFiller
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
CheckFullHealth:
|
||||
LDA BigFairyHealth : BEQ +
|
||||
LDA CurrentHealth : CMP MaximumHealth : BNE .player_hp_not_full_yet
|
||||
LDA.l BigFairyHealth : BEQ +
|
||||
LDA.l CurrentHealth : CMP.l MaximumHealth : BNE .player_hp_not_full_yet
|
||||
+
|
||||
LDA BigFairyMagic : BEQ +
|
||||
LDA CurrentMagic : CMP.b #$80 : BNE .player_mp_not_full_yet
|
||||
LDA.l BigFairyMagic : BEQ +
|
||||
LDA.l CurrentMagic : CMP.b #$80 : BNE .player_mp_not_full_yet
|
||||
+
|
||||
LDA.b #$00
|
||||
RTL
|
||||
@@ -30,57 +30,56 @@ FairyPond_Init:
|
||||
JML.l Sprite_ShowMessageFromPlayerContact
|
||||
+
|
||||
PHY : JSL.l Sprite_CheckDamageToPlayerSameLayerLong : BCC +
|
||||
LDA BottleContentsOne : CMP.b #$02 : BNE ++ : LDA.b #$1C : PHA : BRA .emptyBottle : ++
|
||||
LDA BottleContentsTwo : CMP.b #$02 : BNE ++ : LDA.b #$1D : PHA : BRA .emptyBottle : ++
|
||||
LDA BottleContentsThree : CMP.b #$02 : BNE ++ : LDA.b #$1E : PHA : BRA .emptyBottle : ++
|
||||
LDA BottleContentsFour : CMP.b #$02 : BNE ++ : LDA.b #$1F : PHA : BRA .emptyBottle : ++
|
||||
LDA.l BottleContentsOne : CMP.b #$02 : BNE ++ : LDA.b #$1C : PHA : BRA .emptyBottle : ++
|
||||
LDA.l BottleContentsTwo : CMP.b #$02 : BNE ++ : LDA.b #$1D : PHA : BRA .emptyBottle : ++
|
||||
LDA.l BottleContentsThree : CMP.b #$02 : BNE ++ : LDA.b #$1E : PHA : BRA .emptyBottle : ++
|
||||
LDA.l BottleContentsFour : CMP.b #$02 : BNE ++ : LDA.b #$1F : PHA : BRA .emptyBottle : ++
|
||||
.noInventory
|
||||
LDA.b #$0A : STA $0D80, X
|
||||
LDA.b #$0A : STA.w $0D80, X
|
||||
LDA.b #$51
|
||||
LDY.b #$01
|
||||
JSL.l Sprite_ShowMessageFromPlayerContact
|
||||
JMP .cleanup
|
||||
|
||||
.emptyBottle
|
||||
LDA.b #$02 : STA $0D80, X
|
||||
;JSL Player_ResetState ; If we continue to have issues, add this in too. (After determining the address for it)
|
||||
LDA.b #$02 : STA.w $0D80, X
|
||||
STZ $2F
|
||||
LDA.b #$01 : STA $02E4
|
||||
PLA : STA $1CE8
|
||||
LDA.b #$01 : STA.w $02E4
|
||||
PLA : STA.w $1CE8
|
||||
.cleanup
|
||||
STZ $0EB0, X ; Clear the sprite's item-given variable
|
||||
STZ.w $0EB0, X ; Clear the sprite's item-given variable
|
||||
CLC ; skip rest of original function
|
||||
+ : PLY
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
HappinessPond_Check:
|
||||
LDA $A0 : CMP.b #$15 ;what we wrote over
|
||||
LDA.b RoomIndex : CMP.b #$15 ;what we wrote over
|
||||
BNE .done
|
||||
PHP
|
||||
|
||||
LDA.b #$72
|
||||
JSL Sprite_SpawnDynamically
|
||||
|
||||
LDA $0FD8 : STA $0D10, Y
|
||||
LDA $0FD9 : STA $0D30, Y
|
||||
LDA.w $0FD8 : STA.w $0D10, Y
|
||||
LDA.w $0FD9 : STA.w $0D30, Y
|
||||
|
||||
LDA $0FDA : !SUB.b #$40 : STA $0D00, Y
|
||||
LDA $0FDB : SBC.b #$00 : STA $0D20, Y
|
||||
LDA.w $0FDA : !SUB.b #$40 : STA.w $0D00, Y
|
||||
LDA.w $0FDB : SBC.b #$00 : STA.w $0D20, Y
|
||||
|
||||
LDA.b #$01 : STA $0DA0, Y
|
||||
LDA.b #$01 : STA.w $0DA0, Y
|
||||
|
||||
LDA.b #$BB
|
||||
JSL Sprite_SpawnDynamically
|
||||
|
||||
LDA.b #$08 : STA $0DD0, Y ; ensure we run prep for the shopkeeper
|
||||
LDA.b #$08 : STA.w $0DD0, Y ; ensure we run prep for the shopkeeper
|
||||
|
||||
LDA $0FD8 : STA $0D10, Y
|
||||
LDA $0FD9 : STA $0D30, Y
|
||||
LDA.w $0FD8 : STA.w $0D10, Y
|
||||
LDA.w $0FD9 : STA.w $0D30, Y
|
||||
|
||||
LDA $0FDA : !SUB.b #$20 : STA $0D00, Y
|
||||
LDA $0FDB : SBC.b #$00 : STA $0D20, Y
|
||||
LDA.w $0FDA : !SUB.b #$20 : STA.w $0D00, Y
|
||||
LDA.w $0FDB : SBC.b #$00 : STA.w $0D20, Y
|
||||
|
||||
STZ $0DD0, X ; self terminate
|
||||
STZ.w $0DD0, X ; self terminate
|
||||
|
||||
PLP
|
||||
.done
|
||||
|
||||
@@ -328,8 +328,8 @@ DrawPlayerFileShared:
|
||||
|
||||
LDA.l EquipmentSRAM+$0108 : AND.w #$00FF
|
||||
JSL.l HexToDec
|
||||
LDA.l $7F5006 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(11,26)
|
||||
LDA.l $7F5007 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(11,27)
|
||||
LDA.l HexToDecDigit4 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(11,26)
|
||||
LDA.l HexToDecDigit5 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(11,27)
|
||||
|
||||
; Boots
|
||||
%fs_drawItemBasic(EquipmentSRAM+$15,3,28,FileSelectItems_boots)
|
||||
@@ -560,16 +560,16 @@ FileSelectDrawHudBar:
|
||||
LDA.w #$029B|!FS_COLOR_GREEN : %fs_draw16x8(0,10)
|
||||
LDA.l DisplayRupeesSRAM
|
||||
JSL.l HexToDec
|
||||
LDA.l $7F5004 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,9)
|
||||
LDA.l $7F5005 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,10)
|
||||
LDA.l $7F5006 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,11)
|
||||
LDA.l $7F5007 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,12)
|
||||
LDA.l HexToDecDigit2 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,9)
|
||||
LDA.l HexToDecDigit3 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,10)
|
||||
LDA.l HexToDecDigit4 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,11)
|
||||
LDA.l HexToDecDigit5 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,12)
|
||||
|
||||
LDA.w #$028B|!FS_COLOR_BLUE : %fs_draw16x8(0,14)
|
||||
LDA.l BombsEquipmentSRAM : AND.w #$00FF
|
||||
JSL.l HexToDec
|
||||
LDA.l $7F5006 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,14)
|
||||
LDA.l $7F5007 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,15)
|
||||
LDA.l HexToDecDigit4 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,14)
|
||||
LDA.l HexToDecDigit5 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,15)
|
||||
|
||||
LDA.l BowTrackingSRAM : AND.w #$0040 : BEQ +
|
||||
LDA.w #$0299|!FS_COLOR_RED : %fs_draw16x8(0,17)
|
||||
@@ -579,8 +579,8 @@ FileSelectDrawHudBar:
|
||||
++
|
||||
LDA.l CurrentArrowsSRAM : AND.w #$00FF
|
||||
JSL.l HexToDec
|
||||
LDA.l $7F5006 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,17)
|
||||
LDA.l $7F5007 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,18)
|
||||
LDA.l HexToDecDigit4 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,17)
|
||||
LDA.l HexToDecDigit5 : AND.w #$00FF : !ADD.w #$210+!FS_COLOR_BW : %fs_draw8x8(1,18)
|
||||
RTS
|
||||
;--------------------------------------------------------------------------------
|
||||
AltBufferTable:
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
NewFireBarDamage:
|
||||
{
|
||||
LDA $00EE : CMP $0F20, X : BNE .NotSameLayer
|
||||
JSL Sprite_AttemptDamageToPlayerPlusRecoilLong
|
||||
RTL
|
||||
.NotSameLayer
|
||||
RTL
|
||||
}
|
||||
@@ -1,65 +1,13 @@
|
||||
;================================================================================
|
||||
; Fake Flippers Softlock Fix
|
||||
;--------------------------------------------------------------------------------
|
||||
FlipperKill:
|
||||
PHP
|
||||
LDA.b $5D : CMP.b #$04 : BNE .done ; skip if we're not swimming
|
||||
LDA.l FlippersEquipment : BNE .done ; skip if we have the flippers
|
||||
LDA.l $7F5001 : BEQ .done ; skip if we're not marked in danger for softlock
|
||||
LDA.b $8A : CMP.l $7F5098 : BEQ .done ; skip if we're on the same screen we entered the water on
|
||||
LDA.l IgnoreFaeries : ORA.b #$04 : STA.l IgnoreFaeries
|
||||
LDA.b #$00 : STA CurrentHealth ; kill link
|
||||
LDA.b #$00 : STA $7F5001 ; mark fake flipper softlock as impossible
|
||||
.done
|
||||
PLP
|
||||
LDA.l CurrentHealth ; thing we wrote over
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
IgnoreFairyCheck:
|
||||
LDX.b #$00 ; thing we wrote over
|
||||
LDA.l IgnoreFaeries : BIT.b #$04 : BEQ .normal
|
||||
|
||||
AND.b #$FB : STA.l IgnoreFaeries ; clear ignore fairy flag
|
||||
LDA.b #$F0 ; set check to invalid entry
|
||||
RTL
|
||||
.normal
|
||||
LDA.b #$06 ; set check to fairy
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
FlipperReset:
|
||||
JSL $0998E8 ; AddTransitionSplash
|
||||
LDA.b #$00 : STA.l $7F5001 ; mark fake flipper softlock as impossible
|
||||
.done
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
FlipperFlag:
|
||||
LDA.b $5D : CMP.b #$04 : BNE .done ; skip if we're not swimming
|
||||
LDA.l FlippersEquipment : BNE .safe ; skip if we have the flippers
|
||||
LDA.b #$01 : STA.l $7F5001 ; mark fake flipper softlock as possible
|
||||
BRA .done
|
||||
.safe
|
||||
LDA.b #$00 : STA.l $7F5001 ; mark fake flipper softlock as impossible
|
||||
.done
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
RegisterWaterEntryScreen:
|
||||
PHA
|
||||
LDA.b $8A : STA.l $7F5098 ; store ow index
|
||||
PLA
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
MysteryWaterFunction: ; *$3AE54 ALTERNATE ENTRY POINT
|
||||
LDA.b #$20 : STA $02E2
|
||||
|
||||
UnequipCapeQuiet:
|
||||
LDA.b #$20 : STA.w $02E2
|
||||
STZ.w $037B
|
||||
STZ.b $55
|
||||
STZ.w $0360
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
;===================================================================================================
|
||||
; More elegant solution
|
||||
;===================================================================================================
|
||||
|
||||
protectff:
|
||||
LDA.l AllowAccidentalMajorGlitch
|
||||
|
||||
@@ -5,21 +5,21 @@ FloodGateAndMasterSwordFollowerReset:
|
||||
JSL.l MasterSwordFollowerClear
|
||||
FloodGateReset:
|
||||
LDA.l PersistentFloodgate : BNE +
|
||||
LDA OverworldEventDataWRAM+$3B : AND.b #$DF : STA OverworldEventDataWRAM+$3B ; reset water outside floodgate
|
||||
LDA OverworldEventDataWRAM+$7B : AND.b #$DF : STA OverworldEventDataWRAM+$7B ; reset water outside swamp palace
|
||||
LDA RoomDataWRAM[$010B].low : AND.b #$7F : STA RoomDataWRAM[$010B].low ; clear water inside floodgate
|
||||
LDA RoomDataWRAM[$28].high : AND.b #$FE : STA RoomDataWRAM[$28].high ; clear water front room (room 40)
|
||||
LDA.l OverworldEventDataWRAM+$3B : AND.b #$DF : STA.l OverworldEventDataWRAM+$3B ; reset water outside floodgate
|
||||
LDA.l OverworldEventDataWRAM+$7B : AND.b #$DF : STA.l OverworldEventDataWRAM+$7B ; reset water outside swamp palace
|
||||
LDA.l RoomDataWRAM[$010B].low : AND.b #$7F : STA.l RoomDataWRAM[$010B].low ; clear water inside floodgate
|
||||
LDA.l RoomDataWRAM[$28].high : AND.b #$FE : STA.l RoomDataWRAM[$28].high ; clear water front room (room 40)
|
||||
+
|
||||
FloodGateResetInner:
|
||||
LDA.l Bugfix_SwampWaterLevel : BEQ +++
|
||||
LDA RoomDataWRAM[$37].low : AND.b #$04 : BEQ + ; Check if key in room 55 has been collected.
|
||||
LDA FlippersEquipment : AND.b #$01 : BNE ++ ; Check for flippers. This can otherwise softlock doors if flooded without flippers and no way to reset.
|
||||
LDA.l RoomDataWRAM[$37].low : AND.b #$04 : BEQ + ; Check if key in room 55 has been collected.
|
||||
LDA.l FlippersEquipment : AND.b #$01 : BNE ++ ; Check for flippers. This can otherwise softlock doors if flooded without flippers and no way to reset.
|
||||
+
|
||||
LDA RoomDataWRAM[$37].low : AND.b #$7F : STA RoomDataWRAM[$37].low ; clear water room 55 - outer room you shouldn't be able to softlock except in major glitches
|
||||
LDA.l RoomDataWRAM[$37].low : AND.b #$7F : STA.l RoomDataWRAM[$37].low ; clear water room 55 - outer room you shouldn't be able to softlock except in major glitches
|
||||
++
|
||||
LDA RoomDataWRAM[$35].high : AND.b #$04 : BNE +++ ; Check if key in room 53 has been collected.
|
||||
LDA.l RoomDataWRAM[$35].high : AND.b #$04 : BNE +++ ; Check if key in room 53 has been collected.
|
||||
; no need to check for flippers on the inner room, as you can't get to the west door no matter what, without flippers.
|
||||
LDA RoomDataWRAM[$35].low : AND.b #$7F : STA RoomDataWRAM[$35].low ; clear water room 53 - inner room with the easy key flood softlock
|
||||
LDA.l RoomDataWRAM[$35].low : AND.b #$7F : STA.l RoomDataWRAM[$35].low ; clear water room 53 - inner room with the easy key flood softlock
|
||||
+++
|
||||
RTL
|
||||
;================================================================================
|
||||
|
||||
54
flute.asm
54
flute.asm
@@ -2,38 +2,38 @@
|
||||
; Randomize Flute Dig Item
|
||||
;--------------------------------------------------------------------------------
|
||||
SpawnHauntedGroveItem:
|
||||
LDA $8A : CMP.b #$2A : BEQ + : RTL : + ; Skip if not the haunted grove
|
||||
LDA $1B : BEQ + : RTL : + ; Skip if indoors
|
||||
LDA.b $8A : CMP.b #$2A : BEQ + : RTL : + ; Skip if not the haunted grove
|
||||
LDA.b $1B : BEQ + : RTL : + ; Skip if indoors
|
||||
|
||||
%GetPossiblyEncryptedItem(HauntedGroveItem, HeartPieceOutdoorValues)
|
||||
JSL.l PrepDynamicTile
|
||||
|
||||
LDA.b #$EB
|
||||
STA $7FFE00
|
||||
STA.l $7FFE00
|
||||
JSL Sprite_SpawnDynamically
|
||||
|
||||
LDX.b #$00
|
||||
LDA $2F : CMP.b #$04 : BEQ + : INX : +
|
||||
LDA.b $2F : CMP.b #$04 : BEQ + : INX : +
|
||||
|
||||
LDA.l .x_speeds, X : STA $0D50, Y
|
||||
LDA.l .x_speeds, X : STA.w $0D50, Y
|
||||
|
||||
LDA.b #$00 : STA $0D40, Y
|
||||
LDA.b #$18 : STA $0F80, Y
|
||||
LDA.b #$FF : STA $0B58, Y
|
||||
LDA.b #$30 : STA $0F10, Y
|
||||
LDA.b #$00 : STA.w $0D40, Y
|
||||
LDA.b #$18 : STA.w $0F80, Y
|
||||
LDA.b #$FF : STA.w $0B58, Y
|
||||
LDA.b #$30 : STA.w $0F10, Y
|
||||
|
||||
LDA $22 : !ADD.l .x_offsets, X
|
||||
AND.b #$F0 : STA $0D10, Y
|
||||
LDA $23 : ADC.b #$00 : STA $0D30, Y
|
||||
LDA.b $22 : !ADD.l .x_offsets, X
|
||||
AND.b #$F0 : STA.w $0D10, Y
|
||||
LDA.b $23 : ADC.b #$00 : STA.w $0D30, Y
|
||||
|
||||
LDA $20 : !ADD.b #$16 : AND.b #$F0 : STA $0D00, Y
|
||||
LDA $21 : ADC.b #$00 : STA $0D20, Y
|
||||
LDA.b $20 : !ADD.b #$16 : AND.b #$F0 : STA.w $0D00, Y
|
||||
LDA.b $21 : ADC.b #$00 : STA.w $0D20, Y
|
||||
|
||||
LDA.b #$00 : STA $0F20, Y
|
||||
LDA.b #$00 : STA.w $0F20, Y
|
||||
TYX
|
||||
|
||||
LDX $8A ; haunted grove (208D0A)
|
||||
LDA OverworldEventDataWRAM, X : AND.b #$40 : BNE +
|
||||
LDX.b $8A ; haunted grove (208D0A)
|
||||
LDA.l OverworldEventDataWRAM, X : AND.b #$40 : BNE +
|
||||
LDA.b #$1B : JSL Sound_SetSfx3PanLong
|
||||
+
|
||||
RTL
|
||||
@@ -52,30 +52,30 @@ RTL
|
||||
}
|
||||
;--------------------------------------------------------------------------------
|
||||
FluteBoy:
|
||||
LDA $10 : CMP.b #$1A : BEQ +
|
||||
LDA.b #$01 : STA $0FDD
|
||||
LDA.b $10 : CMP.b #$1A : BEQ +
|
||||
LDA.b #$01 : STA.w $0FDD
|
||||
JML.l FluteBoy_Abort
|
||||
+
|
||||
LDA $0D80, X : CMP.b #$03 ; thing we wrote over
|
||||
LDA.w $0D80, X : CMP.b #$03 ; thing we wrote over
|
||||
JML.l FluteBoy_Continue
|
||||
;--------------------------------------------------------------------------------
|
||||
FreeDuckCheck:
|
||||
LDA.l InvertedMode : BEQ .done
|
||||
LDA FluteEquipment : CMP.b #$03 : BEQ .done ; flute is already active
|
||||
LDA.l FluteEquipment : CMP.b #$03 : BEQ .done ; flute is already active
|
||||
|
||||
; check the area, is it #$18 = 30?
|
||||
LDA $8A : CMP.b #$18 : BNE .done
|
||||
LDA.b $8A : CMP.b #$18 : BNE .done
|
||||
|
||||
REP #$20
|
||||
|
||||
; Y coordinate boundaries for setting it off.
|
||||
LDA $20
|
||||
LDA.b $20
|
||||
|
||||
CMP.w #$0760 : BCC .done
|
||||
CMP.w #$07E0 : BCS .done
|
||||
|
||||
; do if( (Ycoord >= 0x0760) && (Ycoord < 0x07e0
|
||||
LDA $22
|
||||
LDA.b $22
|
||||
|
||||
CMP.w #$01CF : BCC .done
|
||||
CMP.w #$0230 : BCS .done
|
||||
@@ -84,7 +84,7 @@ FreeDuckCheck:
|
||||
SEP #$20
|
||||
|
||||
; Apparently a special Overworld mode for doing this?
|
||||
LDA.b #$2D : STA $11
|
||||
LDA.b #$2D : STA.b $11
|
||||
|
||||
; Trigger the sequence to start the weathervane explosion.
|
||||
LDY.b #$00
|
||||
@@ -94,12 +94,12 @@ FreeDuckCheck:
|
||||
BRA .skipSong
|
||||
.done
|
||||
SEP #$20
|
||||
LDA.b #$80 : STA $03F0 ; thing we wrote over, load flute timer
|
||||
LDA.b #$80 : STA.w $03F0 ; thing we wrote over, load flute timer
|
||||
LDA.b #$13
|
||||
RTL
|
||||
.skipSong
|
||||
SEP #$20
|
||||
LDA.b #$80 : STA $03F0 ; thing we wrote over, load flute timer
|
||||
LDA.b #$80 : STA.w $03F0 ; thing we wrote over, load flute timer
|
||||
LDA.b #$00
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -33,24 +33,13 @@ NMIHookAction:
|
||||
JML.l NMIHookReturn
|
||||
;--------------------------------------------------------------------------------
|
||||
PostNMIHookAction:
|
||||
LDA.l NMIAux : BEQ +
|
||||
LDA.b Scrap00 : PHA ; preserve DP ram
|
||||
LDA.b Scrap01 : PHA
|
||||
LDA.b Scrap02 : PHA
|
||||
LDA.w NMIAux : BEQ +
|
||||
|
||||
LDA.l NMIAux+2 : STA.b Scrap02 ; set up jump pointer
|
||||
LDA.l NMIAux+1 : STA.b Scrap01
|
||||
LDA.l NMIAux+0 : STA.b Scrap00
|
||||
|
||||
PHK : PER .return-1 ; push stack for RTL return
|
||||
JMP [$0000]
|
||||
PHK : PEA .return-1 ; push stack for RTL return
|
||||
JMP.w [NMIAux]
|
||||
|
||||
.return
|
||||
LDA.b #$00 : STA.l NMIAux ; zero bank byte of NMI hook pointer
|
||||
|
||||
PLA : STA.b Scrap02
|
||||
PLA : STA.b Scrap01
|
||||
PLA : STA.b Scrap00
|
||||
STZ.w NMIAux ; zero bank byte of NMI hook pointer
|
||||
+
|
||||
|
||||
LDA.b $13 : STA.w INIDISP ; thing we wrote over, turn screen back on
|
||||
|
||||
30
glitched.asm
30
glitched.asm
@@ -2,7 +2,7 @@
|
||||
; Glitched Mode Fixes
|
||||
;================================================================================
|
||||
GetAgahnimPalette:
|
||||
LDA $A0 ; get room id
|
||||
LDA.b RoomIndex ; get room id
|
||||
CMP.b #13 : BNE + ; Agahnim 2 room
|
||||
LDA.b #$07 ; Use Agahnim 2
|
||||
RTL
|
||||
@@ -11,25 +11,25 @@ GetAgahnimPalette:
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
GetAgahnimDeath:
|
||||
STA $0BA0, X ; thing we wrote over
|
||||
LDA $A0 ; get room id
|
||||
STA.w $0BA0, X ; thing we wrote over
|
||||
LDA.b RoomIndex ; get room id
|
||||
CMP.b #13 : BNE + ; Agahnim 2 room
|
||||
LDA.l Bugfix_SetWorldOnAgahnimDeath : BEQ ++
|
||||
LDA.l InvertedMode : BEQ +++
|
||||
LDA.b #$00 : STA CurrentWorld ; Switch to light world
|
||||
LDA.b #$00 : STA.l CurrentWorld ; Switch to light world
|
||||
BRA ++
|
||||
+++
|
||||
LDA.b #$40 : STA CurrentWorld ; Switch to dark world
|
||||
LDA.b #$40 : STA.l CurrentWorld ; Switch to dark world
|
||||
++
|
||||
LDA.b #$01 ; Use Agahnim 2
|
||||
RTL
|
||||
+ ; Elsewhere
|
||||
LDA.l Bugfix_SetWorldOnAgahnimDeath : BEQ ++
|
||||
LDA.l InvertedMode : BEQ +++
|
||||
LDA.b #$40 : STA CurrentWorld ; Switch to dark world
|
||||
LDA.b #$40 : STA.l CurrentWorld ; Switch to dark world
|
||||
BRA ++
|
||||
+++
|
||||
LDA.b #$00 : STA CurrentWorld ; Switch to light world
|
||||
LDA.b #$00 : STA.l CurrentWorld ; Switch to light world
|
||||
; (This will later get flipped to DW when Agahnim 1
|
||||
; warps us to the pyramid)
|
||||
++
|
||||
@@ -37,7 +37,7 @@ GetAgahnimDeath:
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
GetAgahnimType:
|
||||
LDA $A0 ; get room id
|
||||
LDA.b RoomIndex ; get room id
|
||||
CMP.b #13 : BNE + ; Agahnim 2 room
|
||||
LDA.b #$0006 ; Use Agahnim 2
|
||||
BRA .done
|
||||
@@ -48,7 +48,7 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
GetAgahnimSlot:
|
||||
PHX ; thing we wrote over
|
||||
LDA $A0 ; get room id
|
||||
LDA.b RoomIndex ; get room id
|
||||
CMP.b #13 : BNE + ; Agahnim 2 room
|
||||
LDA.b #$01 ; Use Agahnim 2
|
||||
JML.l GetAgahnimSlotReturn
|
||||
@@ -57,8 +57,8 @@ GetAgahnimSlot:
|
||||
JML.l GetAgahnimSlotReturn
|
||||
;--------------------------------------------------------------------------------
|
||||
GetAgahnimLightning:
|
||||
INC $0E30, X ; thing we wrote over
|
||||
LDA $A0 ; get room id
|
||||
INC.w $0E30, X ; thing we wrote over
|
||||
LDA.b RoomIndex ; get room id
|
||||
CMP.b #13 : BNE + ; Agahnim 2 room
|
||||
LDA.b #$01 ; Use Agahnim 2
|
||||
RTL
|
||||
@@ -69,11 +69,11 @@ GetAgahnimLightning:
|
||||
;0 = Allow
|
||||
;1 = Forbid
|
||||
AllowJoypadInput:
|
||||
LDA PermitSQFromBosses : BEQ .fullCheck
|
||||
LDA $0403 : AND.b #$80 : BEQ .fullCheck
|
||||
LDA $0112 : ORA $02E4 ; we have heart container, do short check
|
||||
LDA.l PermitSQFromBosses : BEQ .fullCheck
|
||||
LDA.w $0403 : AND.b #$80 : BEQ .fullCheck
|
||||
LDA.w $0112 : ORA.w $02E4 ; we have heart container, do short check
|
||||
RTL
|
||||
.fullCheck
|
||||
LDA $0112 : ORA $02E4 : ORA $0FFC
|
||||
LDA.w $0112 : ORA.w $02E4 : ORA.w $0FFC
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -118,12 +118,12 @@ GetRequiredCrystalsInX:
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
CheckEnoughCrystalsForGanon:
|
||||
LDA CrystalCounter
|
||||
LDA.l CrystalCounter
|
||||
CMP.l NumberOfCrystalsRequiredForGanon
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
CheckEnoughCrystalsForTower:
|
||||
LDA CrystalCounter
|
||||
LDA.l CrystalCounter
|
||||
CMP.l NumberOfCrystalsRequiredForTower
|
||||
RTL
|
||||
|
||||
|
||||
@@ -6,10 +6,10 @@ GetMagicBatItem:
|
||||
%GetPossiblyEncryptedItem(MagicBatItem, SpriteItemValues)
|
||||
CMP.b #$FF : BEQ .normalLogic
|
||||
TAY
|
||||
STZ $02E9 ; 0 = Receiving item from an NPC or message
|
||||
STZ.b $02E9 ; 0 = Receiving item from an NPC or message
|
||||
JML.l Link_ReceiveItem
|
||||
.normalLogic
|
||||
LDA HalfMagic
|
||||
STA MagicConsumption
|
||||
LDA.l HalfMagic
|
||||
STA.l MagicConsumption
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
10
hardmode.asm
10
hardmode.asm
@@ -3,7 +3,7 @@
|
||||
;================================================================================
|
||||
CalculateSpikeFloorDamage:
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.b $A0 ; these are all decimal because i got them that way
|
||||
LDA.b RoomIndex ; these are all decimal because i got them that way
|
||||
CMP.w #279
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
BNE +
|
||||
@@ -18,7 +18,7 @@ RTL
|
||||
CalculateByrnaUsage:
|
||||
LDA.b $1B : BEQ ++
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.b $A0 ; these are all decimal because i got them that way
|
||||
LDA.b RoomIndex ; these are all decimal because i got them that way
|
||||
CMP.w #95 : BEQ + ; Ice Palace Spike Room
|
||||
CMP.w #172 : BEQ + ; Blind Boss Room
|
||||
CMP.w #179 : BEQ + ; Room in Misery Mire
|
||||
@@ -38,7 +38,7 @@ CalculateByrnaUsage:
|
||||
CalculateCapeUsage:
|
||||
LDA.b $1B : BEQ ++
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.b $A0 ; these are all decimal because i got them that way
|
||||
LDA.b RoomIndex ; these are all decimal because i got them that way
|
||||
CMP.w #95 : BEQ + ; Ice Palace Spike Room
|
||||
CMP.w #179 : BEQ + ; Room in Misery Mire
|
||||
CMP.w #213 : BEQ + ; Laser Bridge
|
||||
@@ -56,7 +56,7 @@ CalculateCapeUsage:
|
||||
ActivateInvulnerabilityOrDont:
|
||||
LDA.b $1B : BEQ .nowhere_special
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.b $A0 ; these are all decimal because i got them that way
|
||||
LDA.b RoomIndex ; these are all decimal because i got them that way
|
||||
CMP.w #95 : BEQ .somewhere_cool ; Ice Palace Spike Room
|
||||
CMP.w #179 : BEQ .somewhere_cool ; Room in Misery Mire
|
||||
CMP.w #213 : BEQ .somewhere_cool ; Laser Bridge
|
||||
@@ -81,7 +81,7 @@ GetItemDamageValue:
|
||||
CPX.b #$3d : BEQ .hookshot
|
||||
|
||||
.normal
|
||||
lda $0db8f1,x ;what we wrote over
|
||||
LDA.l $0db8f1,x ;what we wrote over
|
||||
RTL
|
||||
.boomerang
|
||||
LDA.l StunItemAction : AND #$01 : BNE .normal
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
;================================================================================
|
||||
BeepLogic:
|
||||
LDA.l HeartBeep : BEQ +
|
||||
STA $04CA
|
||||
LDA.b #$2B : STA $012E
|
||||
STA.w $04CA
|
||||
LDA.b #$2B : STA.w $012E
|
||||
RTL
|
||||
+
|
||||
LDA.b #$FF : STA $04CA
|
||||
LDA.b #$FF : STA.w $04CA
|
||||
RTL
|
||||
;================================================================================
|
||||
;================================================================================
|
||||
|
||||
@@ -2,37 +2,35 @@
|
||||
; Randomize Heart Pieces
|
||||
;--------------------------------------------------------------------------------
|
||||
HeartPieceGet:
|
||||
PHX : PHY
|
||||
LDY $0E80, X ; load item value into Y register
|
||||
BNE +
|
||||
; if for any reason the item value is 0 reload it, just in case
|
||||
JSL.l LoadHeartPieceRoomValue : TAY
|
||||
+
|
||||
JSL.l MaybeMarkDigSpotCollected
|
||||
PHX : PHY
|
||||
LDY.w $0E80, X ; load item value into Y register
|
||||
BNE +
|
||||
; if for any reason the item value is 0 reload it, just in case
|
||||
JSL.l LoadHeartPieceRoomValue : TAY
|
||||
+
|
||||
JSL.l MaybeMarkDigSpotCollected
|
||||
|
||||
.skipLoad
|
||||
.skipLoad
|
||||
|
||||
STZ.w $02E9 ; 0 = Receiving item from an NPC or message
|
||||
STZ.w $02E9 ; 0 = Receiving item from an NPC or message
|
||||
|
||||
CPY.b #$26 : BNE .notHeart ; don't add a 1/4 heart if it's not a heart piece
|
||||
LDA.l HeartPieceQuarter : INC A : AND.b #$03 : STA.l HeartPieceQuarter : BNE .unfinished_heart ; add up heart quarters
|
||||
BRA .giveItem
|
||||
CPY.b #$26 : BNE .notHeart ; don't add a 1/4 heart if it's not a heart piece
|
||||
LDA.l HeartPieceQuarter : INC A : AND.b #$03 : STA.l HeartPieceQuarter : BNE .unfinished_heart ; add up heart quarters
|
||||
BRA .giveItem
|
||||
|
||||
.notHeart
|
||||
.notHeart
|
||||
.giveItem
|
||||
JSL.l $0791B3 ; Player_HaltDashAttackLong
|
||||
JSL.l Link_ReceiveItem
|
||||
CLC ; return false
|
||||
JMP .done ; finished
|
||||
|
||||
.giveItem
|
||||
JSL.l $0791B3 ; Player_HaltDashAttackLong
|
||||
JSL.l Link_ReceiveItem
|
||||
CLC ; return false
|
||||
JMP .done ; finished
|
||||
.unfinished_heart
|
||||
SEC ; return true
|
||||
.done
|
||||
JSL MaybeUnlockTabletAnimation
|
||||
|
||||
.unfinished_heart
|
||||
SEC ; return true
|
||||
.done
|
||||
|
||||
JSL MaybeUnlockTabletAnimation
|
||||
|
||||
PLY : PLX
|
||||
PLY : PLX
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
HeartContainerGet:
|
||||
@@ -118,27 +116,6 @@ RTL
|
||||
CLC
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
HeartUpgradeSpawnDecision: ; this should return #$00 to make the hp spawn
|
||||
LDA.l ForceHeartSpawn : BEQ .normal_behavior
|
||||
|
||||
DEC : STA.l ForceHeartSpawn
|
||||
LDA.b #$00
|
||||
RTL
|
||||
|
||||
.normal_behavior
|
||||
LDA.l OverworldEventDataWRAM, X
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
SaveHeartCollectedStatus:
|
||||
LDA.l SkipHeartSave : BEQ .normal_behavior
|
||||
|
||||
DEC : STA.l SkipHeartSave
|
||||
RTL
|
||||
|
||||
.normal_behavior
|
||||
LDA.l OverworldEventDataWRAM, X : ORA.b #$40 : STA.l OverworldEventDataWRAM, X
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
HeartPieceSpritePrep:
|
||||
PHA
|
||||
|
||||
@@ -215,7 +192,7 @@ endmacro
|
||||
LoadIndoorValue:
|
||||
PHP
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.b $A0 ; these are all decimal because i got them that way
|
||||
LDA.b RoomIndex ; these are all decimal because i got them that way
|
||||
CMP.w #225 : BNE +
|
||||
%GetPossiblyEncryptedItem(HeartPiece_Forest_Thieves, HeartPieceIndoorValues)
|
||||
JMP .done
|
||||
@@ -328,7 +305,7 @@ LoadHeartContainerRoomValue:
|
||||
LoadBossValue:
|
||||
PHP
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.b $A0 ; these are all decimal because i got them that way
|
||||
LDA.b RoomIndex ; these are all decimal because i got them that way
|
||||
CMP.w #200 : BNE +
|
||||
%GetPossiblyEncryptedItem(HeartContainer_ArmosKnights, HeartContainerBossValues)
|
||||
JMP .done
|
||||
@@ -371,7 +348,7 @@ CheckIfBossRoom:
|
||||
; Carry set if we're in a boss room, unset otherwise.
|
||||
;--------------------------------------------------------------------------------
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.b $A0 ; these are all decimal because i got them that way
|
||||
LDA.b RoomIndex ; these are all decimal because i got them that way
|
||||
CMP.w #200 : BEQ .done
|
||||
CMP.w #51 : BEQ .done
|
||||
CMP.w #7 : BEQ .done
|
||||
|
||||
36
init.asm
36
init.asm
@@ -5,45 +5,45 @@
|
||||
; called and it only gets called once ever during RESET.
|
||||
;--------------------------------------------------------------------------------
|
||||
Init_Primary:
|
||||
LDA #$00
|
||||
LDA.b #$00
|
||||
|
||||
LDX #$00 ; initalize our ram
|
||||
LDX.b #$00 ; initalize our ram
|
||||
-
|
||||
STA $7EC025, X
|
||||
STA $7F5000, X
|
||||
STA.l $7EC025, X
|
||||
STA.l $7F5000, X
|
||||
INX
|
||||
CPX #$10 : !BLT -
|
||||
CPX.b #$10 : !BLT -
|
||||
|
||||
LDX #$10 ; initalize more ram
|
||||
LDX.b #$10 ; initalize more ram
|
||||
-
|
||||
STA $7F5000, X
|
||||
STA.l $7F5000, X
|
||||
INX
|
||||
CPX #$FF : !BLT -
|
||||
CPX.b #$FF : !BLT -
|
||||
|
||||
LDX #$00
|
||||
-
|
||||
LDA RomNameSRAM, X : CMP $00FFC0, X : BNE .clear
|
||||
LDA.l RomNameSRAM, X : CMP.w $FFC0, X : BNE .clear
|
||||
INX
|
||||
CPX #$15 : !BLT -
|
||||
CPX.b #$15 : !BLT -
|
||||
BRA .done
|
||||
.clear
|
||||
REP #$30 ; set 16-bit accumulator & index registers
|
||||
LDA.w #$0000
|
||||
-
|
||||
STA $700000, X
|
||||
STA.l $700000, X
|
||||
INX
|
||||
CPX #$2000 : !BLT -
|
||||
CPX.w #$2000 : !BLT -
|
||||
SEP #$30 ; set 8-bit accumulator & index registers
|
||||
LDX #$00
|
||||
LDX.b #$00
|
||||
-
|
||||
LDA $00FFC0, X : STA RomNameSRAM, X
|
||||
LDA.w $FFC0, X : STA.l RomNameSRAM, X
|
||||
INX
|
||||
CPX #$15 : !BLT -
|
||||
LDX #$00
|
||||
LDX.b #$00
|
||||
-
|
||||
LDA RomVersion, X : STA RomVersionSRAM, X
|
||||
LDA.w RomVersion, X : STA.l RomVersionSRAM, X
|
||||
INX
|
||||
CPX #$04 : !BLT -
|
||||
CPX.b #$04 : !BLT -
|
||||
.done
|
||||
|
||||
REP #$20
|
||||
@@ -53,7 +53,7 @@ Init_Primary:
|
||||
LDA.b #$01 : STA.w MEMSEL ; enable fastrom access on upper banks
|
||||
STA.l OneMindId
|
||||
|
||||
LDA.b #$10 : STA $BC ; set default player sprite bank
|
||||
LDA.b #$10 : STA.b $BC ; set default player sprite bank
|
||||
|
||||
LDA.b #$81 : STA.w NMITIMEN ; thing we wrote over, turn on NMI & gamepad
|
||||
RTL
|
||||
|
||||
@@ -65,7 +65,7 @@ RTL
|
||||
INX : BRA -- : ++
|
||||
PLX
|
||||
LDA.l SilverArrowsUseRestriction : BEQ ++
|
||||
LDA.b $A0 : ORA.b $A1 : BEQ ++ ; not in ganon's room in restricted mode
|
||||
LDA.b RoomIndex : ORA.b RoomIndex+1 : BEQ ++ ; not in ganon's room in restricted mode
|
||||
LDA.l BowEquipment : CMP.b #$03 : !BLT .errorJump : !SUB #$02 : STA.l BowEquipment
|
||||
BRA .errorJump2
|
||||
++
|
||||
@@ -993,7 +993,7 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
SpawnChestGamePrizeSFX:
|
||||
CPX.b #$07 : BNE .normal
|
||||
LDA.b $A0 : CMP.b #$06 : BNE .normal
|
||||
LDA.b RoomIndex : CMP.b #$06 : BNE .normal
|
||||
.prize
|
||||
LDA.b #$1B : STA.w $012F : RTL ; play puzzle sound
|
||||
.normal
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
;Statically mapped at $A1A000 Referenced by the front end. Do not move without coordination.
|
||||
InvertedTileAttributeLookup:
|
||||
SEP #$20
|
||||
LDA $8A : CMP.b #$47 : BEQ .turtleRock
|
||||
LDA Overworld_TileAttr, X
|
||||
LDA.b $8A : CMP.b #$47 : BEQ .turtleRock
|
||||
LDA.l Overworld_TileAttr, X
|
||||
JML.l Overworld_GetTileAttrAtLocation_continue
|
||||
.turtleRock
|
||||
LDA Inverted_TR_TileAttributes, X
|
||||
LDA.l Inverted_TR_TileAttributes, X
|
||||
JML.l Overworld_GetTileAttrAtLocation_continue
|
||||
|
||||
@@ -17,7 +17,7 @@ LampCheck:
|
||||
LDA.l LampConeLightWorld : BRA .done
|
||||
+
|
||||
.darkWorld
|
||||
LDA LampConeDarkWorld
|
||||
LDA.l LampConeDarkWorld
|
||||
.done
|
||||
RTL
|
||||
;================================================================================
|
||||
|
||||
@@ -6,20 +6,13 @@
|
||||
; MaidenCrystalScript
|
||||
;--------------------------------------------------------------------------------
|
||||
MaidenCrystalScript:
|
||||
LDA.b #$00 : STA $7F5091
|
||||
STZ $02D8
|
||||
STZ $02DA
|
||||
STZ $2E
|
||||
LDA #$02 : STA $2F
|
||||
|
||||
; Load the dungeon index. Is it the Dark Palace?
|
||||
;LDA $040C : !SUB.b #$0A : TAY : CPY.b #$02 : BNE +
|
||||
; LDA MapIcons : CMP.b #$07 : BCS ++ : LDA.b #$07 : STA MapIcons : ++
|
||||
;+
|
||||
|
||||
LDA CrystalsField : AND.b #$7F : CMP.b #$7F : BNE + ; check if we have all crystals
|
||||
LDA.b #$08 : STA MapIcons ; Update the map icon to just be Ganon's Tower
|
||||
LDA.b #$00 : STA.l BusyItem
|
||||
STZ.w $02D8
|
||||
STZ.w $02DA
|
||||
STZ.b $2E
|
||||
LDA.b #$02 : STA.w $2F
|
||||
LDA.l CrystalsField : AND.b #$7F : CMP.b #$7F : BNE + ; check if we have all crystals
|
||||
LDA.b #$08 : STA.l MapIcons ; Update the map icon to just be Ganon's Tower
|
||||
+
|
||||
|
||||
JML.l $1ECF35 ; <- F4F35 - sprite_crystal_maiden.asm : 426
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
10
mantle.asm
10
mantle.asm
@@ -2,11 +2,11 @@
|
||||
; Mantle Object Changes
|
||||
;--------------------------------------------------------------------------------
|
||||
Mantle_CorrectPosition:
|
||||
LDA ProgressFlags : AND.b #$04 : BEQ +
|
||||
LDA.b #$0A : STA $0D10, X ; just spawn it off to the side where we know it should be
|
||||
LDA.b #$03 : STA $0D30, X
|
||||
LDA.b #$90 : STA $0ED0, X
|
||||
LDA.l ProgressFlags : AND.b #$04 : BEQ +
|
||||
LDA.b #$0A : STA.w $0D10, X ; just spawn it off to the side where we know it should be
|
||||
LDA.b #$03 : STA.w $0D30, X
|
||||
LDA.b #$90 : STA.w $0ED0, X
|
||||
+
|
||||
LDA $0D00, X : !ADD.b #$03 ; thing we did originally
|
||||
LDA.w $0D00, X : !ADD.b #$03 ; thing we did originally
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -3,45 +3,45 @@
|
||||
;--------------------------------------------------------------------------------
|
||||
TryOpenMire:
|
||||
; Checks if we're in the Swamp of Evil.
|
||||
LDA $8A : CMP.b #$70 : BNE .untriggered
|
||||
LDA.b $8A : CMP.b #$70 : BNE .untriggered
|
||||
|
||||
; Checks whether the Misery Mire dungeon is already revealed.
|
||||
LDA OverworldEventDataWRAM+$70 : AND.b #$20 : BNE .untriggered
|
||||
LDA.l OverworldEventDataWRAM+$70 : AND.b #$20 : BNE .untriggered
|
||||
|
||||
; You have to be in the trigger window.
|
||||
LDY.b #$02 : JSL.l Ancilla_CheckIfEntranceTriggered : BCC .untriggered
|
||||
|
||||
; Do the 3rd animation for opening entrances
|
||||
LDA.b #$03 : STA $04C6
|
||||
LDA.b #$03 : STA.w $04C6
|
||||
|
||||
STZ $B0 ; reset the sub-submodule index
|
||||
STZ $C8 ; reset this other index.
|
||||
STZ.b $B0 ; reset the sub-submodule index
|
||||
STZ.b $C8 ; reset this other index.
|
||||
|
||||
.untriggered
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
TryOpenTRock:
|
||||
; Checks if we're at Turtle Rock.
|
||||
LDA $8A : CMP.b #$47 : BNE .untriggered
|
||||
LDA.b $8A : CMP.b #$47 : BNE .untriggered
|
||||
|
||||
; Checks whether the Turtle Rock dungeon is already revealed.
|
||||
LDA OverworldEventDataWRAM+$47 : AND.b #$20 : BNE .untriggered
|
||||
LDA.l OverworldEventDataWRAM+$47 : AND.b #$20 : BNE .untriggered
|
||||
|
||||
; You have to be in the trigger window.
|
||||
LDY.b #$03 : JSL.l Ancilla_CheckIfEntranceTriggered : BCC .untriggered
|
||||
|
||||
; Do the 4rd animation for opening entrances
|
||||
LDA.b #$04 : STA $04C6
|
||||
LDA.b #$04 : STA.w $04C6
|
||||
|
||||
STZ $B0 ; reset the sub-submodule index
|
||||
STZ $C8 ; reset this other index.
|
||||
STZ.b $B0 ; reset the sub-submodule index
|
||||
STZ.b $C8 ; reset this other index.
|
||||
|
||||
.untriggered
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
MedallionTrigger_Bombos:
|
||||
STZ $50 ; stuff we wrote over
|
||||
STZ $0FC1
|
||||
STZ.b $50 ; stuff we wrote over
|
||||
STZ.w $0FC1
|
||||
|
||||
PHA
|
||||
LDA.l MireRequiredMedallion : BNE +
|
||||
|
||||
100
msu.asm
100
msu.asm
@@ -164,27 +164,27 @@ CheckMusicLoadRequest:
|
||||
|
||||
.continue
|
||||
LDA.l TournamentSeed : BNE +++
|
||||
LDA.l MSUPackRequest
|
||||
CMP.l MSUPackCurrent : BEQ +++
|
||||
CMP.l MSUPackCount : !BLT ++
|
||||
LDA.w MSUPackRequest
|
||||
CMP.w MSUPackCurrent : BEQ +++
|
||||
CMP.w MSUPackCount : !BLT ++
|
||||
CMP.b #$FE : !BLT +
|
||||
STA.l MSUPackCurrent
|
||||
STA.w MSUPackCurrent
|
||||
SEP #$10
|
||||
LDA.b #$00
|
||||
LDX.b #$07
|
||||
-
|
||||
STA.l MSUFallbackTable,X
|
||||
STA.w MSUFallbackTable,X
|
||||
DEX : BPL -
|
||||
REP #$10
|
||||
BRA +++
|
||||
+ : LDA.l MSUPackCurrent : STA.l MSUPackRequest
|
||||
++ : STA.l MSUPackCurrent
|
||||
+ : LDA.w MSUPackCurrent : STA.w MSUPackRequest
|
||||
++ : STA.w MSUPackCurrent
|
||||
JSL MSUInit_check_fallback
|
||||
+++
|
||||
|
||||
LDA.w MusicControlRequest : CMP.b #$08 : BEQ ++ ; Mirror SFX is not affected by NoBGM or pack $FE
|
||||
LDA.l NoBGM : BNE +
|
||||
LDA.l MSUPackCurrent : CMP.b #$FE : BNE ++
|
||||
LDA.w MSUPackCurrent : CMP.b #$FE : BNE ++
|
||||
+ : JMP .mute
|
||||
++
|
||||
|
||||
@@ -240,7 +240,7 @@ CheckMusicLoadRequest:
|
||||
LDA.l MusicShuffleTable-1,X : DEC : PHA
|
||||
AND.b #$07 : TAY
|
||||
PLA : LSR #3 : TAX
|
||||
LDA.l MSUFallbackTable,X : BEQ .secondary_fallback : CMP.b #$FF : BEQ .mute
|
||||
LDA.w MSUFallbackTable,X : BEQ .secondary_fallback : CMP.b #$FF : BEQ .mute
|
||||
|
||||
- : CPY #$00 : BEQ +
|
||||
LSR : DEY : BRA -
|
||||
@@ -333,7 +333,7 @@ CheckMusicLoadRequest:
|
||||
;--------------------------------------------------------------------------------
|
||||
SpiralStairsPreCheck:
|
||||
REP #$20 ; thing we wrote over
|
||||
LDA.b $A0
|
||||
LDA.b RoomIndex
|
||||
CMP.w #$000C : BNE +
|
||||
LDA.w CurrentMSUTrack : AND.w #$00FF : CMP.w #59 : BNE .done
|
||||
BRA .fade
|
||||
@@ -347,14 +347,14 @@ SpiralStairsPreCheck:
|
||||
LDA.w MSUID+4 : CMP.w #!VAL_MSU_ID_45 : BNE .done
|
||||
+
|
||||
|
||||
LDA.l BigKeyField : AND.w #$0004 : BEQ .done ; Check that we have the GT big key
|
||||
LDA.l MSUFallbackTable+7 : AND.w #$0004 : BEQ .done ; Check that we have the extended track
|
||||
LDA.l BigKeyField : AND.w #$0004 : BEQ .done ; Check that we have the GT big key
|
||||
LDA.w MSUFallbackTable+7 : AND.w #$0004 : BEQ .done ; Check that we have the extended track
|
||||
|
||||
.fade
|
||||
LDX.b #$F1 : STX.w MusicControlRequest
|
||||
|
||||
.done
|
||||
LDA.b $A0 ; thing we wrote over
|
||||
LDA.b RoomIndex ; thing we wrote over
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -362,7 +362,7 @@ SpiralStairsPreCheck:
|
||||
; Change music on stair transition (ToH/GT)
|
||||
;--------------------------------------------------------------------------------
|
||||
SpiralStairsPostCheck:
|
||||
LDA.b $A0
|
||||
LDA.b RoomIndex
|
||||
CMP.w #$000C : BNE +
|
||||
; Ganon's tower entrance
|
||||
LDX.w $0130 : CPX.b #$F1 : BNE .done ; Check that we were fading out
|
||||
@@ -379,7 +379,7 @@ SpiralStairsPostCheck:
|
||||
LDX.b #59 : STX.w MusicControlRequest
|
||||
|
||||
.done
|
||||
LDX.b #$1C : LDA.b $A0 ; thing we wrote over
|
||||
LDX.b #$1C : LDA.b RoomIndex ; thing we wrote over
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -401,10 +401,10 @@ MSUInit:
|
||||
PHP
|
||||
|
||||
LDA.b #$00
|
||||
STA.l MSULoadedTrack
|
||||
STA.l MSUResumeTrack
|
||||
STA.l MSUResumeTime : STA.l MSUResumeTime+1 : STA.l MSUResumeTime+2 : STA.l MSUResumeTime+3
|
||||
STA.l MSUResumeControl
|
||||
STA.w MSULoadedTrack
|
||||
STA.w MSUResumeTrack
|
||||
STA.w MSUResumeTime : STA.w MSUResumeTime+1 : STA.w MSUResumeTime+2 : STA.w MSUResumeTime+3
|
||||
STA.w MSUResumeControl
|
||||
|
||||
LDA.l NoBGM : BNE .done
|
||||
|
||||
@@ -431,7 +431,7 @@ MSUInit:
|
||||
.wait_pack
|
||||
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_BUSY : BNE .wait_pack
|
||||
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BEQ .check_pack
|
||||
TXA : STA.l MSUPackCount
|
||||
TXA : STA.w MSUPackCount
|
||||
BRA +
|
||||
|
||||
; Check the current MSU-1 pack for tracks that require SPC fallback
|
||||
@@ -453,7 +453,7 @@ MSUInit:
|
||||
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE +
|
||||
SEC
|
||||
+
|
||||
LDA.l MSUFallbackTable,X : ROL : STA.l MSUFallbackTable,X
|
||||
LDA.w MSUFallbackTable,X : ROL : STA.w MSUFallbackTable,X
|
||||
|
||||
DEY : BPL .next_track
|
||||
DEX : BPL +
|
||||
@@ -474,11 +474,11 @@ MSUInit:
|
||||
;--------------------------------------------------------------------------------
|
||||
MSUStopPlaying:
|
||||
PHA : XBA : PHA
|
||||
LDA.l MSULoadedTrack
|
||||
LDA.w MSULoadedTrack
|
||||
JSR IsResumableTrack : BCC +
|
||||
; dont save if we already saved recently
|
||||
REP #$20
|
||||
LDA.l MSUResumeTrack : AND #$00FF : BEQ ++
|
||||
LDA.w MSUResumeTrack : AND #$00FF : BEQ ++
|
||||
LDA.l NMIFrames : !SUB MSUResumeTime : PHA
|
||||
LDA.l NMIFrames+2 : SBC MSUResumeTime+2 : BNE +++
|
||||
PLA : CMP.l MSUResumeTimer : !BLT .too_early
|
||||
@@ -487,12 +487,12 @@ PHA : XBA : PHA
|
||||
PLA
|
||||
++
|
||||
; saving
|
||||
LDA.l NMIFrames : STA.l MSUResumeTime
|
||||
LDA.l NMIFrames+2 : STA.l MSUResumeTime+2
|
||||
LDA.l NMIFrames : STA.w MSUResumeTime
|
||||
LDA.l NMIFrames+2 : STA.w MSUResumeTime+2
|
||||
SEP #$20
|
||||
|
||||
LDA.l MSULoadedTrack : STA.l MSUResumeTrack
|
||||
LDA.b #$00 : STA.l MSULoadedTrack ; dont take this path if we're calling again
|
||||
LDA.w MSULoadedTrack : STA.w MSUResumeTrack
|
||||
LDA.b #$00 : STA.w MSULoadedTrack ; dont take this path if we're calling again
|
||||
LDA.b #!FLAG_MSU_RESUME : STA.w MSUCTL ; save this track's position
|
||||
PLA : XBA : PLA
|
||||
RTS
|
||||
@@ -523,23 +523,23 @@ MSUMain:
|
||||
LDX.w MusicControl : BEQ +
|
||||
JMP .command_ff
|
||||
+
|
||||
LDA.l MSUDelayedCommand : BEQ .do_fade
|
||||
LDA.w MSUDelayedCommand : BEQ .do_fade
|
||||
|
||||
.check_busy
|
||||
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_BUSY : BNE -
|
||||
.ready
|
||||
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE -
|
||||
.start
|
||||
LDA.l MSUResumeControl : BIT.b #!FLAG_RESUME_CANCEL : BEQ +
|
||||
EOR.b #!FLAG_RESUME_CANCEL : STA.l MSUResumeControl
|
||||
REP #$20 : LDA.l MSULoadedTrack : STA.w MSUTRACK : SEP #$20
|
||||
LDA.w MSUResumeControl : BIT.b #!FLAG_RESUME_CANCEL : BEQ +
|
||||
EOR.b #!FLAG_RESUME_CANCEL : STA.w MSUResumeControl
|
||||
REP #$20 : LDA.w MSULoadedTrack : STA.w MSUTRACK : SEP #$20
|
||||
BRA -
|
||||
+
|
||||
LDA.b #!VAL_VOLUME_FULL
|
||||
STA.w TargetVolume
|
||||
|
||||
LDA.l MSUResumeControl : BIT.b #!FLAG_RESUME_FADEIN : BEQ +
|
||||
EOR.b #!FLAG_RESUME_FADEIN : STA.l MSUResumeControl
|
||||
LDA.w MSUResumeControl : BIT.b #!FLAG_RESUME_FADEIN : BEQ +
|
||||
EOR.b #!FLAG_RESUME_FADEIN : STA.w MSUResumeControl
|
||||
LDA.b #$00
|
||||
BRA ++
|
||||
+
|
||||
@@ -551,17 +551,17 @@ MSUMain:
|
||||
LDA.w CurrentMSUTrack : DEC : PHA
|
||||
AND.b #$07 : TAY
|
||||
PLA : LSR #3 : TAX
|
||||
LDA.l MSUFallbackTable,X : BEQ +++ : CMP.b #$FF : BEQ ++
|
||||
LDA.w MSUFallbackTable,X : BEQ +++ : CMP.b #$FF : BEQ ++
|
||||
|
||||
- : CPY #$00 : BEQ +
|
||||
LSR : DEY : BRA -
|
||||
+
|
||||
|
||||
AND.b #$01 : BEQ +++
|
||||
++ : LDA.l MSUDelayedCommand
|
||||
++ : LDA.w MSUDelayedCommand
|
||||
+++ : STA.w MSUCTL
|
||||
LDA.b #$00
|
||||
STA.l MSUDelayedCommand
|
||||
STA.w MSUDelayedCommand
|
||||
JML SPCContinue
|
||||
|
||||
.do_fade:
|
||||
@@ -624,9 +624,9 @@ MSUMain:
|
||||
+
|
||||
CPX.w CurrentControlRequest : BEQ -
|
||||
LDA.b #$00 : XBA
|
||||
LDA.l MSUPackCurrent : BEQ +
|
||||
- : CMP.l MSUPackCount : !BLT +
|
||||
!SUB.l MSUPackCount : BRA -
|
||||
LDA.w MSUPackCurrent : BEQ +
|
||||
- : CMP.w MSUPackCount : !BLT +
|
||||
!SUB.w MSUPackCount : BRA -
|
||||
+
|
||||
|
||||
JSR MSUStopPlaying
|
||||
@@ -639,11 +639,11 @@ MSUMain:
|
||||
DEX : BNE -
|
||||
+
|
||||
STA.w MSUTRACK
|
||||
STA.l MSULoadedTrack
|
||||
STA.w MSULoadedTrack
|
||||
SEP #$20
|
||||
|
||||
PLX
|
||||
TXA : CMP.l MSUResumeTrack : BNE + ; dont resume if too late
|
||||
TXA : CMP.w MSUResumeTrack : BNE + ; dont resume if too late
|
||||
REP #$20
|
||||
LDA.l NMIFrames : !SUB MSUResumeTime : PHA
|
||||
LDA.l NMIFrames+2 : SBC MSUResumeTime+2 : BNE ++
|
||||
@@ -656,8 +656,8 @@ MSUMain:
|
||||
SEP #$20
|
||||
LDA.b #!FLAG_RESUME_CANCEL
|
||||
.done_resume:
|
||||
STA.l MSUResumeControl
|
||||
LDA.b #$00 : STA.l MSUResumeTrack
|
||||
STA.w MSUResumeControl
|
||||
LDA.b #$00 : STA.w MSUResumeTrack
|
||||
+
|
||||
CPX #07 : BNE + ; Kakariko Village
|
||||
LDA.b $10 : CMP #$07 : BNE +
|
||||
@@ -667,12 +667,12 @@ MSUMain:
|
||||
+
|
||||
TXA
|
||||
++
|
||||
STA.l MSULoadedTrack
|
||||
STA.w MSULoadedTrack
|
||||
STX.w CurrentMSUTrack
|
||||
LDA.l MSUPackCurrent : CMP #$FE : !BLT +
|
||||
LDA.w MSUPackCurrent : CMP #$FE : !BLT +
|
||||
LDA.b #$00 : BRA ++
|
||||
+ : LDA.l MSUTrackList-1,X
|
||||
++ : STA.l MSUDelayedCommand
|
||||
++ : STA.w MSUDelayedCommand
|
||||
LDA.l MSUExtendedFallbackList-1,X
|
||||
CMP.b #17 : BEQ +
|
||||
CMP.b #22 : BEQ +
|
||||
@@ -722,9 +722,9 @@ PendantFanfareWait:
|
||||
LDA.w MSUID+2 : CMP.w #!VAL_MSU_ID_23 : BNE .spc
|
||||
LDA.w MSUID+4 : CMP.w #!VAL_MSU_ID_45 : BNE .spc
|
||||
SEP #$20
|
||||
LDA.l MSUPackCurrent : CMP #$FE : !BGE .spc
|
||||
LDA.w MSUPackCurrent : CMP #$FE : !BGE .spc
|
||||
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE .spc
|
||||
LDA.l MSUDelayedCommand : BNE .continue
|
||||
LDA.w MSUDelayedCommand : BNE .continue
|
||||
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done
|
||||
.continue
|
||||
jml PendantFanfareContinue
|
||||
@@ -746,9 +746,9 @@ CrystalFanfareWait:
|
||||
LDA.w MSUID+2 : CMP.w #!VAL_MSU_ID_23 : BNE .spc
|
||||
LDA.w MSUID+4 : CMP.w #!VAL_MSU_ID_45 : BNE .spc
|
||||
SEP #$20
|
||||
LDA.l MSUPackCurrent : CMP.b #$FE : !BGE .spc
|
||||
LDA.w MSUPackCurrent : CMP.b #$FE : !BGE .spc
|
||||
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE .spc
|
||||
LDA.l MSUDelayedCommand : BNE .continue
|
||||
LDA.w MSUDelayedCommand : BNE .continue
|
||||
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done
|
||||
.continue
|
||||
jml CrystalFanfareContinue
|
||||
|
||||
124
music.asm
124
music.asm
@@ -9,7 +9,7 @@ PreOverworld_LoadProperties_ChooseMusic:
|
||||
|
||||
LDX.b #$02 ; Default light world theme
|
||||
|
||||
LDA $8A : ORA #$40 ; check both light and dark world DM at the same time
|
||||
LDA.b $8A : ORA.b #$40 ; check both light and dark world DM at the same time
|
||||
CMP.b #$43 : BEQ .endOfLightWorldChecks
|
||||
CMP.b #$45 : BEQ .endOfLightWorldChecks
|
||||
CMP.b #$47 : BEQ .endOfLightWorldChecks
|
||||
@@ -17,47 +17,42 @@ PreOverworld_LoadProperties_ChooseMusic:
|
||||
LDY.b #$5A ; Main overworld animated tileset
|
||||
|
||||
; Skip village and lost woods checks if entering dark world or a special area
|
||||
LDA $8A : CMP.b #$40 : !BGE .notVillageOrWoods
|
||||
LDA.b $8A : CMP.b #$40 : !BGE .notVillageOrWoods
|
||||
|
||||
LDX.b #$07 ; Default village theme
|
||||
|
||||
; Check what phase we're in
|
||||
;LDA ProgressIndicator : CMP.b #$03 : !BLT +
|
||||
; LDX.b #$02 ; Default light world theme (phase >=3)
|
||||
;+
|
||||
|
||||
; Check if we're entering the village
|
||||
LDA $8A : CMP.b #$18 : BEQ .endOfLightWorldChecks
|
||||
LDA.b $8A : CMP.b #$18 : BEQ .endOfLightWorldChecks
|
||||
; For NA release would we also branch on indexes #$22 #$28 #$29
|
||||
|
||||
LDX.b #$05 ; Lost woods theme
|
||||
|
||||
; check if we've pulled from the master sword pedestal
|
||||
LDA OverworldEventDataWRAM+$80 : AND.b #$40 : BEQ +
|
||||
LDA.b OverworldEventDataWRAM+$80 : AND.b #$40 : BEQ +
|
||||
LDX.b #$02 ; Default light world theme
|
||||
+
|
||||
|
||||
; check if we are entering lost woods
|
||||
LDA $8A : BEQ .endOfLightWorldChecks
|
||||
LDA.b $8A : BEQ .endOfLightWorldChecks
|
||||
|
||||
.notVillageOrWoods
|
||||
; Use the normal overworld (light world) music
|
||||
LDX.b #$02
|
||||
|
||||
; Check phase ; In phase >= 2
|
||||
LDA ProgressIndicator : CMP.b #$02 : !BGE +
|
||||
LDA.l ProgressIndicator : CMP.b #$02 : !BGE +
|
||||
; If phase < 2, play the legend music
|
||||
LDX.b #$03
|
||||
+
|
||||
|
||||
.endOfLightWorldChecks
|
||||
; if we are in the light world go ahead and set chosen selection
|
||||
LDA CurrentWorld : BEQ .checkInverted+4
|
||||
LDA.l CurrentWorld : BEQ .checkInverted+4
|
||||
|
||||
LDX.b #$0F ; dark woods theme
|
||||
|
||||
; This music is used in dark woods
|
||||
LDA $8A
|
||||
LDA.b $8A
|
||||
CMP.b #$40 : BEQ +
|
||||
LDX.b #$0D ; dark death mountain theme
|
||||
|
||||
@@ -68,16 +63,16 @@ PreOverworld_LoadProperties_ChooseMusic:
|
||||
|
||||
; if not inverted and light world, or inverted and dark world, skip moon pearl check
|
||||
.checkInverted
|
||||
LDA CurrentWorld : CLC : ROL #$03 : CMP InvertedMode : BEQ .lastCheck
|
||||
LDA.l CurrentWorld : CLC : ROL #$03 : CMP.l InvertedMode : BEQ .lastCheck
|
||||
|
||||
; Does Link have a moon pearl?
|
||||
LDA MoonPearlEquipment : BNE +
|
||||
LDA.l MoonPearlEquipment : BNE +
|
||||
LDX.b #$04 ; bunny theme
|
||||
+
|
||||
|
||||
.lastCheck
|
||||
LDA $0132 : CMP.b #$F2 : BNE +
|
||||
CPX $0130 : BNE +
|
||||
LDA.w $0132 : CMP.b #$F2 : BNE +
|
||||
CPX.w $0130 : BNE +
|
||||
; If the last played command ($0132) was half volume (#$F2)
|
||||
; and the actual song playing ($0130) is same as the one for this area (X)
|
||||
; then play the full volume command (#F3) instead of restarting the song
|
||||
@@ -99,37 +94,37 @@ Overworld_FinishMirrorWarp:
|
||||
|
||||
.clear_hdma_table
|
||||
|
||||
STA $1B00, X : STA $1B40, X
|
||||
STA $1B80, X : STA $1BC0, X
|
||||
STA $1C00, X : STA $1C40, X
|
||||
STA $1C80, X
|
||||
STA.w $1B00, X : STA.w $1B40, X
|
||||
STA.w $1B80, X : STA.w $1BC0, X
|
||||
STA.w $1C00, X : STA.w $1C40, X
|
||||
STA.w $1C80, X
|
||||
|
||||
DEX #2 : BPL .clear_hdma_table
|
||||
|
||||
LDA.w #$0000 : STA $7EC007 : STA $7EC009
|
||||
LDA.w #$0000 : STA.l $7EC007 : STA.l $7EC009
|
||||
|
||||
SEP #$20
|
||||
|
||||
JSL $00D7C8 ; $57C8 IN ROM
|
||||
|
||||
LDA.b #$80 : STA $9B
|
||||
LDA.b #$80 : STA.b $9B
|
||||
|
||||
LDX.b #$04 ; bunny theme
|
||||
|
||||
; if not inverted and light world, or inverted and dark world, skip moon pearl check
|
||||
LDA CurrentWorld : CLC : ROL #$03 : CMP InvertedMode : BEQ +
|
||||
LDA MoonPearlEquipment : BEQ .endOfLightWorldChecks
|
||||
LDA.l CurrentWorld : CLC : ROL #$03 : CMP.l InvertedMode : BEQ +
|
||||
LDA.l MoonPearlEquipment : BEQ .endOfLightWorldChecks
|
||||
+
|
||||
|
||||
LDX.b #$09 ; default dark world theme
|
||||
|
||||
LDA $8A : CMP.b #$40 : !BGE .endOfLightWorldChecks
|
||||
LDA.b $8A : CMP.b #$40 : !BGE .endOfLightWorldChecks
|
||||
|
||||
LDX.b #$02 ; hyrule field theme
|
||||
|
||||
; Check if we're entering the lost woods
|
||||
CMP.b #$00 : BNE +
|
||||
LDA OverworldEventDataWRAM+$80 : AND.b #$40 : BNE .endOfLightWorldChecks
|
||||
LDA.l OverworldEventDataWRAM+$80 : AND.b #$40 : BNE .endOfLightWorldChecks
|
||||
LDX.b #$05 ; lost woods theme
|
||||
BRA .endOfLightWorldChecks
|
||||
+
|
||||
@@ -138,14 +133,13 @@ Overworld_FinishMirrorWarp:
|
||||
CMP.b #$18 : BNE .endOfLightWorldChecks
|
||||
|
||||
; Check what phase we're in
|
||||
; LDA ProgressIndicator : CMP.b #$03 : !BGE .endOfLightWorldChecks
|
||||
LDX.b #$07 ; Default village theme (phase <3)
|
||||
|
||||
.endOfLightWorldChecks
|
||||
STX $012C
|
||||
STX.w $012C
|
||||
|
||||
LDA $8A : CMP.b #$40 : BNE +
|
||||
LDX #$0F ; dark woods theme
|
||||
LDA.b $8A : CMP.b #$40 : BNE +
|
||||
LDX.b #$0F ; dark woods theme
|
||||
BRA .bunny
|
||||
+
|
||||
|
||||
@@ -154,24 +148,24 @@ Overworld_FinishMirrorWarp:
|
||||
CMP.b #$47 : BNE .notDarkMountain
|
||||
|
||||
.darkMountain
|
||||
LDA.b #$09 : STA $012D ; set storm ambient SFX
|
||||
LDA.b #$09 : STA.w $012D ; set storm ambient SFX
|
||||
LDX.b #$0D ; dark mountain theme
|
||||
|
||||
.bunny
|
||||
LDA MoonPearlEquipment : ORA InvertedMode : BNE +
|
||||
LDX #$04 ; bunny theme
|
||||
LDA.l MoonPearlEquipment : ORA.l InvertedMode : BNE +
|
||||
LDX.b #$04 ; bunny theme
|
||||
+
|
||||
|
||||
STX $012C
|
||||
STX.w $012C
|
||||
|
||||
.notDarkMountain
|
||||
|
||||
LDA $11 : STA $010C
|
||||
LDA.b $11 : STA.w $010C
|
||||
|
||||
STZ $11
|
||||
STZ $B0
|
||||
STZ $0200
|
||||
STZ $0710
|
||||
STZ.b $11
|
||||
STZ.b $B0
|
||||
STZ.w $0200
|
||||
STZ.w $0710
|
||||
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -179,73 +173,59 @@ Overworld_FinishMirrorWarp:
|
||||
;--------------------------------------------------------------------------------
|
||||
BirdTravel_LoadTargetAreaMusic:
|
||||
; Skip village and lost woods checks if entering dark world or a special area
|
||||
LDA $8A : CMP.b #$43 : BEQ .endOfLightWorldChecks
|
||||
LDA.b $8A : CMP.b #$43 : BEQ .endOfLightWorldChecks
|
||||
CMP.b #$40 : !BGE .notVillageOrWoods
|
||||
|
||||
LDX.b #$07 ; Default village theme
|
||||
|
||||
; Check what phase we're in
|
||||
;LDA ProgressIndicator : CMP.b #$03 : !BLT +
|
||||
; LDX.b #$02 ; Default light world theme (phase >=3)
|
||||
;+
|
||||
|
||||
; Check if we're entering the village
|
||||
LDA $8A : CMP.b #$18 : BEQ .endOfLightWorldChecks
|
||||
LDA.b $8A : CMP.b #$18 : BEQ .endOfLightWorldChecks
|
||||
; For NA release would we also branch on indexes #$22 #$28 #$29
|
||||
|
||||
;LDX.b #$05 ; Lost woods theme
|
||||
|
||||
; check if we've pulled from the master sword pedestal
|
||||
;LDA OverworldEventDataWRAM+$80 : AND.b #$40 : BEQ +
|
||||
; LDX.b #$02 ; Default light world theme
|
||||
;+
|
||||
|
||||
; check if we are entering lost woods
|
||||
LDA $8A : BEQ .endOfLightWorldChecks
|
||||
LDA.b $8A : BEQ .endOfLightWorldChecks
|
||||
|
||||
.notVillageOrWoods
|
||||
; Use the normal overworld (light world) music
|
||||
LDX.b #$02
|
||||
|
||||
; Check phase ; In phase >= 2
|
||||
LDA ProgressIndicator : CMP.b #$02 : !BGE +
|
||||
LDA.l ProgressIndicator : CMP.b #$02 : !BGE +
|
||||
; If phase < 2, play the legend music
|
||||
LDX.b #$03
|
||||
+
|
||||
|
||||
.endOfLightWorldChecks
|
||||
; if we are in the light world go ahead and set chosen selection
|
||||
LDA CurrentWorld : BEQ .checkInverted+4
|
||||
LDA.l CurrentWorld : BEQ .checkInverted+4
|
||||
|
||||
LDX.b #$09 ; dark overworld theme
|
||||
|
||||
LDA $8A
|
||||
LDA.b $8A
|
||||
; Misery Mire rain SFX
|
||||
CMP.b #$70 : BNE ++
|
||||
LDA OverworldEventDataWRAM+$70 : AND.b #$20 : BNE ++
|
||||
LDA.b #$01 : CMP $0131 : BEQ +
|
||||
STA $012D
|
||||
LDA.l OverworldEventDataWRAM+$70 : AND.b #$20 : BNE ++
|
||||
LDA.b #$01 : CMP.w $0131 : BEQ +
|
||||
STA.w $012D
|
||||
+ : BRA .checkInverted
|
||||
++
|
||||
|
||||
; This music is used in dark death mountain
|
||||
CMP.b #$43 : BEQ .darkMountain
|
||||
; CMP.b #$45 : BEQ .darkMountain
|
||||
; CMP.b #$47 : BEQ .darkMountain
|
||||
LDA.b #$05 : STA $012D
|
||||
LDA.b #$05 : STA.w $012D
|
||||
BRA .checkInverted
|
||||
|
||||
.darkMountain
|
||||
LDA CrystalsField : CMP.b #$7F : BEQ +
|
||||
LDA.l CrystalsField : CMP.b #$7F : BEQ +
|
||||
LDX.b #$0D ; dark death mountain theme
|
||||
+ : LDA.b #$09 : STA $012D
|
||||
+ : LDA.b #$09 : STA.w $012D
|
||||
|
||||
; if not inverted and light world, or inverted and dark world, skip moon pearl check
|
||||
.checkInverted
|
||||
LDA CurrentWorld : CLC : ROL #$03 : CMP InvertedMode : BEQ .lastCheck
|
||||
LDA.l CurrentWorld : CLC : ROL #$03 : CMP.l InvertedMode : BEQ .lastCheck
|
||||
|
||||
; Does Link have a moon pearl?
|
||||
LDA MoonPearlEquipment : BNE +
|
||||
LDA.l MoonPearlEquipment : BNE +
|
||||
LDX.b #$04 ; bunny theme
|
||||
+
|
||||
|
||||
@@ -257,8 +237,8 @@ BirdTravel_LoadTargetAreaMusic:
|
||||
;0 = Is Kakariko Overworld
|
||||
;1 = Not Kakariko Overworld
|
||||
PsychoSolder_MusicCheck:
|
||||
LDA $040A : CMP.b #$18 : BNE .done ; thing we overwrote - check if overworld location is Kakariko
|
||||
LDA $1B ; Also check that we are outdoors
|
||||
LDA.w $040A : CMP.b #$18 : BNE .done ; thing we overwrote - check if overworld location is Kakariko
|
||||
LDA.b $1B ; Also check that we are outdoors
|
||||
.done
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -275,10 +255,10 @@ Overworld_MosaicDarkWorldChecks:
|
||||
CMP.b #$51 : bne .doFade
|
||||
|
||||
.checkCrystals
|
||||
LDA CrystalsField : CMP.b #$7F : BEQ .done
|
||||
LDA.l CrystalsField : CMP.b #$7F : BEQ .done
|
||||
|
||||
.doFade
|
||||
LDA.b #$F1 : STA $012C ; thing we wrote over, fade out music
|
||||
LDA.b #$F1 : STA.w $012C ; thing we wrote over, fade out music
|
||||
|
||||
.done
|
||||
RTL
|
||||
|
||||
83
npcitems.asm
83
npcitems.asm
@@ -23,148 +23,127 @@
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
ItemCheck_FairySword:
|
||||
LDA NpcFlags+1 : AND.b #$08
|
||||
LDA.l NpcFlags+1 : AND.b #$08
|
||||
RTL
|
||||
|
||||
ItemCheck_SmithSword:
|
||||
LDA NpcFlags+1 : AND.b #$04
|
||||
LDA.l NpcFlags+1 : AND.b #$04
|
||||
RTL
|
||||
|
||||
ItemCheck_MagicBat:
|
||||
LDA NpcFlags+1 : AND.b #$80
|
||||
LDA.l NpcFlags+1 : AND.b #$80
|
||||
RTL
|
||||
|
||||
ItemCheck_OldMan:
|
||||
LDA NpcFlags : AND.b #$01 : CMP #$01
|
||||
LDA.l NpcFlags : AND.b #$01 : CMP #$01
|
||||
RTL
|
||||
|
||||
ItemCheck_ZoraKing:
|
||||
LDA NpcFlags : AND.b #$02
|
||||
LDA.l NpcFlags : AND.b #$02
|
||||
RTL
|
||||
|
||||
ItemCheck_SickKid:
|
||||
LDA NpcFlags : AND.b #$04
|
||||
LDA.l NpcFlags : AND.b #$04
|
||||
RTL
|
||||
|
||||
ItemCheck_TreeKid:
|
||||
LDA NpcFlags : AND.b #$08 ; FluteBoy_Chillin - 73: LDA FluteEquipment
|
||||
LDA.l NpcFlags : AND.b #$08 ; FluteBoy_Chillin - 73: LDA FluteEquipment
|
||||
RTL
|
||||
|
||||
ItemCheck_TreeKid2:
|
||||
LDA NpcFlags : AND.b #$08 : LSR #$02 ; FluteAardvark_InitialStateFromFluteState - 225: LDA FluteEquipment : AND.b #$03
|
||||
LDA.l NpcFlags : AND.b #$08 : LSR #$02 ; FluteAardvark_InitialStateFromFluteState - 225: LDA FluteEquipment : AND.b #$03
|
||||
RTL
|
||||
|
||||
ItemCheck_TreeKid3:
|
||||
JSL $0DD030 ; FluteAardvark_Draw - thing we wrote over
|
||||
LDA NpcFlags : AND.b #$08
|
||||
LDA.l NpcFlags : AND.b #$08
|
||||
BEQ .normal
|
||||
BRA .done
|
||||
LDA.b #$05
|
||||
.normal
|
||||
LDA $0D80, X
|
||||
LDA.w $0D80, X
|
||||
.done
|
||||
RTL
|
||||
|
||||
ItemCheck_Sahasrala:
|
||||
LDA NpcFlags : AND.b #$10
|
||||
LDA.l NpcFlags : AND.b #$10
|
||||
RTL
|
||||
|
||||
ItemCheck_Library:
|
||||
LDA NpcFlags : AND.b #$80
|
||||
LDA.l NpcFlags : AND.b #$80
|
||||
RTL
|
||||
|
||||
ItemCheck_Mushroom:
|
||||
LDA NpcFlags+1 : ROL #4 ; does the same thing as below
|
||||
; LDA NpcFlags+1 : AND.b #$10 : BEQ .clear
|
||||
; SEC
|
||||
;RTL
|
||||
; .clear
|
||||
; CLC
|
||||
LDA.l NpcFlags+1 : ROL #4 ; does the same thing as below
|
||||
RTL
|
||||
|
||||
ItemCheck_Powder:
|
||||
LDA NpcFlags+1 : AND.b #$20
|
||||
LDA.l NpcFlags+1 : AND.b #$20
|
||||
RTL
|
||||
|
||||
ItemCheck_Catfish:
|
||||
;LDA CatfishGoodItem : BEQ .junk
|
||||
;PHX
|
||||
; LDA CatfishGoodItem+1 : TAX
|
||||
; LDA BowEquipment-1, X
|
||||
;PLX
|
||||
;--
|
||||
;CMP CatfishGoodItem : !BLT .oursNewer
|
||||
;.theirsNewer
|
||||
;LDA #$20 : RTL ; don't give item
|
||||
;.oursNewers
|
||||
;LDA #$00 : RTL ; give item
|
||||
;.junk
|
||||
LDA NpcFlags : AND.b #$20
|
||||
LDA.l NpcFlags : AND.b #$20
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
ItemSet_FairySword:
|
||||
PHA : LDA NpcFlags+1 : ORA.b #$08 : STA NpcFlags+1 : PLA
|
||||
PHA : LDA.l NpcFlags+1 : ORA.b #$08 : STA.l NpcFlags+1 : PLA
|
||||
RTL
|
||||
|
||||
ItemSet_SmithSword:
|
||||
PHA : LDA NpcFlags+1 : ORA.b #$04 : STA NpcFlags+1 : PLA
|
||||
PHA : LDA.l NpcFlags+1 : ORA.b #$04 : STA.l NpcFlags+1 : PLA
|
||||
RTL
|
||||
|
||||
ItemSet_MagicBat:
|
||||
PHA : LDA NpcFlags+1 : ORA.b #$80 : STA NpcFlags+1 : PLA
|
||||
PHA : LDA.l NpcFlags+1 : ORA.b #$80 : STA.l NpcFlags+1 : PLA
|
||||
RTL
|
||||
|
||||
ItemSet_OldMan:
|
||||
JSL.l Link_ReceiveItem ; thing we wrote over
|
||||
PHA : LDA NpcFlags : ORA.b #$01 : STA NpcFlags : PLA
|
||||
PHA : LDA.l NpcFlags : ORA.b #$01 : STA.l NpcFlags : PLA
|
||||
RTL
|
||||
|
||||
ItemSet_ZoraKing:
|
||||
;JSL $1DE1AA ; Sprite_SpawnFlippersItem ; thing we wrote over
|
||||
PHA : LDA NpcFlags : ORA.b #$02 : STA NpcFlags : PLA
|
||||
PHA : LDA.l NpcFlags : ORA.b #$02 : STA.l NpcFlags : PLA
|
||||
RTL
|
||||
|
||||
ItemSet_SickKid:
|
||||
JSL.l Link_ReceiveItem ; thing we wrote over
|
||||
PHA : LDA NpcFlags : ORA.b #$04 : STA NpcFlags : PLA
|
||||
PHA : LDA.l NpcFlags : ORA.b #$04 : STA.l NpcFlags : PLA
|
||||
RTL
|
||||
|
||||
ItemSet_TreeKid:
|
||||
JSL.l Link_ReceiveItem ; thing we wrote over
|
||||
PHA : LDA NpcFlags : ORA.b #$08 : STA NpcFlags : PLA
|
||||
PHA : LDA.l NpcFlags : ORA.b #$08 : STA.l NpcFlags : PLA
|
||||
RTL
|
||||
|
||||
ItemSet_Sahasrala:
|
||||
JSL.l Link_ReceiveItem ; thing we wrote over
|
||||
PHA : LDA NpcFlags : ORA.b #$10 : STA NpcFlags : PLA
|
||||
PHA : LDA.l NpcFlags : ORA.b #$10 : STA.l NpcFlags : PLA
|
||||
RTL
|
||||
|
||||
ItemSet_Catfish:
|
||||
;JSL $00D52D ; GetAnimatedSpriteTile.variable ; thing we wrote over
|
||||
;JSL.l LoadCatfishItemGFX
|
||||
PHA : LDA NpcFlags : ORA.b #$20 : STA NpcFlags : PLA
|
||||
PHA : LDA.l NpcFlags : ORA.b #$20 : STA.l NpcFlags : PLA
|
||||
RTL
|
||||
|
||||
ItemSet_Library:
|
||||
JSL.l Link_ReceiveItem ; thing we wrote over
|
||||
PHA : LDA NpcFlags : ORA.b #$80 : STA NpcFlags : PLA
|
||||
PHA : LDA.l NpcFlags : ORA.b #$80 : STA.l NpcFlags : PLA
|
||||
RTL
|
||||
|
||||
ItemSet_Mushroom:
|
||||
PHA
|
||||
LDA NpcFlags+1 : ORA.b #$10 : STA NpcFlags+1
|
||||
LDY $0E80, X ; Retrieve stored item type
|
||||
LDA.l NpcFlags+1 : ORA.b #$10 : STA.l NpcFlags+1
|
||||
LDY.w $0E80, X ; Retrieve stored item type
|
||||
BNE +
|
||||
; if for any reason the item value is 0 reload it, just in case
|
||||
%GetPossiblyEncryptedItem(MushroomItem, SpriteItemValues) : TAY
|
||||
+
|
||||
PLA
|
||||
;LDY.b #$29
|
||||
STZ $02E9 ; thing we wrote over - the mushroom is an npc for item purposes apparently
|
||||
STZ.w $02E9 ; thing we wrote over - the mushroom is an npc for item purposes apparently
|
||||
RTL
|
||||
|
||||
ItemSet_Powder:
|
||||
PHA : LDA NpcFlags+1 : ORA.b #$20 : STA NpcFlags+1 : PLA
|
||||
PHA : LDA.l NpcFlags+1 : ORA.b #$20 : STA.l NpcFlags+1 : PLA
|
||||
RTL
|
||||
;================================================================================
|
||||
|
||||
@@ -172,11 +151,11 @@ RTL
|
||||
; Randomize 300 Rupee NPC
|
||||
;--------------------------------------------------------------------------------
|
||||
Set300RupeeNPCItem:
|
||||
INC $0D80, X ; thing we wrote over
|
||||
INC.w $0D80, X ; thing we wrote over
|
||||
|
||||
PHA : PHP
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA $A0 ; these are all decimal because i got them that way
|
||||
LDA.b RoomIndex ; these are all decimal because i got them that way
|
||||
CMP.w #291 : BNE +
|
||||
%GetPossiblyEncryptedItem(RupeeNPC_MoldormCave, SpriteItemValues)
|
||||
TAY ; load moldorm cave value into Y
|
||||
|
||||
@@ -1,20 +1,17 @@
|
||||
;================================================================================
|
||||
; Pendant / Crystal HUD Fix
|
||||
;--------------------------------------------------------------------------------
|
||||
;CheckPendantHUD:
|
||||
; LDA HudFlag : CMP.b #$40 ; check for hud flag instead
|
||||
;RTL
|
||||
;================================================================================
|
||||
FlipLWDWFlag:
|
||||
PHP
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
LDA CurrentWorld : EOR.b #$40 : STA CurrentWorld
|
||||
LDA.l CurrentWorld : EOR.b #$40 : STA.l CurrentWorld
|
||||
BEQ +
|
||||
LDA.b #07 : BRA ++ ; dark world - crystals
|
||||
+
|
||||
LDA.b #03 ; light world - pendants
|
||||
++
|
||||
STA MapIcons
|
||||
STA.l MapIcons
|
||||
PLP
|
||||
RTL
|
||||
;================================================================================
|
||||
@@ -23,7 +20,7 @@ HUDRebuildIndoorHole:
|
||||
LDA.l GenericKeys : BEQ .normal
|
||||
.generic
|
||||
PLA
|
||||
LDA CurrentGenericKeys ; generic key count
|
||||
LDA.l CurrentGenericKeys ; generic key count
|
||||
JSL.l HUD_RebuildIndoor_Palace
|
||||
RTL
|
||||
.normal
|
||||
@@ -34,18 +31,18 @@ RTL
|
||||
HUDRebuildIndoor:
|
||||
LDA.l GenericKeys : BEQ .normal
|
||||
.generic
|
||||
LDA.b #$00 : STA $7EC017
|
||||
LDA CurrentGenericKeys ; generic key count
|
||||
LDA.b #$00 : STA.l $7EC017
|
||||
LDA.l CurrentGenericKeys ; generic key count
|
||||
RTL
|
||||
.normal
|
||||
LDA.b #$00 : STA $7EC017
|
||||
LDA.b #$00 : STA.l $7EC017
|
||||
LDA.b #$FF ; don't show keys
|
||||
RTL
|
||||
;================================================================================
|
||||
GetCrystalNumber:
|
||||
PHX
|
||||
TXA : ASL : TAX
|
||||
LDA CurrentWorld : EOR.b #$40 : BNE +
|
||||
LDA.l CurrentWorld : EOR.b #$40 : BNE +
|
||||
INX
|
||||
+
|
||||
LDA.l CrystalNumberTable-16, X
|
||||
@@ -55,13 +52,13 @@ RTL
|
||||
OverworldMap_CheckObject:
|
||||
PHX
|
||||
;CPX.b #$01 : BNE + : JMP ++ : + : JMP .fail
|
||||
LDA CurrentWorld : AND.b #$40 : BNE +
|
||||
LDA.l CurrentWorld : AND.b #$40 : BNE +
|
||||
;LW Map
|
||||
LDA.l MapMode : BEQ +++
|
||||
LDA MapField : ORA MapOverlay : AND.b #$01 : BNE +++
|
||||
LDA.l MapField : ORA.l MapOverlay : AND.b #$01 : BNE +++
|
||||
PHX
|
||||
LDA.l .lw_map_offsets, X : TAX ; put map offset into X
|
||||
LDA MapField, X : ORA MapOverlay, X
|
||||
LDA.l MapField, X : ORA.l MapOverlay, X
|
||||
PLX
|
||||
AND.l .lw_map_masks, X : BNE +++
|
||||
JMP .fail
|
||||
@@ -72,7 +69,7 @@ OverworldMap_CheckObject:
|
||||
+
|
||||
;DW Map
|
||||
LDA.l MapMode : BEQ +++
|
||||
LDA MapField : ORA MapOverlay : AND.b #$02 : BNE +++
|
||||
LDA.l MapField : ORA.l MapOverlay : AND.b #$02 : BNE +++
|
||||
PHX
|
||||
LDA.l .dw_map_offsets, X : TAX ; put map offset into X
|
||||
LDA.l MapField, X : ORA MapOverlay, X
|
||||
@@ -90,11 +87,11 @@ RTL
|
||||
AND.b #$40 : BNE .checkCrystal
|
||||
|
||||
.checkPendant
|
||||
LDA PendantsField : AND.l CrystalPendantFlags, X : BNE .fail
|
||||
LDA.l PendantsField : AND.l CrystalPendantFlags, X : BNE .fail
|
||||
CLC : BRA .done
|
||||
|
||||
.checkCrystal
|
||||
LDA CrystalsField : AND.l CrystalPendantFlags, X : BNE .fail
|
||||
LDA.l CrystalsField : AND.l CrystalPendantFlags, X : BNE .fail
|
||||
CLC : BRA .done
|
||||
|
||||
.fail
|
||||
@@ -119,33 +116,24 @@ db $02, $80, $08, $10, $01, $40, $04
|
||||
SetLWDWMap:
|
||||
PHP
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
LDA CurrentWorld : EOR.b #$40
|
||||
LDA.l CurrentWorld : EOR.b #$40
|
||||
BNE +
|
||||
LDA.b #07 : BRA ++ ; dark world - crystals
|
||||
+
|
||||
LDA.b #03 ; light world - pendants
|
||||
++
|
||||
STA MapIcons
|
||||
STA.l MapIcons
|
||||
PLP
|
||||
RTL
|
||||
;================================================================================
|
||||
GetMapMode:
|
||||
LDA CurrentWorld : AND.b #$40 : BEQ +
|
||||
LDA.l CurrentWorld : AND.b #$40 : BEQ +
|
||||
LDA.b #07 ; dark world - crystals
|
||||
RTL
|
||||
+
|
||||
LDA.b #03 ; light world - pendants
|
||||
RTL
|
||||
;================================================================================
|
||||
;GetPendantCrystalWorld:
|
||||
; PHB : PHK : PLB
|
||||
; PHX
|
||||
; LDA $040C : LSR : TAX
|
||||
; LDA .dungeon_worlds, X
|
||||
; PLX : PLB
|
||||
; CMP.b #$00
|
||||
;RTL
|
||||
;================================================================================
|
||||
BringMenuDownEnhanced:
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.l TournamentSeed : AND.w #$00FF
|
||||
@@ -160,7 +148,7 @@ BringMenuDownEnhanced:
|
||||
!ADD $EA : CMP.w #$FF18 : !BGE .noOvershoot
|
||||
LDA.w #$FF18 ; if we went past the limit, go to the limit
|
||||
.noOvershoot
|
||||
STA $EA : CMP.w #$FF18
|
||||
STA.b $EA : CMP.w #$FF18
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
BNE .notDoneScrolling
|
||||
INC $0200
|
||||
@@ -178,38 +166,37 @@ RaiseHudMenu:
|
||||
!ADD $EA : BMI .noOvershoot
|
||||
LDA.w #$0000 ; if we went past the limit, go to the limit
|
||||
.noOvershoot
|
||||
STA $EA
|
||||
STA.b $EA
|
||||
RTL
|
||||
;================================================================================
|
||||
CheckCloseItemMenu:
|
||||
LDA.l MenuCollapse : BNE +
|
||||
LDA $F4 : AND.b #$10 : RTL
|
||||
LDA.b $F4 : AND.b #$10 : RTL
|
||||
+
|
||||
LDA $F0 : AND.b #$10 : EOR.b #$10
|
||||
LDA.b $F0 : AND.b #$10 : EOR.b #$10
|
||||
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 HudFlag : AND.w #$0020 ; check hud flag
|
||||
LDA.w $040C : AND.w #$00FF : CMP.w #$00FF : BNE + : RTL : + ; return normal result if outdoors or in a cave
|
||||
LDA.l HudFlag : 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
|
||||
LDA.w $040C : AND.w #$00FF : CMP.w #$00FF ; original logic
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
UpdateKeys:
|
||||
PHX : PHP
|
||||
SEP #$30 ; set 8-bit accumulator & index registers
|
||||
LDA $040C : CMP.b $1F : !BLT .skip
|
||||
LDA.w $040C : CMP.b $1F : !BLT .skip
|
||||
|
||||
LSR : TAX ; get dungeon index and store to X
|
||||
|
||||
LDA CurrentSmallKeys ; load current key count
|
||||
STA DungeonKeys, X ; save to main counts
|
||||
LDA.l CurrentSmallKeys ; load current key count
|
||||
STA.l DungeonKeys, X ; save to main counts
|
||||
|
||||
CPX.b #$00 : BNE +
|
||||
STA HyruleCastleKeys ; copy HC to sewers
|
||||
STA.l HyruleCastleKeys ; copy HC to sewers
|
||||
+ : CPX.b #$01 : BNE +
|
||||
STA SewerKeys ; copy sewers to HC
|
||||
STA.l SewerKeys ; copy sewers to HC
|
||||
+
|
||||
.skip
|
||||
JSL.l PostItemGet
|
||||
@@ -232,34 +219,34 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
DrawBootsInMenuLocation:
|
||||
LDA.l HUDDungeonItems : BNE +
|
||||
LDA.w #$1608 : STA $00
|
||||
LDA.w #$1608 : STA.b $00
|
||||
RTL
|
||||
+
|
||||
LDA.w #$1588 : STA $00
|
||||
LDA.w #$1588 : STA.b $00
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
DrawGlovesInMenuLocation:
|
||||
LDA.l HUDDungeonItems : BNE +
|
||||
LDA.w #$1610 : STA $00
|
||||
LDA.w #$1610 : STA.b $00
|
||||
RTL
|
||||
+
|
||||
LDA.w #$1590 : STA $00
|
||||
LDA.w #$1590 : STA.b $00
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
DrawFlippersInMenuLocation:
|
||||
LDA.l HUDDungeonItems : BNE +
|
||||
LDA.w #$1618 : STA $00
|
||||
LDA.w #$1618 : STA.b $00
|
||||
RTL
|
||||
+
|
||||
LDA.w #$1598 : STA $00
|
||||
LDA.w #$1598 : STA.b $00
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
DrawMoonPearlInMenuLocation:
|
||||
LDA.l HUDDungeonItems : BNE +
|
||||
LDA.w #$1620 : STA $00
|
||||
LDA.w #$1620 : STA.b $00
|
||||
RTL
|
||||
+
|
||||
LDA.w #$15A0 : STA $00
|
||||
LDA.w #$15A0 : STA.b $00
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
DrawHUDDungeonItems:
|
||||
@@ -371,10 +358,10 @@ DrawHUDDungeonItems:
|
||||
+
|
||||
;-------------------------------------------------------------------------------
|
||||
|
||||
LDA HUDDungeonItems : AND.w #$0001 : BEQ .skip_small_keys
|
||||
LDA.l HUDDungeonItems : AND.w #$0001 : BEQ .skip_small_keys
|
||||
|
||||
.draw_small_keys
|
||||
LDA.w #$2810 : STA $1684 ; small keys icon
|
||||
LDA.w #$2810 : STA.w $1684 ; small keys icon
|
||||
|
||||
LDY.w #0
|
||||
|
||||
@@ -399,10 +386,10 @@ DrawHUDDungeonItems:
|
||||
.skip_small_keys
|
||||
|
||||
; Big Keys
|
||||
LDA HUDDungeonItems : AND.w #$0002 : BEQ .skip_big_keys
|
||||
LDA.l HUDDungeonItems : AND.w #$0002 : BEQ .skip_big_keys
|
||||
|
||||
|
||||
LDA.w #$2811 : STA $16C4 ; big key icon
|
||||
LDA.w #$2811 : STA.w $16C4 ; big key icon
|
||||
|
||||
; use X so we can BIT
|
||||
LDX.w #0
|
||||
@@ -429,10 +416,8 @@ DrawHUDDungeonItems:
|
||||
|
||||
.skip_big_keys
|
||||
|
||||
LDA HUDDungeonItems : AND.w #$0010 : BEQ .skip_boss_kills
|
||||
|
||||
LDA.w #$280F : STA $1704 ; skull icon
|
||||
|
||||
LDA.l HUDDungeonItems : AND.w #$0010 : BEQ .skip_boss_kills
|
||||
LDA.w #$280F : STA.w $1704 ; skull icon
|
||||
LDY.w #0
|
||||
|
||||
.next_boss_kill
|
||||
@@ -460,8 +445,8 @@ DrawHUDDungeonItems:
|
||||
.maps_and_compasses
|
||||
|
||||
; Maps
|
||||
LDA HUDDungeonItems : AND.w #$0004 : BEQ .skip_maps
|
||||
LDA.w #$2821 : STA $1684 ; map icon
|
||||
LDA.l HUDDungeonItems : AND.w #$0004 : BEQ .skip_maps
|
||||
LDA.w #$2821 : STA.w $1684 ; map icon
|
||||
|
||||
; use X so we can BIT
|
||||
LDX.w #0
|
||||
@@ -489,8 +474,8 @@ DrawHUDDungeonItems:
|
||||
.skip_maps
|
||||
|
||||
; Compasses
|
||||
LDA HUDDungeonItems : AND.w #$0008 : BEQ .skip_compasses
|
||||
LDA.w #$2C20 : STA $16C4 ; compass icon
|
||||
LDA.l HUDDungeonItems : AND.w #$0008 : BEQ .skip_compasses
|
||||
LDA.w #$2C20 : STA.w $16C4 ; compass icon
|
||||
|
||||
; use X so we can BIT
|
||||
LDX.w #0
|
||||
@@ -528,19 +513,19 @@ DrawPendantCrystalDiagram:
|
||||
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 $12EA, X
|
||||
LDA.l .row1, X : STA $132A, X
|
||||
LDA.l .row2, X : STA $136A, X
|
||||
LDA.l .row3, X : STA $13AA, X
|
||||
LDA.l .row4, X : STA $13EA, X
|
||||
LDA.l .row5, X : STA $142A, X
|
||||
LDA.l .row6, X : STA $146A, X
|
||||
LDA.l .row7, X : STA $14AA, X
|
||||
LDA.l .row8, X : STA $14EA, X
|
||||
LDA.l .row0, X : STA.w $12EA, X
|
||||
LDA.l .row1, X : STA.w $132A, X
|
||||
LDA.l .row2, X : STA.w $136A, X
|
||||
LDA.l .row3, X : STA.w $13AA, X
|
||||
LDA.l .row4, X : STA.w $13EA, X
|
||||
LDA.l .row5, X : STA.w $142A, X
|
||||
LDA.l .row6, X : STA.w $146A, X
|
||||
LDA.l .row7, X : STA.w $14AA, X
|
||||
LDA.l .row8, X : STA.w $14EA, X
|
||||
INX #2 : CPX.w #$0014 : BCC -
|
||||
|
||||
; pendants
|
||||
LDA PendantsField
|
||||
LDA.l PendantsField
|
||||
|
||||
LSR : BCC + ; pendant of wisdom (red)
|
||||
LDX.w #$252B
|
||||
@@ -567,7 +552,7 @@ DrawPendantCrystalDiagram:
|
||||
|
||||
|
||||
; crystals
|
||||
LDA CrystalsField
|
||||
LDA.l CrystalsField
|
||||
LDX.w #$2D44
|
||||
LDY.w #$2D45
|
||||
|
||||
|
||||
@@ -19,16 +19,16 @@ WriteBlanksToPlayerName:
|
||||
RTL
|
||||
|
||||
WriteCharacterToPlayerName:
|
||||
STA ExtendedFileNameSRAM, X
|
||||
STA.l ExtendedFileNameSRAM, X
|
||||
CPX.w #$0008 : !BGE +
|
||||
STA $7003D9, X ;what we wrote over
|
||||
STA.l $7003D9, X ;what we wrote over
|
||||
+
|
||||
RTL
|
||||
|
||||
ReadCharacterFromPlayerName: ;Only for use on Name Screen
|
||||
LDA ExtendedFileNameSRAM, X
|
||||
LDA.l ExtendedFileNameSRAM, X
|
||||
CPX.w #$0008 : !BGE +
|
||||
LDA $7003D9, X ;what we wrote over
|
||||
LDA.l $7003D9, X ;what we wrote over
|
||||
+
|
||||
RTL
|
||||
|
||||
@@ -40,13 +40,13 @@ PLB
|
||||
RTL
|
||||
|
||||
WrapCharacterPosition:
|
||||
LDA $0B12 : BPL +
|
||||
LDA.w $0B12 : BPL +
|
||||
LDA.b #$0B
|
||||
+
|
||||
CMP.b #$0C : !BLT +
|
||||
LDA.b #$00
|
||||
+
|
||||
STA $0B12
|
||||
STA.w $0B12
|
||||
RTL
|
||||
|
||||
CharacterPositions:
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
;--------------------------------------------------------------------------------
|
||||
RefillHealth:
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.b $A0 ; these are all decimal because i got them that way
|
||||
LDA.b RoomIndex ; these are all decimal because i got them that way
|
||||
CMP.w #279 : BNE + ; Spike Cave bottles work normally
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
LDA.b #$A0
|
||||
@@ -50,7 +50,7 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
RefillMagic:
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.b $A0 ; these are all decimal because i got them that way
|
||||
LDA.b RoomIndex ; these are all decimal because i got them that way
|
||||
CMP.w #279 : BNE + ; Spike Cave bottles work normally
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
LDA.b #$80
|
||||
|
||||
@@ -4,7 +4,7 @@ QuickSwap:
|
||||
; We perform all other checks only if we are pushing L or R in order to have minimal
|
||||
; perf impact, since this runs every frame
|
||||
|
||||
LDA.b $F6 : AND #$30 : BEQ .done
|
||||
LDA.b $F6 : AND.b #$30 : BEQ .done
|
||||
|
||||
XBA ; stash away the value for after the checks.
|
||||
|
||||
@@ -18,9 +18,9 @@ QuickSwap:
|
||||
; If prossing both L and R this frame, then go directly to the special swap code
|
||||
LDX.w $0202 : BRA .special_swap
|
||||
+
|
||||
BIT #$10 : BEQ + ; Only pressed R
|
||||
BIT.b #$10 : BEQ + ; Only pressed R
|
||||
JSR.w RCode
|
||||
LDA.b $F2 : BIT #$20 : BNE .special_swap ; Still holding L from a previous frame
|
||||
LDA.b $F2 : BIT.b #$20 : BNE .special_swap ; Still holding L from a previous frame
|
||||
BRA .store
|
||||
+
|
||||
; Only pressed L
|
||||
@@ -29,18 +29,18 @@ QuickSwap:
|
||||
BRA .store
|
||||
|
||||
.special_swap
|
||||
LDA InventoryTracking+1 : ORA #$01 : STA InventoryTracking+1
|
||||
LDA.l InventoryTracking+1 : ORA.b #$01 : STA.l InventoryTracking+1
|
||||
CPX.b #$02 : BEQ + ; boomerang
|
||||
CPX.b #$01 : BEQ + ; bow
|
||||
CPX.b #$05 : BEQ + ; powder
|
||||
CPX.b #$0D : BEQ + ; flute
|
||||
CPX.b #$10 : BEQ + ; bottle
|
||||
BRA .store
|
||||
+ STX $0202 : JSL ProcessMenuButtons_y_pressed
|
||||
+ STX.w $0202 : JSL ProcessMenuButtons_y_pressed
|
||||
|
||||
.store
|
||||
LDA.b #$20 : STA.w $012F
|
||||
STX $0202
|
||||
STX.w $0202
|
||||
|
||||
JSL HUD_RefreshIconLong
|
||||
PLX
|
||||
@@ -50,11 +50,11 @@ QuickSwap:
|
||||
RTL
|
||||
RCode:
|
||||
LDX.w $0202
|
||||
LDA.b $F2 : BIT #$20 : BNE ++ ; Still holding L from a previous frame
|
||||
LDA InventoryTracking+1 : AND #$FE : STA InventoryTracking+1
|
||||
LDA.b $F2 : BIT.b #$20 : BNE ++ ; Still holding L from a previous frame
|
||||
LDA.l InventoryTracking+1 : AND.b #$FE : STA.l InventoryTracking+1
|
||||
BRA +
|
||||
++
|
||||
LDA InventoryTracking+1 : BIT #$01 : BEQ +
|
||||
LDA.l InventoryTracking+1 : BIT.b #$01 : BEQ +
|
||||
RTS
|
||||
-
|
||||
+ CPX.b #$14 : BNE + : LDX.b #$00 ;will wrap around to 1
|
||||
@@ -68,10 +68,10 @@ RTS
|
||||
LCode:
|
||||
LDX.w $0202
|
||||
LDA.b $F2 : BIT #$10 : BNE ++ ; Still holding R from a previous frame
|
||||
LDA InventoryTracking+1 : AND #$FE : STA InventoryTracking+1
|
||||
LDA.l InventoryTracking+1 : AND.b #$FE : STA.l InventoryTracking+1
|
||||
BRA +
|
||||
++
|
||||
LDA InventoryTracking+1 : BIT #$01 : BEQ +
|
||||
LDA.l InventoryTracking+1 : BIT.b #$01 : BEQ +
|
||||
RTS
|
||||
-
|
||||
+ CPX.b #$01 : BNE + : LDX.b #$15 ; will wrap around to $14
|
||||
|
||||
302
ram.asm
302
ram.asm
@@ -4,7 +4,7 @@
|
||||
; This module is primarily concerned with labeling WRAM addresses used by the
|
||||
; randomizer and documenting their usage.
|
||||
;
|
||||
; See the JP 1.0 disassembly for reference as well
|
||||
; See the JP 1.0 disassembly for reference
|
||||
; (https://github.com/spannerisms/jpdasm/ - 31/10/2022)
|
||||
;--------------------------------------------------------------------------------
|
||||
pushpc
|
||||
@@ -36,6 +36,7 @@ Scrap0F: skip 1 ;
|
||||
LinkPosY = $7E0020 ; 2 bytes
|
||||
LinkPosX = $7E0022 ; 2 bytes
|
||||
|
||||
RoomIndex = $7E00A0 ; 2 bytes, UW room index
|
||||
|
||||
;================================================================================
|
||||
; Bank 7E
|
||||
@@ -55,6 +56,8 @@ MusicControlRequest = $7E012C
|
||||
|
||||
ItemReceiptID = $7E02D8
|
||||
|
||||
NMIAux = $7E0632
|
||||
|
||||
SpritePosYLow = $7E0D00 ; all $10 bytes
|
||||
SpritePosXLow = $7E0D10
|
||||
SpritePosYHigh = $7E0D20
|
||||
@@ -69,8 +72,15 @@ SpriteDirectionTable = $7E0EB0
|
||||
|
||||
ToastBuffer = $7E1E0E ; 2 bytes DoToast
|
||||
|
||||
ScratchBufferNV = $7E1E70 ; Callee preserved, not ok to clobber
|
||||
ScratchBufferV = $7E1E80 ; Caller preserved, okay to clobber
|
||||
MSUResumeTime = $7E1E6B ; 4 bytes
|
||||
MSUResumeControl = $7E1E6F
|
||||
MSUFallbackTable = $7E1E70 ; 8 bytes
|
||||
MSUDelayedCommand = $7E1E79
|
||||
MSUPackCount = $7E1E7A
|
||||
MSUPackCurrent = $7E1E7B
|
||||
MSUPackRequest = $7E1E7C
|
||||
MSULoadedTrack = $7E1E7D ; 2 bytes
|
||||
MSUResumeTrack = $7E1E7F
|
||||
|
||||
;1E90
|
||||
ClockHours = $7E1E90 ; Clock Hours
|
||||
@@ -78,7 +88,9 @@ ClockMinutes = $7E1E94 ; Clock Minutes
|
||||
ClockSeconds = $7E1E98 ; Clock Seconds
|
||||
ClockBuffer = $7E1E9C ; Clock Temporary
|
||||
;1EA0
|
||||
ScratchBufferNV = $7E1EA0 ; Callee preserved
|
||||
;1EB0
|
||||
ScratchBufferV = $7E1EB0 ; Caller preserved
|
||||
;1EC0
|
||||
;1ED0
|
||||
;1EE0
|
||||
@@ -108,103 +120,111 @@ BigRAM = $7EC900 ; Big buffer of free ram (0x1F00)
|
||||
;================================================================================
|
||||
; Bank 7F
|
||||
;--------------------------------------------------------------------------------
|
||||
RedrawFlag = $7F5000
|
||||
|
||||
SpriteSkipEOR = $7F5008
|
||||
|
||||
MSReceived = $7F5031
|
||||
; GanonWarpChain = $7F5032
|
||||
ForceHeartSpawn = $7F5033
|
||||
SkipHeartSave = $7F5034
|
||||
AltTextFlag = $7F5035 ; two bytes, next must be zero. 0=disable
|
||||
BossKills = $7F5037
|
||||
LagTime = $7F5038
|
||||
RupeesCollected = $7F503C ; 2 bytes
|
||||
NonChestCounter = $7F503E
|
||||
|
||||
TileUploadOffsetOverride = $7F5042
|
||||
|
||||
NMIAux = $7F5044
|
||||
|
||||
ShopId = $7F5050
|
||||
ShopType = $7F5051
|
||||
ShopInventory = $7F5052 ; 0x0C
|
||||
ShopState = $7F505F
|
||||
ShopCapacity = $7F5060
|
||||
ShopScratch = $7F5061
|
||||
ShopSRAMIndex = $7F5062
|
||||
ShopMerchant = $7F5063
|
||||
; ShopDMATimer = $7F5064 unused
|
||||
ShopPriceColumn = $7F5066 ; two bytes
|
||||
|
||||
OneMindId = $7F5072
|
||||
OneMindTimerRAM = $7F5073
|
||||
|
||||
ClockStatus = $7F507E ; 2 bytes
|
||||
; ---- --dn
|
||||
; d - dnf
|
||||
; n - negative
|
||||
|
||||
RNGLockIn = $7F5090 ; RNG Item
|
||||
BusyItem = $7F5091
|
||||
BusyHealth = $7F5092
|
||||
BusyMagic = $7F5093
|
||||
DialogOffsetPointer = $7F5094 ; 2 bytes
|
||||
DialogReturnPointer = $7F5096 ; 2 bytes
|
||||
|
||||
StalfosBombDamage = $7F509D
|
||||
ValidKeyLoaded = $7F509E
|
||||
|
||||
SwordModifier = $7F50C0
|
||||
ShieldModifier = $7F50C1 ; not implemented
|
||||
ArmorModifier = $7F50C2
|
||||
MagicModifier = $7F50C3
|
||||
LightConeModifier = $7F50C4
|
||||
CuccoStormer = $7F50C5 ; non-zero write causes storm, needs to be zeroed
|
||||
OldManDash = $7F50C6
|
||||
IceModifier = $7F50C7
|
||||
InfiniteArrows = $7F50C8
|
||||
InfiniteBombs = $7F50C9
|
||||
InfiniteMagic = $7F50CA
|
||||
DPadInverter = $7F50CB ; fill in values
|
||||
OHKOFlag = $7F50CC
|
||||
SpriteSwapper = $7F50CD
|
||||
BootsModifier = $7F50CE
|
||||
|
||||
; $7F50D0 - $7F50FF - Block Cypher Parameters
|
||||
; $7F5100 - $7F51FF - Block Cypher Buffer
|
||||
|
||||
; Crypto buffer ($7F50D0 - $7F51FF)
|
||||
KeyBase = $7F50D0
|
||||
y = $7F50E0
|
||||
z = $7F50E4
|
||||
Sum = $7F50E8
|
||||
p = $7F50EC
|
||||
e = $7F50F0
|
||||
CryptoScratch = $7F50F2
|
||||
CryptoBuffer = $7F5100
|
||||
v = $7F5100
|
||||
|
||||
RNGPointers = $7F5200 ; $FF bytes
|
||||
|
||||
RxBuffer = $7F5300 ; $00-$5F buffer $60-7E reserved
|
||||
RxStatus = $7F537F ; 1 byte
|
||||
TxBuffer = $7F5380 ; $80 - $EF buffer $F0 - $FE reserved
|
||||
TxStatus = $7F53FF ; $F0 - $FE
|
||||
|
||||
MSUFallbackTable = $7F5460 ; 8 bytes
|
||||
MSUDelayedCommand = $7F5469
|
||||
MSUPackCount = $7F546A
|
||||
MSUPackCurrent = $7F546B
|
||||
MSUPackRequest = $7F546C
|
||||
MSULoadedTrack = $7F546D ; 2 bytes
|
||||
MSUResumeTrack = $7F546F
|
||||
MSUResumeTime = $7F5470 ; 4 bytes
|
||||
MSUResumeControl = $7F5474
|
||||
|
||||
CompassTotalsWRAM = $7F5410
|
||||
|
||||
DialogBuffer = $7F5700 ; $FF bytes
|
||||
base $7F5000
|
||||
RedrawFlag: skip 1 ;
|
||||
skip 2 ;
|
||||
HexToDecDigit1: skip 1 ; Space for storing the result of hex to decimal conversion.
|
||||
HexToDecDigit2: skip 1 ; Digits are stored from high to low.
|
||||
HexToDecDigit3: skip 1 ;
|
||||
HexToDecDigit4: skip 1 ;
|
||||
HexToDecDigit5: skip 1 ;
|
||||
SpriteSkipEOR: skip 2 ; Used in utilities.asm to determine when to skip drawing sprites. Zero-padded
|
||||
skip $2B ; Unused
|
||||
AltTextFlag: skip 2 ; dialog.asm: Determines whether to load from vanilla decompression buffer
|
||||
; or from a secondary buffer (used for things like free dungeon item text)
|
||||
BossKills: skip 1 ;
|
||||
LagTime: skip 4 ; Computed during stats preparation for display
|
||||
RupeesCollected: skip 2 ; Computed during stats preparation for display
|
||||
NonChestCounter: skip 2 ; Computed during stats preparation for display
|
||||
skip 2 ; Unused
|
||||
TileUploadOffsetOverride: skip 2 ; Offset override for loading sprite gfx
|
||||
skip 3 ;
|
||||
skip 9 ;
|
||||
; Shop Block $7F5050 - $7F506F
|
||||
ShopId: skip 1 ; Shop ID. Used for indexing and loading inventory for custom shops
|
||||
ShopType: skip 1 ; Shop type. $FF = vanilla shop
|
||||
; t - - - - - - -
|
||||
; t = Take-any
|
||||
ShopInventory: skip $0D ; For three possible shop items, row major:
|
||||
; [Item ID][Price low][Price High][Purchase Count]
|
||||
ShopState: skip 1 ; - - - - - l c r | Bitfield that determines whether to draw an item
|
||||
ShopCapacity: skip 1 ; Four lower bits of shop_config in ShopTable, number of items 1-3
|
||||
ShopScratch: skip 1 ; Scratch byte used in shop drawing routines
|
||||
ShopSRAMIndex: skip 1 ; SRAM index for purchase counts
|
||||
ShopMerchant: skip 1 ; Loaded from ShopTable and used to jump to one of four drawing routines
|
||||
skip 2 ; Unused
|
||||
ShopPriceColumn: skip 3 ; Stores coordinates for drawing prices in shops
|
||||
skip 7 ;
|
||||
skip 2 ; Reserved for OneMind
|
||||
OneMindId: skip 1 ; Current OneMind player
|
||||
OneMindTimerRAM: skip 2 ; Frame counter for OneMind
|
||||
skip 9 ; Unused
|
||||
ClockStatus: skip 2 ; 2 bytes second always zero padding
|
||||
; ---- --dn
|
||||
; d - DNF mode
|
||||
; n - Negative
|
||||
skip $10 ; Unused
|
||||
RNGLockIn: skip 1 ; Used for RNG item (currently unused by rando)
|
||||
BusyItem: skip 1 ; Flags for indicating when these things are "busy"
|
||||
BusyHealth: skip 1 ; e.g. doing some animation
|
||||
BusyMagic: skip 1 ;
|
||||
DialogOffsetPointer: skip 2 ; Offset and return pointer into new dialog buffer used
|
||||
DialogReturnPointer: skip 2 ; for e.g. free dungeon item text.
|
||||
skip 1 ; Unused
|
||||
PreviousOverworldDoor: skip 1 ; Previous overworld door is cached or initialized here
|
||||
skip 1 ; Reserved
|
||||
skip 1 ; Unused
|
||||
DuckMapFlag: skip 1 ; Temporary flag used and reset by flute map drawing routine
|
||||
StalfosBombDamage: skip 1 ; Relocated from damage table
|
||||
ValidKeyLoaded: skip 1 ;
|
||||
TextBoxDefer: skip 1 ; Flag used to defer post-item text boxes
|
||||
skip $10 ; Unused
|
||||
skip $10 ; Reserved for enemizer
|
||||
; Most of these modifiers are intended to be written to by
|
||||
; a 3rd party (e.g. Crowd Control.) Writer is responsible
|
||||
; for zeroing.
|
||||
SwordModifier: skip 1 ; Adds level to current sword. Doesn't change graphics.
|
||||
ShieldModifier: skip 1 ; Not implemented
|
||||
ArmorModifier: skip 1 ; Adds level to current mail. Doesn't change graphics.
|
||||
MagicModifier: skip 1 ; Adds level to magic consumption (1/2, 1/4.)
|
||||
LightConeModifier: skip 1 ; Gives lamp cone when set to 1
|
||||
CuccoStormer: skip 1 ; Non-zero write causes storm.
|
||||
OldManDash: skip 1 ; Unused
|
||||
IceModifier: skip 1 ; - - - g - - - i | Flipping either sets ice physics
|
||||
InfiniteArrows: skip 1 ; Setting these to $01 will give infinite ammo. Set by
|
||||
InfiniteBombs: skip 1 ; EscapeAssist.
|
||||
InfiniteMagic: skip 1 ;
|
||||
ControllerInverter: skip 1 ; $01 = D-pad | $02 = Buttons | $03 = Buttons and D-Pad
|
||||
; >=$04 = Swap buttons and D-pad
|
||||
OHKOFlag: skip 1 ; Any non-zero write sets OHKO mode
|
||||
SpriteSwapper: skip 1 ; Loads new link sprite and glove/armor palette. No gfx or
|
||||
; code currently in base ROM for this.
|
||||
BootsModifier: skip 1 ; $01 = Give dash ability
|
||||
skip 1 ; Unused
|
||||
; Crypto Block ($7F50D0 - $7F51FF)
|
||||
KeyBase: skip $10 ;
|
||||
y: skip 4 ;
|
||||
z: skip 4 ;
|
||||
Sum: skip 4 ;
|
||||
p: skip 4 ;
|
||||
e: skip 2 ;
|
||||
CryptoScratch: skip $0E ;
|
||||
CryptoBuffer: ;
|
||||
v: skip $100 ;
|
||||
RNGPointers: skip $100 ; Pointers for static RNG
|
||||
; Network I/O block. See servicerequest.asm. Rx and Tx channels
|
||||
; also allocated 8 persistent bytes each in sram.asm.
|
||||
RxBuffer: skip $7F ;
|
||||
RxStatus: skip 1 ;
|
||||
TxBuffer: skip $7F ;
|
||||
TxStatus: skip 1 ;
|
||||
skip $10 ; Unused
|
||||
CompassTotalsWRAM: skip $10 ; skip $10
|
||||
skip $40 ; Reserved for general dungeon tracking data. May have over
|
||||
; allocated here. Feel free to reassign.
|
||||
skip $40 ; Unused
|
||||
skip $260 ; Unused
|
||||
DialogBuffer: skip $100 ; Dialog Buffer
|
||||
|
||||
;================================================================================
|
||||
; RAM Assertions
|
||||
@@ -233,6 +253,7 @@ endmacro
|
||||
|
||||
%assertRAM(LinkPosY, $7E0020)
|
||||
%assertRAM(LinkPosX, $7E0022)
|
||||
%assertRAM(RoomIndex, $7E00A0)
|
||||
%assertRAM(CurrentMSUTrack, $7E010B)
|
||||
%assertRAM(CurrentVolume, $7E0127)
|
||||
%assertRAM(TargetVolume, $7E0129)
|
||||
@@ -240,6 +261,7 @@ endmacro
|
||||
%assertRAM(MusicControl, $7E012B)
|
||||
%assertRAM(MusicControlRequest, $7E012C)
|
||||
%assertRAM(ItemReceiptID, $7E02D8)
|
||||
%assertRAM(NMIAux, $7E0632)
|
||||
%assertRAM(SpritePosYLow, $7E0D00)
|
||||
%assertRAM(SpritePosXLow, $7E0D10)
|
||||
%assertRAM(SpritePosYHigh, $7E0D20)
|
||||
@@ -249,12 +271,24 @@ endmacro
|
||||
%assertRAM(SpriteTypeTable, $7E0E20)
|
||||
%assertRAM(SpriteDirectionTable, $7E0EB0)
|
||||
%assertRAM(ToastBuffer, $7E1E0E)
|
||||
%assertRAM(ScratchBufferNV, $7E1E70)
|
||||
%assertRAM(ScratchBufferV, $7E1E80)
|
||||
|
||||
%assertRAM(MSUResumeTime, $7E1E6B)
|
||||
%assertRAM(MSUResumeControl, $7E1E6F)
|
||||
%assertRAM(MSUFallbackTable, $7E1E70)
|
||||
%assertRAM(MSUDelayedCommand, $7E1E79)
|
||||
%assertRAM(MSUPackCount, $7E1E7A)
|
||||
%assertRAM(MSUPackCurrent, $7E1E7B)
|
||||
%assertRAM(MSUPackRequest, $7E1E7C)
|
||||
%assertRAM(MSULoadedTrack, $7E1E7D)
|
||||
%assertRAM(MSUResumeTrack, $7E1E7F)
|
||||
|
||||
|
||||
%assertRAM(ClockHours, $7E1E90)
|
||||
%assertRAM(ClockMinutes, $7E1E94)
|
||||
%assertRAM(ClockSeconds, $7E1E98)
|
||||
%assertRAM(ClockBuffer, $7E1E9C)
|
||||
%assertRAM(ScratchBufferNV, $7E1EA0)
|
||||
%assertRAM(ScratchBufferV, $7E1EB0)
|
||||
%assertRAM(TileUploadBuffer, $7EA180)
|
||||
%assertRAM(SpriteOAM, $7EC025)
|
||||
%assertRAM(HUDKeyIcon, $7EC726)
|
||||
@@ -266,17 +300,21 @@ endmacro
|
||||
%assertRAM(HUDKeyDigits, $7EC764)
|
||||
%assertRAM(BigRAM, $7EC900)
|
||||
%assertRAM(RedrawFlag, $7F5000)
|
||||
%assertRAM(HexToDecDigit1, $7F5003)
|
||||
%assertRAM(HexToDecDigit2, $7F5004)
|
||||
%assertRAM(HexToDecDigit3, $7F5005)
|
||||
%assertRAM(HexToDecDigit4, $7F5006)
|
||||
%assertRAM(HexToDecDigit5, $7F5007)
|
||||
%assertRAM(SpriteSkipEOR, $7F5008)
|
||||
%assertRAM(MSReceived, $7F5031)
|
||||
%assertRAM(ForceHeartSpawn, $7F5033)
|
||||
%assertRAM(SkipHeartSave, $7F5034)
|
||||
|
||||
|
||||
|
||||
%assertRAM(AltTextFlag, $7F5035)
|
||||
%assertRAM(BossKills, $7F5037)
|
||||
%assertRAM(LagTime, $7F5038)
|
||||
%assertRAM(RupeesCollected, $7F503C)
|
||||
%assertRAM(NonChestCounter, $7F503E)
|
||||
%assertRAM(TileUploadOffsetOverride, $7F5042)
|
||||
%assertRAM(NMIAux, $7F5044)
|
||||
%assertRAM(ShopId, $7F5050)
|
||||
%assertRAM(ShopType, $7F5051)
|
||||
%assertRAM(ShopInventory, $7F5052)
|
||||
@@ -295,8 +333,11 @@ endmacro
|
||||
%assertRAM(BusyMagic, $7F5093)
|
||||
%assertRAM(DialogOffsetPointer, $7F5094)
|
||||
%assertRAM(DialogReturnPointer, $7F5096)
|
||||
%assertRAM(PreviousOverworldDoor, $7F5099)
|
||||
%assertRAM(DuckMapFlag, $7F509C)
|
||||
%assertRAM(StalfosBombDamage, $7F509D)
|
||||
%assertRAM(ValidKeyLoaded, $7F509E)
|
||||
%assertRAM(TextBoxDefer, $7F509F)
|
||||
%assertRAM(SwordModifier, $7F50C0)
|
||||
%assertRAM(ShieldModifier, $7F50C1)
|
||||
%assertRAM(ArmorModifier, $7F50C2)
|
||||
@@ -308,7 +349,7 @@ endmacro
|
||||
%assertRAM(InfiniteArrows, $7F50C8)
|
||||
%assertRAM(InfiniteBombs, $7F50C9)
|
||||
%assertRAM(InfiniteMagic, $7F50CA)
|
||||
%assertRAM(DPadInverter, $7F50CB)
|
||||
%assertRAM(ControllerInverter, $7F50CB)
|
||||
%assertRAM(OHKOFlag, $7F50CC)
|
||||
%assertRAM(SpriteSwapper, $7F50CD)
|
||||
%assertRAM(BootsModifier, $7F50CE)
|
||||
@@ -326,15 +367,6 @@ endmacro
|
||||
%assertRAM(RxStatus, $7F537F)
|
||||
%assertRAM(TxBuffer, $7F5380)
|
||||
%assertRAM(TxStatus, $7F53FF)
|
||||
%assertRAM(MSUFallbackTable, $7F5460)
|
||||
%assertRAM(MSUDelayedCommand, $7F5469)
|
||||
%assertRAM(MSUPackCount, $7F546A)
|
||||
%assertRAM(MSUPackCurrent, $7F546B)
|
||||
%assertRAM(MSUPackRequest, $7F546C)
|
||||
%assertRAM(MSULoadedTrack, $7F546D)
|
||||
%assertRAM(MSUResumeTrack, $7F546F)
|
||||
%assertRAM(MSUResumeTime, $7F5470)
|
||||
%assertRAM(MSUResumeControl, $7F5474)
|
||||
%assertRAM(CompassTotalsWRAM, $7F5410)
|
||||
%assertRAM(DialogBuffer, $7F5700)
|
||||
|
||||
@@ -344,36 +376,7 @@ pullpc
|
||||
; Bank 7F
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
; $7F5000 - Redraw Flag
|
||||
; $7F5001 - Flipper Softlock Possible
|
||||
; $7F5002 - L/R Rotate
|
||||
; $7F5003 - HexToDec 1st Digit
|
||||
; $7F5004 - HexToDec 2nd Digit
|
||||
; $7F5005 - HexToDec 3rd Digit
|
||||
; $7F5006 - HexToDec 4th Digit
|
||||
; $7F5007 - HexToDec 5th Digit
|
||||
; $7F5008 - Skip Sprite_DrawMultiple EOR
|
||||
; $7F5009 - Always Zero
|
||||
; $7F5010 - Unused
|
||||
; $7F5020 - Unused
|
||||
; $7F5030 - Unused
|
||||
; $7F5031 - HUD Master Sword Flag
|
||||
; $7F5032 - Unused
|
||||
; $7F5033 - Force Heart Spawn Counter
|
||||
; $7F5034 - Skip Heart Collection Save Counter
|
||||
; $7F5035 - Alternate Text Pointer Flag ; 0=Disable
|
||||
; $7F5036 - Padding Byte (Must be Zero)
|
||||
; $7F5037 - Stats Boss Kills
|
||||
; $7F5038 - Stats Lag Time
|
||||
; $7F5039 - Stats Lag Time
|
||||
; $7F503A - Stats Lag Time
|
||||
; $7F503B - Stats Lag Time
|
||||
; $7F503C - Stats Rupee Total
|
||||
; $7F503D - Stats Rupee Total
|
||||
; $7F503E - Stats Item Total
|
||||
; $7F503F - Unused
|
||||
; $7F5040 - Free Item Dialog Temporary
|
||||
; $7F5041 - Unused
|
||||
;OLDSTUFF
|
||||
; $7F5042 - Tile Upload Offset Override (Low)
|
||||
; $7F5043 - Tile Upload Offset Override (High)
|
||||
; $7F5044 - $7F5046 - NMI Auxiliary Function
|
||||
@@ -395,11 +398,11 @@ pullpc
|
||||
; $7F5095 - Dialog Offset Pointer (High)
|
||||
; $7F5096 - Dialog Offset Pointer Return (Low)
|
||||
; $7F5097 - Dialog Offset Pointer Return (High)
|
||||
; $7F5098 - Water Entry Index
|
||||
; $7F5098 - Unused
|
||||
; $7F5099 - Last Entered Overworld Door ID
|
||||
; $7F509A - (Reserved)
|
||||
; $7F509B - Unused
|
||||
; $7F509C - Unused
|
||||
; $7F509C - Duck Map Flag
|
||||
; $7F509E - Valid Key Loaded
|
||||
; $7F509F - Text Box Defer Flag
|
||||
; $7F50A0 - $7F50AF - Unused
|
||||
@@ -427,8 +430,7 @@ pullpc
|
||||
; $7F5300 - $7F53FF - Multiworld Block
|
||||
; $7F5400 - $7F540F - Unused
|
||||
; $7F5410 - $7F545F - Dungeon Tracking Block
|
||||
; $7F5460 - $7F549F - MSU Block
|
||||
; $7F54A0 - $7F56FF - Unused
|
||||
; $7F5460 - $7F56FF - Unused
|
||||
|
||||
; $7F5700 - $7F57FF - Dialog Buffer
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ DecrementArrows:
|
||||
BRA .done
|
||||
.rupees
|
||||
REP #$20
|
||||
LDA.b $A0 : CMP.w #$0111 : SEP #$20 : BNE .not_archery_game
|
||||
LDA.b RoomIndex : CMP.w #$0111 : SEP #$20 : BNE .not_archery_game
|
||||
LDA.b $1B : BEQ .not_archery_game ; in overworld
|
||||
LDA.w $0B9A : BEQ .shoot_arrow ; arrow game active
|
||||
LDA.b #$00 : BRA .done
|
||||
|
||||
@@ -44,7 +44,7 @@ RNG_Lanmolas1:
|
||||
RNG_Moldorm1:
|
||||
LDA.b #$01 : BRA _rng_done
|
||||
RNG_Agahnim1:
|
||||
LDA.b $A0 : CMP.b #$20 : BNE RNG_Agahnim2 ; Agah 1 and 2 use the same code, check which agah we're fighting and branch
|
||||
LDA.b RoomIndex : CMP.b #$20 : BNE RNG_Agahnim2 ; Agah 1 and 2 use the same code, check which agah we're fighting and branch
|
||||
LDA.b #$02
|
||||
JSL.l GetStaticRNG : PHA
|
||||
LDA.l GanonAgahRNG : BEQ + ; check if blue balls are disabled
|
||||
|
||||
@@ -4,7 +4,7 @@ LoadRoomHook:
|
||||
.noStats
|
||||
JSL Dungeon_LoadRoom
|
||||
REP #$10 ; 16 bit XY
|
||||
LDX $A0 ; Room ID
|
||||
LDX.b RoomIndex ; Room ID
|
||||
LDA.l RoomCallbackTable, X
|
||||
SEP #$10 ; 8 bit XY
|
||||
JSL UseImplicitRegIndexedLongJumpTable
|
||||
@@ -68,20 +68,20 @@ macro DrawBombosPlatform(roomX, roomY, quadX, quadY)
|
||||
endMacro
|
||||
|
||||
IcePalaceBombosSE:
|
||||
LDA AllowSwordlessMedallionUse : CMP #$01 : BEQ + : RTL : +
|
||||
LDA.l AllowSwordlessMedallionUse : CMP.b #$01 : BEQ + : RTL : +
|
||||
%DrawBombosPlatform(14, 18, 1, 1)
|
||||
RTL
|
||||
IcePalaceBombosSW:
|
||||
LDA AllowSwordlessMedallionUse : CMP #$01 : BEQ + : RTL : +
|
||||
LDA.l AllowSwordlessMedallionUse : CMP.b #$01 : BEQ + : RTL : +
|
||||
%DrawBombosPlatform(14, 18, 0, 1)
|
||||
RTL
|
||||
IcePalaceBombosNE:
|
||||
LDA AllowSwordlessMedallionUse : CMP #$01 : BEQ + : RTL : +
|
||||
LDA.l AllowSwordlessMedallionUse : CMP.b #$01 : BEQ + : RTL : +
|
||||
%DrawBombosPlatform(14, 18, 1, 0)
|
||||
RTL
|
||||
|
||||
CastleEastEntrance:
|
||||
LDA ProgressIndicator : CMP.b #$02 : !BLT + : RTL : + ; only apply in rain states (0 or 1)
|
||||
LDA.l ProgressIndicator : CMP.b #$02 : !BLT + : RTL : + ; only apply in rain states (0 or 1)
|
||||
LDA.l BlockCastleDoorsInRain : BNE + : RTL : +
|
||||
|
||||
REP #$20 ; 16 A
|
||||
@@ -112,7 +112,7 @@ CastleEastEntrance:
|
||||
RTL
|
||||
|
||||
CastleWestEntrance:
|
||||
LDA ProgressIndicator : CMP.b #$02 : !BLT + : RTL : + ; only apply in rain states (0 or 1)
|
||||
LDA.l ProgressIndicator : CMP.b #$02 : !BLT + : RTL : + ; only apply in rain states (0 or 1)
|
||||
LDA.l BlockCastleDoorsInRain : BNE + : RTL : +
|
||||
|
||||
REP #$20 ; 16 A
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
;================================================================================
|
||||
; Four Digit Rupees
|
||||
;--------------------------------------------------------------------------------
|
||||
Draw4DigitRupees:
|
||||
LDA $1B : AND.w #$00FF : BEQ .outdoors ; skip if outdoors
|
||||
.indoors
|
||||
LDA $A0 : BNE .normal ; skip except for ganon's room
|
||||
LDA TotalItemCounter
|
||||
BRA .print
|
||||
.outdoors
|
||||
.normal
|
||||
LDA DisplayRupees
|
||||
.print
|
||||
JSL.l HexToDec
|
||||
LDA $7F5004 : AND.w #$00FF : ORA.w #$2400 : STA $7EC750
|
||||
LDA $7F5005 : AND.w #$00FF : ORA.w #$2400 : STA $7EC752
|
||||
LDA $7F5006 : AND.w #$00FF : ORA.w #$2400 : STA $7EC754
|
||||
LDA $7F5007 : AND.w #$00FF : ORA.w #$2400 : STA $7EC756
|
||||
RTL
|
||||
;================================================================================
|
||||
363
sandbox.asm
363
sandbox.asm
@@ -1,363 +0,0 @@
|
||||
;Spawn location table cryptic documentation
|
||||
;$A0 |$15B6E - $15B7B (2) Starting room
|
||||
;$0601 |$15B7C - $15BB3 (8) scroll ranges
|
||||
;$E2 |$15BB4 - $15BC1 (2) Location X? Scroll Data
|
||||
;$E8 |$15BC2 - $15BCF (2) Location Y? Scroll Data
|
||||
;$20 |$15BD0 - $15BDD (2) link x?
|
||||
;$22 |$15BDE - $15BEB (2) link y?
|
||||
;$0618 |$15BEC - $15BF9 (2) camera y?
|
||||
;$061c |$15BFA - $15C07 (2) camera x?
|
||||
;$0AA1 |$15C08 - $15C0E (1) Starting Location Blockset Type
|
||||
;$A4 |$15C0F - $15C15 (1) Starting Location Floor Type
|
||||
;$040C |$15C16 - $15C1C (1) Dungeon Designation
|
||||
;$EE,$0476|$15C1D - $15C23 (1) ladder and background
|
||||
;$A6,$A7 |$15C24 - $15C2A (1) scroll properties
|
||||
;$A9,$AA |$15C2B - $15C31 (1) Scroll Quandrant
|
||||
;$0696 |$15C32 - $15C3F (2) overworld exit location
|
||||
;$010E |$15C40 - $15C4D (2) starting location entrance value
|
||||
;$0132 |$15C4E - $15C54 (1) music
|
||||
|
||||
;-----------------------------------------------
|
||||
; Sanc Spawn point at dark sanc
|
||||
;-----------------------------------------------
|
||||
|
||||
org $02D8D4 : dw $112
|
||||
org $02D8E8 : db $22, $22, $22, $23, $04, $04, $04, $05
|
||||
org $02D91A : dw $0400
|
||||
org $02D928 : dw $222e
|
||||
org $02D936 : dw $229a
|
||||
org $02D944 : dw $0480
|
||||
org $02D952 : dw $00a5
|
||||
org $02D960 : dw $007F
|
||||
org $02D96D : db $14
|
||||
org $02D974 : db $00
|
||||
org $02D97B : db $FF
|
||||
org $02D982 : db $00
|
||||
org $02D989 : db $02
|
||||
org $02D990 : db $00
|
||||
org $02D998 : dw $0000
|
||||
org $02D9A6 : dw $005A
|
||||
org $02D9B3 : db $12
|
||||
|
||||
; Handle exit from this cave
|
||||
org $308250 ;StartingAreaExitTable
|
||||
dw $0112 : db $53 : dw $001e, $0400, $06e2, $0446, $0758, $046d, $075f : db $00, $00, $00
|
||||
org $308240 ;StartingAreaExitOffset
|
||||
db $00, $01, $00, $00, $00, $00, $00
|
||||
|
||||
|
||||
;-----------------------------------------------
|
||||
; Old man spawn point at End of Cave
|
||||
;-----------------------------------------------
|
||||
org $02D8DE : dw $00F1
|
||||
org $02D910 : db $1F, $1E, $1F, $1F, $03, $02, $03, $03
|
||||
org $02D924 : dw $0300
|
||||
org $02D932 : dw $1F10
|
||||
org $02D940 : dw $1FC0
|
||||
org $02D94E : dw $0378
|
||||
org $02D95C : dw $0187
|
||||
org $02D96A : dw $017F
|
||||
org $02D972 : db $06
|
||||
org $02D979 : db $00
|
||||
org $02D980 : db $FF
|
||||
org $02D987 : db $00
|
||||
org $02D98E : db $22
|
||||
org $02D995 : db $12
|
||||
org $02D9A2 : dw $0000
|
||||
org $02D9B0 : dw $0007
|
||||
org $02D9B8 : db $12
|
||||
|
||||
|
||||
;--------------------------------------------------------------
|
||||
; Make Houlihan exit at Pyramid
|
||||
;--------------------------------------------------------------
|
||||
org $02DB68 : dw $0003
|
||||
org $02DBC9 : db $5b
|
||||
org $02DC55 : dw $0b0e
|
||||
org $02DCF3 : dw $075a
|
||||
org $02DD91 : dw $0674
|
||||
org $02DE2F : dw $07a8
|
||||
org $02DECD : dw $06e8
|
||||
org $02DF6B : dw $07c7
|
||||
org $02E009 : dw $06f3
|
||||
org $02E06A : db $06
|
||||
org $02E0B9 : db $fa
|
||||
org $02E145 : dw $0000
|
||||
org $02E1E3 : dw $0000
|
||||
|
||||
;--------------------------------------------------------------
|
||||
; Make Houlihan exit at C-Shaped House
|
||||
;--------------------------------------------------------------
|
||||
;org $02DB68 : dw $0003
|
||||
;org $02DBC9 : db $58
|
||||
;org $02DC55 : dw $09d8
|
||||
;org $02DCF3 : dw $0744
|
||||
;org $02DD91 : dw $02ce
|
||||
;org $02DE2F : dw $0797
|
||||
;org $02DECD : dw $0348
|
||||
;org $02DF6B : dw $07b3
|
||||
;org $02E009 : dw $0353
|
||||
;org $02E06A : db $0a
|
||||
;org $02E0B9 : db $f6
|
||||
;org $02E145 : dw $0DE8
|
||||
;org $02E1E3 : dw $0000
|
||||
|
||||
;--------------------------------------------------------------
|
||||
; Inverted Exit Shuffles
|
||||
;--------------------------------------------------------------
|
||||
|
||||
; swap bomb shop and links house
|
||||
org $02DB8C+$00 : db $6C
|
||||
org $1BBB73+$00 : db $53
|
||||
org $1BBB73+$52 : db $01
|
||||
|
||||
; swap AT and GT
|
||||
org $1BBB73+$23 : db $37
|
||||
org $1BBB73+$36 : db $24
|
||||
org $02DAEE+$38+$38 : dw $00e0
|
||||
org $02DAEE+$25+$25 : dw $000c
|
||||
|
||||
; Bumper Cave (Bottom) => Old Man Cave (West)
|
||||
org $1BBB73+$15 : db $06
|
||||
org $02DAEE+$17+$17 : dw $00f0
|
||||
|
||||
; Old Man Cave (West) => Bumper Cave (Bottom)
|
||||
org $1BBB73+$05 : db $16
|
||||
org $02DAEE+$07+$07 : dw $00fb
|
||||
|
||||
; Death Mountain Return Cave (West) => Bumper Cave (Top)
|
||||
org $1BBB73+$2d : db $17
|
||||
org $02DAEE+$2f+$2f : dw $00eb
|
||||
|
||||
; Old Man Cave (East) => Death Mountain Return Cave (West)
|
||||
org $1BBB73+$06 : db $2e
|
||||
org $02DAEE+$08+$08 : dw $00e6
|
||||
|
||||
; Bumper Cave (Top) => Dark Death Mountain Fairy
|
||||
org $1BBB73+$16 : db $5e
|
||||
|
||||
; Dark Death Mountain Healer Fairy => Old Man Cave (East)
|
||||
org $1BBB73+$6F : db $07
|
||||
org $02DAEE+$18+$18 : dw $00f1
|
||||
org $02DB8C+$18 : db $43
|
||||
org $02DBDB+$18+$18 : dw $1400
|
||||
org $02DC79+$18+$18 : dw $0294
|
||||
org $02DD17+$18+$18 : dw $0600
|
||||
org $02DDB5+$18+$18 : dw $02e8
|
||||
org $02DE53+$18+$18 : dw $0678
|
||||
org $02DEF1+$18+$18 : dw $0303
|
||||
org $02DF8F+$18+$18 : dw $0685
|
||||
org $02E02D+$18 : db $0a
|
||||
org $02E07C+$18 : db $f6
|
||||
org $02E0CB+$18+$18 : dw $0000
|
||||
org $02E169+$18+$18 : dw $0000
|
||||
|
||||
;--------------------------------------------------------------
|
||||
; Other inverted
|
||||
;--------------------------------------------------------------
|
||||
org $30804A : db $01 ; main toggle
|
||||
org $0283E0 : db $F0 ; residual portal
|
||||
org $02B34D : db $F0 ; residual portal
|
||||
org $06DB78 : db $8B ; residual portal
|
||||
|
||||
org $05AF79 : db $F0 ; vortex
|
||||
org $0DB3C5 : db $C6 ; vortex
|
||||
org $07A3F4 : db $F0 ; duck
|
||||
org $07A3F4 : db $F0 ; duck
|
||||
org $02E849 : dw $0043, $0056, $0058, $006C, $006F, $0070, $007B, $007F, $001B ; Dark World Flute Spots
|
||||
org $02E8D5 : dw $07C8 ; nudge flute spot 3 out of gargoyle statue
|
||||
org $02E8F7 : dw $01F8 ; nudge flute spot 3 out of gargoyle statue
|
||||
org $07A943 : db $F0 ; Dark to light world mirror
|
||||
org $07A96D : db $D0 ; residual portal?
|
||||
|
||||
org $08D40C : db $D0 ; morph poof
|
||||
org $308174 : db $01 ; ER's Fix fake worlds fix. Currently needed for inverted
|
||||
|
||||
org $0280A6 : db $D0 ; Spawn logic
|
||||
|
||||
org $1FED31 : db $0E ; pre-open open TR bomb door
|
||||
org $1FED41 : db $0E ; pre-open open TR bomb door
|
||||
|
||||
org $0ABFBB : db $90 ; Show portal on dark world map
|
||||
|
||||
org $308089 : db $01 ; Open TR Entrance if exiting from it
|
||||
|
||||
org $06B2AA : JSL Sprite_ShowMessageFromPlayerContact
|
||||
; front end will actually do `org $06B2AB : dl $05E1F0`
|
||||
|
||||
; Write to StartingAreaOverworldDoor table to indicate the overworld door being used for
|
||||
; the single entrance spawn point
|
||||
org $308247 ; PC 0x180247
|
||||
db $00, $5A, $00, $00, $00, $00, $00
|
||||
|
||||
org $1AF696 : db #$F0 ;Bat X position (sprite_retreat_bat.asm:130)
|
||||
org $1AF6B2 : db #$33 ;Bat Delay (sprite_retreat_bat.asm:136)
|
||||
|
||||
;New Hole Mask Position
|
||||
org $1AF730
|
||||
db $6A, $9E, $0C, $00
|
||||
db $7A, $9E, $0C, $00
|
||||
db $8A, $9E, $0C, $00
|
||||
db $6A, $AE, $0C, $00
|
||||
db $7A, $AE, $0C, $00
|
||||
db $8A, $AE, $0C, $00
|
||||
db $67, $97, $0C, $00
|
||||
db $8D, $97, $0C, $00
|
||||
|
||||
;Cryptic documentation of flute/whirlpool table format (all value 16 bit)
|
||||
;eae5 - Overworld area that the exit leads to
|
||||
;eb07 $0084 - VRAM locations to place Link at.
|
||||
;eb29 $e6/0122/0124 - Y Scroll Data
|
||||
;eb4b $e0/011e/0120 - X Scroll Data
|
||||
;eb6d $20 - Link's Y Coordinate
|
||||
;eb8f $22 - Link's X Coordinate
|
||||
;ebb1 $0618 - Camera Y Coordinate
|
||||
;ebd3 $061c - Camera X Coordinate
|
||||
;ebf5 $0624- Ukn1 in HM
|
||||
;ec17 $0628- Ukn2 in HM
|
||||
|
||||
;adjust flute spot 9 position
|
||||
org $02E87B : dw $00ae
|
||||
org $02E89D : dw $0610
|
||||
org $02E8BF : dw $077e
|
||||
org $02E8E1 : dw $0672
|
||||
org $02E903 : dw $07f8
|
||||
org $02E925 : dw $067d
|
||||
org $02E947 : dw $0803
|
||||
org $02E969 : dw $0000
|
||||
org $02E98B : dw $FFF2
|
||||
|
||||
; aga tower exit/ pyramid spawn (now hyrule castle ledge spawn)
|
||||
org $02DAEE+$06+$06 : dw $0020
|
||||
org $02DB8C+$06 : db $1B
|
||||
org $02DBDB+$06+$06 : dw $00ae
|
||||
org $02DC79+$06+$06 : dw $0610
|
||||
org $02DD17+$06+$06 : dw $077e
|
||||
org $02DDB5+$06+$06 : dw $0672
|
||||
org $02DE53+$06+$06 : dw $07f8
|
||||
org $02DEF1+$06+$06 : dw $067d
|
||||
org $02DF8F+$06+$06 : dw $0803
|
||||
org $02E02D+$06 : db $00
|
||||
org $02E07C+$06 : db $f2
|
||||
org $02E0CB+$06+$06 : dw $0000
|
||||
org $02E169+$06+$06 : dw $0000
|
||||
|
||||
|
||||
org $308350 : db $00, $00, $01 ; Death mountain cave should start on overworld
|
||||
|
||||
;(0x????,0x1B,0x0130,0x060a,0x0716,0x0672,0x07f8,0x0681,0x0803,0x0c,0x02,xx,xx)
|
||||
; Exit table cryptic documentation:
|
||||
;??|$15D8A-$15E27 - (0x4F entries, 2 bytes each) - Rooms that exit to overworld Areas ("Room" in HM)
|
||||
;??|$15E28-$15E76 - (0x4F entries, 1 byte each) - Overworld area that the exit leads to. ("Map" in HM)
|
||||
;84|$15E77-$15F14 - (0x4F entries, 2 bytes each) - VRAM locations to place Link at. Gets fed to $7E0084 (???? in HM)
|
||||
;e6|$15F15-$15FB2 - (0x4F entries, 2 bytes each) - Y Scroll Data
|
||||
;e0|$15FB3-$16050 - (0x4F entries, 2 bytes each) - X Scroll Data
|
||||
;$20|$16051-$160EE - (0x4F entries, 2 bytes each) - Link's Y Coordinate
|
||||
;$22|$160EF-$1618C - (0x4F entries, 2 bytes each) - Link's X Coordinate
|
||||
;0618|$1618D-$1622A - (0x4F entries, 2 bytes each) - Camera Y Coordinate
|
||||
;061c|$1622B-$162C8 - (0x4F entries, 2 bytes each) - Camera X Coordinate
|
||||
;0624|$162C9-$16317 - (0x4F entries, 1 byte each) - Ukn1 in HM
|
||||
;0628|$16318-$16366 - (0x4F entries, 1 byte each) - Ukn2 in HM
|
||||
|
||||
; redefine some map16 tiles
|
||||
org $0FF1C8
|
||||
dw #$190F, #$190F, #$190F, #$194C
|
||||
dw #$190F, #$194B, #$190F, #$195C
|
||||
dw #$594B, #$194C, #$19EE, #$19EE
|
||||
dw #$194B, #$19EE, #$19EE, #$19EE
|
||||
dw #$594B, #$190F, #$595C, #$190F
|
||||
dw #$190F, #$195B, #$190F, #$190F
|
||||
dw #$19EE, #$19EE, #$195C, #$19EE
|
||||
dw #$19EE, #$19EE, #$19EE, #$595C
|
||||
dw #$595B, #$190F, #$190F, #$190F
|
||||
|
||||
; Redefine more map16 tiles
|
||||
org $0FA480
|
||||
dw #$190F, #$196B, #$9D04, #$9D04
|
||||
dw #$196B, #$190F, #$9D04, #$9D04
|
||||
|
||||
; update pyramid hole entrances
|
||||
org $1bb810 : dw $00BE, $00C0, $013E
|
||||
org $1bb836 : dw $001B, $001B, $001B
|
||||
; add an extra pyramid hole entrance
|
||||
; ExtraHole_Map16:
|
||||
org $308300 : dw $0140
|
||||
; ExtraHole_Area:
|
||||
org $308320 : dw $001B
|
||||
; ExtraHole_Entrance:
|
||||
org $308340 : db $7B
|
||||
|
||||
;prioritize retreat Bat and use 3rd sprite section
|
||||
org $1af504 : dw $148B
|
||||
org $1af50c : dw $149B
|
||||
org $1af514 : dw $14A4
|
||||
org $1af51c : dw $1489
|
||||
org $1af524 : dw $14AC
|
||||
org $1af52c : dw $54AC
|
||||
org $1af534 : dw $148C
|
||||
org $1af53c : dw $548C
|
||||
org $1af544 : dw $1484
|
||||
org $1af54c : dw $5484
|
||||
org $1af554 : dw $14A2
|
||||
org $1af55c : dw $54A2
|
||||
org $1af564 : dw $14A0
|
||||
org $1af56c : dw $54A0
|
||||
org $1af574 : dw $148E
|
||||
org $1af57c : dw $548E
|
||||
org $1af584 : dw $14AE
|
||||
org $1af58c : dw $54AE
|
||||
|
||||
;Make retreat bat gfx available in Hyrule castle.
|
||||
org $00DB9D : db $1A ;sprite set 1, section 3
|
||||
org $00DC09 : db $1A ;sprite set 27, section 3
|
||||
|
||||
;use new castle hole graphics (The values are the SNES address of the graphics: 31e000)
|
||||
org $00D009 : db $31
|
||||
org $00D0e8 : db $E0
|
||||
org $00D1c7 : db $00
|
||||
|
||||
;add color for shading for castle hole
|
||||
org $1BE8DA : dw $39AD
|
||||
|
||||
; TR tail jump
|
||||
org $00886e : db $5C, $00, $A0, $A1
|
||||
|
||||
;Remove Hyrule Castle Gate warp
|
||||
org $09D436 : db $F3 ;replace whirlpool with (harmless) SpritePositionTarget Overlord
|
||||
|
||||
;Add warps under rocks, etc.
|
||||
org $1BC67A : db #$2E, #$0B, #$82 ; Replace a rupee under bush to add a warp on map 80 (top of kak)
|
||||
org $1BC81E : db #$94, #$1D, #$82 ; Replace a heart under bush to add a warp on map 120 (mire)
|
||||
org $1BC655 : db #$4A, #$1D, #$82 ; Replace a bomb :( under bush to add a warp on map 78 (DM)
|
||||
org $1BC80D : db #$B2, #$0B, #$82 ; map 111
|
||||
org $1BC3DF : db #$D8, #$D1 ; new pointer for map 115 no items to replace
|
||||
org $1BD1D8 : db #$A8, #$02, #$82, #$FF, #$FF ;new data for map115
|
||||
org $1BC85A : db #$50, #$0F, #$82
|
||||
|
||||
org $1BC387 : db #$DD, #$D1 ;New pointer for map 71 no items to replace
|
||||
org $1BD1DD : db #$A4, #$06, #$82, #$9E, #$06, #$82, #$FF, #$FF ;new data for map 71
|
||||
|
||||
|
||||
;;move pyramid exit overworld door
|
||||
org $1BB96F+$35+$35 : dw $001b
|
||||
org $1BBA71+$35+$35 : dw $06a4
|
||||
org $1BBB73+$35 : db $36
|
||||
|
||||
org $02DAEE+$37+$37 : dw $0010
|
||||
org $02DB8C+$37 : db $1B
|
||||
org $02DBDB+$37+$37 : dw $0418
|
||||
org $02DC79+$37+$37 : dw $0679
|
||||
org $02DD17+$37+$37 : dw $06b4
|
||||
org $02DDB5+$37+$37 : dw $06c6
|
||||
org $02DE53+$37+$37 : dw $0728
|
||||
org $02DEF1+$37+$37 : dw $06e6
|
||||
org $02DF8F+$37+$37 : dw $0733
|
||||
org $02E02D+$37 : db $07
|
||||
org $02E07C+$37 : db $f9
|
||||
org $02E0CB+$37+$37 : dw $0000
|
||||
org $02E169+$37+$37 : dw $0000
|
||||
|
||||
|
||||
;org $02E849 ; Fly 1 to Sanctuary
|
||||
;db #$13, #$00, #$16, #$00, #$18, #$00, #$2C, #$00, #$2F, #$00, #$30, #$00, #$3B, #$00, #$3F, #$00, #$5B, #$00, #$35, #$00, #$0F, #$00, #$15, #$00, #$33, #$00, #$12, #$00, #$3F, #$00, #$55, #$00, #$7F, #$00, #$1A, #$00, #$88, #$08, #$30, #$0B, #$88, #$05, #$98, #$07, #$80, #$18, #$9E, #$06, #$10, #$08, #$2E, #$00, #$42, #$12, #$80, #$06, #$12, #$01, #$9E, #$05, #$8E, #$04, #$80, #$02, #$12, #$01, #$80, #$02, #$00, #$04, #$16, #$05, #$59, #$07, #$B9, #$0A, #$FA, #$0A, #$1E, #$0F, #$DF, #$0E, #$05, #$0F, #$00, #$06, #$46, #$0E, #$C6, #$02, #$2A, #$04, #$BA, #$0C, #$9A, #$04, #$56, #$0E, #$2A, #$04, #$56, #$0E, #$D6, #$06, #$4E, #$0C, #$7E, #$01, #$40, #$08, #$B2, #$0E, #$00, #$00, #$F2, #$06, #$75, #$0E, #$78, #$07, #$0A, #$0C, #$06, #$0E, #$8A, #$0A, #$EA, #$06, #$62, #$04, #$00, #$0E, #$8A, #$0A, #$00, #$0E, #$68, #$04, #$78, #$05, #$B7, #$07, #$17, #$0B, #$58, #$0B, #$A8, #$0F, #$3D, #$0F, #$67, #$0F, #$5C, #$06, #$A8, #$0E, #$28, #$03, #$88, #$04, #$18, #$0D, #$F8, #$04, #$B8, #$0E, #$88, #$04, #$B8, #$0E, #$56, #$07, #$C8, #$0C, #$00, #$02, #$B8, #$08, #$30, #$0F, #$78, #$00, #$78, #$07, #$F3, #$0E, #$F0, #$07, #$90, #$0C, #$80, #$0E, #$10, #$0B, #$70, #$07, #$E8, #$04, #$68, #$0E, #$10, #$0B, #$68, #$0E, #$70, #$04, #$83, #$05, #$C6, #$07, #$26, #$0B, #$67, #$0B, #$8D, #$0F, #$4C, #$0F, #$72, #$0F, #$6D, #$06, #$B3, #$0E, #$33, #$03, #$97, #$04, #$27, #$0D, #$07, #$05, #$C3, #$0E, #$97, #$04, #$C3, #$0E, #$56, #$07, #$D3, #$0C, #$0B, #$02, #$BF, #$08, #$37, #$0F, #$8D, #$00, #$7F, #$07, #$FA, #$0E, #$F7, #$07, #$97, #$0C, #$8B, #$0E, #$17, #$0B, #$77, #$07, #$EF, #$04, #$85, #$0E, #$17, #$0B, #$85, #$0E, #$F6, #$FF, #$FA, #$FF, #$07, #$00, #$F7, #$FF, #$F6, #$FF, #$00, #$00, #$F1, #$FF, #$FB, #$FF, #$00, #$00, #$FA, #$FF, #$0A, #$00, #$F6, #$FF, #$F6, #$FF, #$F6, #$FF, #$FA, #$FF, #$F6, #$FF, #$FA, #$FF, #$F2, #$FF, #$F2, #$FF, #$02, #$00, #$00, #$00, #$0E, #$00, #$00, #$00, #$FE, #$FF, #$0B, #$00, #$F8, #$FF, #$06, #$00, #$FA, #$FF, #$FA, #$FF, #$06, #$00, #$0E, #$00, #$00, #$00, #$FA, #$FF, #$00, #$00
|
||||
;
|
||||
@@ -60,8 +60,8 @@ macro ServiceRequestChest(type)
|
||||
LDA.l TxStatus : BEQ + : CLC : RTL : + ; return fail if we don't have the lock
|
||||
LDA.b $1B : STA.l TxBuffer+8 ; indoor/outdoor
|
||||
BEQ +
|
||||
LDA.b $A0 : STA.l TxBuffer+9 ; roomid low
|
||||
LDA.b $A1 : STA.l TxBuffer+10 ; roomid high
|
||||
LDA.b RoomIndex : STA.l TxBuffer+9 ; roomid low
|
||||
LDA.b RoomIndex+1 : STA.l TxBuffer+10 ; roomid high
|
||||
BRA ++
|
||||
+
|
||||
LDA.w $040A : STA.l TxBuffer+9 ; area id
|
||||
@@ -78,8 +78,8 @@ macro ServiceRequest(type,index)
|
||||
LDA.l TxStatus : BEQ + : CLC : RTL : + ; return fail if we don't have the lock
|
||||
LDA.b $1B : STA.l TxBuffer+8 ; indoor/outdoor
|
||||
BEQ +
|
||||
LDA.b $A0 : STA.l TxBuffer+9 ; roomid low
|
||||
LDA.b $A1 : STA.l TxBuffer+10 ; roomid high
|
||||
LDA.b RoomIndex : STA.l TxBuffer+9 ; roomid low
|
||||
LDA.b RoomIndex+1 : STA.l TxBuffer+10 ; roomid high
|
||||
BRA ++
|
||||
+
|
||||
LDA.w $040A : STA.l TxBuffer+9 ; area id
|
||||
|
||||
@@ -110,9 +110,9 @@ SpritePrep_ShopKeeper:
|
||||
REP #$30 ; set 16-bit accumulator & index registers
|
||||
LDX.w #$0000
|
||||
-
|
||||
LDA.l ShopTable+1, X : CMP.b $A0 : BNE +
|
||||
LDA.l ShopTable+1, X : CMP.b RoomIndex : BNE +
|
||||
LDA.l ShopTable+5, X : AND.w #$0040 : BNE ++
|
||||
LDA.l $7F5099 : AND #$00FF : CMP.l ShopTable+3, X : BNE +
|
||||
LDA.l PreviousOverworldDoor : AND #$00FF : CMP.l ShopTable+3, X : BNE +
|
||||
++
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
LDA.l ShopTable, X : STA.l ShopId
|
||||
@@ -174,9 +174,9 @@ SpritePrep_ShopKeeper:
|
||||
JMP -
|
||||
.stop
|
||||
|
||||
LDA.b #Shopkeeper_UploadVRAMTilesLong>>16 : STA.l NMIAux+2
|
||||
LDA.b #Shopkeeper_UploadVRAMTilesLong>>8 : STA.l NMIAux+1
|
||||
LDA.b #Shopkeeper_UploadVRAMTilesLong>>0 : STA.l NMIAux
|
||||
LDA.b #Shopkeeper_UploadVRAMTilesLong>>16 : STA.w NMIAux+2
|
||||
LDA.b #Shopkeeper_UploadVRAMTilesLong>>8 : STA.w NMIAux+1
|
||||
LDA.b #Shopkeeper_UploadVRAMTilesLong>>0 : STA.w NMIAux
|
||||
|
||||
.done
|
||||
LDA.l ShopType : BIT.b #$20 : BEQ .notTakeAll ; Take-all
|
||||
|
||||
19
sram.asm
19
sram.asm
@@ -312,10 +312,9 @@ CrystalCounter: skip 1 ; Total Number of crystals collected (integer)
|
||||
DungeonsCompleted: skip 2 ; Bitfield indicating whether a dungeon's prize has been collected.
|
||||
; This has the same shape as the dungeon item bitfields.
|
||||
skip 44 ; Unused
|
||||
ServiceSequenceRx: ; Service sequence receive
|
||||
ServiceSequenceTx: ; Service sequence transmit
|
||||
ServiceSequence: skip 8 ; Service request block. See servicerequest.asm
|
||||
skip 8 ; Unused
|
||||
ServiceSequence: ; See servicerequest.asm
|
||||
ServiceSequenceRx: skip 8 ; Service sequence receive
|
||||
ServiceSequenceTx: skip 8 ; Service sequence transmit
|
||||
DungeonAbsorbedKeys: ; \ Absorbed key counters (integers)
|
||||
SewerAbsorbedKeys: skip 1 ; | Sewer Passage
|
||||
HCAbsorbedKeys: skip 1 ; | Hyrule Castle
|
||||
@@ -395,11 +394,11 @@ RoomDataSRAM: ;
|
||||
skip $280 ;
|
||||
OverworldEventDataSRAM: ;
|
||||
skip $C0 ;
|
||||
EquipmentSRAM: skip 3 ; skip 76
|
||||
BombsEquipmentSRAM: skip 31 ; 343
|
||||
DisplayRupeesSRAM: skip 21 ; 362
|
||||
CurrentArrowsSRAM: skip 21 ; 377
|
||||
InventoryTrackingSRAM: skip 2 ; 38C
|
||||
EquipmentSRAM: skip 3 ;
|
||||
BombsEquipmentSRAM: skip 31 ;
|
||||
DisplayRupeesSRAM: skip 21 ;
|
||||
CurrentArrowsSRAM: skip 21 ;
|
||||
InventoryTrackingSRAM: skip 2 ;
|
||||
BowTrackingSRAM: skip 2 ;
|
||||
skip 53 ;
|
||||
ProgressIndicatorSRAM: skip 1 ;
|
||||
@@ -600,7 +599,7 @@ endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
%assertSRAM(ServiceSequence, $7EF4A0)
|
||||
%assertSRAM(ServiceSequenceRx, $7EF4A0)
|
||||
%assertSRAM(ServiceSequenceTx, $7EF4A0)
|
||||
%assertSRAM(ServiceSequenceTx, $7EF4A8)
|
||||
;--------------------------------------------------------------------------------
|
||||
%assertSRAM(DungeonAbsorbedKeys, $7EF4B0)
|
||||
%assertSRAM(SewerAbsorbedKeys, $7EF4B0)
|
||||
|
||||
@@ -39,7 +39,7 @@ DungeonHoleEntranceTransition:
|
||||
JSL EnableForceBlank
|
||||
|
||||
LDA.l SilverArrowsAutoEquip : AND.b #$02 : BEQ +
|
||||
LDA $010E : CMP.b #$7B : BNE + ; skip unless falling to ganon's room
|
||||
LDA.w $010E : CMP.b #$7B : BNE + ; skip unless falling to ganon's room
|
||||
LDA.l BowTracking : AND.b #$40 : BEQ + ; skip if we don't have silvers
|
||||
LDA.l BowEquipment : BEQ + ; skip if we have no bow
|
||||
CMP.b #$03 : !BGE + ; skip if the bow is already silver
|
||||
@@ -133,7 +133,7 @@ CountChestKey: ; called by neighbor functions
|
||||
RTS
|
||||
;--------------------------------------------------------------------------------
|
||||
CountBonkItem: ; called from GetBonkItem in bookofmudora.asm
|
||||
LDA.b $A0 ; check room ID - only bonk keys in 2 rooms so we're just checking the lower byte
|
||||
LDA.b RoomIndex ; check room ID - only bonk keys in 2 rooms so we're just checking the lower byte
|
||||
CMP.b #115 : BNE + ; Desert Bonk Key
|
||||
LDA.l BonkKey_Desert : BRA ++
|
||||
+ : CMP.b #140 : BNE + ; GTower Bonk Key
|
||||
@@ -289,7 +289,7 @@ IncrementUWMirror:
|
||||
PHA
|
||||
LDA.b #$00 : STA.l $7F5035 ; bandaid patch bug with mirroring away from text
|
||||
LDA.l StatsLocked : BNE +
|
||||
LDA $040C : CMP #$FF : BEQ + ; skip if we're in a cave or house
|
||||
LDA.w $040C : CMP.b #$FF : BEQ + ; skip if we're in a cave or house
|
||||
LDA.l UnderworldMirrors : INC : STA.l UnderworldMirrors
|
||||
JSL.l StatTransitionCounter
|
||||
+
|
||||
|
||||
@@ -62,6 +62,6 @@ endmacro
|
||||
%AddStat(DeathCounter, 0, 0, 08, 2, !DEATHS_X, !DEATHS_Y)
|
||||
%AddStat(FaerieRevivalCounter, 0, 0, 08, 3, !FAERIE_REVIVALS_X, !FAERIE_REVIVALS_Y)
|
||||
%AddStat(MenuFrames, 1, 8, 32, 4, !TOTAL_MENU_TIME_X, !TOTAL_MENU_TIME_Y)
|
||||
%AddStat($7F5038, 1, 0, 32, 4, !TOTAL_LAG_TIME_X, !TOTAL_LAG_TIME_Y)
|
||||
%AddStat(LagTime, 1, 0, 32, 4, !TOTAL_LAG_TIME_X, !TOTAL_LAG_TIME_Y)
|
||||
%AddStat(TotalItemCounter, 0, 0, 16, 3, !COLLECTION_RATE_X, !COLLECTION_RATE_Y)
|
||||
%AddStat(NMIFrames, 1, 0, 32, 4, !TOTAL_TIME_X, !TOTAL_TIME_Y)
|
||||
|
||||
@@ -65,7 +65,7 @@ RTL
|
||||
;================================================================================
|
||||
; $7E0348 - Ice Value
|
||||
LoadModifiedIceFloorValue_a11:
|
||||
LDA.b $A0 : CMP.b #$91 : BEQ + : CMP.b #$92 : BEQ + : CMP.b #$93 : BEQ + ; mire basement currently broken - not sure why
|
||||
LDA.b RoomIndex : CMP.b #$91 : BEQ + : CMP.b #$92 : BEQ + : CMP.b #$93 : BEQ + ; mire basement currently broken - not sure why
|
||||
LDA.b $5D : CMP.b #$01 : BEQ + : CMP.b #$17 : BEQ + : CMP.b #$1C : BEQ +
|
||||
LDA.b $5E : CMP.b #$02 : BEQ +
|
||||
LDA.b $5B : BNE +
|
||||
@@ -73,7 +73,7 @@ LoadModifiedIceFloorValue_a11:
|
||||
+ : LDA.w $0348 : AND.b #$11
|
||||
RTL
|
||||
LoadModifiedIceFloorValue_a01:
|
||||
LDA.b $A0 : CMP.b #$91 : BEQ + : CMP.b #$92 : BEQ + : CMP.b #$93 : BEQ + ; mire basement currently broken - not sure why
|
||||
LDA.b RoomIndex : CMP.b #$91 : BEQ + : CMP.b #$92 : BEQ + : CMP.b #$93 : BEQ + ; mire basement currently broken - not sure why
|
||||
LDA.b $5D : CMP.b #$01 : BEQ + : CMP.b #$17 : BEQ + : CMP.b #$1C : BEQ +
|
||||
LDA.b $5E : CMP.b #$02 : BEQ +
|
||||
LDA.b $5B : BNE +
|
||||
@@ -116,7 +116,7 @@ GetSmithSword:
|
||||
LDA.b #$7A
|
||||
LDY.b #$01
|
||||
JSL.l Sprite_ShowMessageUnconditional
|
||||
LDA.b #$3C : STA $012E ; error sound
|
||||
LDA.b #$3C : STA.w $012E ; error sound
|
||||
SEP #$10
|
||||
BRA .done
|
||||
|
||||
@@ -144,7 +144,7 @@ CheckMedallionSword:
|
||||
LDA.b $1B : BEQ .outdoors
|
||||
.indoors
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.b $A0 ; load room ID
|
||||
LDA.b RoomIndex ; load room ID
|
||||
CMP.w #$000E : BNE + ; freezor1
|
||||
LDA.b $22 : AND.w #$01FF ; check x-coord
|
||||
CMP.w #368-8 : !BLT .normal
|
||||
|
||||
@@ -95,8 +95,6 @@ org $06B55C ; PC 0x3355C ; sprite_smithy_bros.asm : 634
|
||||
SmithSword:
|
||||
db #$02 ; #$02 = Tempered Sword (default)
|
||||
|
||||
;org $05EBD4 ; PC 0x2EBD4 - sprite_zelda.asm:23 - (LDA $7EF359 : CMP.b #$02 : BCS .hasMasterSword) - Zelda Spawnpoint Sword Check
|
||||
;db #$05 ; #$02 = Tempered Sword (default) - #$05 = All Swords
|
||||
;--------------------------------------------------------------------------------
|
||||
; 0x18002B- 0x180030 (Unused)
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -1435,7 +1433,7 @@ db $04
|
||||
;JSL Sprite_ShowMessageFromPlayerContact ; Inverted uses Sprite_ShowMessageFromPlayerContact
|
||||
;;---------------------------------------------------------------------------------
|
||||
org $00886e ; <- Bank00.asm : 1050 (LDA Overworld_TileAttr, X)
|
||||
LDA Overworld_TileAttr, X ; use "JML InvertedTileAttributeLookup" for inverted
|
||||
LDA.l Overworld_TileAttr, X ; use "JML InvertedTileAttributeLookup" for inverted
|
||||
Overworld_GetTileAttrAtLocation_continue:
|
||||
;================================================================================
|
||||
org $0DDBEC ; <- 6DBEC
|
||||
|
||||
@@ -30,13 +30,10 @@ SetTabletItem:
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
SpawnTabletItem:
|
||||
; JSL.l HeartPieceGet
|
||||
;RTL
|
||||
JSL.l LoadOutdoorValue
|
||||
PHA
|
||||
JSL.l PrepDynamicTile
|
||||
|
||||
LDA.b #$01 : STA.l ForceHeartSpawn : STA.l SkipHeartSave
|
||||
JSL.l SetTabletItem
|
||||
|
||||
LDA.b #$EB
|
||||
@@ -61,7 +58,7 @@ MaybeUnlockTabletAnimation:
|
||||
STZ $0112 ; disable falling-medallion mode
|
||||
STZ $03EF ; release link from item-up pose
|
||||
LDA.b #$00 : STA.b $5D ; set link to ground state
|
||||
|
||||
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
LDA.b $8A : CMP.w #$0030 : BNE ++ ; Desert
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
|
||||
@@ -5,8 +5,8 @@ RenderCharSetColorExtended_init:
|
||||
|
||||
RenderCharSetColorExtended_close:
|
||||
stz.b Scrap0C
|
||||
lda $010c
|
||||
sta $10
|
||||
lda.w $010c
|
||||
sta.b $10
|
||||
rtl
|
||||
|
||||
RenderCharSetColorExtended:
|
||||
@@ -33,7 +33,7 @@ RenderCharToMapExtended:
|
||||
plx
|
||||
lda.w #$0000
|
||||
sta.b Scrap00
|
||||
lda #$007f
|
||||
lda.w #$007f
|
||||
sta.b Scrap02
|
||||
lda.w #$0000
|
||||
clc : adc.w #$0020
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
; Tree Kid Fix
|
||||
;--------------------------------------------------------------------------------
|
||||
org $06B12B ; <- 3312B - tree status set - 418 - LDA NpcFlagsVanilla : ORA.b #$08 : STA NpcFlagsVanilla
|
||||
LDA NpcFlagsVanilla : AND.b #$F7 : STA NpcFlagsVanilla ; unset arboration instead of setting it
|
||||
LDA.l NpcFlagsVanilla : AND.b #$F7 : STA.l NpcFlagsVanilla ; unset arboration instead of setting it
|
||||
;--------------------------------------------------------------------------------
|
||||
org $06B072 ; <- 33072 - FluteAardvark_InitialStateFromFluteState - 418 : dw FluteAardvark_AlreadyArborated
|
||||
db #$8B
|
||||
|
||||
@@ -567,7 +567,7 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
; HexToDec
|
||||
; in: A(w) - Word to Convert
|
||||
; out: $7F5004 - $7F5007 (high - low)
|
||||
; out: HexToDecDigit1 - HexToDecDigit5 (high - low)
|
||||
;--------------------------------------------------------------------------------
|
||||
HexToDec:
|
||||
PHA
|
||||
@@ -592,8 +592,8 @@ HexToDec:
|
||||
INC.b Scrap07
|
||||
!SUB.w #1 : BRA -
|
||||
+
|
||||
LDA.b Scrap04 : STA.l $7F5004 ; move to digit storage
|
||||
LDA.b Scrap06 : STA.l $7F5006
|
||||
LDA.b Scrap04 : STA.l HexToDecDigit2 ; move to digit storage
|
||||
LDA.b Scrap06 : STA.l HexToDecDigit4
|
||||
PLA
|
||||
RTL
|
||||
|
||||
@@ -626,33 +626,33 @@ db #00, #01, #01, #02, #01, #02, #02, #03, #01, #02, #02, #03, #02, #03, #03, #0
|
||||
;--------------------------------------------------------------------------------
|
||||
; HexToDec
|
||||
; in: A(w) - Word to Convert
|
||||
; out: $7F5003 - $7F5007 (high - low)
|
||||
; out: HexToDecDigit1 - HexToDecDigit5 (high - low)
|
||||
;--------------------------------------------------------------------------------
|
||||
;HexToDec:
|
||||
; PHA
|
||||
; PHA
|
||||
; LDA.w #$9090
|
||||
; STA.l $7F5003 : STA.l $7F5005 : STA.l $7F5006 ; clear digit storage
|
||||
; STA.l HexToDecDigit1 : STA.l HexToDecDigit3 : STA.l HexToDecDigit4 ; clear digit storage
|
||||
; PLA
|
||||
; -
|
||||
; CMP.w #10000 : !BLT +
|
||||
; PHA : SEP #$20 : LDA.l $7F5003 : INC : STA.l $7F5003 : REP #$20 : PLA
|
||||
; PHA : SEP #$20 : LDA.l HexToDecDigit1 : INC : STA.l HexToDecDigit1 : REP #$20 : PLA
|
||||
; !SUB.w #10000 : BRA -
|
||||
; + -
|
||||
; CMP.w #1000 : !BLT +
|
||||
; PHA : SEP #$20 : LDA.l $7F5004 : INC : STA.l $7F5004 : REP #$20 : PLA
|
||||
; PHA : SEP #$20 : LDA.l HexToDecDigit2 : INC : STA.l HexToDecDigit2 : REP #$20 : PLA
|
||||
; !SUB.w #1000 : BRA -
|
||||
; + -
|
||||
; CMP.w #100 : !BLT +
|
||||
; PHA : SEP #$20 : LDA.l $7F5005 : INC : STA.l $7F5005 : REP #$20 : PLA
|
||||
; PHA : SEP #$20 : LDA.l HexToDecDigit3 : INC : STA.l HexToDecDigit3 : REP #$20 : PLA
|
||||
; !SUB.w #100 : BRA -
|
||||
; + -
|
||||
; CMP.w #10 : !BLT +
|
||||
; PHA : SEP #$20 : LDA.l $7F5006 : INC : STA.l $7F5006 : REP #$20 : PLA
|
||||
; PHA : SEP #$20 : LDA.l HexToDecDigit4 : INC : STA.l HexToDecDigit4 : REP #$20 : PLA
|
||||
; !SUB.w #10 : BRA -
|
||||
; + -
|
||||
; CMP.w #1 : !BLT +
|
||||
; PHA : SEP #$20 : LDA.l $7F5007 : INC : STA.l $7F5007 : REP #$20 : PLA
|
||||
; PHA : SEP #$20 : LDA.l HexToDecDigit5 : INC : STA.l HexToDecDigit5 : REP #$20 : PLA
|
||||
; !SUB.w #1 : BRA -
|
||||
; +
|
||||
; PLA
|
||||
|
||||
@@ -94,6 +94,9 @@ Sprite_ShowMessageUnconditional:
|
||||
org $05EC96
|
||||
Sprite_ZeldaLong:
|
||||
|
||||
org $05F0C0
|
||||
Sprite_EB_HeartPiece_handle_flags:
|
||||
|
||||
org $0680FA
|
||||
Player_ApplyRumbleToSprites:
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ LoadZoraKingItemGFX:
|
||||
JML.l PrepDynamicTile
|
||||
;--------------------------------------------------------------------------------
|
||||
JumpToSplashItemTarget:
|
||||
LDA $0D90, X
|
||||
LDA.w $0D90, X
|
||||
CMP.b #$FF : BNE + : JML.l SplashItem_SpawnSplash : +
|
||||
CMP.b #$00 : JML.l SplashItem_SpawnOther
|
||||
;--------------------------------------------------------------------------------
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
;--------------------------------------------------------------------------------
|
||||
CheckZSNES:
|
||||
SEP #$28
|
||||
LDA #$FF
|
||||
LDA.b #$FF
|
||||
CLC
|
||||
ADC #$FF
|
||||
CMP #$64
|
||||
ADC.b #$FF
|
||||
CMP.b #$64
|
||||
CLD
|
||||
BEQ .zsnes
|
||||
REP #$20
|
||||
LDA #$01FF : TCS ; thing we wrote over - initialize stack
|
||||
LDA.w #$01FF : TCS ; thing we wrote over - initialize stack
|
||||
JML.l ReturnCheckZSNES
|
||||
.zsnes
|
||||
JML DontUseZSNES
|
||||
|
||||
Reference in New Issue
Block a user