Merge branch 'master' into patch-1

This commit is contained in:
Thomas Prescott
2021-04-04 21:38:41 -05:00
committed by GitHub
45 changed files with 1709 additions and 786 deletions

View File

@@ -15,9 +15,7 @@ DrawLibraryItemGFX:
RTL
;--------------------------------------------------------------------------------
SetLibraryItem:
PHA
LDY $0E80, X ; Retrieve stored item type
PLA
JSL.l ItemSet_Library ; contains thing we wrote over
RTL
;--------------------------------------------------------------------------------

View File

@@ -32,7 +32,7 @@ RTL
;--------------------------------------------------------------------------------
;0 = Become (Perma)bunny
DecideIfBunny:
LDA $7EF357 : BEQ + : RTL : +
LDA $7EF357 : BNE .done
LDA $7EF3CA : AND.b #$40
PHA : LDA.l InvertedMode : BNE .inverted
.normal
@@ -47,8 +47,8 @@ RTL
DecideIfBunnyByScreenIndex:
; If indoors we don't have a screen index. Return non-bunny to make mirror-based
; superbunny work
LDA $1B : BEQ + : RTL : +
LDA $7EF357 : BEQ + : RTL : +
LDA $1B : BNE .done
LDA $7EF357 : BNE .done
LDA $8A : AND.b #$40 : PHA
LDA.l InvertedMode : BNE .inverted
.normal
@@ -114,12 +114,13 @@ RTS
FixFrogSmith:
LDA.l $7EF3CA : BNE .darkWorld
LDA.l $7EF3CC : CMP.b #$07 : BNE .done
LDA.b #$08 : STA.l $7EF3CC ; make frog into smith in light world
LDA.b #$08 : ; make frog into smith in light world
BRA .loadgfx
.darkWorld
LDA.l $7EF3CC : CMP.b #$08 : BNE .done
LDA.b #$07 : STA.l $7EF3CC ; make smith into frog in dark world
LDA.b #$07 ; make smith into frog in dark world
.loadgfx
STA.l $7EF3CC
JSL Tagalong_LoadGfx
.done
RTS
@@ -137,12 +138,11 @@ RTL
; Fix crystal not spawning when using somaria vs boss
TryToSpawnCrystalUntilSuccess:
STX $02D8 ; what we overwrote
JSL AddAncillaLong : BCC .spawned ; a clear carry flag indicates success
.failed
RTL
.spawned
JSL AddAncillaLong : BCS .failed ; a clear carry flag indicates success
.spawned
STZ $AE ; the "trying to spawn crystal" flag
STZ $AF ; the "trying to spawn pendant" flag
.failed
RTL
;--------------------------------------------------------------------------------
@@ -173,22 +173,22 @@ CMP.w #$030E : BEQ .new ; opening dungeon map
CMP.w #$070E : BEQ .new ; opening overworld map
.original
-
lda [$00]
sta $7ec300, x
sta $7ec500, x
inc $00 : inc $00
inx #2
dey
bpl -
LDA [$00]
STA $7EC300, X
STA $7EC500, X
INC $00 : INC $00
INX #2
DEY
BPL -
RTL
.new
-
lda [$00]
sta $7ec500, x
inc $00 : inc $00
inx #2
dey
bpl -
LDA [$00]
STA $7EC500, X
INC $00 : INC $00
INX #2
DEY
BPL -
RTL
;--------------------------------------------------------------------------------

BIN
c2e3e.bin

Binary file not shown.

BIN
c2e3e.gfx

Binary file not shown.

View File

@@ -6,7 +6,8 @@
;--------------------------------------------------------------------------------
IncrementBombs:
LDA !BOMB_UPGRADES ; get bomb upgrades
!ADD.l StartingMaxBombs : DEC
!ADD.l StartingMaxBombs : BEQ + ; Skip if we can't have bombs
DEC
CMP !BOMB_CURRENT

View File

@@ -4,8 +4,7 @@
!HEART_REDRAW = "$7F5000"
LoadCatfishItemGFX:
LDA.l $1DE185 ; location randomizer writes catfish item to
JSL.l PrepDynamicTile
RTL
JML PrepDynamicTile
;--------------------------------------------------------------------------------
DrawThrownItem:
LDA $8A : CMP.b #$81 : BNE .catfish
@@ -19,8 +18,7 @@ DrawThrownItem:
LDA.l $1DE185 ; location randomizer writes catfish item to
.draw
JSL.l DrawDynamicTile
RTL
JML DrawDynamicTile
;--------------------------------------------------------------------------------
MarkThrownItem:
JSL Link_ReceiveItem ; thing we wrote over
@@ -28,12 +26,9 @@ MarkThrownItem:
LDA $8A : CMP.b #$81 : BNE .catfish
.zora
JSL.l ItemSet_ZoraKing
BRA .done
JML ItemSet_ZoraKing
.catfish
JSL.l ItemSet_Catfish
.done
RTL
JML ItemSet_Catfish
;--------------------------------------------------------------------------------

View File

@@ -66,8 +66,7 @@ endmacro
Clock_Test:
JSL.l Clock_Init
JSL.l Clock_IsSupported
RTL
JML.l Clock_IsSupported
;--------------------------------------------------------------------------------
; Clock_Init
@@ -112,11 +111,10 @@ Clock_IsSupported:
PHA : PHX
LDX #$00;
-
LDA $002800 : AND.b #$0F : CMP #$0F : BEQ + ; check for clock chip ready signal
CPX.b #$0E : !BLT ++ : CLC : BRA .done : ++ ; if we've read 14 bytes with no success, unset carry and exit
INX
BRA - : +
SEC ; found a clock chip
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
@@ -144,7 +142,7 @@ Clock_QuickStamp:
LDX #$00;
-
LDA $002800 : AND.b #$0F : CMP #$0F : BEQ .ready ; check for clock chip ready signal
CPX.b #$0E : !BLT ++ : CLC : BRL .done : ++ ; if we've read 14 bytes with no success, unset carry and exit
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
@@ -197,9 +195,9 @@ Multiply_A16Y8:
CLC
ADC $4216
LDY $4217
BCC carry_bit
BCC .carry_bit
INY
carry_bit:
.carry_bit:
XBA
REP #$20 ; set 16-bit accumulator
RTL
@@ -226,7 +224,7 @@ Clock_GetTime:
LDX #$00;
-
LDA $002800 : AND.b #$0F : CMP #$0F : BEQ .ready ; check for clock chip ready signal
CPX.b #$0E : !BLT ++ : CLC : BRL .done : ++ ; if we've read 14 bytes with no success, unset carry and exit
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

View File

@@ -8,16 +8,17 @@
macro DrawConstantNumber(digit1,digit2)
LDA.w #$2490+<digit1> : STA $7EC79A
LDA.w #$2490+<digit2> : STA $7EC79C
SEP #$20
endmacro
;--------------------------------------------------------------------------------
DrawDungeonCompassCounts:
LDX $1B : BNE + : RTL : + ; Skip if outdoors
LDX $040C : CPX.b #$FF : BNE + : RTL : + ; Skip if not in a dungeon
LDX $040C : CPX.b #$FF : BEQ .done ; Skip if not in a dungeon
CMP.w #$0002 : BEQ ++ ; if CompassMode==2, we don't check for the compass
LDA $7EF364 : AND.l .item_masks, X ; Load compass values to A, mask with dungeon item masks
BNE + : RTL : + ; skip if we don't have compass
BEQ .done ; skip if we don't have compass
++
JMP (CompassCountDungeonHandlers, X) : .return_spot
@@ -48,79 +49,66 @@ CompassCountDungeonHandlers: ; pointers to functions that handle dungeon-specifi
CompassCount_Escape:
%DrawConstantNumber(0,8)
SEP #$20
LDA $7EF434 : LSR #4
JMP DrawDungeonCompassCounts_return_spot
CompassCount_Eastern:
%DrawConstantNumber(0,6)
SEP #$20
LDA $7EF436 : AND.b #$07
JMP DrawDungeonCompassCounts_return_spot
CompassCount_Desert:
%DrawConstantNumber(0,6)
SEP #$20
LDA $7EF435 : LSR #5
JMP DrawDungeonCompassCounts_return_spot
CompassCount_Agah:
%DrawConstantNumber(0,2)
SEP #$20
LDA $7EF435 : AND.b #$02
LDA $7EF435 : AND.b #$03
JMP DrawDungeonCompassCounts_return_spot
CompassCount_Swamp:
%DrawConstantNumber(1,0)
SEP #$20
LDA $7EF439 : AND.b #$0F
JMP DrawDungeonCompassCounts_return_spot
CompassCount_PoD:
%DrawConstantNumber(1,4)
SEP #$20
LDA $7EF434 : AND.b #$0F
JMP DrawDungeonCompassCounts_return_spot
CompassCount_Mire:
%DrawConstantNumber(0,8)
SEP #$20
LDA $7EF438 : AND.b #$0F
JMP DrawDungeonCompassCounts_return_spot
CompassCount_Skull:
%DrawConstantNumber(0,8)
SEP #$20
LDA $7EF437 : LSR #4
JMP DrawDungeonCompassCounts_return_spot
CompassCount_Ice:
%DrawConstantNumber(0,8)
SEP #$20
LDA $7EF438 : LSR #4
JMP DrawDungeonCompassCounts_return_spot
CompassCount_Hera:
%DrawConstantNumber(0,6)
SEP #$20
LDA $7EF435 : AND.b #$1C : LSR #2
JMP DrawDungeonCompassCounts_return_spot
CompassCount_Thieves:
%DrawConstantNumber(0,8)
SEP #$20
LDA $7EF437 : AND.b #$0F
JMP DrawDungeonCompassCounts_return_spot
CompassCount_Trock:
%DrawConstantNumber(1,2)
SEP #$20
LDA $7EF439 : LSR #4
JMP DrawDungeonCompassCounts_return_spot
CompassCount_Gt:
%DrawConstantNumber(2,7)
SEP #$20
LDA $7EF436 : LSR #3
JMP DrawDungeonCompassCounts_return_spot

View File

@@ -192,7 +192,7 @@ XXTEA_Decode:
LDA.w !sum : !SUB.l CryptoDelta : STA.w !sum
LDA.w !sum+2 : SBC.l CryptoDelta+2 : STA.w !sum+2
DEC !rounds : BEQ + : BRL --- : + ; } while (--rounds);
DEC !rounds : BEQ + : JMP --- : + ; } while (--rounds);
PLB : PLP
RTL

View File

@@ -4,8 +4,7 @@
DarkWorldSaveFix:
LDA.b #$70 : PHA : PLB ; thing we wrote over - data bank change
JSL.l MasterSwordFollowerClear
JSL.l StatSaveCounter
RTL
JML.l StatSaveCounter
;--------------------------------------------------------------------------------
DoWorldFix:
LDA InvertedMode : BEQ +
@@ -14,12 +13,12 @@ DoWorldFix:
LDA.l Bugfix_MirrorlessSQToLW : BEQ .skip_mirror_check
LDA $7EF353 : BEQ .noMirror ; check if we have the mirror
.skip_mirror_check ; alt entrance point
LDA $7EF3C5 : CMP.b #$03 : !BLT .aga1Alive ; check if agahnim 1 is alive
BRA .done
.noMirror
LDA $7EF3C5 : CMP.b #$03 : BCS .done ; check if agahnim 1 is alive
.aga1Alive
LDA #$00 : STA $7EF3CA ; set flag to light world
LDA $7EF3CC : CMP #$07 : BNE + : LDA.b #$08 : STA $7EF3CC : + ; convert frog to dwarf
LDA #$00
.noMirror
STA $7EF3CA ; set flag to light world
LDA $7EF3CC : CMP #$07 : BNE .done : INC : STA $7EF3CC ; convert frog to dwarf
.done
RTL
;--------------------------------------------------------------------------------
@@ -29,8 +28,7 @@ SetDeathWorldChecked:
+
LDA $1B : BEQ .outdoors
LDA $040C : CMP #$FF : BNE .dungeon
LDA $A0 : BNE ++
LDA $A1 : BNE ++
LDA $A0 : ORA $A1 : BNE ++
LDA GanonPyramidRespawn : BNE .pyramid ; if flag is set, force respawn at pyramid on death to ganon
++
.outdoors
@@ -42,7 +40,7 @@ JMP DoWorldFix_skip_mirror_check
.pyramid
LDA #$40 : STA $7EF3CA ; set flag to dark world
LDA $7EF3CC : CMP #$08 : BNE + : LDA.b #$07 : STA $7EF3CC : + ; convert dwarf to frog
LDA $7EF3CC : CMP #$08 : BNE .done : DEC : STA $7EF3CC : + ; convert dwarf to frog
.done
RTL
;================================================================================
@@ -50,15 +48,13 @@ DoWorldFix_Inverted:
LDA.l Bugfix_MirrorlessSQToLW : BEQ .skip_mirror_check
LDA $7EF353 : BEQ .noMirror ; check if we have the mirror
.skip_mirror_check ; alt entrance point
LDA $7EF3C5 : CMP.b #$03 : !BLT .aga1Alive ; check if agahnim 1 is alive
BRA .done
LDA $7EF3C5 : CMP.b #$03 : BCS .done ; check if agahnim 1 is alive
.noMirror
.aga1Alive
LDA #$40 : STA $7EF3CA ; set flag to dark world
LDA $7EF3CC
CMP #$07 : BEQ .clear ; clear frog
CMP #$08 : BEQ .clear ; clear dwarf - consider flute implications
BRA .done
CMP #$07 : BNE .done ; clear frog
CMP #$08 : BNE .done ; clear dwarf - consider flute implications
.clear
LDA.b #$00 : STA $7EF3CC ; clear follower
.done
@@ -67,8 +63,7 @@ RTL
SetDeathWorldChecked_Inverted:
LDA $1B : BEQ .outdoors
LDA $040C : CMP #$FF : BNE .dungeon
LDA $A0 : BNE ++
LDA $A1 : BNE ++
LDA $A0 : ORA $A1 : BNE ++
LDA GanonPyramidRespawn : BNE .castle ; if flag is set, force respawn at pyramid on death to ganon
++
.outdoors
@@ -95,16 +90,15 @@ RTL
;--------------------------------------------------------------------------------
MasterSwordFollowerClear:
LDA $7EF3CC
CMP #$0E : BEQ .clear ; clear master sword follower
RTL
.clear
CMP #$0E : BNE .exit ; clear master sword follower
LDA.b #$00 : STA $7EF3CC ; clear follower
RTL
.exit
RTL
;--------------------------------------------------------------------------------
FixAgahnimFollowers:
LDA.b #$00 : STA $7EF3CC ; clear follower
JSL PrepDungeonExit ; thing we wrote over
RTL
JML PrepDungeonExit ; thing we wrote over
;--------------------------------------------------------------------------------
macro SetMinimum(base,filler,compare)
LDA.l <compare> : !SUB.l <base> : !BLT ?done
@@ -112,7 +106,7 @@ macro SetMinimum(base,filler,compare)
?done:
endmacro
RefreshRainAmmo:
LDA $7EF3C5 : CMP.b #$01 : BEQ + : RTL : + ; check if we're in rain state
LDA $7EF3C5 : CMP.b #$01 : BNE .done ; check if we're in rain state
.rain
LDA $7EF3C8
+ CMP.b #$03 : BNE + ; Uncle
@@ -137,14 +131,14 @@ RTL
!INFINITE_BOMBS = "$7F50C9"
!INFINITE_MAGIC = "$7F50CA"
SetEscapeAssist:
LDA $7EF3C5 : CMP.b #$01 : BNE .notrain ; check if we're in rain state
LDA $7EF3C5 : CMP.b #$01 : BNE .no_train ; check if we're in rain state
.rain
LDA.l EscapeAssist
BIT.b #$04 : BEQ + : STA !INFINITE_MAGIC : +
BIT.b #$02 : BEQ + : STA !INFINITE_BOMBS : +
BIT.b #$01 : BEQ + : STA !INFINITE_ARROWS : +
BRA ++
.notrain
.no_train ; choo choo
LDA.l EscapeAssist : BIT.b #$04 : BEQ + : LDA.b #$00 : STA !INFINITE_MAGIC : +
LDA.l EscapeAssist : BIT.b #$02 : BEQ + : LDA.b #$00 : STA !INFINITE_BOMBS : +
LDA.l EscapeAssist : BIT.b #$01 : BEQ + : LDA.b #$00 : STA !INFINITE_ARROWS : +
@@ -153,8 +147,8 @@ RTL
;--------------------------------------------------------------------------------
SetSilverBowMode:
LDA SilverArrowsUseRestriction : BEQ + ; fix bow type for restricted arrow mode
LDA $7EF340 : CMP.b #$3 : !BLT +
!SUB.b #$02 : STA $7EF340
LDA $7EF340 : CMP.b #$3 : BCC +
SBC.b #$02 : STA $7EF340
+
RTL
;================================================================================

View File

@@ -82,14 +82,13 @@ macro LoadDialogAddress(address)
PHB : PHK : PLB
SEP #$20 ; set 8-bit accumulator
REP #$10 ; set 16-bit index registers
LDA $00 : PHA
LDA $01 : PHA
PEI ($00)
LDA $02 : PHA
STZ $1CF0 : STZ $1CF1 ; reset decompression buffer
LDA.b #$01 : STA $7F5035 ; set flag
%CopyDialog(<address>)
PLA : STA $02
PLA : STA $01
REP #$20
PLA : STA $00
PLB
PLP
@@ -132,61 +131,60 @@ FreeDungeonItemNotice:
PHB : PHK : PLB
SEP #$20 ; set 8-bit accumulator
REP #$10 ; set 16-bit index registers
LDA $00 : PHA
LDA $01 : PHA
PEI ($00)
LDA $02 : PHA
;--------------------------------
LDA.l FreeItemText : BNE + : BRL .skip : +
LDA.l FreeItemText : BNE + : JMP .skip : +
LDA #$00 : STA $7F5010 ; initialize scratch
LDA.l FreeItemText : AND.b #$01 : CMP.b #$01 : BNE + ; show message for general small key
LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for general small key
LDA !ITEM_TEMPORARY : CMP.b #$24 : BNE + ; general small key
%CopyDialog(Notice_SmallKeyOf)
LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER
%CopyDialog(Notice_Self)
BRL .done
+ : LDA.l FreeItemText : AND.b #$02 : CMP.b #$02 : BNE + ; show message for general compass
JMP .done
+ : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for general compass
LDA !ITEM_TEMPORARY : CMP.b #$25 : BNE + ; general compass
%CopyDialog(Notice_CompassOf)
LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER
%CopyDialog(Notice_Self)
BRL .done
+ : LDA.l FreeItemText : AND.b #$04 : CMP.b #$04 : BNE + ; show message for general map
JMP .done
+ : LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for general map
LDA !ITEM_TEMPORARY : CMP.b #$33 : BNE + ; general map
%CopyDialog(Notice_MapOf)
LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER
%CopyDialog(Notice_Self)
BRL .done
+ : LDA.l FreeItemText : AND.b #$08 : CMP.b #$08 : BNE + ; show message for general big key
JMP .done
+ : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for general big key
LDA !ITEM_TEMPORARY : CMP.b #$32 : BNE + ; general big key
%CopyDialog(Notice_BigKeyOf)
LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER
%CopyDialog(Notice_Self)
BRL .done
JMP .done
+
LDA.l FreeItemText : AND.b #$04 : CMP.b #$04 : BNE + ; show message for dungeon map
LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for dungeon map
LDA !ITEM_TEMPORARY : AND.b #$F0 ; looking at high bits only
CMP.b #$70 : BNE + ; map of...
%CopyDialog(Notice_MapOf)
BRL .dungeon
+ : LDA.l FreeItemText : AND.b #$02 : CMP.b #$02 : BNE + ; show message for dungeon compass
JMP .dungeon
+ : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for dungeon compass
LDA !ITEM_TEMPORARY : AND.b #$F0 : CMP.b #$80 : BNE + ; compass of...
%CopyDialog(Notice_CompassOf)
BRL .dungeon
+ : LDA.l FreeItemText : AND.b #$08 : CMP.b #$08 : BNE + ; show message for dungeon big key
JMP .dungeon
+ : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for dungeon big key
LDA !ITEM_TEMPORARY : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of...
%CopyDialog(Notice_BigKeyOf)
BRA .dungeon
+ : LDA.l FreeItemText : AND.b #$01 : CMP.b #$01 : BNE + ; show message for dungeon small key
+ : LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for dungeon small key
LDA !ITEM_TEMPORARY : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of...
LDA !ITEM_TEMPORARY : CMP.b #$AF : BNE ++ : BRL .skip : ++
LDA !ITEM_TEMPORARY : CMP.b #$AF : BNE ++ : JMP .skip : ++
%CopyDialog(Notice_SmallKeyOf)
PLA : AND.b #$0F : STA $7F5020 : LDA.b #$0F : !SUB $7F5020 : PHA
LDA #$01 : STA $7F5010 ; set up a flip for small keys
BRA .dungeon
+
BRL .skip ; it's not something we are going to give a notice for
JMP .skip ; it's not something we are going to give a notice for
.dungeon
LDA !OFFSET_RETURN : DEC #2 : STA !OFFSET_POINTER
@@ -199,31 +197,31 @@ FreeDungeonItemNotice:
+
LDA $7F5011
CMP.b #$00 : BNE + ; ...light world
%CopyDialog(Notice_LightWorld) : BRL .done
%CopyDialog(Notice_LightWorld) : JMP .done
+ : CMP.b #$01 : BNE + ; ...dark world
%CopyDialog(Notice_DarkWorld) : BRL .done
%CopyDialog(Notice_DarkWorld) : JMP .done
+ : CMP.b #$02 : BNE + ; ...ganon's tower
%CopyDialog(Notice_GTower) : BRL .done
%CopyDialog(Notice_GTower) : JMP .done
+ : CMP.b #$03 : BNE + ; ...turtle rock
%CopyDialog(Notice_TRock) : BRL .done
%CopyDialog(Notice_TRock) : JMP .done
+ : CMP.b #$04 : BNE + ; ...thieves' town
%CopyDialog(Notice_Thieves) : BRL .done
%CopyDialog(Notice_Thieves) : JMP .done
+ : CMP.b #$05 : BNE + ; ...tower of hera
%CopyDialog(Notice_Hera) : BRL .done
%CopyDialog(Notice_Hera) : JMP .done
+ : CMP.b #$06 : BNE + ; ...ice palace
%CopyDialog(Notice_Ice) : BRL .done
%CopyDialog(Notice_Ice) : JMP .done
+ : CMP.b #$07 : BNE + ; ...skull woods
%CopyDialog(Notice_Skull) : BRL .done
%CopyDialog(Notice_Skull) : JMP .done
+ : CMP.b #$08 : BNE + ; ...misery mire
%CopyDialog(Notice_Mire) : BRL .done
%CopyDialog(Notice_Mire) : JMP .done
+ : CMP.b #$09 : BNE + ; ...dark palace
%CopyDialog(Notice_PoD) : BRL .done
%CopyDialog(Notice_PoD) : JMP .done
+ : CMP.b #$0A : BNE + ; ...swamp palace
%CopyDialog(Notice_Swamp) : BRL .done
%CopyDialog(Notice_Swamp) : JMP .done
+ : CMP.b #$0B : BNE + ; ...agahnim's tower
%CopyDialog(Notice_AgaTower) : BRL .done
%CopyDialog(Notice_AgaTower) : JMP .done
+ : CMP.b #$0C : BNE + ; ...desert palace
%CopyDialog(Notice_Desert) : BRL .done
%CopyDialog(Notice_Desert) : JMP .done
+ : CMP.b #$0D : BNE + ; ...eastern palace
%CopyDialog(Notice_Eastern) : BRA .done
+ : CMP.b #$0E : BNE + ; ...hyrule castle
@@ -235,27 +233,19 @@ FreeDungeonItemNotice:
STZ $1CF0 : STZ $1CF1 ; reset decompression buffer
LDA.b #$01 : STA $7F5035 ; set alternate dialog flag
LDA.b #$01 : STA $7F509F
STA $7F509F
;--------------------------------
PLA : STA $02
PLA : STA $01
PLA : STA $00
PLB
PLP
PLY : PLX : PLA
;JSL.l Main_ShowTextMessage_Alt
RTL
.skip
;--------------------------------
PLA : STA $02
PLA : STA $01
REP #$20
PLA : STA $00
PLB
PLP
PLY : PLX : PLA
;JSL.l Main_ShowTextMessage_Alt ; .skip can be here so long as this line remains commented out
RTL
;--------------------------------------------------------------------------------
DialogResetSelectionIndex:
JSL.l Attract_DecompressStoryGfx ; what we wrote over
@@ -264,11 +254,9 @@ RTL
;--------------------------------------------------------------------------------
DialogItemReceive:
BCS .noMessage ; if doubling the item value overflowed it must be a rando item
CPY #$98 : !BLT + ;if the item is $4C or greater it must be a rando item
.noMessage
LDA.w #$FFFF
BRA .done
+
LDA.w #$FFFF
CPY #$98 : BCS .done ;if the item is $4C or greater it must be a rando item
LDA.w Ancilla_ReceiveItem_item_messages, Y
.done
CMP.w #$FFFF
@@ -289,12 +277,13 @@ RTL
RTL
;--------------------------------------------------------------------------------
DialogGanon1:
JSL.l CheckGanonVulnerability : BCS +
REP #$20 : LDA.w #$018C : STA $1CF0 : SEP #$20
BRA ++
+
REP #$20 : LDA.w #$016D : STA $1CF0 : SEP #$20
++
JSL.l CheckGanonVulnerability
REP #$20
LDA.w #$018C
BCC +
LDA.w #$016D
+ STA $1CF0
SEP #$20
JSL.l Sprite_ShowMessageMinimal_Alt
RTL
;--------------------------------------------------------------------------------
@@ -307,28 +296,30 @@ RTL
; s = silver arrow bow
; p = 2nd progressive bow
DialogGanon2:
JSL.l CheckGanonVulnerability : BCS +
REP #$20 : LDA.w #$018D : STA $1CF0 : SEP #$20
BRA ++
JSL.l CheckGanonVulnerability
REP #$20
BCS +
LDA.w #$018D : BRA ++
+
LDA.l $7EF38E : AND #$80 : BNE + ; branch if bow
REP #$20 : LDA.w #$0192 : STA $1CF0 : SEP #$20 ; no bow
BRA ++
LDA.l $7EF38E
BIT.w #$0080 : BNE + ; branch if bow
LDA.w #$0192 : BRA ++
+
LDA.l $7EF38E : AND #$40 : BEQ + ; branch if no silvers
REP #$20 : LDA.w #$0195 : STA $1CF0 : SEP #$20 ;has silvers
BRA ++
BIT.w #$0040 : BEQ + ; branch if no silvers
LDA.w #$0195 : BRA ++
+
LDA.l $7EF38E : AND #$20 : BNE + ; branch if p bow
REP #$20 : LDA.w #$0194 : STA $1CF0 : SEP #$20 ; bow, no-silvers, no-p-bow
BRA ++
BIT.w #$0020 : BNE + ; branch if p bow
LDA.w #$0194 : BRA ++
+
LDA.l $7EF38E : AND #$80 : BEQ + ; branch if no bow
REP #$20 : LDA.w #$0193 : STA $1CF0 : SEP #$20 ; bow, no-silvers, p-bow
BRA ++
BIT.w #$0080 : BEQ + ; branch if no bow
LDA.w #$0193 : BRA ++
+
REP #$20 : LDA.w #$016E : STA $1CF0 : SEP #$20 ; both bow and no bow. impossible.
LDA.w #$016E
++
STA $1CF0
SEP #$20
JSL.l Sprite_ShowMessageMinimal_Alt
RTL
;--------------------------------------------------------------------------------
@@ -336,21 +327,20 @@ DialogEtherTablet:
PHA
LDA $0202 : CMP.b #$0F : BEQ + ; Show normal text if book is not equipped
-
PLA : JSL Sprite_ShowMessageUnconditional ; Wacky Hylian Text
RTL
PLA : JML Sprite_ShowMessageUnconditional ; Wacky Hylian Text
+
BIT $F4 : BVC - ; Show normal text if Y is not pressed
LDA.l AllowHammerTablets : BEQ ++
LDA $7EF34B : BEQ .yesText : BRA .noText
++
LDA $7EF359 : CMP.b #$FF : BEQ .yesText : CMP.b #$02 : !BGE .noText
LDA $7EF359 : CMP.b #$FF : BEQ .yesText : CMP.b #$02 : BCS .noText
;++
.yesText
PLA
LDA.b #$0c
LDA.b #$0C
LDY.b #$01
JSL Sprite_ShowMessageUnconditional ; Text From MSPedestalText (tables.asm)
RTL
JML Sprite_ShowMessageUnconditional ; Text From MSPedestalText (tables.asm)
.noText
PLA
RTL
@@ -359,8 +349,7 @@ DialogBombosTablet:
PHA
LDA $0202 : CMP.b #$0F : BEQ + ; Show normal text if book is not equipped
-
PLA : JSL Sprite_ShowMessageUnconditional ; Wacky Hylian Text
RTL
PLA : JML Sprite_ShowMessageUnconditional ; Wacky Hylian Text
+
BIT $F4 : BVC - ; Show normal text if Y is not pressed
LDA.l AllowHammerTablets : BEQ ++
@@ -372,8 +361,8 @@ RTL
PLA
LDA.b #$0D
LDY.b #$01
JSL Sprite_ShowMessageUnconditional ; Text From MSPedestalText (tables.asm)
RTL
JML Sprite_ShowMessageUnconditional ; Text From MSPedestalText (tables.asm)
.noText
PLA
RTL
@@ -382,19 +371,17 @@ DialogSahasrahla:
LDA.l $7EF374 : AND #$04 : BEQ + ;Check if player has green pendant
LDA.b #$2F
LDY.b #$00
JSL.l Sprite_ShowMessageUnconditional
JML Sprite_ShowMessageUnconditional
+
RTL
;--------------------------------------------------------------------------------
DialogBombShopGuy:
LDA.l $7EF37A : AND #$05 : CMP #$05 : BEQ + ;Check if player has crystals 5 & 6
LDA.b #$15
LDY.b #$01
JSL.l Sprite_ShowMessageUnconditional
RTL
LDY.b #$15
LDA.l $7EF37A : AND #$05 : CMP #$05 : BNE + ;Check if player has crystals 5 & 6
INY ; from 15 to 16
+
LDA.b #$16
LDY.b #$01
TYA
LDY.b #$01
JSL.l Sprite_ShowMessageUnconditional
RTL
;--------------------------------------------------------------------------------
@@ -405,26 +392,25 @@ Sprite_ShowMessageMinimal_Alt:
STZ $11
PHX : PHY
LDA.b $00 : PHA
LDA.b $01 : PHA
PEA ($00)
LDA.b $02 : PHA
LDA.b #$1C : STA.b $02
REP #$30
LDA.w $1CF0 : ASL : TAX
LDA.l $7f71c0, X
LDA.l $7F71C0, X
STA.b $00
SEP #$30
LDY.b #$00
LDA [$00], Y : CMP.b #$fe : BNE +
INY : LDA [$00], Y : CMP.b #$6e : BNE +
LDA [$00], Y : CMP.b #$FE : BNE +
INY : LDA [$00], Y : CMP.b #$6E : BNE +
INY : LDA [$00], Y : : BNE +
INY : LDA [$00], Y : CMP.b #$fe : BNE +
INY : LDA [$00], Y : CMP.b #$6b : BNE +
INY : LDA [$00], Y : CMP.b #$FE : BNE +
INY : LDA [$00], Y : CMP.b #$6B : BNE +
INY : LDA [$00], Y : CMP.b #$04 : BNE +
STZ $1CE8
BRL .end
JMP .end
+
STZ $0223 ; Otherwise set it so we are in text mode.

View File

@@ -6,7 +6,7 @@
; Filtered Joypad 1 Register: [BYST | udlr] [AXLR | ????]
!INVERT_DPAD = "$7F50CB"
InvertDPad:
LDA !INVERT_DPAD : BNE + : BRL .normal : +
LDA !INVERT_DPAD : BNE + : JMP .normal : +
DEC : BEQ .dpadOnly
DEC : BEQ .buttonsOnly
DEC : BEQ .invertBoth

View File

@@ -3,7 +3,7 @@
;--------------------------------------------------------------------------------
DropSafeDungeon:
LDA $040C : CMP #$08 : BEQ +
LDA $01C6FC, X : JSL Sprite_SpawnFallingItem
LDA $01C6FC, X : JML Sprite_SpawnFallingItem
+
RTL
;--------------------------------------------------------------------------------

View File

@@ -3,21 +3,14 @@
; make sure bats always load LW stats
;--------------------------------------------------------------------------------
NewBatInit:
;check if map id == 240 or 241
LDA $A0 : CMP #$F0 : BNE + ;oldman cave1
BRA .light_world
+
CMP #$F1 : BNE + ;oldman cave2
BRA .light_world
+
CMP #$B0 : BNE + ;agahnim statue keese
BRA .light_world
+
CMP #$D0 : BNE + ;agahnim darkmaze
BRA .light_world
+
CPY #$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 #$85 : STA $0CD2, X
LDA.b #$04 : STA $0E50, X
RTL

View File

@@ -4,9 +4,7 @@
;--------------------------------------------------------------------------------
LockAgahnimDoors:
LDA.l AgahnimDoorStyle : AND.w #$00FF
BNE +
;#$0 = Never Locked
LDA.w #$0000 : RTL
BEQ .exit ; don't need to load 0, because we'd have it if we reached here
+ : CMP.w #$0001 : BNE +
LDA $7EF3C5 : AND.w #$000F : CMP.w #$0002 : !BGE .unlock ; if we rescued zelda, skip
JSR.w LockAgahnimDoorsCore : RTL
@@ -37,7 +35,7 @@ LockAgahnimDoors:
.unlock
LDA.w #$0000 ; fallback to never locked
.exit
RTL
;--------------------------------------------------------------------------------
LockAgahnimDoorsCore:
@@ -72,7 +70,7 @@ AllowStartFromSingleEntranceCave:
LDA.l StartingAreaExitOffset, X
BNE +
BRL .done
JMP .done
+
DEC
@@ -204,14 +202,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
PLA
PLA
BIT $8A : BVS ++ ; and in the light world
STZ $04C6 ; skip it.
LDA #$00
RTL
+
PLA
STA $02E4 ;what we wrote over
++ STA $02E4 ;what we wrote over
STA $0FC1 ;what we wrote over
STA $0710 ;what we wrote over
RTL

View File

@@ -11,8 +11,7 @@ OnPrepFileSelect:
RTL
+
JSL.l LoadAlphabetTilemap
JSL.l LoadFullItemTiles
RTL
JML.l LoadFullItemTiles
;--------------------------------------------------------------------------------
OnDrawHud:
JSL.l DrawChallengeTimer ; this has to come before NewDrawHud because the timer overwrites the compass counter
@@ -77,7 +76,12 @@ RTL
;--------------------------------------------------------------------------------
OnAga2Defeated:
JSL.l Dungeon_SaveRoomData_justKeys ; thing we wrote over, make sure this is first
JSL.l IncrementAgahnim2Sword
JML.l IncrementAgahnim2Sword
;--------------------------------------------------------------------------------
OnFileCreation:
TAX ; what we wrote over
LDA StartingEquipment+$4C : STA $700340+$4C ; copy starting equipment swaps to file select screen
LDA StartingEquipment+$4E : STA $700340+$4E
RTL
;--------------------------------------------------------------------------------
!RNG_ITEM_LOCK_IN = "$7F5090"
@@ -85,7 +89,7 @@ OnFileLoad:
REP #$10 ; set 16 bit index registers
JSL.l EnableForceBlank ; what we wrote over
LDA.b #$07 : STA $210c ; Restore screen 3 to normal tile area
LDA.b #$07 : STA $210C ; Restore screen 3 to normal tile area
LDA !FRESH_FILE_MARKER : BNE +
JSL.l OnNewFile
@@ -147,8 +151,16 @@ OnNewFile:
+
LDA StartingSword : STA $7EF359 ; set starting sword type
LDA !INVENTORY_SWAP : STA $70038C ; copy starting equipment swaps to file select screen
LDA !INVENTORY_SWAP_2 : STA $70038E
; reset some values on new file that are otherwise only reset on hard reset
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 $7EC011 ; mosaic
JSL InitRNGPointerTable ; boss RNG
PLP : PLX
RTL
;--------------------------------------------------------------------------------
@@ -161,8 +173,8 @@ RTL
;--------------------------------------------------------------------------------
OnLinkDamaged:
JSL.l FlipperKill
JSL.l OHKOTimer
RTL
JML.l OHKOTimer
;--------------------------------------------------------------------------------
OnEnterWater:
JSL.l RegisterWaterEntryScreen
@@ -177,8 +189,8 @@ OnLinkDamagedFromPit:
RTL
;--------------------------------------------------------------------------------
OnLinkDamagedFromPitOutdoors:
JSL.l OHKOTimer ; make sure this is last
RTL
JML.l OHKOTimer ; make sure this is last
;--------------------------------------------------------------------------------
!RNG_ITEM_LOCK_IN = "$7F5090"
OnOWTransition:
@@ -201,16 +213,16 @@ OnLoadDuckMap:
RTL
+
LDA.b #$00 : STA !DARK_DUCK_TEMP
JSL OverworldMap_DarkWorldTilemap
RTL
JML OverworldMap_DarkWorldTilemap
;--------------------------------------------------------------------------------
PreItemGet:
LDA.b #$01 : STA !ITEM_BUSY ; mark item as busy
RTL
;--------------------------------------------------------------------------------
PostItemGet:
JSL.l MaybeWriteSRAMTrace
RTL
JML.l MaybeWriteSRAMTrace
;--------------------------------------------------------------------------------
PostItemAnimation:
LDA.b #$00 : STA !ITEM_BUSY ; mark item as finished

View File

@@ -27,8 +27,7 @@ RTL
FairyPond_Init:
LDA.l Restrict_Ponds : BNE +
LDA.b #$48
JSL.l Sprite_ShowMessageFromPlayerContact
RTL
JML.l Sprite_ShowMessageFromPlayerContact
+
PHY : JSL.l Sprite_CheckDamageToPlayerSameLayerLong : BCC +
LDA $7EF35C : CMP.b #$02 : BNE ++ : LDA.b #$1C : PHA : BRA .emptyBottle : ++
@@ -56,8 +55,8 @@ RTL
;--------------------------------------------------------------------------------
HappinessPond_Check:
LDA $A0 : CMP.b #$15 ;what we wrote over
PHP
BNE .done
PHP
LDA.b #$72
JSL Sprite_SpawnDynamically
@@ -83,6 +82,6 @@ HappinessPond_Check:
STZ $0DD0, X ; self terminate
.done
PLP
.done
RTL

View File

@@ -113,7 +113,7 @@ JMP DrawItem
DrawPlayerFile:
LDA $1A : AND.w #$0001 : BEQ + : BRA .normal : +
LDA $1A : AND.w #$0001 : BNE .normal
JSR DrawPlayerFileShared
INC $0710 ; Suppress animated tile updates for this frame
@@ -633,15 +633,15 @@ AltBufferTable:
STA $1104 ;file 2 top row
STA $1144 ;file 2 bottom row
STA $1184 ;gap row top
STA $11c4 ;gap row bottom
STA $11C4 ;gap row bottom
STA $1204 ;file 3 top row
STA $1244 ;file 3 bottom row
STA $1284 ;extra gap row top
STA $12c4 ;extra gap row bottom
STA $12C4 ;extra gap row bottom
STA $1304 ;extra gap row top
STA $1344 ;extra gap row bottom
STA $1384 ;extra gap row top
STA $13c4 ;extra gap row bottom
STA $13C4 ;extra gap row bottom
; Set last packet marker
LDA.w #$00FF : STA $1402

View File

@@ -7,8 +7,7 @@ GetMagicBatItem:
CMP.b #$FF : BEQ .normalLogic
TAY
STZ $02E9 ; 0 = Receiving item from an NPC or message
JSL.l Link_ReceiveItem
RTL
JML.l Link_ReceiveItem
.normalLogic
LDA HalfMagic
STA $7EF37B

View File

@@ -24,7 +24,7 @@ HeartPieceGet:
JSL.l $0791B3 ; Player_HaltDashAttackLong
JSL.l Link_ReceiveItem
CLC ; return false
BRL .done ; finished
JMP .done ; finished
.unfinished_heart
SEC ; return true
@@ -54,7 +54,7 @@ DrawHeartPieceGFX:
PHA : PHY
LDA !REDRAW : BEQ .skipInit ; skip init if already ready
JSL.l HeartPieceSpritePrep
BRL .done ; don't draw on the init frame
JMP .done ; don't draw on the init frame
.skipInit
LDA $0E80, X ; Retrieve stored item type
@@ -177,7 +177,7 @@ LoadHeartPieceRoomValue:
LDA $1B : BEQ .outdoors ; check if we're indoors or outdoors
.indoors
JSL.l LoadIndoorValue
BRL .done
JMP .done
.outdoors
JSL.l LoadOutdoorValue
.done
@@ -225,30 +225,30 @@ LoadIndoorValue:
LDA $A0 ; these are all decimal because i got them that way
CMP.w #225 : BNE +
%GetPossiblyEncryptedItem(HeartPiece_Forest_Thieves, HeartPieceIndoorValues)
BRL .done
JMP .done
+ CMP.w #226 : BNE +
%GetPossiblyEncryptedItem(HeartPiece_Lumberjack_Tree, HeartPieceIndoorValues)
BRL .done
JMP .done
+ CMP.w #234 : BNE +
%GetPossiblyEncryptedItem(HeartPiece_Spectacle_Cave, HeartPieceIndoorValues)
BRL .done
JMP .done
+ CMP.w #283 : BNE +
LDA $22 : XBA : AND.w #$0001 ; figure out where link is
BNE ++
%GetPossiblyEncryptedItem(HeartPiece_Circle_Bushes, HeartPieceIndoorValues)
BRL .done
JMP .done
++
%GetPossiblyEncryptedItem(HeartPiece_Graveyard_Warp, HeartPieceIndoorValues)
BRL .done
JMP .done
+ CMP.w #294 : BNE +
%GetPossiblyEncryptedItem(HeartPiece_Mire_Warp, HeartPieceIndoorValues)
BRL .done
JMP .done
+ CMP.w #295 : BNE +
%GetPossiblyEncryptedItem(HeartPiece_Smith_Pegs, HeartPieceIndoorValues)
BRL .done
JMP .done
+ CMP.w #135 : BNE +
LDA StandingKey_Hera
BRL .done
JMP .done
+
LDA.w #$0017 ; default to a normal hp
.done
@@ -271,47 +271,47 @@ LoadOutdoorValue:
CMP.w #$03 : BNE +
LDA $22 : CMP.w #1890 : !BLT ++
%GetPossiblyEncryptedItem(HeartPiece_Spectacle, HeartPieceOutdoorValues)
BRL .done
JMP .done
++
%GetPossiblyEncryptedItem(EtherItem, SpriteItemValues)
BRL .done
JMP .done
+ CMP.w #$05 : BNE +
%GetPossiblyEncryptedItem(HeartPiece_Mountain_Warp, HeartPieceOutdoorValues)
BRL .done
JMP .done
+ CMP.w #$28 : BNE +
%GetPossiblyEncryptedItem(HeartPiece_Maze, HeartPieceOutdoorValues)
BRL .done
JMP .done
+ CMP.w #$2A : BNE +
%GetPossiblyEncryptedItem(HauntedGroveItem, HeartPieceOutdoorValues)
BRL .done
JMP .done
+ CMP.w #$30 : BNE +
LDA $22 : CMP.w #512 : !BGE ++
%GetPossiblyEncryptedItem(HeartPiece_Desert, HeartPieceOutdoorValues)
BRL .done
JMP .done
++
%GetPossiblyEncryptedItem(BombosItem, SpriteItemValues)
BRL .done
JMP .done
+ CMP.w #$35 : BNE +
%GetPossiblyEncryptedItem(HeartPiece_Lake, HeartPieceOutdoorValues)
BRL .done
JMP .done
+ CMP.w #$3B : BNE +
%GetPossiblyEncryptedItem(HeartPiece_Swamp, HeartPieceOutdoorValues)
BRL .done
JMP .done
+ CMP.w #$42 : BNE +
%GetPossiblyEncryptedItem(HeartPiece_Cliffside, HeartPieceOutdoorValues)
BRL .done
JMP .done
+ CMP.w #$4A : BNE +
%GetPossiblyEncryptedItem(HeartPiece_Cliffside, HeartPieceOutdoorValues)
BRL .done
JMP .done
+ CMP.w #$5B : BNE +
%GetPossiblyEncryptedItem(HeartPiece_Pyramid, HeartPieceOutdoorValues)
BRL .done
JMP .done
+ CMP.w #$68 : BNE +
%GetPossiblyEncryptedItem(HeartPiece_Digging, HeartPieceOutdoorValues)
BRL .done
JMP .done
+ CMP.w #$81 : BNE +
%GetPossiblyEncryptedItem(HeartPiece_Zora, HeartPieceOutdoorValues)
BRL .done
JMP .done
+
LDA.w #$0017 ; default to a normal hp
.done
@@ -338,34 +338,34 @@ LoadBossValue:
LDA $A0 ; these are all decimal because i got them that way
CMP.w #200 : BNE +
%GetPossiblyEncryptedItem(HeartContainer_ArmosKnights, HeartContainerBossValues)
BRL .done
JMP .done
+ CMP.w #51 : BNE +
%GetPossiblyEncryptedItem(HeartContainer_Lanmolas, HeartContainerBossValues)
BRL .done
JMP .done
+ CMP.w #7 : BNE +
%GetPossiblyEncryptedItem(HeartContainer_Moldorm, HeartContainerBossValues)
BRL .done
JMP .done
+ CMP.w #90 : BNE +
%GetPossiblyEncryptedItem(HeartContainer_HelmasaurKing, HeartContainerBossValues)
BRL .done
JMP .done
+ CMP.w #6 : BNE +
%GetPossiblyEncryptedItem(HeartContainer_Arrghus, HeartContainerBossValues)
BRL .done
JMP .done
+ CMP.w #41 : BNE +
%GetPossiblyEncryptedItem(HeartContainer_Mothula, HeartContainerBossValues)
BRL .done
JMP .done
+ CMP.w #172 : BNE +
%GetPossiblyEncryptedItem(HeartContainer_Blind, HeartContainerBossValues)
BRL .done
JMP .done
+ CMP.w #222 : BNE +
%GetPossiblyEncryptedItem(HeartContainer_Kholdstare, HeartContainerBossValues)
BRL .done
JMP .done
+ CMP.w #144 : BNE +
%GetPossiblyEncryptedItem(HeartContainer_Vitreous, HeartContainerBossValues)
BRL .done
JMP .done
+ CMP.w #164 : BNE +
%GetPossiblyEncryptedItem(HeartContainer_Trinexx, HeartContainerBossValues)
BRL .done
JMP .done
+
LDA.w #$003E ; default to a normal boss heart
.done
@@ -379,30 +379,19 @@ CheckIfBossRoom:
;--------------------------------------------------------------------------------
REP #$20 ; set 16-bit accumulator
LDA $A0 ; these are all decimal because i got them that way
CMP.w #200 : BNE +
SEC : BRL .done
+ CMP.w #51 : BNE +
SEC : BRL .done
+ CMP.w #7 : BNE +
SEC : BRL .done
+ CMP.w #90 : BNE +
SEC : BRL .done
+ CMP.w #6 : BNE +
SEC : BRL .done
+ CMP.w #41 : BNE +
SEC : BRL .done
+ CMP.w #172 : BNE +
SEC : BRL .done
+ CMP.w #222 : BNE +
SEC : BRL .done
+ CMP.w #144 : BNE +
SEC : BRL .done
+ CMP.w #164 : BNE +
SEC : BRL .done
+
CMP.w #200 : BEQ .done
CMP.w #51 : BEQ .done
CMP.w #7 : BEQ .done
CMP.w #90 : BEQ .done
CMP.w #6 : BEQ .done
CMP.w #41 : BEQ .done
CMP.w #172 : BEQ .done
CMP.w #222 : BEQ .done
CMP.w #144 : BEQ .done
CMP.w #164 : BEQ .done
CLC
.done
SEP #$20 ; set 8-bit accumulator
+ SEP #$20 ; set 8-bit accumulator
RTL
;--------------------------------------------------------------------------------
;#200 - Eastern Palace - Armos Knights

View File

@@ -261,7 +261,9 @@ org $0CCE85 ; <- Bank0C.asm : 1953 (LDA $C8 : ASL A : INC #2 : STA $701FFE)
NOP #4
;--------------------------------------------------------------------------------
org $0CDB4C ; <- Bank0C.asm : 3655 (LDA $C8 : ASL A : INC #2 : STA $701FFE : TAX)
NOP #4
JSL OnFileCreation
NOP
;Additionally, display inventory swap starting equipment on file select
;--------------------------------------------------------------------------------
org $09F5EA ; <- module_death.asm : 510 (LDA $701FFE : TAX : DEX #2)
LDA.w #$0002 : NOP
@@ -364,6 +366,32 @@ NOP #19 ;23 bytes removed with the JSL
;--------------------------------------------------------------------------------
org $04E7AE ; <- bank0E.asm : 4230 (LDA $7EF287 : AND.w #$0020)
JSL.l TurtleRockPegSolved
org $04E7B9 ; <- bank0E.asm : 4237 (LDX $04C8)
JMP.w TurtleRockTrollPegs
TurtleRockPegCheck:
org $04E7C9
TurtleRockPegSuccess:
org $04E7F5
TurtleRockPegFail:
org $04E96F
PegProbability:
db $00 ; Probability out of 255. 0 = Vanilla behavior
TurtleRockTrollPegs:
SEP #$20
LDX.w $04C8 : CPX.w #$FFFF : BEQ .vanilla
JSL.l GetRandomInt
LDA.l PegProbability : BEQ .vanilla : CMP.l $7E0FA1
REP #$20 : !BGE .succeed
.fail
JMP.w TurtleRockPegFail
.succeed
JMP.w TurtleRockPegSuccess
.vanilla
REP #$20 : JMP.w TurtleRockPegCheck
;--------------------------------------------------------------------------------
org $1BBD05 ; <- bank1B.asm : 261 (TYA : STA $00) ; hook starts at the STA
JML.l PreventEnterOnBonk
@@ -1614,7 +1642,7 @@ JSL.l ShowDungeonItems : NOP #5
;================================================================================
org $0DEA5F ; <- 6EA5F - equipment.asm:1679 - (SEP #$30)
;NOP #5
;BRL .skipCrystalInit
;JMP .skipCrystalInit
;org $0DEAA4 ; <- 6EAA4 - equipment.asm:1706 - (LDA $7EF37A : AND.w #$0001)
;.skipCrystalInit
;================================================================================
@@ -2523,6 +2551,12 @@ CheckIfReading:
RTS
;================================================================================
org $0DB4CA : db $40, $40 ; fire bar statis
org $0DB4A9 : db $50, $50, $6E, $6E ; roller statis
org $0DB4B2 : db $40, $40, $40, $40 ; cannon statis
org $0DB4C3 : db $C0 ; anti fairy statis
org $0DB516 : db $40 ; chain chomp statis
;--------------------------------------------------------------------------------
; Keep Firebar Damage on Same Layer
;--------------------------------------------------------------------------------

View File

@@ -9,7 +9,7 @@ ShouldOverrideFileLoad:
.no
CLC : RTS
.yes
SEC : RTS
RTS
BgGraphicsLoading:
; Instructions overwritten

View File

@@ -56,5 +56,6 @@ RTL
Init_PostRAMClear:
JSL MSUInit
JSL InitRNGPointerTable
JML $00D463 ; The original target of the jump table that we hijacked

View File

@@ -60,7 +60,7 @@ RTL
LDA !INVENTORY_SWAP : AND #$C0 : CMP #$C0 : BNE .errorJump ; make sure we have both boomerangs
LDA $7EF341 : EOR #$03 : STA $7EF341 ; swap blue & red boomerang
LDA.b #$20 : STA $012F ; menu select sound
BRL .captured
JMP .captured
+ CMP #$01 : BNE + ; bow
LDA !INVENTORY_SWAP_2 : AND #$C0 : CMP #$C0 : BNE .errorJump ; make sure we have both bows
PHX : LDX.b #$00 ; scan ancilla table for arrows
@@ -77,7 +77,7 @@ RTL
++
LDA $7EF340 : !SUB #$01 : EOR #$02 : !ADD #$01 : STA $7EF340 ; swap bows
LDA.b #$20 : STA $012F ; menu select sound
BRL .captured
JMP .captured
+ BRA +
.errorJump
BRA .errorJump2
@@ -85,7 +85,7 @@ RTL
LDA !INVENTORY_SWAP : AND #$30 : CMP #$30 : BNE .errorJump ; make sure we have mushroom & magic powder
LDA $7EF344 : EOR #$03 : STA $7EF344 ; swap mushroom & magic powder
LDA.b #$20 : STA $012F ; menu select sound
BRL .captured
JMP .captured
+ BRA +
.errorJump2
BRA .error
@@ -124,7 +124,9 @@ RTL
;ProcessBottleMenu:
;--------------------------------------------------------------------------------
ProcessBottleMenu:
LDA $F4 : AND #$40 : BEQ .y_not_pressed ; skip if Y is not down
; LDA $F6 : AND #$30 : CMP.b #$30 : BEQ .double_shoulder_pressed
; LDA $F4 : AND #$40 : BEQ .y_not_pressed ; skip if Y is not down
; .double_shoulder_pressed
LDA $7EF34F ; check bottle state
BEQ .no_bottles ; skip if we have no bottles
PHX
@@ -137,9 +139,9 @@ ProcessBottleMenu:
.no_bottles
LDA #$00 ; pretend like the controller state was 0 from the overridden load
RTL
.y_not_pressed
LDA $F4 : AND.b #$0C ; thing we wrote over - load controller state
RTL
; .y_not_pressed
; LDA $F4 : AND.b #$0C ; thing we wrote over - load controller state
;RTL
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
@@ -203,61 +205,61 @@ AddInventory:
PHA : PHX : PHP
CPY.b #$0C : BNE + ; Blue Boomerang
LDA !INVENTORY_SWAP : ORA #$80 : STA !INVENTORY_SWAP
BRL .incrementCounts
JMP .incrementCounts
+ CPY.b #$2A : BNE + ; Red Boomerang
LDA !INVENTORY_SWAP : ORA #$40 : STA !INVENTORY_SWAP
BRL .incrementCounts
JMP .incrementCounts
+ CPY.b #$29 : BNE + ; Mushroom
LDA !INVENTORY_SWAP : ORA #$28 : STA !INVENTORY_SWAP
BRL .incrementCounts
JMP .incrementCounts
+ CPY.b #$0D : BNE + ; Magic Powder
LDA !INVENTORY_SWAP : ORA #$10 : STA !INVENTORY_SWAP
BRL .incrementCounts
JMP .incrementCounts
+ CPY.b #$13 : BNE + ; Shovel
LDA !INVENTORY_SWAP : ORA #$04 : STA !INVENTORY_SWAP
BRL .incrementCounts
JMP .incrementCounts
+ CPY.b #$14 : BNE + ; Flute (Inactive)
LDA !INVENTORY_SWAP : ORA #$02 : STA !INVENTORY_SWAP
BRL .incrementCounts
JMP .incrementCounts
+ CPY.b #$4A : BNE + ; Flute (Active)
LDA !INVENTORY_SWAP : ORA #$01 : STA !INVENTORY_SWAP
BRL .incrementCounts
JMP .incrementCounts
+ CPY.b #$0B : BNE + ; Bow
LDA ArrowMode : BNE +++
LDA !INVENTORY_SWAP_2 : ORA #$80 : STA !INVENTORY_SWAP_2
+++
BRL .incrementCounts
JMP .incrementCounts
+ CPY.b #$3A : BNE + ; Bow & Arrows
LDA !INVENTORY_SWAP_2 : ORA #$80 : STA !INVENTORY_SWAP_2
BRL .incrementCounts
JMP .incrementCounts
+ CPY.b #$3B : BNE + ; Bow & Silver Arrows
LDA !INVENTORY_SWAP_2 : ORA #$40 : STA !INVENTORY_SWAP_2
LDA ArrowMode : BNE +++
LDA !INVENTORY_SWAP_2 : ORA #$80 : STA !INVENTORY_SWAP_2 ; activate wood arrows when not in rupee bow
+++
BRL .incrementCounts
JMP .incrementCounts
+ CPY.b #$43 : BNE + ; Single arrow
LDA ArrowMode : BEQ +++
LDA !INVENTORY_SWAP_2 : ORA #$80 : STA !INVENTORY_SWAP_2 ; activate wood arrows in quick-swap
+++
BRL .incrementCounts
JMP .incrementCounts
+ CPY.b #$58 : BNE + ; Upgrade-Only Silver Arrows
LDA !INVENTORY_SWAP_2 : ORA #$40 : STA !INVENTORY_SWAP_2
+
.incrementCounts
LDA !LOCK_STATS : BEQ + : BRL .done : +
LDA !LOCK_STATS : BEQ + : JMP .done : +
; don't count any of this stuff
CPY.b #$20 : BNE + : BRL .itemCounts : + ; Crystal
CPY.b #$26 : BNE + : BRL .itemCounts : + ; Heart Piece Completion Heart
CPY.b #$2E : BNE + : BRL .itemCounts : + ; Red Potion (Refill)
CPY.b #$2F : BNE + : BRL .itemCounts : + ; Green Potion (Refill)
CPY.b #$30 : BNE + : BRL .itemCounts : + ; Blue Potion (Refill)
CPY.b #$37 : BNE + : BRL .itemCounts : + ; Pendant
CPY.b #$38 : BNE + : BRL .itemCounts : + ; Pendant
CPY.b #$39 : BNE + : BRL .itemCounts : + ; Pendant
CPY.b #$00 : BNE + : BRL .itemCounts : + ; Uncle Sword & Shield
CPY.b #$20 : BNE + : JMP .itemCounts : + ; Crystal
CPY.b #$26 : BNE + : JMP .itemCounts : + ; Heart Piece Completion Heart
CPY.b #$2E : BNE + : JMP .itemCounts : + ; Red Potion (Refill)
CPY.b #$2F : BNE + : JMP .itemCounts : + ; Green Potion (Refill)
CPY.b #$30 : BNE + : JMP .itemCounts : + ; Blue Potion (Refill)
CPY.b #$37 : BNE + : JMP .itemCounts : + ; Pendant
CPY.b #$38 : BNE + : JMP .itemCounts : + ; Pendant
CPY.b #$39 : BNE + : JMP .itemCounts : + ; Pendant
CPY.b #$00 : BNE + : JMP .itemCounts : + ; Uncle Sword & Shield
CPY.b #$04 : !BLT .isSword ; Swords - Skip Shop/Fairy Check for Swords
CPY.b #$49 : BEQ .isSword
@@ -265,32 +267,32 @@ AddInventory:
CPY.b #$5E : BEQ .isSword
BRA +
.isSword
BRL .dungeonCounts
JMP .dungeonCounts
+
CPY.b #$3B : BNE + : BRL .dungeonCounts : + ; Silver Arrow Bow - Skip Shop/Fairy Check for Silver Arrow Bow
CPY.b #$3B : BNE + : JMP .dungeonCounts : + ; Silver Arrow Bow - Skip Shop/Fairy Check for Silver Arrow Bow
LDA $1B : BEQ ++ ; skip shop check if outdoors
LDA $02E9 : CMP.b #$01 : BEQ ++ ; skip shop check for chests
PHP : REP #$20 ; set 16-bit accumulator
LDA $048E
CMP.w #274 : BNE + : BRL .shop : + ; dark world death mountain shop, ornamental shield shop
CMP.w #271 : BNE + : BRL .shop : + ; villiage of outcasts shop, lumberjack shop, lake hylia shop, dark world magic shop
CMP.w #272 : BNE + : BRL .shop : + ; red shield shop
CMP.w #284 : BNE + : BRL .shop : + ; bomb shop
;CMP.w #265 : BNE + : BRL .shop : + ; potion shop - commented this out because it's easier to just block potion refills because this one interferes with the powder item being counted
;CMP.w #271 : BNE + : BRL .shop : + ; lake hylia shop
CMP.w #287 : BNE + : BRL .shop : + ; kakariko shop
CMP.w #255 : BNE + : BRL .shop : + ; light world death mountain shop
CMP.w #276 : BNE + : BRL .shop : + ; waterfall fairy
CMP.w #277 : BNE + : BRL .shop : + ; upgrade fairy (shop)
CMP.w #278 : BNE + : BRL .shop : + ; pyramid fairy
CMP.w #274 : BNE + : JMP .shop : + ; dark world death mountain shop, ornamental shield shop
CMP.w #271 : BNE + : JMP .shop : + ; villiage of outcasts shop, lumberjack shop, lake hylia shop, dark world magic shop
CMP.w #272 : BNE + : JMP .shop : + ; red shield shop
CMP.w #284 : BNE + : JMP .shop : + ; bomb shop
;CMP.w #265 : BNE + : JMP .shop : + ; potion shop - commented this out because it's easier to just block potion refills because this one interferes with the powder item being counted
;CMP.w #271 : BNE + : JMP .shop : + ; lake hylia shop
CMP.w #287 : BNE + : JMP .shop : + ; kakariko shop
CMP.w #255 : BNE + : JMP .shop : + ; light world death mountain shop
CMP.w #276 : BNE + : JMP .shop : + ; waterfall fairy
CMP.w #277 : BNE + : JMP .shop : + ; upgrade fairy (shop)
CMP.w #278 : BNE + : JMP .shop : + ; pyramid fairy
PLP : BRA ++
.shop
PLP : BRL .done
PLP : JMP .done
++
.dungeonCounts
LDA $1B : BNE + : BRL .fullItemCounts : +
LDA $1B : BNE + : JMP .fullItemCounts : +
; ==BEGIN INDOOR-ONLY SECTION
;REP #$20 ; Set 16-bit Accumulator
@@ -307,54 +309,54 @@ AddInventory:
BRA ++
+ CMP.b #$02 : BNE + ; Hyrule Castle (Escape)
++
CPY.b #$32 : BNE ++ : BRL .itemCounts : ++ ; Ball & Chain Guard's Big Key
CPY.b #$32 : BNE ++ : JMP .itemCounts : ++ ; Ball & Chain Guard's Big Key
%TopHalf($7EF434)
BRL .fullItemCounts
JMP .fullItemCounts
+ CMP.b #$04 : BNE + ; Eastern Palace
LDA $7EF436 : INC : AND #$07 : TAX
LDA $7EF436 : AND #$F8 : STA $7EF436
TXA : ORA $7EF436 : STA $7EF436
BRL .fullItemCounts
JMP .fullItemCounts
+ CMP.b #$06 : BNE + ; Desert Palace
LDA $7EF435 : !ADD #$20 : STA $7EF435
BRL .fullItemCounts
JMP .fullItemCounts
+ CMP.b #$08 : BNE + ; Agahnim's Tower
LDA $7EF435 : INC : AND #$03 : TAX
LDA $7EF435 : AND #$FC : STA $7EF435
TXA : ORA $7EF435 : STA $7EF435
BRL .fullItemCounts
JMP .fullItemCounts
+ CMP.b #$0A : BNE + ; Swamp Palace
%BottomHalf($7EF439)
BRL .fullItemCounts
JMP .fullItemCounts
+ CMP.b #$0C : BNE + ; Palace of Darkness
%BottomHalf($7EF434)
BRL .fullItemCounts
JMP .fullItemCounts
+ CMP.b #$0E : BNE + ; Misery Mire
%BottomHalf($7EF438)
BRL .fullItemCounts
JMP .fullItemCounts
+ CMP.b #$10 : BNE + ; Skull Woods
%TopHalf($7EF437)
BRL .fullItemCounts
JMP .fullItemCounts
+ CMP.b #$12 : BNE + ; Ice Palace
%TopHalf($7EF438)
BRL .fullItemCounts
JMP .fullItemCounts
+ CMP.b #$14 : BNE + ; Tower of Hera
LDA $7EF435 : !ADD #$04 : AND #$1C : TAX
LDA $7EF435 : AND #$E3 : STA $7EF435
TXA : ORA $7EF435 : STA $7EF435
BRL .fullItemCounts
JMP .fullItemCounts
+ CMP.b #$16 : BNE + ; Thieves' Town
%BottomHalf($7EF437)
BRL .fullItemCounts
JMP .fullItemCounts
+ CMP.b #$18 : BNE + ; Turtle Rock
%TopHalf($7EF439)
BRL .fullItemCounts
JMP .fullItemCounts
+ CMP.b #$1A : BNE + ; Ganon's Tower
LDA $7EF436 : !ADD #$08 : STA $7EF436
LDA $7EF366 : AND #$04 : BNE ++
JSR .incrementGTowerPreBigKey
++
;BRL .fullItemCounts
;JMP .fullItemCounts
+
; == END INDOOR-ONLY SECTION
@@ -379,178 +381,178 @@ AddInventory:
CPY.b #$00 : BNE + ; Fighter's Sword & Fighter's Shield
JSR .incrementSword
JSR .incrementShield
BRL .done
JMP .done
+ CPY.b #$01 : BNE + ; Master Sword
JSR .incrementSword
BRL .done
JMP .done
+ CPY.b #$02 : BNE + ; Tempered Sword
JSR .incrementSword
BRL .done
JMP .done
+ CPY.b #$03 : BNE + ; Golden Sword
JSR .incrementSword
BRL .done
JMP .done
+ CPY.b #$04 : BNE + ; Fighter's Shield
JSR .incrementShield
BRL .done
JMP .done
+ CPY.b #$05 : BNE + ; Red Shield
JSR .incrementShield
BRL .done
JMP .done
+ CPY.b #$06 : BNE + ; Mirror Shield
JSR .incrementShield
BRL .done
JMP .done
+ CPY.b #$07 : !BLT + ; Items $07 - $0D
CPY.b #$0E : !BGE +
JSR .incrementY
BRL .done
JMP .done
+ CPY.b #$14 : BNE + ; Flute (Inactive) - LEAVE THIS ABOVE THE 0F-16 CONDITION - kkat
JSR .stampFlute
JSR .incrementY
BRL .done
JMP .done
+ CPY.b #$0F : !BLT + ; Items $0F - $16
CPY.b #$17 : !BGE +
JSR .incrementY
BRL .done
JMP .done
+ CPY.b #$17 : BNE + ; Heart Piece
JSR .incrementHeartPiece
BRL .done
JMP .done
+ CPY.b #$18 : !BLT + ; Items $18 - $19
CPY.b #$1A : !BGE +
JSR .incrementY
BRL .done
JMP .done
+ CPY.b #$1A : BNE + ; Magic Mirror
JSR .stampMirror
JSR .incrementY
BRL .done
JMP .done
+ CPY.b #$1D : BNE + ; Book of Mudora - LEAVE THIS ABOVE THE 1B-1F CONDITION - kkat
JSR .incrementY
BRL .done
JMP .done
+ CPY.b #$1B : !BLT + ; Items $1B - $1F
CPY.b #$20 : !BGE +
JSR .incrementA
BRL .done
JMP .done
+ CPY.b #$20 : BNE + ; Crystal
JSR .incrementCrystal
BRL .done
JMP .done
+ CPY.b #$21 : BNE + ; Bug Net
JSR .incrementY
BRL .done
JMP .done
+ CPY.b #$22 : !BLT + ; Items $22 - $23
CPY.b #$24 : !BGE +
JSR .incrementMail
BRL .done
JMP .done
+ CPY.b #$24 : BNE + ; Small Key
JSR .incrementKey
BRL .done
JMP .done
+ CPY.b #$25 : BNE + ; Compass
JSR .incrementCompass
BRL .done
JMP .done
+ CPY.b #$26 : BNE + ; Liar Heart (Container)
;JSR .incrementHeartContainer
BRL .done
JMP .done
+ CPY.b #$27 : BNE + ; 1 Bomb
JSR .maybeIncrementBombs
BRL .done
JMP .done
+ CPY.b #$28 : BNE + ; 3 Bombs
JSR .maybeIncrementBombs
BRL .done
JMP .done
+ CPY.b #$29 : BNE + ; Musoroom
JSR .incrementY
BRL .done
JMP .done
+ CPY.b #$2A : !BLT + ; Items $2A - $2D
CPY.b #$2E : !BGE +
JSR .incrementY
BRL .done
JMP .done
+ CPY.b #$31 : BNE + ; 10 Bombs
JSR .maybeIncrementBombs
BRL .done
JMP .done
+ CPY.b #$32 : BNE + ; Big Key
JSR .incrementBigKey
BRL .done
JMP .done
+ CPY.b #$33 : BNE + ; Map
JSR .incrementMap
BRL .done
JMP .done
+ CPY.b #$37 : !BLT + ; Items $37 - $39 - Pendants
CPY.b #$3A : !BGE +
JSR .incrementPendant
BRL .done
JMP .done
+ CPY.b #$3A : !BLT + ; Items $3A - $3B - Bow & Silver Arrows
CPY.b #$3C : !BGE +
JSR .incrementBow
BRL .done
JMP .done
+ CPY.b #$3C : BNE + ; Bottle w/Bee
JSR .incrementY
BRL .done
JMP .done
+ CPY.b #$3D : BNE + ; Bottle w/Fairy
JSR .incrementY
BRL .done
JMP .done
+ CPY.b #$3E : !BLT + ; Items $3E - $3F - Heart Containers
CPY.b #$40 : !BGE +
JSR .incrementHeartContainer
BRL .done
JMP .done
+ CPY.b #$48 : BNE + ; Bottle w/Gold Bee
JSR .incrementY
BRL .done
JMP .done
+ CPY.b #$49 : BNE + ; Fighter's Sword
JSR .incrementSword
BRL .done
JMP .done
+ CPY.b #$4A : BNE + ; Flute (Active)
JSR .stampFlute
JSR .incrementY
BRL .done
JMP .done
+ CPY.b #$4B : BNE + ; Pegasus Boots
JSR .stampBoots
JSR .incrementA
BRL .done
JMP .done
+ CPY.b #$4C : BNE + ; Bomb Capacity Upgrade
JSR .incrementCapacity
JSR .maybeIncrementBombs
BRL .done
JMP .done
+ CPY.b #$4D : !BLT + ; Items $4D - $4F - Capacity Upgrades
CPY.b #$50 : !BGE +
JSR .incrementCapacity
BRL .done
JMP .done
+ CPY.b #$50 : BNE + ; Master Sword (Safe)
JSR .incrementSword
BRL .done
JMP .done
+ CPY.b #$51 : !BLT + ; Items $51 - $54 - Capacity Upgrades
CPY.b #$55 : !BGE +
JSR .incrementCapacity
BRL .done
JMP .done
+ CPY.b #$58 : BNE + ; Upgrade-Only Sivler Arrows
JSR .incrementBow
BRL .done
JMP .done
+ CPY.b #$5E : BNE + ; Progressive Sword
JSR .incrementSword
BRL .done
JMP .done
+ CPY.b #$5F : BNE + ; Progressive Shield
JSR .incrementShield
BRL .done
JMP .done
+ CPY.b #$60 : BNE + ; Progressive Armor
JSR .incrementMail
BRL .done
JMP .done
+ CPY.b #$61 : BNE + ; Progressive Lifting Glove
JSR .incrementA
BRL .done
JMP .done
+ CPY.b #$64 : !BLT + ; Items $64 & $65 - Progressive Bow
CPY.b #$66 : !BGE +
JSR .incrementBow
BRL .done
JMP .done
+ CPY.b #$70 : !BLT + ; Items $70 - $7F - Free Maps
CPY.b #$80 : !BGE +
JSR .incrementMap
BRL .done
JMP .done
+ CPY.b #$80 : !BLT + ; Items $80 - $8F - Free Compasses
CPY.b #$90 : !BGE +
JSR .incrementCompass
BRL .done
JMP .done
+ CPY.b #$90 : !BLT + ; Items $90 - $9F - Free Big Keys
CPY.b #$A0 : !BGE +
JSR .incrementBigKey
BRL .done
JMP .done
+ CPY.b #$A0 : !BLT + ; Items $A0 - $AF - Free Small Keys
CPY.b #$B0 : !BGE +
JSR .incrementKey
BRL .done
JMP .done
+
.done
PLP : PLX : PLA
@@ -738,6 +740,7 @@ RTS
Link_ReceiveItem_HUDRefresh:
LDA $7EF343 : BNE + ; skip if we have bombs
LDA $7EF375 : BEQ + ; skip if we are filling no bombs
LDA $7EF370 : !ADD.l StartingMaxBombs : BEQ + ; skip if we can't have bombs
DEC : STA $7EF375 ; decrease bomb fill count
LDA.b #$01 : STA $7EF343 ; increase actual bomb count
+
@@ -753,6 +756,7 @@ RTL
HandleBombAbsorbtion:
STA $7EF375 ; thing we wrote over
LDA $0303 : BNE + ; skip if we already have some item selected
LDA $7EF370 : !ADD.l StartingMaxBombs : BEQ + ; skip if we can't have bombs
LDA.b #$04 : STA $0202 ; set selected item to bombs
LDA.b #$01 : STA $0303 ; set selected item to bombs
JSL.l HUD_RebuildLong
@@ -1113,10 +1117,10 @@ SpawnShovelItem:
LDA $03FC : BEQ +
JSL DiggingGameGuy_AttemptPrizeSpawn
BRL .skip
JMP .skip
+
LDA $035B : AND.b #$01 : BNE + : BRL .skip : + ; corner dig fix
LDA $035B : AND.b #$01 : BNE + : JMP .skip : + ; corner dig fix
PHY : PHP
PHB : PHK : PLB

View File

@@ -4,7 +4,7 @@
; after Ganon slams into it in bat form?
Overworld_CreatePyramidHoleModified:
LDA.l InvertedMode : BNE +
BRL .originalBehaviour
JMP .originalBehaviour
+
.invertedBehavior
REP #$30
@@ -37,7 +37,7 @@ Overworld_CreatePyramidHoleModified:
LDA.w #$FFFF : STA $1012, Y
BRL .ending
JMP .ending
.originalBehaviour
REP #$30

View File

@@ -66,8 +66,8 @@ RTS
INC : CMP !HIGHEST_SWORD_LEVEL : !BGE + ; skip if highest is lower (this is an upgrade)
LDA !HIGHEST_SWORD_LEVEL : DEC ; convert to item id
TAY : PLA : LDA !HIGHEST_SWORD_LEVEL ; put sword id into the thing to write
BRL .done
JMP .done
+
PLA
BRL .done
JMP .done
;================================================================================

View File

@@ -185,11 +185,11 @@ CheckMusicLoadRequest:
LDA !REG_MUSIC_CONTROL_REQUEST : CMP #$08 : BEQ ++ ; Mirror SFX is not affected by NoBGM or pack $FE
LDA NoBGM : BNE +
LDA !REG_MSU_PACK_CURRENT : CMP #$FE : BNE ++
+ : BRL .mute
+ : JMP .mute
++
LDX !REG_MSU_ID_01 : CPX !VAL_MSU_ID_01 : BEQ +
- : BRL .unmute
- : JMP .unmute
+
LDX !REG_MSU_ID_23 : CPX !VAL_MSU_ID_23 : BNE -
LDX !REG_MSU_ID_45 : CPX !VAL_MSU_ID_45 : BNE -
@@ -277,7 +277,7 @@ CheckMusicLoadRequest:
PLY : STY $00 : SEP #$10 : PLB
TAX : LDA MusicShuffleTable-1,X
STA !REG_MUSIC_CONTROL_REQUEST
BRL .check_fallback
JMP .check_fallback
.unmute
LDA.b !VAL_COMMAND_UNMUTE_SPC
@@ -481,7 +481,7 @@ MSUMain:
LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .nomsu
SEP #$30
LDX !REG_MUSIC_CONTROL : BEQ +
BRL .command_ff
JMP .command_ff
+
LDA !REG_MSU_DELAYED_COMMAND : BEQ .do_fade

View File

@@ -63,7 +63,7 @@ SEP #$30
;================================================================================
SEP #$20
LDA.l GoalItemRequirement : BNE + : BRL .done : + ; Star Meter
LDA.l GoalItemRequirement : BNE + : JMP .done : + ; Star Meter
LDA.l !GOAL_COUNTER
JSR HudHexToDec3Digit
@@ -144,13 +144,13 @@ SEP #$30
AND #$FFF8
TAX ; end of crap
LDA !INFINITE_MAGIC : AND.w #$00FF : BNE + : BRL .green : +
LDA !INFINITE_MAGIC : AND.w #$00FF : BNE + : JMP .green : +
SEP #$20 : LDA.b #$80 : STA $7EF36E : REP #$30 ; set magic to max
LDX.w #$0080 ; load full magic meter graphics
LDA $1A : AND.w #$000C : LSR #2
BEQ .red
CMP.w #0001 : BEQ .yellow
CMP.w #0002 : BNE + : BRL .green : +
CMP.w #0002 : BNE + : JMP .green : +
.blue
LDA !DrawMagicMeter_mp_tilemap+0, X : AND.w #$EFFF : STA $7EC746
LDA !DrawMagicMeter_mp_tilemap+2, X : AND.w #$EFFF : STA $7EC786

View File

@@ -195,7 +195,7 @@ AddReceivedItemExpandedGetItem:
; ;JSL.l Main_ShowTextMessage_Alt
; LDA !GOAL_COUNTER : INC : STA !GOAL_COUNTER
; LDA.b #$01 : STA $7F50XX
; BRL .done
; JMP .done
;++
;STA $FFFFFF
LDA $02D8 ; check inventory
@@ -205,7 +205,7 @@ AddReceivedItemExpandedGetItem:
LDA.l SilverArrowsUseRestriction : BNE ++
LDA.b #03 : STA $7EF340 ; set bow to silver
++
BRL .done
JMP .done
+ CMP.b #$3B : BNE + ; Silver Bow
LDA.l SilverArrowsUseRestriction : BNE .noequip
LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ .noequip
@@ -217,56 +217,56 @@ AddReceivedItemExpandedGetItem:
STA $7EF340
.noequip
LDA !INVENTORY_SWAP_2 : ORA #$40 : STA !INVENTORY_SWAP_2 ; mark silver bow on y-toggle
BRL .done
JMP .done
+ CMP.b #$4C : BNE + ; 50 bombs
;LDA.b #$07 : STA $7EF370 ; upgrade bombs
LDA.b #50 : !SUB.l StartingMaxBombs : STA $7EF370 ; upgrade bombs
LDA.b #50 : STA $7EF375 ; fill bombs
BRL .done
JMP .done
+ CMP.b #$4D : BNE + ; 70 arrows
;LDA #$07 : STA $7EF371 ; upgrade arrows
LDA.b #70 : !SUB.l StartingMaxArrows : STA $7EF371 ; upgrade arrows
LDA.b #70 : STA $7EF376 ; fill arrows
BRL .done
JMP .done
+ CMP.b #$4E : BNE + ; 1/2 magic
LDA $7EF37B : CMP #$02 : !BGE ++
INC : STA $7EF37B ; upgrade magic
++
LDA.b #$80 : STA $7EF373 ; fill magic
BRL .done
JMP .done
+ CMP.b #$4F : BNE + ; 1/4 magic
LDA.b #$02 : STA $7EF37B ; upgrade magic
LDA.b #$80 : STA $7EF373 ; fill magic
BRL .done
JMP .done
+ CMP.b #$50 : BNE + ; Master Sword (Safe)
LDA $7EF359 : CMP.b #$02 : !BGE + ; skip if we have a better sword
LDA.b #$02 : STA $7EF359 ; set master sword
BRL .done
JMP .done
+ CMP.b #$51 : BNE + ; +5 Bombs
LDA $7EF370 : !ADD.b #$05 : STA $7EF370 ; upgrade bombs +5
LDA.l Upgrade5BombsRefill : STA $7EF375 ; fill bombs
BRL .done
JMP .done
+ CMP.b #$52 : BNE + ; +10 Bombs
LDA $7EF370 : !ADD.b #$0A : STA $7EF370 ; upgrade bombs +10
LDA.l Upgrade10BombsRefill : STA $7EF375 ; fill bombs
BRL .done
JMP .done
+ CMP.b #$53 : BNE + ; +5 Arrows
LDA $7EF371 : !ADD.b #$05 : STA $7EF371 ; upgrade arrows +5
LDA.l Upgrade5ArrowsRefill : STA $7EF376 ; fill arrows
BRL .done
JMP .done
+ CMP.b #$54 : BNE + ; +10 Arrows
LDA $7EF371 : !ADD.b #$0A : STA $7EF371 ; upgrade arrows +10
LDA.l Upgrade10ArrowsRefill : STA $7EF376 ; fill arrows
BRL .done
JMP .done
+ CMP.b #$55 : BNE + ; Programmable Object 1
%ProgrammableItemLogic(1)
BRL .done
JMP .done
+ CMP.b #$56 : BNE + ; Programmable Object 2
%ProgrammableItemLogic(2)
BRL .done
JMP .done
+ CMP.b #$57 : BNE + ; Programmable Object 3
%ProgrammableItemLogic(3)
BRL .done
JMP .done
+ CMP.b #$58 : BNE + ; Upgrade-Only Sivler Arrows
LDA.l SilverArrowsUseRestriction : BNE +++
LDA.l SilverArrowsAutoEquip : AND.b #$01 : BEQ +++
@@ -279,46 +279,46 @@ AddReceivedItemExpandedGetItem:
++
+ CMP.b #$59 : BNE + ; 1 Rupoor
REP #$20 : LDA $7EF360 : !SUB RupoorDeduction : STA $7EF360 : SEP #$20 ; Take 1 rupee
BRL .done
JMP .done
+ CMP.b #$5A : BNE + ; Null Item
BRL .done
JMP .done
+ CMP.b #$5B : BNE + ; Red Clock
REP #$20 ; set 16-bit accumulator
LDA !CHALLENGE_TIMER : !ADD.l RedClockAmount : STA !CHALLENGE_TIMER
LDA !CHALLENGE_TIMER+2 : ADC.l RedClockAmount+2 : STA !CHALLENGE_TIMER+2
SEP #$20 ; set 8-bit accumulator
BRL .done
JMP .done
+ CMP.b #$5C : BNE + ; Blue Clock
REP #$20 ; set 16-bit accumulator
LDA !CHALLENGE_TIMER : !ADD.l BlueClockAmount : STA !CHALLENGE_TIMER
LDA !CHALLENGE_TIMER+2 : ADC.l BlueClockAmount+2 : STA !CHALLENGE_TIMER+2
SEP #$20 ; set 8-bit accumulator
BRL .done
JMP .done
+ CMP.b #$5D : BNE + ; Green Clock
REP #$20 ; set 16-bit accumulator
LDA !CHALLENGE_TIMER : !ADD.l GreenClockAmount : STA !CHALLENGE_TIMER
LDA !CHALLENGE_TIMER+2 : ADC.l GreenClockAmount+2 : STA !CHALLENGE_TIMER+2
SEP #$20 ; set 8-bit accumulator
BRL .done
JMP .done
+ CMP.b #$5E : BNE + ; Progressive Sword
BRL .done
JMP .done
+ CMP.b #$5F : BNE + ; Progressive Shield
BRL .done
JMP .done
+ CMP.b #$60 : BNE + ; Progressive Armor
BRL .done
JMP .done
+ CMP.b #$61 : BNE + ; Progressive Lifting Glove
BRL .done
JMP .done
+ CMP.b #$62 : BNE + ; RNG Pool Item (Single)
BRL .done
JMP .done
+ CMP.b #$63 : BNE + ; RNG Pool Item (Multi)
BRL .done
JMP .done
+ CMP.b #$64 : BNE + ; Progressive Bow
BRL .done
JMP .done
+ CMP.b #$65 : BNE + ; Progressive Bow
BRL .done
JMP .done
+ CMP.b #$6A : BNE + ; Goal Collectable (Single/Triforce)
JSL.l ActivateGoal
BRL .done
JMP .done
+ CMP.b #$6B : BNE + ; Goal Collectable (Multi/Power Star)
BRA .multi_collect
+ CMP.b #$6C : BNE + ; Goal Collectable (Multi/Power Star) Alternate Graphic
@@ -329,52 +329,52 @@ AddReceivedItemExpandedGetItem:
LDA TurnInGoalItems : BNE ++
JSL.l ActivateGoal
++
BRL .done
JMP .done
+ CMP.b #$6D : BNE + ; Server Request F0
JSL.l ItemGetServiceRequest_F0
BRL .done
JMP .done
+ CMP.b #$6E : BNE + ; Server Request F1
JSL.l ItemGetServiceRequest_F1
BRL .done
JMP .done
+ CMP.b #$6F : BNE + ; Server Request F2
JSL.l ItemGetServiceRequest_F2
BRL .done
JMP .done
;+ CMP.b #$FE : BNE + ; Server Request (Null Chest)
; JSL.l ItemGetServiceRequest
; BRL .done
; JMP .done
+ CMP.b #$70 : !BLT + : CMP.b #$80 : !BGE + ; Free Map
AND #$0F : CMP #$08 : !BGE ++
%ValueShift()
ORA $7EF368 : STA $7EF368 ; Map 1
BRL .done
JMP .done
++
!SUB #$08
%ValueShift()
BIT.b #$C0 : BEQ +++ : LDA.b #$C0 : +++ ; Make Hyrule Castle / Sewers Count for Both
ORA $7EF369 : STA $7EF369 ; Map 2
BRL .done
JMP .done
+ CMP.b #$80 : !BLT + : CMP.b #$90 : !BGE + ; Free Compass
AND #$0F : CMP #$08 : !BGE ++
%ValueShift()
ORA $7EF364 : STA $7EF364 ; Compass 1
BRL .done
JMP .done
++
!SUB #$08
%ValueShift()
BIT.b #$C0 : BEQ +++ : LDA.b #$C0 : +++ ; Make Hyrule Castle / Sewers Count for Both
ORA $7EF365 : STA $7EF365 ; Compass 2
BRL .done
JMP .done
+ CMP.b #$90 : !BLT + : CMP.b #$A0 : !BGE + ; Free Big Key
AND #$0F : CMP #$08 : !BGE ++
%ValueShift()
ORA $7EF366 : STA $7EF366 ; Big Key 1
BRL .done
JMP .done
++
!SUB #$08
%ValueShift()
BIT.b #$C0 : BEQ +++ : LDA.b #$C0 : +++ ; Make Hyrule Castle / Sewers Count for Both
ORA $7EF367 : STA $7EF367 ; Big Key 2
BRL .done
JMP .done
+ CMP.b #$A0 : !BLT + : CMP.b #$B0 : !BGE + ; Free Small Key
AND #$0F : TAX
LDA $7EF37C, X : INC : STA $7EF37C, X ; Increment Key Count
@@ -388,12 +388,12 @@ AddReceivedItemExpandedGetItem:
LDA.l GenericKeys : BEQ +
.generic
LDA $7EF36F : INC : STA $7EF36F
BRL .done
JMP .done
.normal
TXA : ASL : CMP $040C : BNE ++
LDA $7EF36F : INC : STA $7EF36F
++
BRL .done
JMP .done
+
.done
PLX
@@ -432,66 +432,66 @@ AddReceivedItemExpanded:
CMP.b #$16 : BNE ++ ; Bottle
JSR.w CountBottles : CMP.l BottleLimit : !BLT +++
LDA.l BottleLimitReplacement : STA $02D8
+++ : BRL .done
+++ : JMP .done
++ : CMP.b #$2B : BNE ++ ; Red Potion w/bottle
JSR.w CountBottles : CMP.l BottleLimit : !BLT +++
LDA.l BottleLimitReplacement : STA $02D8
+++ : BRL .done
+++ : JMP .done
++ : CMP.b #$2C : BNE ++ ; Green Potion w/bottle
JSR.w CountBottles : CMP.l BottleLimit : !BLT +++
LDA.l BottleLimitReplacement : STA $02D8
+++ : BRL .done
+++ : JMP .done
++ : CMP.b #$2D : BNE ++ ; Blue Potion w/bottle
JSR.w CountBottles : CMP.l BottleLimit : !BLT +++
LDA.l BottleLimitReplacement : STA $02D8
+++ : BRL .done
+++ : JMP .done
++ : CMP.b #$3C : BNE ++ ; Bee w/bottle
JSR.w CountBottles : CMP.l BottleLimit : !BLT +++
LDA.l BottleLimitReplacement : STA $02D8
+++ : BRL .done
+++ : JMP .done
++ : CMP.b #$3D : BNE ++ ; Fairy w/bottle
JSR.w CountBottles : CMP.l BottleLimit : !BLT +++
LDA.l BottleLimitReplacement : STA $02D8
+++ : BRL .done
+++ : JMP .done
++ : CMP.b #$48 : BNE ++ ; Gold Bee w/bottle
JSR.w CountBottles : CMP.l BottleLimit : !BLT +++
LDA.l BottleLimitReplacement : STA $02D8
+++ : BRL .done
+++ : JMP .done
++ : CMP.b #$4E : BNE ++ ; Progressive Magic
LDA $7EF37B : BEQ +++
LDA.b #$4F : STA $02D8
+++ : BRL .done
+++ : JMP .done
++ : CMP.b #$5E : BNE ++ ; Progressive Sword
LDA $7EF359 : CMP.l ProgressiveSwordLimit : !BLT +
LDA.l ProgressiveSwordReplacement : STA $02D8 : BRL .done
LDA.l ProgressiveSwordReplacement : STA $02D8 : JMP .done
+ : CMP.b #$00 : BNE + ; No Sword
LDA.b #$49 : STA $02D8 : BRL .done
LDA.b #$49 : STA $02D8 : JMP .done
+ : CMP.b #$01 : BNE + ; Fighter Sword
LDA.b #$50 : STA $02D8 : BRL .done
LDA.b #$50 : STA $02D8 : JMP .done
+ : CMP.b #$02 : BNE + ; Master Sword
LDA.b #$02 : STA $02D8 : BRL .done
LDA.b #$02 : STA $02D8 : JMP .done
+ ; Everything Else
LDA.b #$03 : STA $02D8 : BRL .done
LDA.b #$03 : STA $02D8 : JMP .done
++ : CMP.b #$5F : BNE ++ ; Progressive Shield
LDA !PROGRESSIVE_SHIELD : LSR #6 : CMP.l ProgressiveShieldLimit : !BLT +
LDA.l ProgressiveShieldReplacement : STA $02D8 : BRL .done
LDA.l ProgressiveShieldReplacement : STA $02D8 : JMP .done
+
LDA !PROGRESSIVE_SHIELD : AND.b #$C0 : BNE + ; No Shield
LDA.b #$04 : STA $02D8
LDA !PROGRESSIVE_SHIELD : !ADD.b #$40 : STA !PROGRESSIVE_SHIELD : BRL .done
LDA !PROGRESSIVE_SHIELD : !ADD.b #$40 : STA !PROGRESSIVE_SHIELD : JMP .done
+ : CMP.b #$40 : BNE + ; Fighter Shield
LDA.b #$05 : STA $02D8
LDA !PROGRESSIVE_SHIELD : !ADD.b #$40 : STA !PROGRESSIVE_SHIELD : BRL .done
LDA !PROGRESSIVE_SHIELD : !ADD.b #$40 : STA !PROGRESSIVE_SHIELD : JMP .done
+ ; Everything Else
LDA.b #$06 : STA $02D8
LDA !PROGRESSIVE_SHIELD : !ADD.b #$40 : STA !PROGRESSIVE_SHIELD : BRL .done
LDA !PROGRESSIVE_SHIELD : !ADD.b #$40 : STA !PROGRESSIVE_SHIELD : JMP .done
++ : CMP.b #$60 : BNE ++ ; Progressive Armor
LDA $7EF35B : CMP.l ProgressiveArmorLimit : !BLT +
LDA.l ProgressiveArmorReplacement : STA $02D8 : BRL .done
LDA.l ProgressiveArmorReplacement : STA $02D8 : JMP .done
+ : CMP.b #$00 : BNE + ; No Armor
LDA.b #$22 : STA $02D8 : BRL .done
LDA.b #$22 : STA $02D8 : JMP .done
+ ; Everything Else
LDA.b #$23 : STA $02D8 : BRL .done
LDA.b #$23 : STA $02D8 : JMP .done
++ : CMP.b #$61 : BNE ++ ; Progressive Lifting Glove
LDA $7EF354 : BNE + ; No Lift
LDA.b #$1B : STA $02D8 : BRA .done
@@ -499,7 +499,7 @@ AddReceivedItemExpanded:
LDA.b #$1C : STA $02D8 : BRA .done
++ : CMP.b #$64 : BNE ++ : -- ; Progressive Bow
LDA $7EF340 : INC : LSR : CMP.l ProgressiveBowLimit : !BLT +
LDA.l ProgressiveBowReplacement : STA $02D8 : BRL .done
LDA.l ProgressiveBowReplacement : STA $02D8 : JMP .done
+ : CMP.b #$00 : BNE + ; No Bow
LDA.b #$3A : STA $02D8 : BRA .done
+ ; Any Bow

825
newitems2.asm Normal file
View File

@@ -0,0 +1,825 @@
;===============================================================================
; Complete fucking revamp of how item get works
;===============================================================================
Ancilla_ReceiveItem_rupee_anim_tiles:
db $24, $25, $26
Ancilla_ReceiveItem_rupee_anim_timers:
db 9, 5, 5
Ancilla_ReceiveItem_oam_props:
db $05, $01, $04
Ancilla_ReceiveItem_hp_messages:
dw -1, $0155, $0156, $0157
AddReceiveItem:
.routine
fillword $0000 : fill $FF*2
.y_offsets
fillbyte $00 : fill $FF
.x_offsets
fillbyte $00 : fill $FF
.gfx_offsets
fillword $0000 : fill $FF*2
.wideness
fillbyte $00 : fill $FF
.pal
fillbyte $00 : fill $FF
.sram_addr
fillword $0000 : fill $FF*2
.sram_write
fillbyte $00 : fill $FF
.message
fillbyte $00 : fill $FF
.sound
fillbyte $00 : fill $FF
; Pal defines:
!r = 1 ; red
!b = 2 ; blue
!g = 4 ; green
!e = 5 ; sword/shield
!t = $00 ; not wide
!w = $80 ; wide
; song storage
; top 2 bits = which address to write
; 00 $00 Song
; 01 $40 SFX1
; 10 $80 SFX2
; 11 $C0 SFX3
; bottom 6 bits = data to write
!sfxsong = $00<<6
!sfx1 = $01<<6
!sfx2 = $02<<6
!sfx3 = $03<<6
!dodododo = $0F|!sfx3
!badgesong = $13|!sfxsong
!hpsfx = $2D|!sfx3
!hcsfx = $0D|!sfx3
!itemx = -1
macro ritem(name, routine, y_off, x_off, gfx_off, oam_props, sram_addr, sram_write, message, sfx)
!itemx #= !itemx+1
!get_<name> #= !itemx
#g<name>:
pushpc
; routine points to either a general handler
; or a specific routine for this item or class of items
org AddReceiveItem_routine+!itemx*2 : dw <routine>
; gfx dictates an offset into uncompressed 4bpp graphics data
org AddReceiveItem_gfx_offsets+!itemx*2 : dw <g>
;org AddReceiveItem_routine+!itemx*2 : dw <r>
;org AddReceiveItem_y_offsets+!itemx : db <y>
;org AddReceiveItem_x_offsets+!itemx : db <x>
;org AddReceiveItem_gfx_offsets+!itemx*2 : dw <g>
;org AddReceiveItem_wideness+!itemx : db <w>
;org AddReceiveItem_pal+!itemx : db <p>
; SRAM address is an
org AddReceiveItem_sram_addr+!itemx*2 : dw <s>
org AddReceiveItem_sram_write+!itemx : db <t>
;org AddReceiveItem_message+!itemx : db <m>
;org AddReceiveItem_sound+!itemx : db <f>
pullpc
endmacro
;===============================================================================
; Vanilla Items
%ritem("fighter_sword", .directWrite,\ ; name, routine
-5, 4, $0420, !THIN|!e,\ ; OAM y/x offset, GFX char offset, props
$F359, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("master_sword", .directWrite,\ ; name, routine
-5, 4, $09C0, !THIN|!e,\ ; OAM y/x offset, GFX char offset, props
$F359, 2,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("tempered_sword", .directWrite,\ ; name, routine
-5, 4, $09C0, !THIN|!e,\ ; OAM y/x offset, GFX char offset, props
$F359, 3,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("butter_sword", .directWrite,\ ; name, routine
-5, 4, $09C0, !THIN|!e,\ ; OAM y/x offset, GFX char offset, props
$F359, 4,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("fighter_shield", .fighterShield,\ ; name, routine
-5, 4, $11E0, !THIN|!e,\ ; OAM y/x offset, GFX char offset, props
$F35A, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("red_shield", .directWrite,\ ; name, routine
-4, 0, $0140, !WIDE|!e,\ ; OAM y/x offset, GFX char offset, props
$F35A, 2,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("mirror_shield", .directWrite,\ ; name, routine
-4, 0, $1480, !WIDE|!e,\ ; OAM y/x offset, GFX char offset, props
$F35A, 3,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("fire_rod", .directWrite,\ ; name, routine
-5, 4, $0480, !THIN|!r,\ ; OAM y/x offset, GFX char offset, props
$F345, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
; $08
%ritem("ice_rod", .directWrite,\ ; name, routine
-5, 4, $0480, !THIN|!b,\ ; OAM y/x offset, GFX char offset, props
$F346, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("hammer", .directWrite,\ ; name, routine
-4, 4, $04A0, !THIN|!r,\ ; OAM y/x offset, GFX char offset, props
$F34B, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("hookshot", .directWrite,\ ; name, routine
-4, 4, $0460, !THIN|!r,\ ; OAM y/x offset, GFX char offset, props
$F342, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("bow", .directWrite,\ ; name, routine
-4, 4, $0400, !THIN|!r,\ ; OAM y/x offset, GFX char offset, props
$F340, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("boomerang", .directWrite,\ ; name, routine
-2, 5, $05E0, !THIN|!b,\ ; OAM y/x offset, GFX char offset, props
$F341, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("powder", .directWrite,\ ; name, routine
-4, 0, $04C0, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props
$F344, 2,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("bee", .bottles,\ ; name, routine
-4, 0, $11A0, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props
$F35C, 7,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("bombos", .directWrite,\ ; name, routine
-4, 4, $0C40, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props
$F347, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
; $10
%ritem("ether", .directWrite,\ ; name, routine
-4, 0, $0C00, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props
$F348, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("quake", .directWrite,\ ; name, routine
-4, 0, $0C80, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props
$F349, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("lamp", .directWrite,\ ; name, routine
-4, 0, $08C0, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props
$F34A, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("shovel", .directWrite,\ ; name, routine
-4, 4, $09E0, !THIN|!r,\ ; OAM y/x offset, GFX char offset, props
$F34C, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("flute", .directWrite,\ ; name, routine
-4, 0, $1440, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props
$F34C, 3,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("somaria", .directWrite,\ ; name, routine
-4, 4, $0440, !THIN|!r,\ ; OAM y/x offset, GFX char offset, props
$F350, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("bottle", .newBottle,\ ; name, routine
-4, 0, $0CC0, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props
$F35C, 0,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("hp", .hp,\ ; name, routine
-4, 0, $1400, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props
$F36B, 0,\ ; SRAM address, SRAM value
$FFFF,!hpsfx) ; Message, Sound
; $18
%ritem("byrna", .directWrite,\ ; name, routine
-4, 4, $0440, !THIN|!b,\ ; OAM y/x offset, GFX char offset, props
$F351, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("cape", .directWrite,\ ; name, routine
-4, 0, $0900, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props
$F352, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("mirror", .directWrite,\ ; name, routine
-4, 0, $0840, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props
$F353, 2,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("glove", .directWrite,\ ; name, routine
-4, 0, $0540, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props
$F354, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("mitts", .directWrite,\ ; name, routine
-4, 0, $0540, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props
$F354, 2,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("book", .directWrite,\ ; name, routine
-4, 0, $0580, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props
$F34E, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("flippers", .flippers,\ ; name, routine
-4, 0, $0800, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props
$F356, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("pearl", .directWrite,\ ; name, routine
-4, 0, $0980, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props
$F357, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
; $20
%ritem("crystal", .palaceItem,\ ; name, routine
-4, 0, $10A0, !WIDE|6,\ ; OAM y/x offset, GFX char offset, props
$F37A, 0,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("net", .directWrite,\ ; name, routine
-4, 0, $1060, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props
$F34D, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("blue_mail", .blueMail,\ ; name, routine
-4, 0, $0100, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props
$F35B, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("red_mail", .directWrite,\ ; name, routine
-5, 0, $0100, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props
$F35B, 2,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("key", .addKey,\ ; name, routine
-4, 4, $05C0, !THIN|!b,\ ; OAM y/x offset, GFX char offset, props
$F36F, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("compass", .palaceItem,\ ; name, routine
-4, 0, $0940, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props
$F364, 0,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("4hp", .4hp,\ ; name, routine
-4, 0, $00C0, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props
$F36C, 0,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("bomb", .addBombs,\ ; name, routine
-4, 0, $0880, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props
$F375, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
; $28
%ritem("3_bombs", .addBombs,\ ; name, routine
-4, 0, $0040, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props
$F375, 3,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("mushroom", .mushroom,\ ; name, routine
-4, 0, $0D40, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props
$F344, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("red_boomerang", .directWrite,\ ; name, routine
-2, 5, $05E0, !THIN|!r,\ ; OAM y/x offset, GFX char offset, props
$F341, 2,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("red_cauldron", .bottles,\ ; name, routine
-4, 0, $0000, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props
$F35C, 3,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("green_cauldron", .bottles,\ ; name, routine
-4, 0, $0000, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props
$F35C, 4,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("blue_cauldron", .bottles,\ ; name, routine
-4, 0, $0000, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props
$F35C, 5,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("red_cauldron2", .bottles,\ ; name, routine
-4, 0, $0000, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props
$F36D, 0,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("green_cauldron2", .bottles,\ ; name, routine
-4, 0, $0000, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props
$F36E, 0,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
; $30
%ritem("blue_cauldron2", .bottles,\ ; name, routine
-4, 0, $0000, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props
$F36E, 0,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("10_bombs", .addBombs,\ ; name, routine
-4, 0, $0500, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props
$F375, 10,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("big_key", .palaceItem,\ ; name, routine
-4, 0, $0DC0, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props
$F366, 0,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("map", .palaceItem,\ ; name, routine
-4, 0, $0D80, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props
$F368, 0,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("1_rupee", .addRupees,\ ; name, routine
-2, 4, $1000, !THIN|!g,\ ; OAM y/x offset, GFX char offset, props
$F360, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("5_rupees", .addRupees,\ ; name, routine
-2, 4, $1000, !THIN|!b,\ ; OAM y/x offset, GFX char offset, props
$F360, 5,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("20_rupees", .addRupees,\ ; name, routine
-2, 4, $1000, !THIN|!r,\ ; OAM y/x offset, GFX char offset, props
$F360, 20,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("green_pendant", .palaceItem,\ ; name, routine
-4, 0, $1880, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props
$F374, 0,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
; $38
%ritem("blue_pendant", .palaceItem,\ ; name, routine
-4, 0, $1880, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props
$F374, 0,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("red_pendant", .palaceItem,\ ; name, routine
-4, 0, $1880, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props
$F374, 0,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("tossed_bow", .directWrite,\ ; name, routine
-4, 0, $1120, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props
$F340, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("silvers", .directWrite,\ ; name, routine
-4, 0, $10E0, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props
$F340, 3,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("good_bee", .bottles,\ ; name, routine
-4, 0, $11A0, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props
$F35C, 7,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("fairy", .bottles,\ ; name, routine
-4, 0, $1160, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props
$F35C, 6,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("boss_hc", .hc,\ ; name, routine
-4, 0, $00C0, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props
$F36C, 0,\ ; SRAM address, SRAM value
$FFFF,!hcsfx) ; Message, Sound
%ritem("sanc_hc", .4hp,\ ; name, routine
-4, 0, $00C0, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props
$F36C, 0,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
; $40
%ritem("100_rupees", .addRupees,\ ; name, routine
-4, 0, $1520, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props
$F360, 100,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("50_rupees", .addRupees,\ ; name, routine
-4, 0, $1560, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props
$F360, 50,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("heart", .addHeart,\ ; name, routine
-2, 4, $14C0, !THIN|!r,\ ; OAM y/x offset, GFX char offset, props
$F372, 8,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("arrow", .addArrows,\ ; name, routine
-2, 4, $1500, !THIN|!b,\ ; OAM y/x offset, GFX char offset, props
$F376, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("10_arrows", .addArrows,\ ; name, routine
-4, 0, $0080, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props
$F376, 10,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("small_magic", .addMagic,\ ; name, routine
-2, 4, $14E0, !THIN|!g,\ ; OAM y/x offset, GFX char offset, props
$F373, 16,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("300_rupees", .add300Rupees,\ ; name, routine
-4, 0, $15A0, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props
$F360, 0,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("20_rupees_green", .addRupees,\ ; name, routine
-4, 0, $1800, !WIDE|!g,\ ; OAM y/x offset, GFX char offset, props
$F360, 20,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
; $48
%ritem("gold_bee", .bottles,\ ; name, routine
-4, 0, $11A0, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props
$F35C, 8,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("tossed_fighter_sword", .directWrite,\ ; name, routine
-5, 4, $0420, !THIN|!e,\ ; OAM y/x offset, GFX char offset, props
$F359, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("active_flute", .directWrite,\ ; name, routine
-4, 0, $1440, !WIDE|!b,\ ; OAM y/x offset, GFX char offset, props
$F34C, 3,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("boots", .boots,\ ; name, routine
-4, 0, $1840, !WIDE|!r,\ ; OAM y/x offset, GFX char offset, props
$F355, 1,\ ; SRAM address, SRAM value
$FFFF,!dodododo) ; Message, Sound
%ritem("Bomb_50"
%ritem("Arrow_70"
%ritem("Half_Magic"
%ritem("Quarter_Magic"
; $50
%ritem("Safe_MS"
%ritem("Bomb_plus5"
%ritem("Bomb_plus10"
%ritem("Arrow_plus5"
%ritem("Arrow_plus10"
%ritem("PRGM_1"
%ritem("PRGM_2"
%ritem("PRGM_3"
; $58
%ritem("Upgrade_Silvers"
%ritem("Rupoor"
%ritem("NULL"
%ritem("Clock_red"
%ritem("Clock_blue"
%ritem("Clock_green"
%ritem("Prog_Sword"
%ritem("Prog_Shield"
; $60
%ritem("Prog_Mail"
%ritem("Prog_Glove"
%ritem("RNG_Single"
%ritem("RNG_Multi"
%ritem("Prog_Bow"
%ritem("Prog_Bow"
%ritem(
%ritem(
; $68
%ritem(
%ritem(
%ritem("Goal_Trifoce"
%ritem("Goal_Multi_Star"
%ritem("Goal_Multi_Triforce"
%ritem("Server_F0"
%ritem("Server_F1"
%ritem("Server_F2"
; $70
%ritem("
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
; $78
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
; $80
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
; $88
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
; $90
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
; $98
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
; $A0
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
; $A8
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
; $B0
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
; $B8
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
; $C0
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
; $C8
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
; $D0
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
; $D8
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
; $E0
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
; $E8
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
; $F0
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
; $F8
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem(
%ritem("Server_async"
%ritem("NULL_2"
org $08C3AE
Ancilla_ReceiveItem:

View File

@@ -12,11 +12,18 @@ RTL
InitOpenMode:
LDA.l OpenMode : BEQ + ; Skip if not open mode
LDA $7EF3C5 : CMP #$02 : !BGE + ; Skip if already past escape
LDA.b #02 : STA $7EF3C5 ; Go to post-escape phase (pre aga1)
LDA.b #$02 : STA $7EF3C5 ; Go to post-escape phase (pre aga1)
LDA $7EF3C6 : ORA #$14 : STA $7EF3C6 ; remove uncle
LDA $7EF3C8 : CMP #$05 : BEQ ++ : LDA.b #$01 : ++ : STA $7EF3C8 ; set spawn points to house+sanc unless already house+sanc+mountain
LDA $7EF29B : ORA.b #$20 : STA $7EF29B ; open castle gate
RTL
JSL MaybeSetPostAgaWorldState
+
RTL
;--------------------------------------------------------------------------------
MaybeSetPostAgaWorldState:
LDA.l InstantPostAgaWorldState : BEQ + ; Skip if not enabled
LDA.b #$03 : STA $7EF3C5 ; Go to post-aga phase
LDA $7EF282 : ORA.b #$20 : STA $7EF282 ; make lumberjack tree accessible
+
RTL
;--------------------------------------------------------------------------------

View File

@@ -167,7 +167,7 @@ ValidatePassword:
LDX #$0F
-
LDA.l !PASSWORD_SRAM, X : BNE +
BRL .incorrect
JMP .incorrect
+
DEX : BPL -

View File

@@ -56,7 +56,7 @@ RTL
!MAP_OVERLAY = "$7EF414" ; [2]
OverworldMap_CheckObject:
PHX
;CPX.b #$01 : BNE + : BRL ++ : + : BRL .fail
;CPX.b #$01 : BNE + : JMP ++ : + : JMP .fail
LDA $7EF3CA : AND.b #$40 : BNE +
;LW Map
LDA.l MapMode : BEQ +++
@@ -66,7 +66,7 @@ OverworldMap_CheckObject:
LDA !INVENTORY_MAP, X : ORA !MAP_OVERLAY, X
PLX
AND.l .lw_map_masks, X : BNE +++
BRL .fail
JMP .fail
+++
LDA.l .lw_offsets, X
BPL +++ : CLC : BRA .done : +++ ; don't display master sword
@@ -80,7 +80,7 @@ OverworldMap_CheckObject:
LDA.l !INVENTORY_MAP, X : ORA !MAP_OVERLAY, X
PLX
AND.l .dw_map_masks, X : BNE +++
BRL .fail
JMP .fail
+++
LDA.l .dw_offsets, X
TAX : BRA ++
@@ -265,194 +265,262 @@ DrawMoonPearlInMenuLocation:
RTL
;--------------------------------------------------------------------------------
DrawHUDDungeonItems:
LDA.l HUDDungeonItems : BNE + : RTL : +
LDA.l HUDDungeonItems : BNE .continue
RTL
.dungeon_positions
dw 0 ; Hyrule Castle
dw 2 ; Agahnims Tower
dw 6 ; Eastern
dw 8 ; Desert
dw 10 ; Hera
dw 14 ; PoD
dw 16 ; Swamp
dw 18 ; Skull Woods
dw 20 ; Thieves Town
dw 22 ; Ice
dw 24 ; Mire
dw 26 ; Turtle Rock
dw 30 ; Ganon's Tower
.small_key_x_offset
dw $7EF37D-$7EF37D ; Hyrule Castle
dw $7EF380-$7EF37D ; Agahnims Tower
dw $7EF37E-$7EF37D ; Eastern
dw $7EF37F-$7EF37D ; Desert
dw $7EF386-$7EF37D ; Hera
dw $7EF382-$7EF37D ; PoD
dw $7EF381-$7EF37D ; Swamp
dw $7EF384-$7EF37D ; Skull Woods
dw $7EF387-$7EF37D ; Thieves Town
dw $7EF385-$7EF37D ; Ice
dw $7EF383-$7EF37D ; Mire
dw $7EF388-$7EF37D ; Turtle Rock
dw $7EF389-$7EF37D ; Ganon's Tower
.dungeon_bitmasks
dw $4000 ; Hyrule Castle
dw $0800 ; Agahnims Tower
dw $2000 ; Eastern
dw $1000 ; Desert
dw $0020 ; Hera
dw $0200 ; PoD
dw $0400 ; Swamp
dw $0080 ; Skull Woods
dw $0010 ; Thieves Town
dw $0040 ; Ice
dw $0100 ; Mire
dw $0008 ; Turtle Rock
dw $0004 ; Ganon's Tower
.boss_room_ids
dw $80*2 ; ; Hyrule Castle (BNC)
dw $20*2 ; ; Agahnim
dw $C8*2 ; ; Eastern
dw $33*2 ; ; Desert
dw $07*2 ; ; Hera
dw $5A*2 ; ; PoD
dw $06*2 ; ; Swamp
dw $29*2 ; ; Skull Woods
dw $AC*2 ; ; Thieves Town
dw $DE*2 ; ; Ice
dw $90*2 ; ; Mire
dw $A4*2 ; ; Turtle Rock
dw $0D*2 ; ; Ganon's Tower
.continue
PHP
REP #$30 ; set 16-bit accumulator & index registers
PHB
PHK
PLB
REP #$30
;-------------------------------------------------------------------------------
; dungeon names
LDA.w #$2D50 : STA $1646 ; sewers
LDA.w #$2D54 : STA $1648 ; Agahnims Tower
LDA.w #$2D50
LDA.w #$2D51 : STA $164C ; Eastern
LDA.w #$2D52 : STA $164E ; Desert
LDA.w #$2D53 : STA $1650 ; Hera
LDY.w #0
LDA.w #$2D55 : STA $1654 ; PoD
LDA.w #$2D56 : STA $1656 ; Swamp
LDA.w #$2D57 : STA $1658 ; Skull Woods
LDA.w #$2D58 : STA $165A ; Thieves Town
LDA.w #$2D59 : STA $165C ; Ice
LDA.w #$2D5A : STA $165E ; Mire
LDA.w #$2D5B : STA $1660 ; Turtle Rock
LDA.w #$2D5C : STA $1664 ; Ganon's Tower
.next_dungeon_name
LDX.w .dungeon_positions,Y
STA.w $1646,X
INC
INY : INY
CPY.w #26 : BCC .next_dungeon_name
; write black
LDX.w #$0000 ; Paint entire box black & draw empty pendants and crystals
-
LDA #$24F5 : STA $1686, X : STA $16C6, X
INX #2 : CPX.w #$0020 : BCC -
LDX.w #$001E
LDA.w #$24F5
LDA !HUD_FLAG : AND.w #$0020 : BEQ + : BRL +++ : +
LDA HUDDungeonItems : AND.w #$0001 : BNE + : BRL ++ : +
-- STA.w $1686,X
STA.w $16C6,X
STA.w $1706,X
DEX : DEX : BPL --
LDA.l !HUD_FLAG : AND.w #$0020 : BEQ +
JMP .maps_and_compasses
+
;-------------------------------------------------------------------------------
LDA HUDDungeonItems : AND.w #$0001 : BEQ .skip_small_keys
.draw_small_keys
LDA.w #$2810 : STA $1684 ; small keys icon
SEP #$20 ; set 8-bit accumulator
; Small Keys
LDA.b #$16 : !ADD $7EF37D : STA $1686 : LDA.b #$28 : ADC #$00 : sta.w $1686+1 ; Hyrule Castle
LDA.b #$16 : !ADD $7EF380 : STA $1688 : LDA.b #$28 : ADC #$00 : sta.w $1688+1 ; Agahnims Tower
LDA.b #$16 : !ADD $7EF37E : STA $168C : LDA.b #$28 : ADC #$00 : sta.w $168C+1 ; Eastern
LDA.b #$16 : !ADD $7EF37F : STA $168E : LDA.b #$28 : ADC #$00 : sta.w $168E+1 ; Desert
LDA.b #$16 : !ADD $7EF386 : STA $1690 : LDA.b #$28 : ADC #$00 : sta.w $1690+1 ; Hera
LDY.w #0
LDA.b #$16 : !ADD $7EF382 : STA $1694 : LDA.b #$28 : ADC #$00 : sta.w $1694+1 ; PoD
LDA.b #$16 : !ADD $7EF381 : STA $1696 : LDA.b #$28 : ADC #$00 : sta.w $1696+1 ; Swamp
LDA.b #$16 : !ADD $7EF384 : STA $1698 : LDA.b #$28 : ADC #$00 : sta.w $1698+1 ; Skull Woods
LDA.b #$16 : !ADD $7EF387 : STA $169A : LDA.b #$28 : ADC #$00 : sta.w $169A+1 ; Thieves Town
LDA.b #$16 : !ADD $7EF385 : STA $169C : LDA.b #$28 : ADC #$00 : sta.w $169C+1 ; Ice
LDA.b #$16 : !ADD $7EF383 : STA $169E : LDA.b #$28 : ADC #$00 : sta.w $169E+1 ; Mire
LDA.b #$16 : !ADD $7EF388 : STA $16A0 : LDA.b #$28 : ADC #$00 : sta.w $16A0+1 ; Turtle Rock
; Clear the carry only once
; it will be cleared by looping condition afterwards
CLC
LDA.b #$16 : !ADD $7EF389 : STA $16A4 : LDA.b #$28 : ADC #$00 : sta.w $16A4+1 ; Ganon's Tower
.next_small_key
LDX.w .small_key_x_offset,Y
LDA.l $7EF37D,X
AND.w #$00FF
REP #$20 ; set 16-bit accumulator
++
LDX.w .dungeon_positions,Y
ADC.w #$2816
STA.w $1686,X
INY : INY
CPY.w #26 : BCC .next_small_key
;-------------------------------------------------------------------------------
.skip_small_keys
; Big Keys
LDA HUDDungeonItems : AND.w #$0002 : BNE + : BRL ++ : +
LDA HUDDungeonItems : AND.w #$0002 : BEQ .skip_big_keys
LDA.w #$2811 : STA $16C4 ; big key icon
LDA $7EF367 : AND.w #$0040 : BEQ + ; Hyrule Castle
LDA.w #$2826 : STA $16C6
+
LDA $7EF367 : AND.w #$0008 : BEQ + ; Agahnims Tower
LDA.w #$2826 : STA $16C8
+
LDA $7EF367 : AND.w #$0020 : BEQ + ; Eastern
LDA.w #$2826 : STA $16CC
+
LDA $7EF367 : AND.w #$0010 : BEQ + ; Desert
LDA.w #$2826 : STA $16CE
+
LDA $7EF366 : AND.w #$0020 : BEQ + ; Hera
LDA.w #$2826 : STA $16D0
+
LDA $7EF367 : AND.w #$0002 : BEQ + ; PoD
LDA.w #$2826 : STA $16D4
+
LDA $7EF367 : AND.w #$0004 : BEQ + ; Swamp
LDA.w #$2826 : STA $16D6
+
LDA $7EF366 : AND.w #$0080 : BEQ + ; Skull Woods
LDA.w #$2826 : STA $16D8
+
LDA $7EF366 : AND.w #$0010 : BEQ + ; Thieves Town
LDA.w #$2826 : STA $16DA
+
LDA $7EF366 : AND.w #$0040 : BEQ + ; Ice
LDA.w #$2826 : STA $16DC
+
LDA $7EF367 : AND.w #$0001 : BEQ + ; Mire
LDA.w #$2826 : STA $16DE
+
LDA $7EF366 : AND.w #$0008 : BEQ + ; Turtle Rock
LDA.w #$2826 : STA $16E0
+
LDA $7EF366 : AND.w #$0004 : BEQ + ; Ganon's Tower
LDA.w #$2826 : STA $16E4
+
++
; use X so we can BIT
LDX.w #0
; load once and test multiple times
LDA.l $7EF366
.next_big_key
BIT.w .dungeon_bitmasks,X
BEQ ..skip_key
LDY.w .dungeon_positions,X
LDA.w #$2826
STA.w $16C6,Y
; reload
LDA.l $7EF366
..skip_key
INX : INX
CPX.w #26 : BCC .next_big_key
;-------------------------------------------------------------------------------
.skip_big_keys
LDA HUDDungeonItems : AND.w #$0010 : BEQ .skip_boss_kills
LDA.w #$280F : STA $1704 ; skull icon
LDY.w #0
.next_boss_kill
LDX.w .boss_room_ids,Y
LDA.l $7EF000,X
AND.w #$0400
BEQ ..skip_boss_kill
LDA.w #$2826
LDX.w .dungeon_positions,Y
STA.w $1706,Y
..skip_boss_kill
INY : INY
CPY.w #26 : BCC .next_boss_kill
;-------------------------------------------------------------------------------
.skip_boss_kills
JMP .exit
;-------------------------------------------------------------------------------
; This should only display if select is pressed in hud
+++
LDA !HUD_FLAG : AND.w #$0020 : BNE + : BRL +++ : +
.maps_and_compasses
; Maps
LDA HUDDungeonItems : AND.w #$0004 : BNE + : BRL ++ : +
LDA HUDDungeonItems : AND.w #$0004 : BEQ .skip_maps
LDA.w #$2821 : STA $1684 ; map icon
LDA $7EF369 : AND.w #$0040 : BEQ + ; Hyrule Castle
LDA.w #$2826 : STA $1686
+
LDA $7EF369 : AND.w #$0008 : BEQ + ; Agahnims Tower
LDA.w #$2826 : STA $1688
+
LDA $7EF369 : AND.w #$0020 : BEQ + ; Eastern
LDA.w #$2826 : STA $168C
+
LDA $7EF369 : AND.w #$0010 : BEQ + ; Desert
LDA.w #$2826 : STA $168E
+
LDA $7EF368 : AND.w #$0020 : BEQ + ; Hera
LDA.w #$2826 : STA $1690
+
LDA $7EF369 : AND.w #$0002 : BEQ + ; PoD
LDA.w #$2826 : STA $1694
+
LDA $7EF369 : AND.w #$0004 : BEQ + ; Swamp
LDA.w #$2826 : STA $1696
+
LDA $7EF368 : AND.w #$0080 : BEQ + ; Skull Woods
LDA.w #$2826 : STA $1698
+
LDA $7EF368 : AND.w #$0010 : BEQ + ; Thieves Town
LDA.w #$2826 : STA $169A
+
LDA $7EF368 : AND.w #$0040 : BEQ + ; Ice
LDA.w #$2826 : STA $169C
+
LDA $7EF369 : AND.w #$0001 : BEQ + ; Mire
LDA.w #$2826 : STA $169E
+
LDA $7EF368 : AND.w #$0008 : BEQ + ; Turtle Rock
LDA.w #$2826 : STA $16A0
+
LDA $7EF368 : AND.w #$0004 : BEQ + ; Ganon's Tower
LDA.w #$2826 : STA $16A4
+
++
; use X so we can BIT
LDX.w #0
; load once and test multiple times
LDA.l $7EF368
.next_map
BIT.w .dungeon_bitmasks,X
BEQ ..skip_map
LDY.w .dungeon_positions,X
LDA.w #$2826
STA.w $1686,Y
; reload
LDA.l $7EF368
..skip_map
INX : INX
CPX.w #26 : BCC .next_map
;-------------------------------------------------------------------------------
.skip_maps
; Compasses
LDA HUDDungeonItems : AND.w #$0008 : BNE + : BRL ++ : +
LDA HUDDungeonItems : AND.w #$0008 : BEQ .skip_compasses
LDA.w #$2C20 : STA $16C4 ; compass icon
LDA $7EF365 : AND.w #$0040 : BEQ + ; Hyrule Castle
LDA.w #$2C26 : STA $16C6
+
LDA $7EF365 : AND.w #$0008 : BEQ + ; Agahnims Tower
LDA.w #$2C26 : STA $16C8
+
LDA $7EF365 : AND.w #$0020 : BEQ + ; Eastern
LDA.w #$2C26 : STA $16CC
+
LDA $7EF365 : AND.w #$0010 : BEQ + ; Desert
LDA.w #$2C26 : STA $16CE
+
LDA $7EF364 : AND.w #$0020 : BEQ + ; Hera
LDA.w #$2C26 : STA $16D0
+
LDA $7EF365 : AND.w #$0002 : BEQ + ; PoD
LDA.w #$2C26 : STA $16D4
+
LDA $7EF365 : AND.w #$0004 : BEQ + ; Swamp
LDA.w #$2C26 : STA $16D6
+
LDA $7EF364 : AND.w #$0080 : BEQ + ; Skull Woods
LDA.w #$2C26 : STA $16D8
+
LDA $7EF364 : AND.w #$0010 : BEQ + ; Thieves Town
LDA.w #$2C26 : STA $16DA
+
LDA $7EF364 : AND.w #$0040 : BEQ + ; Ice
LDA.w #$2C26 : STA $16DC
+
LDA $7EF365 : AND.w #$0001 : BEQ + ; Mire
LDA.w #$2C26 : STA $16DE
+
LDA $7EF364 : AND.w #$0008 : BEQ + ; Turtle Rock
LDA.w #$2C26 : STA $16E0
+
LDA $7EF364 : AND.w #$0004 : BEQ + ; Ganon's Tower
LDA.w #$2C26 : STA $16E4
+
++ : +++
; use X so we can BIT
LDX.w #0
; load once and test multiple times
LDA.l $7EF364
.next_compass
BIT.w .dungeon_bitmasks,X
BEQ ..skip_compass
LDY.w .dungeon_positions,X
LDA.w #$2826
STA.w $16C6,Y
; reload
LDA.l $7EF364
..skip_compass
INX : INX
CPX.w #26 : BCC .next_compass
;-------------------------------------------------------------------------------
.skip_compasses
.exit
PLB
PLP
RTL
;--------------------------------------------------------------------------------
@@ -462,58 +530,77 @@ 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 $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
INX #2 : CPX.w #$0014 : BCC -
;pendants
LDA $7EF374 : AND.w #$0004 : BEQ + ; pendant of courage (green)
LDA.w #$3D2B : STA $1332
LDA.w #$3D2C : STA $1334
LDA.w #$3D2D : STA $1372
LDA.w #$3D2E : STA $1374
+ LDA $7EF374 : AND.w #$0002 : BEQ + ; pendant of power (blue)
LDA.w #$2D2B : STA $13AE
LDA.w #$2D2C : STA $13B0
LDA.w #$2D2D : STA $13EE
LDA.w #$2D2E : STA $13F0
+ LDA $7EF374 : AND.w #$0001 : BEQ + ; pendant of wisdom (red)
LDA.w #$252B : STA $13B6
LDA.w #$252C : STA $13B8
LDA.w #$252D : STA $13F6
LDA.w #$252E : STA $13F8
; pendants
LDA $7EF374
LSR : BCC + ; pendant of wisdom (red)
LDX.w #$252B
STX.w $13B6
INX : STX.w $13B8
INX : STX.w $13F6
INX : STX.w $13F8
+ LSR : BCC + ; pendant of power (blue)
LDX.w #$2D2B
STX.w $13AE
INX : STX.w $13B0
INX : STX.w $13EE
INX : STX.w $13F0
+ LSR : BCC + ; pendant of courage (green)
LDX.w #$3D2B
STX.w $1332
INX : STX.w $1334
INX : STX.w $1372
INX : STX.w $1374
+
;crystals
LDA $7EF37A : AND.w #$0002 : BEQ + ; crystal 1
LDA.w #$2D44 : STA $14AC
LDA.w #$2D45 : STA $14AE
+ LDA $7EF37A : AND.w #$0010 : BEQ + ; crystal 2
LDA.w #$2D44 : STA $146E
LDA.w #$2D45 : STA $1470
+ LDA $7EF37A : AND.w #$0040 : BEQ + ; crystal 3
LDA.w #$2D44 : STA $14B0
LDA.w #$2D45 : STA $14B2
+ LDA $7EF37A : AND.w #$0020 : BEQ + ; crystal 4
LDA.w #$2D44 : STA $1472
LDA.w #$2D45 : STA $1474
+ LDA $7EF37A : AND.w #$0004 : BEQ + ; crystal 5
LDA.w #$2544 : STA $14B4
LDA.w #$2545 : STA $14B6
+ LDA $7EF37A : AND.w #$0001 : BEQ + ; crystal 6
LDA.w #$2544 : STA $1476
LDA.w #$2545 : STA $1478
+ LDA $7EF37A : AND.w #$0008 : BEQ + ; crystal 7
LDA.w #$2D44 : STA $14B8
LDA.w #$2D45 : STA $14BA
; crystals
LDA $7EF37A
LDX.w #$2D44
LDY.w #$2D45
BIT.w #$0002 : BEQ + ; crystal 1
STX.w $14AC
STY.w $14AE
+ BIT.w #$0010 : BEQ + ; crystal 2
STX.w $146E
STY.w $1470
+ BIT.w #$0040 : BEQ + ; crystal 3
STX.w $14B0
STY.w $14B2
+ BIT.w #$0020 : BEQ + ; crystal 4
STX.w $1472
STY.w $1474
+ BIT.w #$0008 : BEQ + ; crystal 7
STX.w $14B8
STY.w $14BA
+
LDX.w #$2544
LDY.w #$2545
BIT.w #$0004 : BEQ + ; crystal 5
STX.w $14B4
STY.w $14B6
+ BIT.w #$0001 : BEQ + ; crystal 6
STX.w $1476
STY.w $1478
+
PLB : PLP
RTL
;================================================================================

View File

@@ -32,6 +32,7 @@ QuickSwap:
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
@@ -48,20 +49,20 @@ RTL
RCode:
LDA.w $0202 : TAX
-
CPX.b #$0F : BNE + ; incrementing into bottle
LDX.b #$00 : BRA ++
+ CPX.b #$10 : BNE + ; incrementing bottle
LDA.l $7EF34F : TAX
-- : ++
CPX.b #$04 : BEQ .noMoreBottles
INX
LDA.l $7EF35B,X : BEQ --
TXA : STA.l $7EF34F
LDX #$10
RTS
.noMoreBottles
LDX #$11
BRA .nextItem
; CPX.b #$0F : BNE + ; incrementing into bottle
; LDX.b #$00 : BRA ++
; + CPX.b #$10 : BNE + ; incrementing bottle
; LDA.l $7EF34F : TAX
; -- : ++
; CPX.b #$04 : BEQ .noMoreBottles
; INX
; LDA.l $7EF35B,X : BEQ --
; TXA : STA.l $7EF34F
; LDX #$10
; RTS
; .noMoreBottles
; LDX #$11
; BRA .nextItem
+ CPX.b #$14 : BNE + : LDX.b #$00 ;will wrap around to 1
+ INX
.nextItem
@@ -71,19 +72,19 @@ RTS
LCode:
LDA.w $0202 : TAX
-
CPX.b #$11 : BNE + ; decrementing into bottle
LDX.b #$05 : BRA ++
+ CPX.b #$10 : BNE + ; decrementing bottle
LDA.l $7EF34F : TAX
-- : ++
CPX.b #$01 : BEQ .noMoreBottles
DEX
LDA.l $7EF35B,X : BEQ --
TXA : STA.l $7EF34F
LDX.b #$10
RTS
.noMoreBottles
LDX.b #$0F : BRA .nextItem
; CPX.b #$11 : BNE + ; decrementing into bottle
; LDX.b #$05 : BRA ++
; + CPX.b #$10 : BNE + ; decrementing bottle
; LDA.l $7EF34F : TAX
; -- : ++
; CPX.b #$01 : BEQ .noMoreBottles
; DEX
; LDA.l $7EF35B,X : BEQ --
; TXA : STA.l $7EF34F
; LDX.b #$10
; RTS
; .noMoreBottles
; LDX.b #$0F : BRA .nextItem
+ CPX.b #$01 : BNE + : LDX.b #$15 ; will wrap around to $14
+ DEX
.nextItem

View File

@@ -107,9 +107,9 @@ RTL
!RNG_POINTERS = "$7F5200"
GetStaticRNG:
PHX : PHP
REP #$20 ; set 16-bit accumulator and index registers
AND.w #$007F
ASL : TAX : LDA !RNG_POINTERS, X : INC : AND.w #$03FF : STA !RNG_POINTERS, X : TAX : ASL ; increment pointer and move value to X
REP #$30 ; set 16-bit accumulator and index registers
AND.w #$000F
ASL : TAX : LDA !RNG_POINTERS, X : INC : AND.w #$03FF : STA !RNG_POINTERS, X : TAX ; increment pointer and move value to X
LDA Static_RNG, X ; load RNG value
PLP : PLX
RTL
@@ -123,7 +123,7 @@ InitRNGPointerTable:
LDA.l .rngDefaults, X : STA !RNG_POINTERS, X : INX #2
LDA.l .rngDefaults, X : STA !RNG_POINTERS, X : INX #2
LDA.l .rngDefaults, X : STA !RNG_POINTERS, X : INX #2
CPX.w #$007F : !BLT -
CPX.w #$001F : !BLT -
PLP : PLX
RTL
.rngDefaults

View File

@@ -1,5 +1,13 @@
;--------------------------------------------------------------------------------
Validate_SRAM:
REP #$30 ; vanilla behavior from $0CCD45, includes prize pack reset after save and quit
LDX #$00FE : -
STZ $0D00, X
STZ $0E00, X
STZ $0F00, X
DEX #2
BPL -
SEP #$30
RTL
;--------------------------------------------------------------------------------
ClearExtendedSaveFile:

View File

@@ -70,10 +70,10 @@ DrawPrice:
LDY.b #$FF
LDX #$00 ; clear bigram pointer
LDA $0C : CMP.w #1000 : !BLT + : BRL .len4 : +
CMP.w #100 : !BLT + : BRL .len3 : +
CMP.w #10 : !BLT + : BRL .len2 : +
CMP.w #1 : !BLT + : BRL .len1 : +
LDA $0C : CMP.w #1000 : !BLT + : JMP .len4 : +
CMP.w #100 : !BLT + : JMP .len3 : +
CMP.w #10 : !BLT + : JMP .len2 : +
CMP.w #1 : !BLT + : JMP .len1 : +
.len4
%DrawDigit(#1000,#6)
@@ -149,7 +149,7 @@ SpritePrep_ShopKeeper:
.fail
SEP #$20 ; set 8-bit accumulator
LDA.b #$FF : STA !SHOP_TYPE ; $FF = error condition
BRL .done
JMP .done
.success
SEP #$20 ; set 8-bit accumulator
@@ -157,10 +157,10 @@ SpritePrep_ShopKeeper:
LDX.w #$0000
LDY.w #$0000
-
TYA : CMP !SHOP_CAPACITY : !BLT ++ : BRL .stop : ++
LDA.l ShopContentsTable+1, X : CMP.b #$FF : BNE ++ : BRL .stop : ++
TYA : CMP !SHOP_CAPACITY : !BLT ++ : JMP .stop : ++
LDA.l ShopContentsTable+1, X : CMP.b #$FF : BNE ++ : JMP .stop : ++
LDA.l ShopContentsTable, X : CMP !SHOP_ID : BEQ ++ : BRL .next : ++
LDA.l ShopContentsTable, X : CMP !SHOP_ID : BEQ ++ : JMP .next : ++
LDA.l ShopContentsTable+1, X : PHX : TYX : STA.l !SHOP_INVENTORY, X : PLX
LDA.l ShopContentsTable+2, X : PHX : TYX : STA.l !SHOP_INVENTORY+1, X : PLX
LDA.l ShopContentsTable+3, X : PHX : TYX : STA.l !SHOP_INVENTORY+2, X : PLX
@@ -191,7 +191,7 @@ SpritePrep_ShopKeeper:
.next
INX #8
BRL -
JMP -
.stop
;LDA $A0 : CMP.b #$FF : BNE .normal
@@ -289,7 +289,7 @@ Shopkeeper_UploadVRAMTiles:
LDA #$7E : STA $4304
LDA !SHOP_TYPE : AND.b #$10 : BNE .special
BRL .normal
JMP .normal
.special
@@ -322,7 +322,7 @@ Shopkeeper_UploadVRAMTiles:
LDA #$80 : STA $2116 ; set VRAM register destination address
LDA #$5B : STA $2117
LDA #$01 : STA $420B ; begin DMA transfer
BRL .end
JMP .end
.normal
LDA #$40 : STA $4305 : STZ $4306 ; set transfer size to 0x40
@@ -456,9 +456,9 @@ endmacro
Shopkeeper_DrawMerchant:
LDA.l !SHOP_MERCHANT : AND.b #$07
BEQ Shopkeeper_DrawMerchant_Type0
CMP.b #$01 : BNE + : BRL Shopkeeper_DrawMerchant_Type1 : +
CMP.b #$02 : BNE + : BRL Shopkeeper_DrawMerchant_Type2 : +
CMP.b #$03 : BNE + : BRL Shopkeeper_DrawMerchant_Type3 : +
CMP.b #$01 : BNE + : JMP Shopkeeper_DrawMerchant_Type1 : +
CMP.b #$02 : BNE + : JMP Shopkeeper_DrawMerchant_Type2 : +
CMP.b #$03 : BNE + : JMP Shopkeeper_DrawMerchant_Type3 : +
CMP.b #$04 : BNE + : RTS : +
;--------------------------------------------------------------------------------
Shopkeeper_DrawMerchant_Type0:
@@ -546,13 +546,13 @@ Shopkeeper_BuyItem:
LDY.b #$01
JSL.l Sprite_ShowMessageUnconditional
LDA.b #$3C : STA $012E ; error sound
BRL .done
JMP .done
.full_bottles
LDA.b #$6B
LDY.b #$01
JSL.l Sprite_ShowMessageUnconditional
LDA.b #$3C : STA $012E ; error sound
BRL .done
JMP .done
.buy
LDA !SHOP_TYPE : AND.b #$80 : BNE ++ ; don't charge if this is a take-any
REP #$20 : LDA $7EF360 : !SUB !SHOP_INVENTORY+1, X : STA $7EF360 : SEP #$20 ; Take price away
@@ -707,7 +707,7 @@ RTS
;--------------------------------------------------------------------------------
Shopkeeper_DrawNextItem:
LDA.l !SHOP_STATE : AND.w Shopkeeper_ItemMasks, Y : BEQ + : BRL .next : +
LDA.l !SHOP_STATE : AND.w Shopkeeper_ItemMasks, Y : BEQ + : JMP .next : +
PHY

View File

@@ -244,7 +244,8 @@ IncrementSmallKeysNoPrimary:
LDA $1B : BEQ + ; skip room check if outdoors
PHP : REP #$20 ; set 16-bit accumulator
LDA $048E : CMP.w #$0087 : BNE ++ ; hera basement
PLP : PHY : LDY.b #24 : JSL.l FullInventoryExternal : PLY : BRA +
PLP : PHY : LDY.b #$24 : JSL.l FullInventoryExternal
JSR CountChestKey : PLY : BRA +
++
PLP
+
@@ -264,12 +265,15 @@ RTL
CountChestKey: ; called by neighbor functions
PHA : PHX
CPY #$24 : BEQ + ; small key for this dungeon - use $040C
CPY #$A0 : !BLT .end ; Ignore most items
CPY #$AE : !BGE .end ; Ignore reserved key and generic key
TYA : AND.B #$0F : BNE ++ ; If this is a sewers key, instead count it as an HC key
INC
++ TAX : BRA .count ; use Key id instead of $040C (Keysanity)
+ LDA $040C : LSR : TAX
CPY #$A0 : !BLT .end ; Ignore most items
CPY #$AE : !BGE .end ; Ignore reserved key and generic key
TYA : AND.B #$0F : BNE ++ ; If this is a sewers key, instead count it as an HC key
INC
++ TAX : BRA .count ; use Key id instead of $040C (Keysanity)
+ LDA $040C : LSR
BNE +
INC ; combines HC and Sewer counts
+ TAX
.count
LDA $7EF4E0, X : INC : STA $7EF4E0, X
.end

View File

@@ -226,7 +226,7 @@ RenderCreditsStatCounter:
JSR FindLine
BCS +
BRL .endStats
JMP .endStats
+
; XXXX X00L LLLL LLLL BBBB SSSS CCC- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA
@@ -237,7 +237,7 @@ RenderCreditsStatCounter:
AND #$0003 ; TT
CMP.w #$0000
BEQ .normalStat
BRL .timeStat
JMP .timeStat
.normalStat
; == Write Stripe header (VRAM address, i.e. tile coordinates) ==
@@ -491,7 +491,7 @@ RenderCreditsStatCounter:
%StripeTile()
%StripeEnd()
BRL .endStats
JMP .endStats
RenderLineNumber:

View File

@@ -166,7 +166,7 @@ GetSmithSword:
;================================================================================
CheckMedallionSword:
PHB : PHX : PHY
LDA.l AllowSwordlessMedallionUse : BNE +++ : BRL + : +++
LDA.l AllowSwordlessMedallionUse : BNE +++ : JMP + : +++
LDA $1B : BEQ .outdoors
.indoors
REP #$20 ; set 16-bit accumulator
@@ -174,11 +174,11 @@ CheckMedallionSword:
CMP.w #$000E : BNE ++ : .freezor1
LDA $22 : AND.w #$01FF : CMP.w #368-8 : !BLT .normal : CMP.w #368+32-8 : !BGE .normal ; check x-coord
LDA $20 : AND.w #$01FF : CMP.w #400-22 : !BLT .normal : CMP.w #400+32-22 : !BGE .normal ; check y-coord
BRL .permit
JMP .permit
++ : CMP.w #$007E : BNE ++ : .freezor2
LDA $22 : AND.w #$01FF : CMP.w #112-8 : !BLT .normal : CMP.w #112+32-8 : !BGE .normal ; check x-coord
LDA $20 : AND.w #$01FF : CMP.w #400-22 : !BLT .normal : CMP.w #400+32-22 : !BGE .normal ; check y-coord
BRL .permit
JMP .permit
++ : CMP.w #$00DE : BNE ++ : .kholdstare
LDA $22 : AND.w #$01FF : CMP.w #368-8 : !BLT .normal : CMP.w #368+32-8 : !BGE .normal ; check x-coord
LDA $20 : AND.w #$01FF : CMP.w #144-22 : !BLT .normal : CMP.w #144+32-22 : !BGE .normal ; check y-coord

View File

@@ -184,7 +184,8 @@ db #$00 ; #$00 = Off (default) - #$01 = On
;--------------------------------------------------------------------------------
org $308045 ; PC 0x180045
HUDDungeonItems:
db #$00 ; display ----dcba a: Small Keys, b: Big Key, c: Map, d: Compass
; display ---edcba a: Small Keys, b: Big Key, c: Map, d: Compass, e: Bosses
db #$00
;--------------------------------------------------------------------------------
org $308046 ; PC 0x180046 Link's starting equipment
LinkStartingRupees:
@@ -380,7 +381,11 @@ org $30808C ; PC 0x18008C
PreopenGanonsTower:
db $00 ; #$00 = Off (default) - #$01 = On
;--------------------------------------------------------------------------------
; 0x18008D - 0x18008F (unused)
org $30808D ; PC 0x18008D
InstantPostAgaWorldState:
db $00 ; #$00 = Off (default) - #$01 = On
;--------------------------------------------------------------------------------
; 0x18008E - 0x18008F (unused)
;--------------------------------------------------------------------------------
org $308090 ; PC 0x180090 - 0x180097
ProgressiveSwordLimit:

View File

@@ -79,13 +79,13 @@ IsMedallion:
CMP.w #$03 : BNE + ; Death Mountain
LDA $22 : CMP.w #1890 : !BGE ++
SEC
BRL .done
JMP .done
++
BRA .false
+ CMP.w #$30 : BNE + ; Desert
LDA $22 : CMP.w #512 : !BLT ++
SEC
BRL .done
JMP .done
++
+
.false

View File

@@ -304,7 +304,7 @@ IsNarrowSprite:
JSR.w CountBottles : CMP.l BottleLimit : !BLT +
LDA.l BottleLimitReplacement
JSL.l IsNarrowSprite
BRL .done
JMP .done
+ : BRA .continue
.notBottle
CMP.b #$5E : BNE ++ ; Progressive Sword
@@ -627,16 +627,15 @@ RTL
; caller is responsible for setting 8-bit mode and preserving X and Y
;--------------------------------------------------------------------------------
CountBits:
PHB : PHK : PLB
TAX ; Save a copy of value
LSR #4 ; Shift down hi nybble, Leave <3> in C
TAY ; And save <7:4> in Y
TXA ; Recover value
AND.b #$07 ; Put out <2:0> in X
TAX ; And save in X
LDA NybbleBitCounts, Y; Fetch count for Y
ADC.l NybbleBitCounts, X; Add count for X & C
PLB
TAX ; Save a copy of value
LSR #4 ; Shift down hi nybble, Leave <3> in C
TAY ; And save <7:4> in Y
TXA ; Recover value
AND.b #$07 ; Put out <2:0> in X
TAX ; And save in X
LDA.l NybbleBitCounts, X ; Fetch count for <2:0>
TYX ; get <7:4>
ADC.l NybbleBitCounts, X ; Add count for Y & C
RTL
; Look up table of bit counts in the values $00-$0F

View File

@@ -5,15 +5,14 @@ SpawnZelda:
LDA.l $7EF3CC : CMP #$08 : BEQ + ; don't spawn if dwarf is present
CMP #$07 : BEQ + ; don't spawn if frog is present
CMP #$0C : BEQ + ; don't spawn if purple chest is present
CLC : RTL
+
SEC
RTL
CLC
+ RTL
;--------------------------------------------------------------------------------
EndRainState:
LDA $7EF3C5 : CMP.b #$02 : !BGE + ; skip if past escape already
LDA.b #$00 : STA !INFINITE_ARROWS : STA !INFINITE_BOMBS : STA !INFINITE_MAGIC
LDA.b #$02 : STA $7EF3C5 ; end rain state
JSL MaybeSetPostAgaWorldState
+
RTL
;--------------------------------------------------------------------------------

View File

@@ -3,8 +3,7 @@
;--------------------------------------------------------------------------------
LoadZoraKingItemGFX:
LDA.l $1DE1C3 ; location randomizer writes zora item to
JSL.l PrepDynamicTile
RTL
JML.l PrepDynamicTile
;--------------------------------------------------------------------------------
JumpToSplashItemTarget:
LDA $0D90, X