21 Commits

Author SHA1 Message Date
29d241bcbe Replace long strings of dbs with using a text table 2024-02-20 23:04:25 -06:00
Lexi Rose
dcb0a2b42d Merge pull request #214 from crossedstaves/master
Bomb count fix
2024-02-18 08:41:39 -08:00
crossedstaves
de8703e13f Update retro.asm
Fix to erroneous infinite bomb count
2024-02-17 16:27:42 -06:00
sporchia
2daa8daaae some register issues 2024-02-17 14:24:25 -06:00
Lexi Rose
ce8497e3d2 Merge pull request #213 from spannerisms/fixes
MSU, etc fix
2024-01-15 21:29:34 -06:00
spannerisms
014b3a719a fix things 2024-01-04 06:45:57 -05:00
Lexi Rose
85581b6813 Merge pull request #212 from cassidoxa/bonkkey
Update HUD when picking up bonk key
2024-01-02 11:33:56 -06:00
cassidoxa
cec4e0430b Fix narrow heart piece sprite shadow flickering 2024-01-02 00:26:12 -05:00
cassidoxa
d81a19c367 Update HUD when picking up bonk key 2024-01-01 22:29:14 -05:00
Lexi Rose
88ef1f385d Merge pull request #211 from cassidoxa/prize_ancilla
Fix dungeon prize ancilla spawn regression
2023-12-28 03:36:58 -06:00
cassidoxa
7001767c9b Fix dungeon prize ancilla spawn regression 2023-12-27 11:39:00 -05:00
Lexi Rose
7116cb6557 Merge pull request #210 from cassidoxa/bonkkey
Fix bonk key double count
2023-11-30 02:29:03 -06:00
cassidoxa
85e338ad67 Fix bonk key double count 2023-11-30 00:42:55 -05:00
Lexi Rose
032d15fba6 Merge pull request #209 from tcprescott/patreon
Names for Patreon Supporters
2023-09-22 23:43:22 -05:00
Thomas Prescott
f133ce7159 add some extra space 2023-09-22 23:09:35 -05:00
Thomas Prescott
c5d8c69396 fix PC addresses for patrons 2023-09-22 22:49:57 -05:00
Thomas Prescott
f71759754e patreon fields 2023-09-22 21:49:50 -05:00
Lexi Rose
507ba379cf Merge pull request #208 from cassidoxa/v31.2.0-fixes
Don't increment highest mail on final stats prep
2023-09-17 13:30:02 -05:00
cassidoxa
334f721a29 Don't increment highest mail on final stats prep 2023-09-17 12:02:54 -04:00
Lexi Rose
0fdb6ed133 Merge pull request #207 from cassidoxa/v31.2.0-fixes
Add time stamp for tossed fighter sword item
2023-09-10 01:31:32 -05:00
cassidoxa
cc36ccc0b1 Add time stamp for tossed fighter sword item 2023-09-10 00:55:03 -04:00
52 changed files with 2254 additions and 3568 deletions

2
.gitignore vendored
View File

@@ -1,3 +1,3 @@
tournament.asm tournament.asm
/build /build
/.idea /.idea

View File

@@ -155,9 +155,6 @@ incsrc toast.asm
incsrc fastcredits.asm incsrc fastcredits.asm
incsrc msu.asm incsrc msu.asm
incsrc dungeonmap.asm incsrc dungeonmap.asm
incsrc special_weapons.asm
incsrc variable_ganon_vulnerability.asm
incsrc item_on_b.asm
incsrc hextodec.asm incsrc hextodec.asm
incsrc textrenderer.asm incsrc textrenderer.asm
warnpc $A58000 warnpc $A58000
@@ -242,16 +239,6 @@ InvertedCastleHole: ;address used by front end. DO NOT MOVE!
incbin "data/sheet73.gfx" incbin "data/sheet73.gfx"
warnpc $B1E501 warnpc $B1E501
org $B1E800
Damage_Table_Bombs:
incbin "data/damage_table_sword_bombs.bin"
warnpc $B1F000
org $B1F000
Damage_Table_Pseudo:
incbin "data/damage_table_pseudo_sword.bin"
warnpc $B1F800
org $B38000 org $B38000
GFX_HUD_Palette: GFX_HUD_Palette:
incbin "data/hudpalette.pal" incbin "data/hudpalette.pal"

View File

@@ -65,11 +65,10 @@ GiveBonkItem:
PHY : LDY.b #$24 : JSL.l AddInventory : PLY ; do inventory processing for a small key PHY : LDY.b #$24 : JSL.l AddInventory : PLY ; do inventory processing for a small key
LDA.l CurrentSmallKeys : INC A : STA.l CurrentSmallKeys LDA.l CurrentSmallKeys : INC A : STA.l CurrentSmallKeys
LDA.b #$2F : JSL.l Sound_SetSfx3PanLong LDA.b #$2F : JSL.l Sound_SetSfx3PanLong
JSL CountBonkItem LDA.b #$01 : STA.l UpdateHUDFlag
RTL RTL
.notKey .notKey
PHY : TAY : JSL.l Link_ReceiveItem : PLY PHY : TAY : JSL.l Link_ReceiveItem : PLY
JSL CountBonkItem
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
LoadBonkItem: LoadBonkItem:

View File

@@ -2,4 +2,4 @@
rm ../working.sfc rm ../working.sfc
cp ../alttp.sfc ../working.sfc cp ../alttp.sfc ../working.sfc
./bin/linux/asar LTTP_RND_GeneralBugfixes.asm ../working.sfc ./bin/linux/asar -DFEATURE_PATREON_SUPPORTERS=1 LTTP_RND_GeneralBugfixes.asm ../working.sfc

View File

@@ -32,9 +32,9 @@ CuccoStorm:
LDA.w SpriteAuxTable, X : CMP.b #!CUCCO_ENRAGED : !BLT ++ LDA.w SpriteAuxTable, X : CMP.b #!CUCCO_ENRAGED : !BLT ++
PLA : BRA + ; we found an angry cucco, done PLA : BRA + ; we found an angry cucco, done
++ : INX : BRA -- : .ldone ++ : INX : BRA -- : .ldone
;==== Create a Cucco ;==== Create a Cucco
CPY.b #$FF : BNE ++ CPY.b #$FF : BNE ++
; we didn't find a cucco, so try to create one ; we didn't find a cucco, so try to create one
PLY PLY

View File

@@ -5,8 +5,6 @@ dw $0000, $7E4E, $6FF4, $1CF5, $7FFF, $1CE7, $7A10, $64A5
dw $7FFF, $093B, $169F, $7E8D, $7FFF, $1CE7, $7A10, $64A5 dw $7FFF, $093B, $169F, $7E8D, $7FFF, $1CE7, $7A10, $64A5
.golden_sword .golden_sword
dw $0000, $033F, $7FFF, $2640, $7FFF, $1CE7, $7A10, $64A5 dw $0000, $033F, $7FFF, $2640, $7FFF, $1CE7, $7A10, $64A5
.golden_bombs
dw $0000, $7FFF, $27FF, $02BC, $4F5F, $1CE7, $2E9C, $14B6
.fighter_shield .fighter_shield
dw $0000, $7FFF, $27FF, $5E2D, $7FFF, $1CE7, $7A10, $64A5 dw $0000, $7FFF, $27FF, $5E2D, $7FFF, $1CE7, $7A10, $64A5
.red_shield .red_shield

View File

@@ -143,11 +143,6 @@ SetEscapeAssist:
LDA.l EscapeAssist : BIT.b #$02 : BEQ + : LDA.b #$00 : STA.l InfiniteBombs : + LDA.l EscapeAssist : BIT.b #$02 : BEQ + : LDA.b #$00 : STA.l InfiniteBombs : +
LDA.l EscapeAssist : BIT.b #$01 : BEQ + : LDA.b #$00 : STA.l InfiniteArrows : + LDA.l EscapeAssist : BIT.b #$01 : BEQ + : LDA.b #$00 : STA.l InfiniteArrows : +
++ ++
LDA.l SpecialWeapons : AND.b #$7F : CMP #$01 : BNE +
LDA.l SpecialWeaponLevel : BEQ +
LDA #$01 : STA InfiniteBombs
+
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
SetSilverBowMode: SetSilverBowMode:

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Binary file not shown.

61
data/textbytecharmap.txt Normal file
View File

@@ -0,0 +1,61 @@
'=9D
A=AA
B=AB
C=AC
D=AD
E=AE
F=AF
G=B0
H=B1
I=B2
J=B3
K=B4
L=B5
M=B6
N=B7
O=B8
P=B9
Q=BA
R=BB
S=BC
T=BD
U=BE
V=BF
W=C0
X=C1
Y=C2
Z=C3
?=C6
!=C7
,=C8
-=C9
.=CD
~=CE
a=D0
b=D1
c=D2
d=D3
e=D4
f=D5
g=D6
h=D7
i=D8
j=D9
k=DA
l=DB
m=DC
n=DD
o=DE
p=DF
q=E0
r=E1
s=E2
t=E3
u=E4
v=E5
w=E6
x=E7
y=E8
z=E9
:=EA
=FF

61
data/textwordcharmap.txt Normal file
View File

@@ -0,0 +1,61 @@
'=9D00
A=AA00
B=AB00
C=AC00
D=AD00
E=AE00
F=AF00
G=B000
H=B100
I=B200
J=B300
K=B400
L=B500
M=B600
N=B700
O=B800
P=B900
Q=BA00
R=BB00
S=BC00
T=BD00
U=BE00
V=BF00
W=C000
X=C100
Y=C200
Z=C300
?=C600
!=C700
,=C800
-=C900
.=CD00
~=CE00
a=D000
b=D100
c=D200
d=D300
e=D400
f=D500
g=D600
h=D700
i=D800
j=D900
k=DA00
l=DB00
m=DC00
n=DD00
o=DE00
p=DF00
q=E000
r=E100
s=E200
t=E300
u=E400
v=E500
w=E600
x=E700
y=E800
z=E900
:=EA00
=FF00

View File

@@ -61,7 +61,7 @@ LoadDialogAddressIndirect:
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
FreeDungeonItemNotice: FreeDungeonItemNotice:
STA.w ScratchBufferV STA.l ScratchBufferV
PHA : PHX : PHY PHA : PHX : PHY
PHP PHP
@@ -70,59 +70,59 @@ FreeDungeonItemNotice:
REP #$10 ; set 16-bit index registers REP #$10 ; set 16-bit index registers
PEI.b (Scrap00) PEI.b (Scrap00)
LDA.b Scrap02 : PHA LDA.b Scrap02 : PHA
LDA.w ScratchBufferNV : PHA LDA.l ScratchBufferNV : PHA
LDA.w ScratchBufferNV+1 : PHA LDA.l ScratchBufferNV+1 : PHA
;-------------------------------- ;--------------------------------
LDA.l FreeItemText : BNE + : JMP .skip : + LDA.l FreeItemText : BNE + : JMP .skip : +
LDA.b #$00 : STA.w ScratchBufferNV ; initialize scratch LDA.b #$00 : STA.l ScratchBufferNV ; initialize scratch
LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for general small key LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for general small key
LDA.w ScratchBufferV : CMP.b #$24 : BNE + ; general small key LDA.l ScratchBufferV : CMP.b #$24 : BNE + ; general small key
%CopyDialog(Notice_SmallKeyOf) %CopyDialog(Notice_SmallKeyOf)
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
%CopyDialog(Notice_Self) %CopyDialog(Notice_Self)
JMP .done JMP .done
+ : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for general compass + : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for general compass
LDA.w ScratchBufferV : CMP.b #$25 : BNE + ; general compass LDA.l ScratchBufferV : CMP.b #$25 : BNE + ; general compass
%CopyDialog(Notice_CompassOf) %CopyDialog(Notice_CompassOf)
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
%CopyDialog(Notice_Self) %CopyDialog(Notice_Self)
JMP .done JMP .done
+ : LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for general map + : LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for general map
LDA.w ScratchBufferV : CMP.b #$33 : BNE + ; general map LDA.l ScratchBufferV : CMP.b #$33 : BNE + ; general map
%CopyDialog(Notice_MapOf) %CopyDialog(Notice_MapOf)
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
%CopyDialog(Notice_Self) %CopyDialog(Notice_Self)
JMP .done JMP .done
+ : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for general big key + : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for general big key
LDA.w ScratchBufferV : CMP.b #$32 : BNE + ; general big key LDA.l ScratchBufferV : CMP.b #$32 : BNE + ; general big key
%CopyDialog(Notice_BigKeyOf) %CopyDialog(Notice_BigKeyOf)
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
%CopyDialog(Notice_Self) %CopyDialog(Notice_Self)
JMP .done JMP .done
+ +
LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for dungeon map LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for dungeon map
LDA.w ScratchBufferV : AND.b #$F0 ; looking at high bits only LDA.l ScratchBufferV : AND.b #$F0 ; looking at high bits only
CMP.b #$70 : BNE + ; map of... CMP.b #$70 : BNE + ; map of...
%CopyDialog(Notice_MapOf) %CopyDialog(Notice_MapOf)
JMP .dungeon JMP .dungeon
+ : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for dungeon compass + : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for dungeon compass
LDA.w ScratchBufferV : AND.b #$F0 : CMP.b #$80 : BNE + ; compass of... LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$80 : BNE + ; compass of...
%CopyDialog(Notice_CompassOf) %CopyDialog(Notice_CompassOf)
JMP .dungeon JMP .dungeon
+ : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for dungeon big key + : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for dungeon big key
LDA.w ScratchBufferV : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of... LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of...
%CopyDialog(Notice_BigKeyOf) %CopyDialog(Notice_BigKeyOf)
JMP .dungeon JMP .dungeon
+ : LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for dungeon small key + : LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for dungeon small key
LDA.w ScratchBufferV : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of... LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of...
LDA.w ScratchBufferV : CMP.b #$AF : BNE ++ : JMP .skip : ++ LDA.l ScratchBufferV : CMP.b #$AF : BNE ++ : JMP .skip : ++
%CopyDialog(Notice_SmallKeyOf) %CopyDialog(Notice_SmallKeyOf)
LDA.b #$01 : STA.w ScratchBufferNV ; set up a flip for small keys LDA.b #$01 : STA.l ScratchBufferNV ; set up a flip for small keys
BRA .dungeon BRA .dungeon
+ : LDA.l FreeItemText : AND.b #$20 : BEQ + ; show message for crystal + : LDA.l FreeItemText : AND.b #$20 : BEQ + ; show message for crystal
LDA.w ScratchBufferV : CMP.b #$B0 : !BLT + ; crystal # LDA.l ScratchBufferV : CMP.b #$B0 : !BLT + ; crystal #
CMP.b #$B7 : !BGE + CMP.b #$B7 : !BGE +
%CopyDialog(Notice_Crystal) %CopyDialog(Notice_Crystal)
JMP .crystal JMP .crystal
@@ -131,14 +131,14 @@ FreeDungeonItemNotice:
.dungeon .dungeon
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
LDA.w ScratchBufferV LDA.l ScratchBufferV
AND.b #$0F AND.b #$0F
STA.w ScratchBufferNV+1 STA.l ScratchBufferNV+1
LDA.w ScratchBufferNV : BEQ + LDA.l ScratchBufferNV : BEQ +
LDA.w ScratchBufferNV LDA.l ScratchBufferNV
LDA.b #$0F : !SUB.w ScratchBufferNV+1 : STA.w ScratchBufferNV+1 ; flip the values for small keys LDA.b #$0F : !SUB.l ScratchBufferNV+1 : STA.l ScratchBufferNV+1 ; flip the values for small keys
+ +
LDA.w ScratchBufferNV+1 LDA.l ScratchBufferNV+1
ASL : TAX ASL : TAX
REP #$20 REP #$20
LDA.l DungeonItemIDMap,X : CMP.w #$0003 : BCC .hc_sewers LDA.l DungeonItemIDMap,X : CMP.w #$0003 : BCC .hc_sewers
@@ -152,7 +152,7 @@ FreeDungeonItemNotice:
JMP.w .done JMP.w .done
+ +
SEP #$20 SEP #$20
LDA.w ScratchBufferNV+1 LDA.l ScratchBufferNV+1
CMP.b #$00 : BNE + ; ...light world CMP.b #$00 : BNE + ; ...light world
%CopyDialog(Notice_LightWorld) : JMP .done %CopyDialog(Notice_LightWorld) : JMP .done
+ : CMP.b #$01 : BNE + ; ...dark world + : CMP.b #$01 : BNE + ; ...dark world
@@ -190,7 +190,7 @@ FreeDungeonItemNotice:
.crystal .crystal
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
LDA.w ScratchBufferV LDA.l ScratchBufferV
AND.b #$0F ; looking at low bits only AND.b #$0F ; looking at low bits only
CMP.b #$00 : BNE + CMP.b #$00 : BNE +
%CopyDialog(Notice_Six) : JMP .done %CopyDialog(Notice_Six) : JMP .done
@@ -216,8 +216,8 @@ FreeDungeonItemNotice:
;-------------------------------- ;--------------------------------
.skip .skip
PLA : STA.w ScratchBufferNV+1 PLA : STA.l ScratchBufferNV+1
PLA : STA.w ScratchBufferNV PLA : STA.l ScratchBufferNV
PLA : STA.b Scrap02 PLA : STA.b Scrap02
REP #$20 REP #$20
PLA : STA.b Scrap00 PLA : STA.b Scrap00
@@ -248,11 +248,8 @@ RTL
DialogFairyThrow: DialogFairyThrow:
LDA.l Restrict_Ponds : BEQ .normal LDA.l Restrict_Ponds : BEQ .normal
LDA.l BottleContentsOne LDA.l BottleContentsOne
ORA.l BottleContentsTwo ORA.l BottleContentsTwo : ORA.l BottleContentsThree : ORA.l BottleContentsFour : BNE .normal
ORA.l BottleContentsThree
ORA.l BottleContentsFour
BNE .normal
.noInventory .noInventory
LDA.w SpriteActivity, X : !ADD #$08 : STA.w SpriteActivity, X LDA.w SpriteActivity, X : !ADD #$08 : STA.w SpriteActivity, X
LDA.b #$51 LDA.b #$51
@@ -283,64 +280,31 @@ RTL
; s = silver arrow bow ; s = silver arrow bow
; p = 2nd progressive bow ; p = 2nd progressive bow
DialogGanon2: DialogGanon2:
JSL.l CheckGanonVulnerability JSL.l CheckGanonVulnerability
REP #$20 REP #$20
BCS + BCS +
LDA.w #$018D : JMP .done LDA.w #$018D : BRA ++
+ +
LDA.l GanonVulnerabilityItem : AND #$00FF : BNE .special_item LDA.l BowTracking
LDA.l SpecialWeapons : AND.w #$007F
CMP.w #$0001 : BEQ .bombs ; bombs if special bomb mode
.silver_arrows
LDA.l BowTracking
BIT.w #$0080 : BNE + ; branch if bow BIT.w #$0080 : BNE + ; branch if bow
LDA.w #$0192 : JMP .done LDA.w #$0192 : BRA ++
+ +
BIT.w #$0040 : BEQ + ; branch if no silvers BIT.w #$0040 : BEQ + ; branch if no silvers
LDA.w #$0195 : JMP .done LDA.w #$0195 : BRA ++
+ +
BIT.w #$0020 : BNE + ; branch if p bow BIT.w #$0020 : BNE + ; branch if p bow
LDA.w #$0194 : JMP .done LDA.w #$0194 : BRA ++
+ +
BIT.w #$0080 : BEQ + ; branch if no bow BIT.w #$0080 : BEQ + ; branch if no bow
LDA.w #$0193 : JMP .done LDA.w #$0193 : BRA ++
+ +
LDA.w #$016E : JMP .done LDA.w #$016E
.special_item ++
CMP.w #$0001 : BEQ .silver_arrows STA.w TextID
CMP.w #$0004 : BEQ .bombs SEP #$20
CMP.w #$0005 : BEQ .powder JSL.l Sprite_ShowMessageMinimal_Alt
CMP.w #$0010 : BEQ .bee
PHX : TAX
LDA.l EquipmentWRAM-1, X : PLX : AND #$00FF : BNE +
LDA.w #$0192 : JMP .done
+
LDA.w #$0195 : BRA .done
.bombs
LDA.l BombsEquipment : AND #$00FF : BNE +
LDA.l InfiniteBombs : AND #$00FF : BNE + ; check for infinite bombs
LDA.w #$0192 : BRA .done
+
LDA.w #$0195 : BRA .done
.powder
LDA.l InventoryTracking : AND #$0010 : BNE + ; check for powder
LDA.w #$0192 : BRA .done
+
LDA.w #$0195 : BRA .done
.bee
LDA.l BottleContentsOne : AND #$00FF : CMP.w #$0007 : BEQ + : CMP.w #$0008 : BEQ +
LDA.l BottleContentsTwo : AND #$00FF : CMP.w #$0007 : BEQ + : CMP.w #$0008 : BEQ +
LDA.l BottleContentsThree : AND #$00FF : CMP.w #$0007 : BEQ + : CMP.w #$0008 : BEQ +
LDA.l BottleContentsFour : AND #$00FF : CMP.w #$0007 : BEQ + : CMP.w #$0008 : BEQ +
LDA.w #$0192 : BRA .done
+
LDA.w #$0195 : BRA .done
.done
STA.w TextID
SEP #$20
JSL.l Sprite_ShowMessageMinimal_Alt
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
DialogEtherTablet: DialogEtherTablet:
@@ -350,8 +314,11 @@ DialogEtherTablet:
PLA : JML Sprite_ShowMessageUnconditional ; Wacky Hylian Text PLA : JML Sprite_ShowMessageUnconditional ; Wacky Hylian Text
+ +
BIT.b Joy1A_New : BVC - ; Show normal text if Y is not pressed BIT.b Joy1A_New : BVC - ; Show normal text if Y is not pressed
JSL CheckTabletSword : BMI .yesText LDA.l AllowHammerTablets : BEQ ++
CMP.b #$02 : !BGE .noText LDA.l HammerEquipment : BEQ .yesText : BRA .noText
++
LDA.l SwordEquipment : CMP.b #$FF : BEQ .yesText : CMP.b #$02 : BCS .noText
;++
.yesText .yesText
PLA PLA
LDA.b #$0C LDA.b #$0C
@@ -369,10 +336,13 @@ DialogBombosTablet:
PLA : JML Sprite_ShowMessageUnconditional ; Wacky Hylian Text PLA : JML Sprite_ShowMessageUnconditional ; Wacky Hylian Text
+ +
BIT.b Joy1A_New : BVC - ; Show normal text if Y is not pressed BIT.b Joy1A_New : BVC - ; Show normal text if Y is not pressed
JSL CheckTabletSword : BMI .yesText LDA.l AllowHammerTablets : BEQ ++
CMP.b #$02 : !BGE .noText LDA.l HammerEquipment : BEQ .yesText : BRA .noText
++
LDA.l SwordEquipment : CMP.b #$FF : BEQ .yesText : CMP.b #$02 : !BGE .noText
;++
.yesText .yesText
PLA PLA
LDA.b #$0D LDA.b #$0D
LDY.b #$01 LDY.b #$01
JML Sprite_ShowMessageUnconditional ; Text From MSPedestalText (tables.asm) JML Sprite_ShowMessageUnconditional ; Text From MSPedestalText (tables.asm)
@@ -384,7 +354,7 @@ RTL
DialogSahasrahla: DialogSahasrahla:
LDA.l PendantsField : AND.b #$04 : BEQ + ;Check if player has green pendant LDA.l PendantsField : AND.b #$04 : BEQ + ;Check if player has green pendant
LDA.b #$2F LDA.b #$2F
LDY.b #$00 LDY.b #$00
JML Sprite_ShowMessageUnconditional JML Sprite_ShowMessageUnconditional
+ +
RTL RTL
@@ -463,24 +433,24 @@ Main_ShowTextMessage_Alt_already_in_text_mode:
RTL RTL
CalculateSignIndex: CalculateSignIndex:
; for the big 1024x1024 screens we are calculating link's effective ; for the big 1024x1024 screens we are calculating link's effective
; screen area, as though the screen was 4 different 512x512 screens. ; screen area, as though the screen was 4 different 512x512 screens.
; And we do this in a way that will likely give the right value even ; And we do this in a way that will likely give the right value even
; with major glitches. ; with major glitches.
LDA.b OverworldIndex : ASL A : TAY ;what we wrote over LDA.b OverworldIndex : ASL A : TAY ;what we wrote over
LDA.w OWScreenSize : BEQ .done ; If a small map, we can skip these calculations. LDA.w OWScreenSize : BEQ .done ; If a small map, we can skip these calculations.
LDA.b LinkPosY+1 : AND.w #$0002 : ASL #2 : EOR.b OverworldIndex : AND.w #$0008 : BEQ + LDA.b LinkPosY+1 : AND.w #$0002 : ASL #2 : EOR.b OverworldIndex : AND.w #$0008 : BEQ +
TYA : !ADD.w #$0010 : TAY ;add 16 if we are in lower half of big screen. TYA : !ADD.w #$0010 : TAY ;add 16 if we are in lower half of big screen.
+ +
LDA.b LinkPosX+1 : AND.w #$0002 : LSR : EOR.b OverworldIndex : AND.w #$0001 : BEQ + LDA.b LinkPosX+1 : AND.w #$0002 : LSR : EOR.b OverworldIndex : AND.w #$0001 : BEQ +
TYA : INC #2 : TAY ;add 16 if we are in lower half of big screen. TYA : INC #2 : TAY ;add 16 if we are in lower half of big screen.
+ +
; ensure even if things go horribly wrong, we don't read the sign out of bounds and crash: ; ensure even if things go horribly wrong, we don't read the sign out of bounds and crash:
TYA : AND.w #$00FF : TAY TYA : AND.w #$00FF : TAY
.done .done
RTL RTL
@@ -512,10 +482,10 @@ Sprite_ShowSolicitedMessageIfPlayerFacing_Alt:
LDY.w TextID+1 LDY.w TextID+1
; Check what room we're in so we know which npc we're talking to ; Check what room we're in so we know which npc we're talking to
LDA.b RoomIndex LDA.b RoomIndex
CMP.b #$05 : BEQ .SahasrahlaDialogs CMP.b #$05 : BEQ .SahasrahlaDialogs
CMP.b #$1C : BEQ .BombShopGuyDialog CMP.b #$1C : BEQ .BombShopGuyDialog
BRA .SayNothing BRA .SayNothing
.SahasrahlaDialogs .SahasrahlaDialogs
REP #$20 : LDA.l MapReveal_Sahasrahla : ORA.l MapOverlay : STA.l MapOverlay : SEP #$20 REP #$20 : LDA.l MapReveal_Sahasrahla : ORA.l MapOverlay : STA.l MapOverlay : SEP #$20

View File

@@ -3,6 +3,9 @@
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
SpawnDungeonPrize: SpawnDungeonPrize:
PHX : PHB PHX : PHB
TAX
LDA.b $06,S : STA.b ScrapBuffer72 ; Store current RoomTag index
TXA
JSL.l AttemptItemSubstitution JSL.l AttemptItemSubstitution
JSL.l ResolveLootIDLong JSL.l ResolveLootIDLong
STA.w ItemReceiptID STA.w ItemReceiptID
@@ -14,6 +17,7 @@ SpawnDungeonPrize:
LDA.w ItemReceiptID LDA.w ItemReceiptID
STA.w AncillaGet,X : STA.w SpriteID,X STA.w AncillaGet,X : STA.w SpriteID,X
JSR.w AddDungeonPrizeAncilla JSR.w AddDungeonPrizeAncilla
LDX.b ScrapBuffer72 : STZ.b RoomTag,X
.failed_spawn .failed_spawn
PLB : PLX PLB : PLX
RTL RTL

View File

@@ -155,7 +155,7 @@ JML.l AllowStartFromExitReturn
STZ.b SubSubModule STZ.b SubSubModule
STZ.w DeathReloadFlag STZ.w DeathReloadFlag
STZ.w RespawnFlag STZ.w RespawnFlag
INC.w UpdateHUDFlag LDA.b #$01 : STA.l UpdateHUDFlag
JSL Equipment_SearchForEquippedItemLong JSL Equipment_SearchForEquippedItemLong
JSL HUD_RebuildLong2 JSL HUD_RebuildLong2

View File

@@ -22,7 +22,7 @@ JML.l ReturnFromOnDrawHud
OnDungeonEntrance: OnDungeonEntrance:
STA.l PegColor ; thing we wrote over STA.l PegColor ; thing we wrote over
JSL MaybeFlagDungeonTotalsEntrance JSL MaybeFlagDungeonTotalsEntrance
INC.w UpdateHUDFlag LDA.w #$0001 : STA.l UpdateHUDFlag
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
OnDungeonBossExit: OnDungeonBossExit:
@@ -46,7 +46,7 @@ OnDungeonExit:
STA.w DungeonID : STZ.w Map16ChangeIndex ; thing we wrote over STA.w DungeonID : STZ.w Map16ChangeIndex ; thing we wrote over
PHA : PHP PHA : PHP
INC.w UpdateHUDFlag LDA.w #$0001 : STA.l UpdateHUDFlag
JSL.l HUD_RebuildLong JSL.l HUD_RebuildLong
JSL.l FloodGateResetInner JSL.l FloodGateResetInner
JSL.l SetSilverBowMode JSL.l SetSilverBowMode
@@ -226,7 +226,7 @@ OnOWTransition:
PHP PHP
SEP #$20 ; set 8-bit accumulator SEP #$20 ; set 8-bit accumulator
LDA.b #$FF : STA.l RNGLockIn ; clear lock-in LDA.b #$FF : STA.l RNGLockIn ; clear lock-in
INC.w UpdateHUDFlag LDA.b #$01 : STA.l UpdateHUDFlag
PLP PLP
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------

View File

@@ -308,16 +308,15 @@ DrawPlayerFileShared:
%fs_drawBottle(EquipmentSRAM+$1F,9,23) %fs_drawBottle(EquipmentSRAM+$1F,9,23)
; Sword ; Sword
LDA.l SpecialWeapons : AND.w #$007F : CMP #$0001 : BEQ .bombSword
LDA.l EquipmentSRAM+$19 : AND.w #$00FF : BNE + LDA.l EquipmentSRAM+$19 : AND.w #$00FF : BNE +
%fs_drawItemGray(3,26,FileSelectItems_fighters_sword) %fs_drawItemGray(3,26,FileSelectItems_fighters_sword)
JMP ++ BRA ++
+ : DEC : BNE + + : DEC : BNE +
%fs_drawItem(3,26,FileSelectItems_fighters_sword) %fs_drawItem(3,26,FileSelectItems_fighters_sword)
JMP ++ BRA ++
+ : DEC : BNE + + : DEC : BNE +
%fs_drawItem(3,26,FileSelectItems_master_sword) %fs_drawItem(3,26,FileSelectItems_master_sword)
JMP ++ BRA ++
+ : DEC : BNE + + : DEC : BNE +
%fs_drawItem(3,26,FileSelectItems_tempered_sword) %fs_drawItem(3,26,FileSelectItems_tempered_sword)
BRA ++ BRA ++
@@ -327,29 +326,6 @@ DrawPlayerFileShared:
+ +
; a sword value above 4 is either corrupted or 0xFF (a.k.a. swordless) ; a sword value above 4 is either corrupted or 0xFF (a.k.a. swordless)
%fs_drawItemGray(3,26,FileSelectItems_fighters_sword) %fs_drawItemGray(3,26,FileSelectItems_fighters_sword)
BRA ++
.bombSword
LDA.l SpecialWeaponLevelSRAM : AND.w #$00FF : BNE +
%fs_drawItemGray(3,26,FileSelectItems_fighters_bombs)
BRA ++
+ : DEC : BNE +
%fs_drawItem(3,26,FileSelectItems_fighters_bombs)
BRA ++
+ : DEC : BNE +
%fs_drawItem(3,26,FileSelectItems_master_bombs)
BRA ++
+ : DEC : BNE +
%fs_drawItem(3,26,FileSelectItems_tempered_bombs)
BRA ++
+ : DEC : BNE +
%fs_drawItem(3,26,FileSelectItems_gold_bombs)
BRA ++
+ : DEC : BNE +
%fs_drawItem(3,26,FileSelectItems_extra_gold_bombs)
BRA ++
+
; a bomb value above 5 is... who knows, let's just pretend it's 5
%fs_drawItem(3,26,FileSelectItems_extra_gold_bombs)
++ ++
; Shield ; Shield
@@ -628,136 +604,105 @@ FileSelectItems:
.good_bee_bottle .good_bee_bottle
dw #$0280|!FS_COLOR_BW, #$0281|!FS_COLOR_BW, #$0294|!FS_COLOR_YELLOW, #$0286|!FS_COLOR_YELLOW dw #$0280|!FS_COLOR_BW, #$0281|!FS_COLOR_BW, #$0294|!FS_COLOR_YELLOW, #$0286|!FS_COLOR_YELLOW
.fighters_bombs
dw #$024C|!FS_COLOR_GREEN, #$024D|!FS_COLOR_GREEN, #$025C|!FS_COLOR_GREEN, #$02E1|!FS_COLOR_GREEN
.master_bombs
dw #$024C|!FS_COLOR_BLUE, #$024D|!FS_COLOR_BLUE, #$025C|!FS_COLOR_BLUE, #$02E2|!FS_COLOR_BLUE
.tempered_bombs
dw #$024C|!FS_COLOR_RED, #$024D|!FS_COLOR_RED, #$025C|!FS_COLOR_RED, #$02E3|!FS_COLOR_RED
.gold_bombs
dw #$024C|!FS_COLOR_YELLOW, #$024D|!FS_COLOR_YELLOW, #$025C|!FS_COLOR_YELLOW, #$02E4|!FS_COLOR_YELLOW
.extra_gold_bombs
dw #$024C|!FS_COLOR_YELLOW, #$024D|!FS_COLOR_YELLOW, #$025C|!FS_COLOR_YELLOW, #$02E5|!FS_COLOR_YELLOW
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
FileSelectDrawHudBar: FileSelectDrawHudBar:
LDA.w #$02DB|!FS_COLOR_GREEN : %fs_draw16x8(0,10) LDA.w #$02DB|!FS_COLOR_GREEN : %fs_draw16x8(0,10)
LDA.l DisplayRupeesSRAM LDA.l DisplayRupeesSRAM
JSL.l HUDHex4Digit_Long JSL.l HUDHex4Digit_Long
LDA.b Scrap04 : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,9) LDA.b Scrap04 : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,9)
LDA.b Scrap05 : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,10) LDA.b Scrap05 : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,10)
LDA.b Scrap06 : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,11) LDA.b Scrap06 : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,11)
LDA.b Scrap07 : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,12) LDA.b Scrap07 : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,12)
LDA.l SpecialWeapons : AND.w #$007F : CMP.w #$0001 : BEQ .colorBombs LDA.w #$02CB|!FS_COLOR_BLUE : %fs_draw16x8(0,14)
LDA.w #$02CB|!FS_COLOR_BLUE : %fs_draw16x8(0,14) LDA.l BombsEquipmentSRAM : AND.w #$00FF
LDA.l BombsEquipmentSRAM : AND.w #$00FF JSL.l HUDHex2Digit_Long
JSL.l HUDHex2Digit_Long TYA : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,14)
TYA : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,14) TXA : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,15)
TXA : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,15)
BRA ++
.colorBombs LDA.l BowTrackingSRAM : AND.w #$0040 : BEQ +
LDA.l SpecialWeaponLevelSRAM : AND.w #$00FF : BNE + LDA.w #$02D9|!FS_COLOR_RED : %fs_draw16x8(0,17)
; no bombs, draw no icon BRA ++
BRA ++ +
+ : DEC : BNE + LDA.w #$02C9|!FS_COLOR_BROWN : %fs_draw16x8(0,17)
LDA.w #$02CB|!FS_COLOR_GREEN : %fs_draw16x8(0,14) ++
BRA ++ LDA.l CurrentArrowsSRAM : AND.w #$00FF
+ : DEC : BNE + JSL.l HUDHex2Digit_Long
LDA.w #$02CB|!FS_COLOR_BLUE : %fs_draw16x8(0,14) TYA : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,17)
BRA ++ TXA : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,18)
+ : DEC : BNE +
LDA.w #$02CB|!FS_COLOR_RED : %fs_draw16x8(0,14)
BRA ++
+
LDA.w #$02CB|!FS_COLOR_YELLOW : %fs_draw16x8(0,14)
++
LDA.l BowTrackingSRAM : AND.w #$0040 : BEQ +
LDA.w #$02D9|!FS_COLOR_RED : %fs_draw16x8(0,17)
BRA ++
+
LDA.w #$02C9|!FS_COLOR_BROWN : %fs_draw16x8(0,17)
++
LDA.l CurrentArrowsSRAM : AND.w #$00FF
JSL.l HUDHex2Digit_Long
TYA : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,17)
TXA : AND.w #$00FF : !ADD.w #$0250+!FS_COLOR_BW : %fs_draw8x8(1,18)
RTS RTS
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
AltBufferTable: AltBufferTable:
LDA.b #$02 : STA.w BG34NBA ; Have Screen 3 use same tile area as screens 1 LDA.b #$02 : STA.w BG34NBA ; Have Screen 3 use same tile area as screens 1
.noScreen3Change .noScreen3Change
REP #$20 REP #$20
LDX.w #$0400 ; 14 rows with 64 bytes (30 tiles * 2 + 4 byte header) LDX.w #$0400 ; 14 rows with 64 bytes (30 tiles * 2 + 4 byte header)
;fill with the blank character ;fill with the blank character
LDA.w #$0188 LDA.w #$0188
- -
STA.w GFXStripes, X STA.w GFXStripes, X
DEX : DEX : BNE - DEX : DEX : BNE -
; set vram offsets ; set vram offsets
LDA.w #$0161 : STA.w GFXStripes+$02 ;file 1 top row LDA.w #$0161 : STA.w GFXStripes+$02 ;file 1 top row
LDA.w #$2161 : STA.w GFXStripes+$42 ;file 1 bottom row LDA.w #$2161 : STA.w GFXStripes+$42 ;file 1 bottom row
LDA.w #$4161 : STA.w GFXStripes+$82 ;gap row top LDA.w #$4161 : STA.w GFXStripes+$82 ;gap row top
LDA.w #$6161 : STA.w GFXStripes+$C2 ;gap row bottom LDA.w #$6161 : STA.w GFXStripes+$C2 ;gap row bottom
LDA.w #$8161 : STA.w GFXStripes+$0102 ;file 2 top row LDA.w #$8161 : STA.w GFXStripes+$0102 ;file 2 top row
LDA.w #$A161 : STA.w GFXStripes+$0142 ;file 2 bottom row LDA.w #$A161 : STA.w GFXStripes+$0142 ;file 2 bottom row
LDA.w #$C161 : STA.w GFXStripes+$0182 ;gap row top LDA.w #$C161 : STA.w GFXStripes+$0182 ;gap row top
LDA.w #$E161 : STA.w GFXStripes+$01C2 ;gap row bottom LDA.w #$E161 : STA.w GFXStripes+$01C2 ;gap row bottom
LDA.w #$0162 : STA.w GFXStripes+$0202 ;file 3 top row LDA.w #$0162 : STA.w GFXStripes+$0202 ;file 3 top row
LDA.w #$2162 : STA.w GFXStripes+$0242 ;file 3 bottom row LDA.w #$2162 : STA.w GFXStripes+$0242 ;file 3 bottom row
LDA.w #$4162 : STA.w GFXStripes+$0282 ;extra gap row top LDA.w #$4162 : STA.w GFXStripes+$0282 ;extra gap row top
LDA.w #$6162 : STA.w GFXStripes+$02C2 ;extra gap row bottom LDA.w #$6162 : STA.w GFXStripes+$02C2 ;extra gap row bottom
LDA.w #$8162 : STA.w GFXStripes+$0302 ;extra gap row top LDA.w #$8162 : STA.w GFXStripes+$0302 ;extra gap row top
LDA.w #$A162 : STA.w GFXStripes+$0342 ;extra gap row bottom LDA.w #$A162 : STA.w GFXStripes+$0342 ;extra gap row bottom
LDA.w #$C162 : STA.w GFXStripes+$0382 ;extra gap row top LDA.w #$C162 : STA.w GFXStripes+$0382 ;extra gap row top
LDA.w #$E162 : STA.w GFXStripes+$03C2 ;extra gap row bottom LDA.w #$E162 : STA.w GFXStripes+$03C2 ;extra gap row bottom
; set lengths ; set lengths
LDA.w #$3B00 LDA.w #$3B00
STA.w GFXStripes+$04 ;file 1 top row STA.w GFXStripes+$04 ;file 1 top row
STA.w GFXStripes+$44 ;file 1 bottom row STA.w GFXStripes+$44 ;file 1 bottom row
STA.w GFXStripes+$84 ;gap row top STA.w GFXStripes+$84 ;gap row top
STA.w GFXStripes+$C4 ;gap row bottom STA.w GFXStripes+$C4 ;gap row bottom
STA.w GFXStripes+$0104 ;file 2 top row STA.w GFXStripes+$0104 ;file 2 top row
STA.w GFXStripes+$0144 ;file 2 bottom row STA.w GFXStripes+$0144 ;file 2 bottom row
STA.w GFXStripes+$0184 ;gap row top STA.w GFXStripes+$0184 ;gap row top
STA.w GFXStripes+$01C4 ;gap row bottom STA.w GFXStripes+$01C4 ;gap row bottom
STA.w GFXStripes+$0204 ;file 3 top row STA.w GFXStripes+$0204 ;file 3 top row
STA.w GFXStripes+$0244 ;file 3 bottom row STA.w GFXStripes+$0244 ;file 3 bottom row
STA.w GFXStripes+$0284 ;extra gap row top STA.w GFXStripes+$0284 ;extra gap row top
STA.w GFXStripes+$02C4 ;extra gap row bottom STA.w GFXStripes+$02C4 ;extra gap row bottom
STA.w GFXStripes+$0304 ;extra gap row top STA.w GFXStripes+$0304 ;extra gap row top
STA.w GFXStripes+$0344 ;extra gap row bottom STA.w GFXStripes+$0344 ;extra gap row bottom
STA.w GFXStripes+$0384 ;extra gap row top STA.w GFXStripes+$0384 ;extra gap row top
STA.w GFXStripes+$03C4 ;extra gap row bottom STA.w GFXStripes+$03C4 ;extra gap row bottom
; Set last packet marker ; Set last packet marker
LDA.w #$00FF : STA.w GFXStripes+$0402 LDA.w #$00FF : STA.w GFXStripes+$0402
; Draw Unlock option if applicable ; Draw Unlock option if applicable
LDA.b GameMode : AND.w #$00FF : CMP.w #$0001 : BNE + LDA.b GameMode : AND.w #$00FF : CMP.w #$0001 : BNE +
LDA.l IsEncrypted : AND.w #$00FF : CMP.w #$0002 : BNE + LDA.l IsEncrypted : AND.w #$00FF : CMP.w #$0002 : BNE +
PHP : SEP #$30 : PHX : PHY : JSL ValidatePassword : PLY : PLX : PLP PHP : SEP #$30 : PHX : PHY : JSL ValidatePassword : PLY : PLX : PLP
AND.w #$00FF : BNE + AND.w #$00FF : BNE +
LDA.w #!FSTILE_U_TOP : %fs_draw8x16(14,5) LDA.w #!FSTILE_U_TOP : %fs_draw8x16(14,5)
LDA.w #!FSTILE_N_TOP : %fs_draw8x16(14,6) LDA.w #!FSTILE_N_TOP : %fs_draw8x16(14,6)
LDA.w #!FSTILE_L_TOP : %fs_draw8x16(14,7) LDA.w #!FSTILE_L_TOP : %fs_draw8x16(14,7)
LDA.w #!FSTILE_O_TOP : %fs_draw8x16(14,8) LDA.w #!FSTILE_O_TOP : %fs_draw8x16(14,8)
LDA.w #!FSTILE_C_TOP : %fs_draw8x16(14,9) LDA.w #!FSTILE_C_TOP : %fs_draw8x16(14,9)
LDA.w #!FSTILE_K_TOP : %fs_draw8x16(14,10) LDA.w #!FSTILE_K_TOP : %fs_draw8x16(14,10)
+ +
SEP #$20 SEP #$20
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -765,31 +710,31 @@ AltBufferTable_credits:
JSL AltBufferTable_noScreen3Change JSL AltBufferTable_noScreen3Change
REP #$20 REP #$20
LDA.w #$6168 : STA.w GFXStripes+$02 ;file 1 top row LDA.w #$6168 : STA.w GFXStripes+$02 ;file 1 top row
LDA.w #$8168 : STA.w GFXStripes+$42 ;file 1 bottom row LDA.w #$8168 : STA.w GFXStripes+$42 ;file 1 bottom row
LDA.w #$A168 : STA.w GFXStripes+$82 ;gap row top LDA.w #$A168 : STA.w GFXStripes+$82 ;gap row top
LDA.w #$C168 : STA.w GFXStripes+$C2 ;gap row bottom LDA.w #$C168 : STA.w GFXStripes+$C2 ;gap row bottom
LDA.w #$E168 : STA.w GFXStripes+$0102 ;file 2 top row LDA.w #$E168 : STA.w GFXStripes+$0102 ;file 2 top row
LDA.w #$0169 : STA.w GFXStripes+$0142 ;file 2 bottom row LDA.w #$0169 : STA.w GFXStripes+$0142 ;file 2 bottom row
LDA.w #$2169 : STA.w GFXStripes+$0182 ;gap row top LDA.w #$2169 : STA.w GFXStripes+$0182 ;gap row top
LDA.w #$4169 : STA.w GFXStripes+$01c2 ;gap row bottom LDA.w #$4169 : STA.w GFXStripes+$01c2 ;gap row bottom
LDA.w #$6169 : STA.w GFXStripes+$0202 ;file 3 top row LDA.w #$6169 : STA.w GFXStripes+$0202 ;file 3 top row
LDA.w #$8169 : STA.w GFXStripes+$0242 ;file 3 bottom row LDA.w #$8169 : STA.w GFXStripes+$0242 ;file 3 bottom row
LDA.w #$A169 : STA.w GFXStripes+$0282 ;extra gap row top LDA.w #$A169 : STA.w GFXStripes+$0282 ;extra gap row top
LDA.w #$C169 : STA.w GFXStripes+$02C2 ;extra gap row bottom LDA.w #$C169 : STA.w GFXStripes+$02C2 ;extra gap row bottom
LDA.w #$E169 : STA.w GFXStripes+$0302 ;extra gap row top LDA.w #$E169 : STA.w GFXStripes+$0302 ;extra gap row top
LDA.w #$016A : STA.w GFXStripes+$0342 ;extra gap row bottom LDA.w #$016A : STA.w GFXStripes+$0342 ;extra gap row bottom
LDA.w #$216A : STA.w GFXStripes+$0382 ;extra gap row top LDA.w #$216A : STA.w GFXStripes+$0382 ;extra gap row top
LDA.w #$416A : STA.w GFXStripes+$03C2 ;extra gap row bottom LDA.w #$416A : STA.w GFXStripes+$03C2 ;extra gap row bottom
SEP #$20 SEP #$20
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
macro LayoutPriority(address) macro LayoutPriority(address)
@@ -819,14 +764,14 @@ RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
LoadFullItemTiles: LoadFullItemTiles:
LDA.b #$80 : STA.w VMAIN LDA.b #$80 : STA.w VMAIN
LDA.b #$01 : STA.w DMAP0 LDA.b #$01 : STA.w DMAP0
LDA.b #$18 : STA.w BBAD0 LDA.b #$18 : STA.w BBAD0
LDX.w #$3200 : STX.w VMADDL LDX.w #$3200 : STX.w VMADDL
LDA.b #FileSelectNewGraphics>>16 : STA.w A1B0 LDA.b #FileSelectNewGraphics>>16 : STA.w A1B0
LDX.w #FileSelectNewGraphics : STX.w A1T0L LDX.w #FileSelectNewGraphics : STX.w A1T0L
LDX.w #$0C00 : STX.w DAS0L LDX.w #$0C00 : STX.w DAS0L
LDA.b #$01 : STA.w MDMAEN LDA.b #$01 : STA.w MDMAEN
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; z colon @ ; z colon @
@@ -834,44 +779,44 @@ RTL
; target vram $6C00 ; target vram $6C00
; NewFont+$400 ; NewFont+$400
LoadLowerCaseLettersSymbols: LoadLowerCaseLettersSymbols:
LDA.b #$80 : STA.w VMAIN LDA.b #$80 : STA.w VMAIN
LDA.b #$01 : STA.w DMAP0 LDA.b #$01 : STA.w DMAP0
LDA.b #$18 : STA.w BBAD0 LDA.b #$18 : STA.w BBAD0
; Lower case letters ; Lower case letters
LDA.b #NewFont>>16 : STA.w A1B0 LDA.b #NewFont>>16 : STA.w A1B0
LDX.w #NewFont+$400 : STX.w A1T0L LDX.w #NewFont+$400 : STX.w A1T0L
LDX.w #$0400 : STX.w DAS0L LDX.w #$0400 : STX.w DAS0L
LDX.w #$2D00 : STX.w VMADDL LDX.w #$2D00 : STX.w VMADDL
LDA.b #$01 : STA.w MDMAEN LDA.b #$01 : STA.w MDMAEN
; : @ # ; : @ #
LDA.b #NewFont>>16 : STA.w A1B0 LDA.b #NewFont>>16 : STA.w A1B0
LDX.w #NewFont+$A80 : STX.w A1T0L LDX.w #NewFont+$A80 : STX.w A1T0L
LDA.b #NewFont>>16 : STA.w A1B1 LDA.b #NewFont>>16 : STA.w A1B1
LDX.w #NewFont+$B80 : STX.w A1T1L LDX.w #NewFont+$B80 : STX.w A1T1L
LDX.w #$0030 : STX.w DAS0L : STX.w DAS1L LDX.w #$0030 : STX.w DAS0L : STX.w DAS1L
LDX.w #$2E50 : STX.w VMADDL LDX.w #$2E50 : STX.w VMADDL
LDA.b #$01 : STA.w MDMAEN LDA.b #$01 : STA.w MDMAEN
LDX.w #$2ED0 : STX.w VMADDL LDX.w #$2ED0 : STX.w VMADDL
LDA.b #$02 : STA.w MDMAEN LDA.b #$02 : STA.w MDMAEN
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
LoadFileSelectVanillaItems: LoadFileSelectVanillaItems:
REP #$10 REP #$10
LDA.b #$80 : STA.w VMAIN LDA.b #$80 : STA.w VMAIN
LDA.b #$01 : STA.w DMAP0 LDA.b #$01 : STA.w DMAP0
LDA.b #$18 : STA.w BBAD0 LDA.b #$18 : STA.w BBAD0
; Lower case letters ; Lower case letters
LDA.b #DecompBuffer2>>16 : STA.w A1B0 LDA.b #DecompBuffer2>>16 : STA.w A1B0
LDX.w #DecompBuffer2 : STX.w A1T0L LDX.w #DecompBuffer2 : STX.w A1T0L
LDX.w #$0600 : STX.w DAS0L LDX.w #$0600 : STX.w DAS0L
LDX.w #$2F00 : STX.w VMADDL LDX.w #$2F00 : STX.w VMADDL
LDA.b #$01 : STA.w MDMAEN LDA.b #$01 : STA.w MDMAEN
SEP #$10 SEP #$10
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
SetFileSelectPalette: SetFileSelectPalette:
@@ -987,20 +932,20 @@ JML FSSelectFile_continue
JML FSSelectFile_return JML FSSelectFile_return
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
MaybeForceFileName: MaybeForceFileName:
LDA.l ForceFileName : BEQ + LDA.l ForceFileName : BEQ +
REP #$20 REP #$20
LDX.b #$FE LDX.b #$FE
- -
INX : INX INX : INX
LDA.l StaticFileName, X : STA.l ExtendedFileNameSRAM, X LDA.l StaticFileName, X : STA.l ExtendedFileNameSRAM, X
CPX.b #$16 : BEQ .done CPX.b #$16 : BEQ .done
CPX.b #$08 : BCS - CPX.b #$08 : BCS -
STA.l FileNameVanillaSRAM, X STA.l FileNameVanillaSRAM, X
BRA - BRA -
.done .done
SEP #$20 SEP #$20
JML.l InitializeSaveFile JML.l InitializeSaveFile
+ +
JML.l NameFile_MakeScreenVisible JML.l NameFile_MakeScreenVisible
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------

View File

@@ -1,74 +0,0 @@
def process_values(sprite, values)
ret = values.clone
if [1, 2].include?(ret[0]) # boomerang
if sprite == 0x53 # armos knight
ret[0] = 0 # do nothing
else
ret[0] = 5 # stun very briefly instead of damage
end
end
if ret[6] > 0 && sprite != 0x84 # bow and not red eyegore/mimic
ret[6] = 0
end
if ret[7] == 2 # hookshot
ret[7] = 1 # still want to stun
end
if [1, 2, 7].include?(ret[8]) && sprite != 0x92 # bomb and not helmasaur king
ret[8] = 0
end
if ret[9] > 0 && sprite != 0x84 # silver bow and not red eyegore/mimic
ret[9] = 0
end
if ret[10] == 4 # powder
ret[10] = 0
end
if ret[11] > 0 && ![0x23, 0xA1, 0xA3, 0xCD].include?(sprite) # fire rod
ret[11] = 0
end
if ret[12] != 3 && sprite != 0xCC # ice rod
ret[12] = 0
end
if ret[13] > 0 && ![0x23, 0xA1, 0xA3, 0xD1].include?(sprite) # bombos
ret[13] = 0
end
if ret[14] != 1 && ![0xD1].include?(sprite) # ether
ret[14] = 0
end
if [1, 2].include?(ret[15]) && ![0xD1].include?(sprite) # quake
ret[15] = 0
end
if sprite == 0x53 and ret[2] == 3
ret[2] = 1 # armos knight? let's make class 2 not suck
end
return ret
end
def split_value(byte)
return [byte >> 4, byte & 0x0F]
end
def join_values(value1, value2)
return (value1 & 0x0F) << 4 | (value2 & 0x0F)
end
File.open("data/damage_table.bin") do |input|
File.open("data/damage_table_sword_bombs.bin", "w") do |output|
i_enum = input.each_byte
(0...0xD7).each do |sprite|
values = []
(0...8).each do
values += split_value(i_enum.next)
end
v_enum = process_values(sprite, values).to_enum
(0...8).each do
output.putc(join_values(v_enum.next, v_enum.next))
end
end
begin
while true
output.putc(i_enum.next)
end
rescue StopIteration
end
end
end

View File

@@ -1,38 +0,0 @@
def process_values(sprite, values)
ret = values.clone
if (ret[1] == 0 && sprite != 0x40) || sprite == 0xCE
# fighter sword does no damage and it's not the evil barrier, or it's Blind
ret[5] = 0
end
return ret
end
def split_value(byte)
return [byte >> 4, byte & 0x0F]
end
def join_values(value1, value2)
return (value1 & 0x0F) << 4 | (value2 & 0x0F)
end
File.open("data/damage_table.bin") do |input|
File.open("data/damage_table_pseudo_sword.bin", "w") do |output|
i_enum = input.each_byte
(0...0xD7).each do |sprite|
values = []
(0...8).each do
values += split_value(i_enum.next)
end
v_enum = process_values(sprite, values).to_enum
(0...8).each do
output.putc(join_values(v_enum.next, v_enum.next))
end
end
begin
while true
output.putc(i_enum.next)
end
rescue StopIteration
end
end
end

View File

@@ -76,18 +76,12 @@ GetItemDamageValue:
CPX.b #$04 : BEQ .boomerang CPX.b #$04 : BEQ .boomerang
CPX.b #$05 : BEQ .boomerang CPX.b #$05 : BEQ .boomerang
CPX.b #$39 : BEQ .hookshot CPX.b #$39 : BEQ .hookshot
CPX.b #$3B : BEQ .hookshot CPX.b #$3b : BEQ .hookshot
CPX.b #$3C : BEQ .hookshot CPX.b #$3c : BEQ .hookshot
CPX.b #$3D : BEQ .hookshot CPX.b #$3d : BEQ .hookshot
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$02 : BNE .normal
TXA : AND.b #$78 : CMP.b #$28 : BNE .normal
LDA.l $8DB8F1, X : BEQ .noDamage
LDA.b #$01
RTL
.normal .normal
LDA.l $8DB8F1, X ; what we wrote over LDA.l $8DB8F1,x ;what we wrote over
RTL RTL
.boomerang .boomerang
LDA.l StunItemAction : AND.b #$01 : BNE .normal LDA.l StunItemAction : AND.b #$01 : BNE .normal

View File

@@ -45,9 +45,11 @@ DrawHeartPieceGFX:
LDA.w SpriteControl, X : ORA.b #$20 : STA.w SpriteControl, X LDA.w SpriteControl, X : ORA.b #$20 : STA.w SpriteControl, X
PLA PLA
JSL.l DrawDynamicTile JSL.l DrawDynamicTile
REP #$21
LDA.b Scrap00 LDA.b Scrap00
CLC : ADC.b #$04 ADC.w #$0004
STA.b Scrap00 STA.b Scrap00
SEP #$20
JSL.l Sprite_DrawShadowLong JSL.l Sprite_DrawShadowLong
BRA .done BRA .done
+ +

160
hooks.asm
View File

@@ -1000,7 +1000,7 @@ org $81C517 : JSL.l CheckDungeonCompletion
org $81C523 : JSL.l CheckDungeonCompletion org $81C523 : JSL.l CheckDungeonCompletion
org $81C710 : JSL.l CheckSpawnPrize org $81C710 : JSL.l CheckSpawnPrize
BCS RoomTag_GetHeartForPrize_spawn_prize : BRA RoomTag_GetHeartForPrize_delete_tag BCS RoomTag_GetHeartForPrize_spawn_prize : BRA RoomTag_GetHeartForPrize_delete_tag
org $81C742 : JSL.l SpawnDungeonPrize org $81C742 : JSL.l SpawnDungeonPrize : PLA : RTS
org $8799EA : JML.l SetItemPose org $8799EA : JML.l SetItemPose
org $88C415 : JSL.l PendantMusicCheck org $88C415 : JSL.l PendantMusicCheck
BCS Ancilla22_ItemReceipt_is_pendant : BRA Ancilla22_ItemReceipt_wait_for_music BCS Ancilla22_ItemReceipt_is_pendant : BRA Ancilla22_ItemReceipt_wait_for_music
@@ -1396,11 +1396,10 @@ org $8DED04 ; <- 6ED04 - equipment.asm : 1963 (REP #$30)
JSL DrawHUDDungeonItems JSL DrawHUDDungeonItems
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; Insert our version of the hud tilemap ; Insert our version of the hud tilemap
; Commented out because incorporated in hook in special_weapons.asm org $8DFA96 ; <- 6FA96 - headsup_display.asm : 626 (LDX.w #.hud_tilemap)
; org $8DFA96 ; <- 6FA96 - headsup_display.asm : 626 (LDX.w #.hud_tilemap) LDX.w #HUD_TileMap
; LDX.w #HUD_TileMap org $8DFA9C ; <- 6FA9C - headsup_display.asm : 629 (MVN $0D, $7E ; $Transfer 0x014A bytes from $6FE77 -> $7EC700)
; org $8DFA9C ; <- 6FA9C - headsup_display.asm : 629 (MVN $0D, $7E ; $Transfer 0x014A bytes from $6FE77 -> $7EC700) MVN $A17E
; MVN $A17E
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $8DFB1F : JSL CheckHUDSilverArrows org $8DFB1F : JSL CheckHUDSilverArrows
org $8DFB29 : BRA UpdateHUDBuffer_update_item_check_arrows org $8DFB29 : BRA UpdateHUDBuffer_update_item_check_arrows
@@ -1421,7 +1420,7 @@ RebuildHUD_update_long:
JSR.w RebuildHUD_update : RTL JSR.w RebuildHUD_update : RTL
RefreshIcon_UpdateHUD: RefreshIcon_UpdateHUD:
INC.w UpdateHUDFlag LDA.b #$01 : STA.l UpdateHUDFlag
JSR.w RebuildHUD JSR.w RebuildHUD
JSR.w UpdateEquippedItem JSR.w UpdateEquippedItem
RTS RTS
@@ -2450,153 +2449,6 @@ JSL FixJingleGlitch
org $81C65F org $81C65F
JSL FixJingleGlitch JSL FixJingleGlitch
;================================================================================
; Bomb-Only Mode
;--------------------------------------------------------------------------------
org $86ECC3 ; Bank06.asm@4704 (PHX : TAX : LDA.l .damage_classes, X : PLX)
JSL DamageClassCalc
BRA + : NOP #29 : +
;--------------------------------------------------------------------------------
org $8882D4 ; Bank08.asm@445 (PHX : TYX : ... )
JSL Utility_CheckAncillaOverlapWithSprite
BRA + : NOP #5 : +
;--------------------------------------------------------------------------------
org $888DB1 ; Bank08.asm@1207 (PHY : PHX : TYX : ... )
JSL Utility_CheckAncillaOverlapWithSprite
BRA + : NOP #7 : +
;--------------------------------------------------------------------------------
org $88E252 ; Bank08.asm@1770 (PHY : PHX : TYX : ... )
JSL Utility_CheckAncillaOverlapWithSprite
BRA + : NOP #7 : +
;--------------------------------------------------------------------------------
org $8882E8 ; Bank08.asm@456 (LDA $0DB0, Y : CMP.b #$03)
JSL Utility_CheckHelmasaurKingCollision
NOP
;--------------------------------------------------------------------------------
org $86ED94 ; Bank06.asm@4866 (LDA $0E60, X : AND.b #$40)
JSL Utility_CheckImpervious
NOP
;--------------------------------------------------------------------------------
org $868F94 ; sprite_prep.asm@1984 (INC $0BA0, X : JSL Sprite_InitializedSegmented)
JSL AllowBombingMoldorm
BRA + : NOP : +
;--------------------------------------------------------------------------------
org $86892F ; sprite_prep.asm@548 (LDA $0D00, X : SUB #$0C : STA $0D00, X : ...)
JSL AllowBombingBarrier
RTS : NOP #7
;--------------------------------------------------------------------------------
org $8DE4BF ; equipment.asm@1247 (LDA $7EF343 : AND.w #$00FF : BEQ .gotNoBombs : ...)
JSL DrawBombInMenu
BRA + : NOP #13 : +
;--------------------------------------------------------------------------------
org $8DFB6A ; headsup_display@727 (CPX #$0004 : BNE .bombsNotEquipped : LDA #$0001)
JSL DrawBombInYBox
BRA + : NOP #2 : +
;--------------------------------------------------------------------------------
org $8DEE05 ; equipment.asm@2065 (LDA $7EF359 : AND.w #$00FF : CMP.w #$00FF : ...)
JSL DrawSwordInMenu
BRA + : NOP #16 : +
;--------------------------------------------------------------------------------
org $8DFA92 ; headsup_display.asm@622 (PDB : LDA.w #$0149 : ...)
JSL DrawBombOnHud
BRA + : NOP #8 : +
;--------------------------------------------------------------------------------
org $889EF8 ; ancilla_bomb@1438 (LDA.w #$04 : STA $0B)
JSL SetBombSpriteColor
;--------------------------------------------------------------------------------
; bomb icons with numbers
org $8DFC51 ; we freed this up earlier in hooks; probably shouldn't use it but *shrug*
db $F5, $20, $F5, $20, $F5, $20, $F5, $20
db $B2, $3C, $B3, $3C, $C2, $3C, $17, $3C
db $B2, $2C, $B3, $2C, $C2, $2C, $18, $2C
db $B2, $24, $B3, $24, $C2, $24, $19, $24
db $B2, $28, $B3, $28, $C2, $28, $1A, $28
db $B2, $28, $B3, $28, $C2, $28, $1B, $28
; bomb icons without numbers
; $8DFC81
db $F5, $20, $F5, $20, $F5, $20, $F5, $20
db $B2, $3C, $B3, $3C, $C2, $3C, $C2, $7C
db $B2, $2C, $B3, $2C, $C2, $2C, $C2, $6C
db $B2, $24, $B3, $24, $C2, $24, $C2, $64
db $B2, $28, $B3, $28, $C2, $28, $C2, $68
db $B2, $28, $B3, $28, $C2, $28, $C2, $68
warnpc $8DFC51+197 ; we only filled in 197 NOPs so don't overwrite past that
;--------------------------------------------------------------------------------
org $1EDCF8 ; bank_1E.asm@16086 (LDX $0202 : ...)
JSL SetBeeType
BRA + : NOP #15 : +
;--------------------------------------------------------------------------------
org $1EB5E8 ; bank_1E.asm@9387 (LDA #$03 : STA $0D80, X)
JSL ArrghusBoing
;--------------------------------------------------------------------------------
org $1EDFAF ; bank_1E.asm@16607 (.next_sprite)
JSL BeeCheckTarget
BCS .bee_valid_target
BRA .bee_unsuitable_target
NOP #48
.bee_unsuitable_target
skip 11
.bee_valid_target
;--------------------------------------------------------------------------------
org $87F889 ; free rom from F877 - F88F; the starting part of this is used in quadrant glitch fix in overworld fork, however.
Link_UseItemLong:
PER .done-1
JMP.w ($0000)
.done
RTL
warnpc $87F890
;--------------------------------------------------------------------------------
org $86F2DC ; bank_06.asm@22763 (LDA.w $037A : AND.b #$10)
JSL CheckBugNet : NOP
org $86EB91 ; bank_06.asm@21178 (LDA.w $037A : AND.b #$10)
JSL CheckBugNet : NOP
;--------------------------------------------------------------------------------
org $86ED77 ; bank_06.asm@21597 (LDA.w $0301 : AND.b #$0A : ...)
JSL SetHammerClass
BRA + : NOP #7 : +
;================================================================================
; Variable Ganon Vulnerability
;--------------------------------------------------------------------------------
org $88BBD4 ; ancilla_magic_powder.asm@253 (LDA #$0A : JSL Ancilla_CheckSpriteDamage.preset_class)
JSL Ganon_CheckPowderVulnerability
NOP #2
;--------------------------------------------------------------------------------
org $9D8F4E ; sprite_ganon.asm@325 (LDA $04C5 : CMP #$02)
JSL Ganon_CheckInvincible
NOP
;--------------------------------------------------------------------------------
org $8DD628 ; Bank0D.asm@1266 (LDA $0B6B, Y : AND #$02)
JSL CheckBeeBoss
NOP
;--------------------------------------------------------------------------------
org $8DD676 ; Bank0D.asm@1303 (TYX : JSL Ancilla_CheckSpriteDamage.preset_class)
JSL Ganon_CheckBeeVulnerability
NOP
;--------------------------------------------------------------------------------
;================================================================================
; Pseudo-Sword Mode
;--------------------------------------------------------------------------------
org $86ED70 ; Bank06.asm@4842 (LDA $06ED39, X : STA $0CF2)
JSL StoreSwordDamage
;================================================================================
; Item-On-B
;--------------------------------------------------------------------------------
org $8DEB3C
JSL DrawBIndicator : BRA + : NOP #3 : +
;--------------------------------------------------------------------------------
org $879CE6 ; Bank07.asm@4632 (LDA #$80 : TSB $3A : ...)
JSL UseItem
BCC + : RTS : +
JSR $9C56
NOP #1
;--------------------------------------------------------------------------------
;================================================================================ ;================================================================================
; Text Renderer ; Text Renderer
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------

View File

@@ -7,13 +7,12 @@
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
ProcessMenuButtons: ProcessMenuButtons:
LDA.b Joy1A_New : BIT.b #$40 : BNE .y_pressed ; check for P1 Y-button LDA.b Joy1A_New : BIT.b #$40 : BNE .y_pressed ; check for P1 Y-button
BIT.b #$20 : BNE .sel_pressed ; check for P1 Select button BIT.b #$20 : BNE .sel_pressed ; check for P1 Select button
BIT.b #$80 : BNE .b_pressed ; check for P1 B-button
LDA.b Joy1A_All : BIT.b #$20 : BNE .sel_held LDA.b Joy1A_All : BIT.b #$20 : BNE .sel_held
.sel_unheld .sel_unheld
LDA.l HudFlag : AND.b #$60 : BEQ + LDA.l HudFlag : AND.b #$60 : BEQ +
LDA.b #$00 : STA.l HudFlag LDA.b #$00 : STA.l HudFlag
JSL.l MaybePlaySelectSFX JSL.l MaybePlaySelectSFX
+ +
JSL.l ResetEquipment JSL.l ResetEquipment
+ +
@@ -21,27 +20,15 @@ ProcessMenuButtons:
CLC ; no buttons CLC ; no buttons
RTL RTL
.sel_pressed .sel_pressed
LDA.l HUDDungeonItems : BIT.b #$0C : BNE + LDA.l HUDDungeonItems : BIT.b #$0C : BNE +
LDA.b #$40 LDA.b #$40
BRA .store_flag BRA .store_flag
+ +
LDA.b #$60 LDA.b #$60
.store_flag .store_flag
STA.l HudFlag STA.l HudFlag
JSL.l MaybePlaySelectSFX JSL.l MaybePlaySelectSFX
JSL.l ResetEquipment JSL.l ResetEquipment
RTL
.b_pressed
JSR CanPressB : BCC .b_error
LDA.w ItemCursor : CMP.l ItemOnB : BNE .set_b
LDA.b #$00
.set_b
STA.l ItemOnB
BRA .b_done
.b_error
LDA.b #$3C : STA.w SFX2 ; error sound
.b_done
SEC
RTL RTL
.y_pressed ; Note: used as entry point by quickswap code. Must preserve X. .y_pressed ; Note: used as entry point by quickswap code. Must preserve X.
LDA.b #$10 : STA.w MenuBlink LDA.b #$10 : STA.w MenuBlink
@@ -108,27 +95,6 @@ RTL
SEC SEC
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
CanPressB:
PHY : PHP : SEP #$30
LDA.l AllowedItemOnB : BEQ .no
CMP.b #$FF : BEQ .skip_allow_check
CMP.w ItemCursor : BNE .no
.skip_allow_check
PHX
LDA.w ItemCursor : TAX
LDA.l ValidItemOnB, X : BNE .plx_and_no
PLX
PLP : PLY
SEC
RTS
.plx_and_no
PLX
.no
PLP : PLY
CLC
RTS
;--------------------------------------------------------------------------------
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;ProcessBottleMenu: ;ProcessBottleMenu:
@@ -153,7 +119,7 @@ RTL
OpenBottleMenu: OpenBottleMenu:
LDA.b Joy1B_New : AND.b #$40 : BEQ .x_not_pressed ; skip if X is not down LDA.b Joy1B_New : AND.b #$40 : BEQ .x_not_pressed ; skip if X is not down
LDA.b #$10 : STA.w MenuBlink ; set 16 frame cool off LDA.b #$10 : STA.w MenuBlink ; set 16 frame cool off
LDA.b #$20 : STA.w SFX3 ; make menu sound LDA.b #$20 : STA.w SFX3 ; make menu sound
LDA.b #$07 : STA.w SubModuleInterface ; thing we wrote over - opens bottle menu LDA.b #$07 : STA.w SubModuleInterface ; thing we wrote over - opens bottle menu
.x_not_pressed .x_not_pressed
RTL RTL
@@ -161,16 +127,16 @@ RTL
;CloseBottleMenu: ;CloseBottleMenu:
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
CloseBottleMenu: CloseBottleMenu:
LDA.b Joy1B_New : AND.b #$40 : BEQ .x_not_pressed ; skip if X is not down LDA.b Joy1B_New : AND.b #$40 : BEQ .x_not_pressed ; skip if X is not down
LDA.b #$10 : STA.w MenuBlink ; set 16 frame cool off LDA.b #$10 : STA.w MenuBlink ; set 16 frame cool off
LDA.b #$20 : STA.w SFX3 ; make menu sound LDA.b #$20 : STA.w SFX3 ; make menu sound
INC.w SubModuleInterface ; return to normal menu INC.w SubModuleInterface ; return to normal menu
STZ.w BottleMenuCounter STZ.w BottleMenuCounter
LDA.b #$00 LDA.b #$00
RTL RTL
.x_not_pressed .x_not_pressed
LDA.b Joy1A_New : AND.b #$0C ; thing we wrote over (probably) LDA.b Joy1A_New : AND.b #$0C ; thing we wrote over (probably)
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; AddInventory: ; AddInventory:
@@ -179,8 +145,8 @@ AddInventory:
; In: Y - Receipt ID ; In: Y - Receipt ID
; Uses $0B-$0D for long absolute addressing ; Uses $0B-$0D for long absolute addressing
PHA : PHX : PHY : PHP : PHB PHA : PHX : PHY : PHP : PHB
PHK : PLB PHK : PLB
LDA.b #$7E : STA.b Scrap0D LDA.b #$7E : STA.b Scrap0D
LDA.l StatsLocked : BNE .done LDA.l StatsLocked : BNE .done
REP #$30 REP #$30
@@ -188,25 +154,25 @@ AddInventory:
SEP #$20 SEP #$20
LDA.w InventoryTable_properties,X : BIT.b #$01 : BEQ .done LDA.w InventoryTable_properties,X : BIT.b #$01 : BEQ .done
JSR.w ShopCheck : BCS .done JSR.w ShopCheck : BCS .done
JSR.w DungeonIncrement : BCS .done JSR.w DungeonIncrement : BCS .done
JSR.w IncrementByOne JSR.w IncrementByOne
JSR.w StampItem JSR.w StampItem
JSR.w IncrementYAItems JSR.w IncrementYAItems
REP #$30 REP #$30
LDA.l TotalItemCounter : INC : TAY LDA.l TotalItemCounter : INC : TAY
LDA.l BootsEquipment : AND.w #$00FF : BNE + LDA.l BootsEquipment : AND.w #$00FF : BNE +
TYA : STA.l PreBootsLocations TYA : STA.l PreBootsLocations
+ +
LDA.l MirrorEquipment : AND.w #$00FF : BNE + LDA.l MirrorEquipment : AND.w #$00FF : BNE +
TYA : STA.l PreMirrorLocations TYA : STA.l PreMirrorLocations
+ +
LDA.l FluteEquipment : AND.w #$00FF : BNE + LDA.l FluteEquipment : AND.w #$00FF : BNE +
TYA : STA.l PreFluteLocations TYA : STA.l PreFluteLocations
+ +
TYA TYA
STA.l TotalItemCounter STA.l TotalItemCounter
.done .done
SEP #$30 SEP #$30
PLB : PLP : PLY : PLX : PLA PLB : PLP : PLY : PLX : PLA
RTL RTL
@@ -215,27 +181,27 @@ ShopCheck:
; In: X - Receipt ID << 1 ; In: X - Receipt ID << 1
; TODO: If we write all shops, we can use the ShopPurchase flag instead of this ; TODO: If we write all shops, we can use the ShopPurchase flag instead of this
PHX PHX
LDA.b IndoorsFlag : BEQ .count LDA.b IndoorsFlag : BEQ .count
LDA.w ItemReceiptMethod : CMP.b #$01 : BEQ .count LDA.w ItemReceiptMethod : CMP.b #$01 : BEQ .count
LDA.w InventoryTable_properties,X : BIT.b #$02 : BNE .count LDA.w InventoryTable_properties,X : BIT.b #$02 : BNE .count
REP #$20 REP #$20
LDA.b RoomIndex LDA.b RoomIndex
CMP.w #274 : BEQ .nocount ; dark world death mountain shop, ornamental shield shop CMP.w #274 : BEQ .nocount ; dark world death mountain shop, ornamental shield shop
CMP.w #271 : BEQ .nocount ; villiage of outcasts shop, lumberjack shop, lake hylia shop, dark world magic shop CMP.w #271 : BEQ .nocount ; villiage of outcasts shop, lumberjack shop, lake hylia shop, dark world magic shop
CMP.w #272 : BEQ .nocount ; red shield shop CMP.w #272 : BEQ .nocount ; red shield shop
CMP.w #284 : BEQ .nocount ; bomb shop CMP.w #284 : BEQ .nocount ; bomb shop
CMP.w #287 : BEQ .nocount ; kakariko shop CMP.w #287 : BEQ .nocount ; kakariko shop
CMP.w #255 : BEQ .nocount ; light world death mountain shop CMP.w #255 : BEQ .nocount ; light world death mountain shop
CMP.w #276 : BEQ .nocount ; waterfall fairy CMP.w #276 : BEQ .nocount ; waterfall fairy
CMP.w #277 : BEQ .nocount ; upgrade fairy (shop) CMP.w #277 : BEQ .nocount ; upgrade fairy (shop)
CMP.w #278 : BEQ .nocount ; pyramid fairy CMP.w #278 : BEQ .nocount ; pyramid fairy
SEP #$20 SEP #$20
.count .count
CLC CLC
PLX PLX
RTS RTS
.nocount .nocount
SEP #$21 SEP #$21
PLX PLX
RTS RTS
@@ -243,161 +209,150 @@ DungeonIncrement:
; In: X - Receipt ID << 1 ; In: X - Receipt ID << 1
PHX PHX
LDA.w InventoryTable_properties,X : BIT.b #$40 : BEQ + LDA.w InventoryTable_properties,X : BIT.b #$40 : BEQ +
JSL.l CountChestKeyLong JSL.l CountChestKeyLong
+ +
SEP #$10 SEP #$10
LDA.b IndoorsFlag : BEQ .done LDA.b IndoorsFlag : BEQ .done
LDA.w DungeonID : BMI .done LDA.w DungeonID : BMI .done
CMP.l BallNChainDungeon : BNE + CMP.l BallNChainDungeon : BNE +
CPY.b #$32 : BEQ .ballchain_bigkey CPY.b #$32 : BEQ .ballchain_bigkey
+ +
CMP.b #$04 : BCS + CMP.b #$04 : BCS +
LDA.l SewersLocations : INC : STA.l SewersLocations : STA.l HCLocations LDA.l SewersLocations : INC : STA.l SewersLocations : STA.l HCLocations
BRA .done BRA .done
+ +
LSR : TAX LSR : TAX
LDA.l DungeonLocationsChecked, X : INC : STA.l DungeonLocationsChecked, X LDA.l DungeonLocationsChecked, X : INC : STA.l DungeonLocationsChecked, X
CPX.b #$0D : BNE + CPX.b #$0D : BNE +
LDA.l BigKeyField : BIT.b #$04 : BNE ++ LDA.l BigKeyField : BIT.b #$04 : BNE ++
LDA.l PreGTBKLocations : INC : STA.l PreGTBKLocations LDA.l PreGTBKLocations : INC : STA.l PreGTBKLocations
++ ++
+ +
.done .done
REP #$11 REP #$11
PLX PLX
RTS RTS
.ballchain_bigkey .ballchain_bigkey
REP #$10 REP #$10
PLX PLX
SEC SEC
RTS RTS
StampItem: StampItem:
REP #$30 REP #$30
LDA.w InventoryTable_stamp,X : BEQ .skip LDA.w InventoryTable_stamp,X : BEQ .skip
STA.b Scrap0B STA.b Scrap0B
LDA.b [Scrap0B] : BNE .skip LDA.b [Scrap0B] : BNE .skip
INC.b Scrap0B : INC.b Scrap0B INC.b Scrap0B : INC.b Scrap0B
LDA.b [Scrap0B] : BNE .skip LDA.b [Scrap0B] : BNE .skip
LDA.l NMIFrames+2 : STA.b [Scrap0B]
DEC.b Scrap0B : DEC.b Scrap0B DEC.b Scrap0B : DEC.b Scrap0B
LDA.l NMIFrames : STA.b [Scrap0B] LDA.l NMIFrames : STA.b [Scrap0B]
INC.b Scrap0B : INC.b Scrap0B .skip
LDA.l NMIFrames+2 : STA.b [Scrap0B]
.skip
SEP #$20 SEP #$20
RTS RTS
IncrementYAItems: IncrementYAItems:
PHX PHX
LDA.w InventoryTable_properties,X LDA.w InventoryTable_properties,X
BIT.b #$10 : BNE .bomb_check BIT.b #$10 : BNE .bomb_check
BIT.b #$20 : BNE .bow_check BIT.b #$20 : BNE .bow_check
BIT.b #$04 : BEQ .not_y BIT.b #$04 : BEQ .not_y
.y_item .y_item
LDA.l YAItemCounter : !ADD #$08 : STA.l YAItemCounter LDA.l YAItemCounter : !ADD #$08 : STA.l YAItemCounter
BRA .done BRA .done
.not_y .not_y
BIT.b #$08 : BEQ .done BIT.b #$08 : BEQ .done
.a_item .a_item
LDA.l YAItemCounter : INC : AND.b #$07 : TAX LDA.l YAItemCounter : INC : AND.b #$07 : TAX
LDA.l YAItemCounter : AND.b #$F8 : STA.l YAItemCounter LDA.l YAItemCounter : AND.b #$F8 : STA.l YAItemCounter
TXA : ORA.l YAItemCounter : STA.l YAItemCounter TXA : ORA.l YAItemCounter : STA.l YAItemCounter
.done .done
PLX PLX
RTS RTS
.bow_check .bow_check
LDA.l BowEquipment : BNE + LDA.l BowEquipment : BNE +
BRA .y_item BRA .y_item
.bomb_check .bomb_check
LDA.l InventoryTracking+1 : BIT.b #$02 : BNE + LDA.l InventoryTracking+1 : BIT.b #$02 : BNE +
ORA.b #$02 : STA.l InventoryTracking+1 ORA.b #$02 : STA.l InventoryTracking+1
BRA .y_item BRA .y_item
+ +
PLX PLX
RTS RTS
IncrementByOne: IncrementByOne:
PHX PHX
REP #$20 REP #$20
LDA.w InventoryTable_stat,X : BEQ .skip LDA.w InventoryTable_stat,X : BEQ .skip
STA.b Scrap0B STA.b Scrap0B
SEP #$21 SEP #$21
LDA.b #$00 : ADC.b [Scrap0B] : STA.b [Scrap0B] LDA.b #$00 : ADC.b [Scrap0B] : STA.b [Scrap0B]
.skip .skip
SEP #$20 SEP #$20
PLX PLX
RTS RTS
IncrementBossSword: IncrementBossSword:
PHX PHX
LDA.l StatsLocked : BNE .done LDA.l StatsLocked : BNE .done
LDA.l SwordEquipment : CMP.b #$FF : BNE +
BRA .none
+
ASL : TAX
JMP.w (.vectors,X)
.start .vectors
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BEQ .check_special_weapon dw .none
CMP.b #$03 : BEQ .check_special_weapon dw .fighter
CMP.b #$04 : BEQ .check_special_weapon dw .master
CMP.b #$05 : BEQ .check_special_weapon dw .tempered
CMP.b #$08 : BEQ .check_special_weapon dw .golden
.check_sword .none
LDA.l SwordEquipment : CMP.b #$FF : BNE + LDA.l SwordlessBossKills : INC : STA.l SwordlessBossKills
BRA .none .done
+ PLX
ASL : TAX RTL
JMP.w (.vectors,X) .fighter
.check_special_weapon LDA.l SwordBossKills
LDA.l SpecialWeaponLevel CLC : ADC.b #$10
ASL : TAX STA.l SwordBossKills
JMP.w (.vectors,X) PLX
RTL
.vectors .master
dw .none LDA.l SwordBossKills : INC : AND.b #$0F : TAX
dw .fighter LDA.l SwordBossKills : AND.b #$F0 : STA.l SwordBossKills
dw .master TXA : ORA.l SwordBossKills : STA.l SwordBossKills
dw .tempered PLX
dw .golden RTL
dw .golden .tempered
LDA.l SwordBossKills+1
.none CLC : ADC.b #$10
LDA.l SwordlessBossKills : INC : STA.l SwordlessBossKills STA.l SwordBossKills+1
.done PLX
PLX RTL
RTL .golden
.fighter LDA.l SwordBossKills+1 : INC : AND.b #$0F : TAX
LDA.l SwordBossKills LDA.l SwordBossKills+1 : AND.b #$F0 : STA.l SwordBossKills+1
CLC : ADC.b #$10 TXA : ORA.l SwordBossKills+1 : STA.l SwordBossKills+1
STA.l SwordBossKills PLX
PLX RTL
RTL
.master
LDA.l SwordBossKills : INC : AND.b #$0F : TAX
LDA.l SwordBossKills : AND.b #$F0 : STA.l SwordBossKills
TXA : ORA.l SwordBossKills : STA.l SwordBossKills
PLX
RTL
.tempered
LDA.l SwordBossKills+1
CLC : ADC.b #$10
STA.l SwordBossKills+1
PLX
RTL
.golden
LDA.l SwordBossKills+1 : INC : AND.b #$0F : TAX
LDA.l SwordBossKills+1 : AND.b #$F0 : STA.l SwordBossKills+1
TXA : ORA.l SwordBossKills+1 : STA.l SwordBossKills+1
PLX
RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IncrementFinalSword: IncrementFinalSword:
PHX PHX
REP #$20 REP #$20
LDA.w RoomIndex : BNE .done LDA.w RoomIndex : BNE .done
SEP #$20 SEP #$20
JMP IncrementBossSword_start LDA.l SwordEquipment : CMP.b #$FF : BNE +
.done BRA IncrementBossSword_none
SEP #$20 +
PLX ASL : TAX
JMP.w (IncrementBossSword_vectors,X)
.done
SEP #$20
PLX
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
Link_ReceiveItem_HUDRefresh: Link_ReceiveItem_HUDRefresh:
@@ -409,7 +364,7 @@ Link_ReceiveItem_HUDRefresh:
+ +
JSL.l HUD_RefreshIconLong ; thing we wrote over JSL.l HUD_RefreshIconLong ; thing we wrote over
INC.w UpdateHUDFlag LDA.b #$01 : STA.l UpdateHUDFlag
JSL.l PostItemGet JSL.l PostItemGet
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -424,7 +379,7 @@ HandleBombAbsorbtion:
LDA.b #$04 : STA.w ItemCursor ; set selected item to bombs LDA.b #$04 : STA.w ItemCursor ; set selected item to bombs
LDA.b #$01 : STA.w CurrentYItem ; set selected item to bombs LDA.b #$01 : STA.w CurrentYItem ; set selected item to bombs
JSL.l HUD_RebuildLong JSL.l HUD_RebuildLong
INC.w UpdateHUDFlag LDA.b #$01 : STA.l UpdateHUDFlag
+ +
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -447,7 +402,6 @@ AddYMarker:
+ CMP.w #$10 : BEQ .drawJarMarker + CMP.w #$10 : BEQ .drawJarMarker
.drawNormal .drawNormal
JSR CanPressB : BCS .drawBBubble
LDA.w #$7C60 LDA.w #$7C60
BRA .drawTile BRA .drawTile
@@ -455,20 +409,12 @@ AddYMarker:
LDA.w MenuBlink : AND.w #$0020 : BNE .drawXBubble LDA.w MenuBlink : AND.w #$0020 : BNE .drawXBubble
.drawYBubble .drawYBubble
JSR CanPressB : BCC .drawY
LDA.w MenuBlink : AND.w #$0020 : BNE .drawBBubble
.drawY
LDA.w #$3D4F LDA.w #$3D4F
BRA .drawTile BRA .drawTile
.drawXBubble .drawXBubble
JSR MakeCircleBlue JSR MakeCircleBlue
LDA.w #$2D3E LDA.w #$2D3E
BRA .drawTile
.drawBBubble
JSR MakeCircleRed
LDA.w #$293F
.drawTile .drawTile
STA.w $FFC4, Y STA.w $FFC4, Y
@@ -480,40 +426,22 @@ RTL
; this is horrible, make it better ; this is horrible, make it better
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
MakeCircleBlue: MakeCircleBlue:
LDA.w $FFC0, Y : AND.w #$EFFF : STA.w $FFC0, Y LDA.w $FFC0, Y : AND.w #$EFFF : STA.w $FFC0, Y
LDA.w $FFC2, Y : AND.w #$EFFF : STA.w $FFC2, Y LDA.w $FFC2, Y : AND.w #$EFFF : STA.w $FFC2, Y
LDA.w $FFFE, Y : AND.w #$EFFF : STA.w $FFFE, Y LDA.w $FFFE, Y : AND.w #$EFFF : STA.w $FFFE, Y
LDA.w $0004, Y : AND.w #$EFFF : STA.w $0004, Y LDA.w $0004, Y : AND.w #$EFFF : STA.w $0004, Y
LDA.w $003E, Y : AND.w #$EFFF : STA.w $003E, Y
LDA.w $0044, Y : AND.w #$EFFF : STA.w $0044, Y
LDA.w $0080, Y : AND.w #$EFFF : STA.w $0080, Y
LDA.w $0082, Y : AND.w #$EFFF : STA.w $0082, Y
LDA.w $003E, Y : AND.w #$EFFF : STA.w $003E, Y LDA.w $FFBE, Y : AND.w #$EFFF : STA.w $FFBE, Y
LDA.w $0044, Y : AND.w #$EFFF : STA.w $0044, Y LDA.w $FFC4, Y : AND.w #$EFFF : STA.w $FFC4, Y
LDA.w $0084, Y : AND.w #$EFFF : STA.w $0084, Y
LDA.w $0080, Y : AND.w #$EFFF : STA.w $0080, Y LDA.w $007E, Y : AND.w #$EFFF : STA.w $007E, Y
LDA.w $0082, Y : AND.w #$EFFF : STA.w $0082, Y
LDA.w $FFBE, Y : AND.w #$EFFF : STA.w $FFBE, Y
LDA.w $FFC4, Y : AND.w #$EFFF : STA.w $FFC4, Y
LDA.w $0084, Y : AND.w #$EFFF : STA.w $0084, Y
LDA.w $007E, Y : AND.w #$EFFF : STA.w $007E, Y
RTS
MakeCircleRed:
LDA.w $FFC0, Y : AND.w #$EBFF : STA.w $FFC0, Y
LDA.w $FFC2, Y : AND.w #$EBFF : STA.w $FFC2, Y
LDA.w $FFFE, Y : AND.w #$EBFF : STA.w $FFFE, Y
LDA.w $0004, Y : AND.w #$EBFF : STA.w $0004, Y
LDA.w $003E, Y : AND.w #$EBFF : STA.w $003E, Y
LDA.w $0044, Y : AND.w #$EBFF : STA.w $0044, Y
LDA.w $0080, Y : AND.w #$EBFF : STA.w $0080, Y
LDA.w $0082, Y : AND.w #$EBFF : STA.w $0082, Y
LDA.w $FFBE, Y : AND.w #$EBFF : STA.w $FFBE, Y
LDA.w $FFC4, Y : AND.w #$EBFF : STA.w $FFC4, Y
LDA.w $0084, Y : AND.w #$EBFF : STA.w $0084, Y
LDA.w $007E, Y : AND.w #$EBFF : STA.w $007E, Y
RTS RTS
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -560,18 +488,18 @@ RTL
; SaveKeys: ; SaveKeys:
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
SaveKeys: SaveKeys:
PHA PHA
LDA.l GenericKeys : BEQ + LDA.l GenericKeys : BEQ +
PLA : STA.l CurrentGenericKeys PLA : STA.l CurrentGenericKeys
RTL RTL
+ +
PLA : STA.l DungeonKeys, X PLA : STA.l DungeonKeys, X
CPX.b #$00 : BNE + CPX.b #$00 : BNE +
STA.l HyruleCastleKeys ; copy HC to sewers STA.l HyruleCastleKeys ; copy HC to sewers
+ +
CPX.b #$01 : BNE + CPX.b #$01 : BNE +
STA.l SewerKeys ; copy sewers to HC STA.l SewerKeys ; copy sewers to HC
+ +
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -596,8 +524,8 @@ RTL
; PrepItemScreenBigKey: ; PrepItemScreenBigKey:
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
PrepItemScreenBigKey: PrepItemScreenBigKey:
STZ.b Scrap02 STZ.b Scrap02
STZ.b Scrap03 STZ.b Scrap03
REP #$30 ; thing we wrote over - set 16-bit accumulator REP #$30 ; thing we wrote over - set 16-bit accumulator
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -606,15 +534,15 @@ RTL
; LoadPowder: ; LoadPowder:
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
LoadPowder: LoadPowder:
PHX PHX
JSL.l Sprite_SpawnDynamically ; thing we wrote over JSL.l Sprite_SpawnDynamically ; thing we wrote over
%GetPossiblyEncryptedItem(WitchItem, SpriteItemValues) %GetPossiblyEncryptedItem(WitchItem, SpriteItemValues)
JSL.l AttemptItemSubstitution JSL.l AttemptItemSubstitution
JSL.l ResolveLootIDLong JSL.l ResolveLootIDLong
STA.w SpriteID, Y STA.w SpriteID, Y
TYX TYX
JSL.l PrepDynamicTile_loot_resolved JSL.l PrepDynamicTile_loot_resolved
PLX PLX
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -694,14 +622,14 @@ RTL
; CollectPowder: ; CollectPowder:
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
CollectPowder: CollectPowder:
LDY.w SpriteID, X ; Retrieve stored item type LDY.w SpriteID, X ; Retrieve stored item type
BNE + BNE +
; if for any reason the item value is 0 reload it, just in case ; if for any reason the item value is 0 reload it, just in case
%GetPossiblyEncryptedItem(WitchItem, SpriteItemValues) : TAY %GetPossiblyEncryptedItem(WitchItem, SpriteItemValues) : TAY
+ +
STZ.w ItemReceiptMethod ; item from NPC STZ.w ItemReceiptMethod ; item from NPC
JSL.l Link_ReceiveItem JSL.l Link_ReceiveItem
JSL.l ItemSet_Powder JSL.l ItemSet_Powder
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -724,14 +652,14 @@ RTL
DrawMagicHeader: DrawMagicHeader:
LDA.l MagicConsumption : AND.w #$00FF : CMP.w #$0002 : BEQ .quarterMagic LDA.l MagicConsumption : AND.w #$00FF : CMP.w #$0002 : BEQ .quarterMagic
.halfMagic .halfMagic
LDA.w #$28F7 : STA.l HUDTileMapBuffer+$04 LDA.w #$28F7 : STA.l HUDTileMapBuffer+$04
LDA.w #$2851 : STA.l HUDTileMapBuffer+$06 LDA.w #$2851 : STA.l HUDTileMapBuffer+$06
LDA.w #$28FA : STA.l HUDTileMapBuffer+$08 LDA.w #$28FA : STA.l HUDTileMapBuffer+$08
RTL RTL
.quarterMagic .quarterMagic
LDA.w #$28F7 : STA.l HUDTileMapBuffer+$04 LDA.w #$28F7 : STA.l HUDTileMapBuffer+$04
LDA.w #$2800 : STA.l HUDTileMapBuffer+$06 LDA.w #$2800 : STA.l HUDTileMapBuffer+$06
LDA.w #$2801 : STA.l HUDTileMapBuffer+$08 LDA.w #$2801 : STA.l HUDTileMapBuffer+$08
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -765,8 +693,8 @@ RTL
SpawnShovelItem: SpawnShovelItem:
LDA.b #$01 : STA.l RedrawFlag LDA.b #$01 : STA.l RedrawFlag
LDA.w YButtonOverride : BEQ + LDA.w YButtonOverride : BEQ +
JSL DiggingGameGuy_AttemptPrizeSpawn JSL DiggingGameGuy_AttemptPrizeSpawn
JMP .skip JMP .skip
+ +
@@ -778,8 +706,8 @@ SpawnShovelItem:
LDA.b IndoorsFlag : BEQ + : JMP .no_drop : + ; skip if indoors LDA.b IndoorsFlag : BEQ + : JMP .no_drop : + ; skip if indoors
LDA.b OverworldIndex : CMP.b #$2A : BEQ .no_drop ; don't drop in the haunted grove LDA.b OverworldIndex : CMP.b #$2A : BEQ .no_drop ; don't drop in the haunted grove
CMP.b #$68 : BEQ .no_drop ; don't drop in the digging game area CMP.b #$68 : BEQ .no_drop ; don't drop in the digging game area
JSL GetRandomInt : BIT.b #$03 : BNE .no_drop ; drop with 1/4 chance JSL GetRandomInt : BIT.b #$03 : BNE .no_drop ; drop with 1/4 chance
@@ -803,12 +731,11 @@ SpawnShovelItem:
LDA.b #$30 : STA.w SpriteTimerE, Y LDA.b #$30 : STA.w SpriteTimerE, Y
LDA.b LinkPosX : !ADD.l .x_offsets, X LDA.b LinkPosX : !ADD.l .x_offsets, X
AND.b #$F0 : STA.w SpritePosXLow, Y AND.b #$F0 : STA.w SpritePosXLow, Y
LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh, Y LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh, Y
LDA.b LinkPosY : !ADD.b #$16 LDA.b LinkPosY : !ADD.b #$16 : AND.b #$F0 : STA.w SpritePosYLow, Y
AND.b #$F0 : STA.w SpritePosYLow, Y LDA.b LinkPosY+1 : ADC.b #$00 : STA.w SpritePosYHigh, Y
LDA.b LinkPosY+1 : ADC.b #$00 : STA.w SpritePosYHigh, Y
LDA.b #$00 : STA.w SpriteLayer, Y LDA.b #$00 : STA.w SpriteLayer, Y
TYX TYX
@@ -825,23 +752,23 @@ RTL
{ {
.x_speeds .x_speeds
db $F0 db $F0
db $10 db $10
.x_offsets .x_offsets
db $00 db $00
db $13 db $13
} }
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
MaybePlaySelectSFX: MaybePlaySelectSFX:
LDA.w DungeonID : BMI .not_dungeon LDA.w DungeonID : BMI .not_dungeon
.play .play
LDA.b #$20 : STA.w SFX3 ; menu select sound LDA.b #$20 : STA.w SFX3 ; menu select sound
RTL RTL
.not_dungeon .not_dungeon
LDA.l HUDDungeonItems : BIT.b #$13 : BEQ .dont_play LDA.l HUDDungeonItems : BIT.b #$13 : BEQ .dont_play
BIT.b #$0C : BEQ .dont_play BIT.b #$0C : BEQ .dont_play
BRA .play BRA .play
.dont_play .dont_play
RTL RTL

View File

@@ -1,98 +0,0 @@
;--------------------------------------------------------------------------------
ItemMenuLocations:
dw $11C8 ; Bow
dw $11CE ; Boomerang
dw $11D4 ; Hookshot
dw $11DA ; Bombs
dw $11E0 ; Powder / Mushroom
dw $1288 ; Fire Rod
dw $128E ; Ice Rod
dw $1294 ; Bombos
dw $129A ; Ether
dw $12A0 ; Quake
dw $1348 ; Lamp
dw $134E ; Hammer
dw $1354 ; Flute / Shovel
dw $135A ; Bug Net
dw $1360 ; Book
dw $1408 ; Bottles
dw $140E ; Somaria
dw $1414 ; Byrna
dw $141A ; Cape
dw $1420 ; Mirror
DrawBIndicator:
LDA.l ItemOnB : AND.w #$00FF : BEQ .done
DEC : ASL : TAX
LDA.l ItemMenuLocations, X : TAX
LDA.w #$3D3B
STA.w $0042, X
.done ; what we wrote over
LDA.w $0202
AND.w #$00FF
DEC
ASL
TAX
RTL
;--------------------------------------------------------------------------------
ItemHandlerLocs:
dw $A003 ; Bow
dw $A0B8 ; Boomerang
dw $AB23 ; Hookshot
dw $A139 ; Bombs
dw $FFFF ; Powder / Mushroom
dw $9EEC ; Fire Rod
dw $9EEC ; Ice Rod
dw $A55E ; Bombos
dw $A489 ; Ether
dw $A640 ; Quake
dw $A246 ; Lamp
dw $9F82 ; Hammer
dw $FFFF ; Flute / Shovel
dw $AFEE ; Bug Net
dw $A46E ; Book
dw $FFFF ; Bottles
dw $AEBB ; Somaria
dw $FFFF ; Byrna
dw $FFFF ; Cape
dw $A913 ; Mirror
ValidItemOnB:
db $FF
db $00, $00, $00, $00, $FF
db $00, $00, $00, $00, $00
db $00, $00, $FF, $00, $00
db $FF, $00, $FF, $FF, $00
UseItem:
JSL CheckDetonateBomb : BCS .normal
LDA.l ItemOnB : BEQ .normal
TAX
LDA.b $6C : BNE .prevent_swing
CPX.b #$11 : BNE .not_somaria
LDA.w $02F5 : BNE .prevent_swing
.not_somaria
LDA.l ValidItemOnB, X : BNE .normal
LDA.b $3A : ORA.b #$40 : STA.b $3A
LDA.l $8DFA35, X : STA.w $0304
CPX.b #$06 : BEQ .fire_rod
CPX.b #$07 : BNE .not_rod
.ice_rod
LDA.b #$02 : STA.w $0307
BRA .not_rod
.fire_rod
LDA.b #$01 : STA.w $0307
.not_rod
TXA : DEC : ASL : TAX
LDA.l ItemHandlerLocs+1, X : STA.b $01
LDA.l ItemHandlerLocs, X : STA.b $00
JSL Link_UseItemLong
.prevent_swing
SEC
RTL
.normal
LDA.b #$80 : TSB.b $3A
LDA.b #$01 : TSB.b $50
CLC
RTL

View File

@@ -238,10 +238,10 @@ endmacro
%ReceiptProps($63, -4, 0, $FF, $F36A, $FF, skip, rng_multi) ; 63 - RNG pool item (multi) %ReceiptProps($63, -4, 0, $FF, $F36A, $FF, skip, rng_multi) ; 63 - RNG pool item (multi)
%ReceiptProps($64, -4, 0, $FF, $F340, $FF, skip, progressive_bow) ; 64 - Progressive bow %ReceiptProps($64, -4, 0, $FF, $F340, $FF, skip, progressive_bow) ; 64 - Progressive bow
%ReceiptProps($65, -4, 0, $FF, $F340, $FF, skip, progressive_bow_2) ; 65 - Progressive bow %ReceiptProps($65, -4, 0, $FF, $F340, $FF, skip, progressive_bow_2) ; 65 - Progressive bow
%ReceiptProps($66, -4, 0, $FF, $F36A, $FF, skip, skip) ; 66 - %ReceiptProps($66, -4, 0, $FF, $F36A, $FF, skip, skip) ; 66 -
%ReceiptProps($67, -4, 0, $FF, $F36A, $FF, skip, skip) ; 67 - %ReceiptProps($67, -4, 0, $FF, $F36A, $FF, skip, skip) ; 67 -
%ReceiptProps($68, -4, 0, $FF, $F36A, $FF, skip, skip) ; 68 - %ReceiptProps($68, -4, 0, $FF, $F36A, $FF, skip, skip) ; 68 -
%ReceiptProps($69, -4, 0, $FF, $F36A, $FF, skip, skip) ; 69 - %ReceiptProps($69, -4, 0, $FF, $F36A, $FF, skip, skip) ; 69 -
%ReceiptProps($6A, -4, 0, $49, $F36A, $FF, triforce, skip) ; 6A - Triforce %ReceiptProps($6A, -4, 0, $49, $F36A, $FF, triforce, skip) ; 6A - Triforce
%ReceiptProps($6B, -4, 0, $50, $F36A, $FF, goal_item, skip) ; 6B - Power star %ReceiptProps($6B, -4, 0, $50, $F36A, $FF, goal_item, skip) ; 6B - Power star
%ReceiptProps($6C, -4, 0, $49, $F36A, $FF, goal_item, skip) ; 6C - Triforce Piece %ReceiptProps($6C, -4, 0, $49, $F36A, $FF, goal_item, skip) ; 6C - Triforce Piece
@@ -328,9 +328,9 @@ endmacro
%ReceiptProps($BD, -4, 0, $49, $F36A, $FF, skip, skip) ; BD - %ReceiptProps($BD, -4, 0, $49, $F36A, $FF, skip, skip) ; BD -
%ReceiptProps($BE, -4, 0, $49, $F36A, $FF, skip, skip) ; BE - %ReceiptProps($BE, -4, 0, $49, $F36A, $FF, skip, skip) ; BE -
%ReceiptProps($BF, -4, 0, $49, $F36A, $FF, skip, skip) ; BF - %ReceiptProps($BF, -4, 0, $49, $F36A, $FF, skip, skip) ; BF -
%ReceiptProps($C0, -4, 0, $13, $F36A, $FF, prog_weapon, skip) ; C0 - Progressive Bombs %ReceiptProps($C0, -4, 0, $49, $F36A, $FF, skip, skip) ; C0 -
%ReceiptProps($C1, -4, 4, $07, $F36A, $FF, prog_weapon, skip) ; C1 - Progressive Cane %ReceiptProps($C1, -4, 0, $49, $F36A, $FF, skip, skip) ; C1 -
%ReceiptProps($C2, -4, 0, $27, $F36A, $FF, prog_weapon, skip) ; C2 - Progressive Bug Net %ReceiptProps($C2, -4, 0, $49, $F36A, $FF, skip, skip) ; C2 -
%ReceiptProps($C3, -4, 0, $49, $F36A, $FF, skip, skip) ; C3 - %ReceiptProps($C3, -4, 0, $49, $F36A, $FF, skip, skip) ; C3 -
%ReceiptProps($C4, -4, 0, $49, $F36A, $FF, skip, skip) ; C4 - %ReceiptProps($C4, -4, 0, $49, $F36A, $FF, skip, skip) ; C4 -
%ReceiptProps($C5, -4, 0, $49, $F36A, $FF, skip, skip) ; C5 - %ReceiptProps($C5, -4, 0, $49, $F36A, $FF, skip, skip) ; C5 -
@@ -397,11 +397,11 @@ endmacro
; Palettes: l - - - - c c c ; Palettes: l - - - - c c c
; c = Color Index | l = Load palette data from ROM ; c = Color Index | l = Load palette data from ROM
SpriteProperties: SpriteProperties:
.chest_width : fillbyte $00 : fill 256 .chest_width : fillbyte $00 : fill 256
.standing_width : fillbyte $00 : fill 256 .standing_width : fillbyte $00 : fill 256
.chest_palette : fillbyte $00 : fill 256 .chest_palette : fillbyte $00 : fill 256
.standing_palette : fillbyte $00 : fill 256 .standing_palette : fillbyte $00 : fill 256
.palette_addr : fillword $0000 : fill 256*2 ; bank $9B .palette_addr : fillword $0000 : fill 256*2 ; bank $9B
macro SpriteProps(id, chest_width, standing_width, chest_pal, standing_pal, addr) macro SpriteProps(id, chest_width, standing_width, chest_pal, standing_pal, addr)
pushpc pushpc
@@ -607,9 +607,9 @@ endmacro
%SpriteProps($BD, 2, 2, $04, $04, $0000) ; BD - %SpriteProps($BD, 2, 2, $04, $04, $0000) ; BD -
%SpriteProps($BE, 2, 2, $04, $04, $0000) ; BE - %SpriteProps($BE, 2, 2, $04, $04, $0000) ; BE -
%SpriteProps($BF, 2, 2, $04, $04, $0000) ; BF - %SpriteProps($BF, 2, 2, $04, $04, $0000) ; BF -
%SpriteProps($C0, 2, 2, $FF, $FF, PalettesVanilla_blue_ice+$0E) ; C0 - Progressive Bombs %SpriteProps($C0, 2, 2, $04, $04, $0000) ; C0 -
%SpriteProps($C1, 0, 0, $05, $05, PalettesCustom_red_shield) ; C1 - Progressive Cane %SpriteProps($C1, 2, 2, $04, $04, $0000) ; C1 -
%SpriteProps($C2, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; C2 - Progressive Bug Net %SpriteProps($C2, 2, 2, $04, $04, $0000) ; C2 -
%SpriteProps($C3, 2, 2, $04, $04, $0000) ; C3 - %SpriteProps($C3, 2, 2, $04, $04, $0000) ; C3 -
%SpriteProps($C4, 2, 2, $04, $04, $0000) ; C4 - %SpriteProps($C4, 2, 2, $04, $04, $0000) ; C4 -
%SpriteProps($C5, 2, 2, $04, $04, $0000) ; C5 - %SpriteProps($C5, 2, 2, $04, $04, $0000) ; C5 -
@@ -686,8 +686,8 @@ InventoryTable:
macro InventoryItem(id, props, stamp, stat) macro InventoryItem(id, props, stamp, stat)
pushpc pushpc
org InventoryTable_properties+<id>+<id> : dw <props> org InventoryTable_properties+<id>+<id> : dw <props>
org InventoryTable_stamp+<id>+<id> : dw <stamp> org InventoryTable_stamp+<id>+<id> : dw <stamp>
org InventoryTable_stat+<id>+<id> : dw <stat> org InventoryTable_stat+<id>+<id> : dw <stat>
pullpc pullpc
endmacro endmacro
@@ -764,7 +764,7 @@ endmacro
%InventoryItem($46, $0001, $0000, $0000) ; 46 - 300 rupees %InventoryItem($46, $0001, $0000, $0000) ; 46 - 300 rupees
%InventoryItem($47, $0001, $0000, $0000) ; 47 - 20 rupees green %InventoryItem($47, $0001, $0000, $0000) ; 47 - 20 rupees green
%InventoryItem($48, $0085, $0000, $0000) ; 48 - Full bottle (good bee) %InventoryItem($48, $0085, $0000, $0000) ; 48 - Full bottle (good bee)
%InventoryItem($49, $0081, $0000, $0000) ; 49 - Tossed fighter sword %InventoryItem($49, $0081, SwordTime, $0000) ; 49 - Tossed fighter sword
%InventoryItem($4A, $0085, FluteTime, $0000) ; 4A - Active Flute %InventoryItem($4A, $0085, FluteTime, $0000) ; 4A - Active Flute
%InventoryItem($4B, $0089, BootsTime, $0000) ; 4B - Boots %InventoryItem($4B, $0089, BootsTime, $0000) ; 4B - Boots
%InventoryItem($4C, $0015, $0000, CapacityUpgrades) ; 4C - Bomb capacity (50) %InventoryItem($4C, $0015, $0000, CapacityUpgrades) ; 4C - Bomb capacity (50)
@@ -883,9 +883,9 @@ endmacro
%InventoryItem($BD, $0001, $0000, $0000) ; BD - %InventoryItem($BD, $0001, $0000, $0000) ; BD -
%InventoryItem($BE, $0001, $0000, $0000) ; BE - %InventoryItem($BE, $0001, $0000, $0000) ; BE -
%InventoryItem($BF, $0001, $0000, $0000) ; BF - %InventoryItem($BF, $0001, $0000, $0000) ; BF -
%InventoryItem($C0, $0015, SwordTime, $0000) ; C0 - Progressive Bombs %InventoryItem($C0, $0001, $0000, $0000) ; C0 -
%InventoryItem($C1, $0085, SwordTime, $0000) ; C1 - Progressive Cane %InventoryItem($C1, $0001, $0000, $0000) ; C1 -
%InventoryItem($C2, $0085, SwordTime, $0000) ; C2 - Progressive Bug Net %InventoryItem($C2, $0001, $0000, $0000) ; C2 -
%InventoryItem($C3, $0001, $0000, $0000) ; C3 - %InventoryItem($C3, $0001, $0000, $0000) ; C3 -
%InventoryItem($C4, $0001, $0000, $0000) ; C4 - %InventoryItem($C4, $0001, $0000, $0000) ; C4 -
%InventoryItem($C5, $0001, $0000, $0000) ; C5 - %InventoryItem($C5, $0001, $0000, $0000) ; C5 -
@@ -1147,9 +1147,9 @@ ItemReceiptGraphicsOffsets:
dw $0 ; BD - dw $0 ; BD -
dw $0 ; BE - dw $0 ; BE -
dw $0 ; BF - dw $0 ; BF -
dw BigDecompressionBuffer+$1080 ; C0 - Progressive Bombs dw $0 ; C0 -
dw BigDecompressionBuffer+$1C40 ; C1 - Progressive Cane dw $0 ; C1 -
dw BigDecompressionBuffer+$0860 ; C2 - Progressive Bug Net dw $0 ; C2 -
dw $0 ; C3 - dw $0 ; C3 -
dw $0 ; C4 - dw $0 ; C4 -
dw $0 ; C5 - dw $0 ; C5 -
@@ -1417,9 +1417,9 @@ StandingItemGraphicsOffsets:
dw $0 ; BD - dw $0 ; BD -
dw $0 ; BE - dw $0 ; BE -
dw $0 ; BF - dw $0 ; BF -
dw BigDecompressionBuffer+$1080 ; C0 - Progressive Bombs dw $0 ; C0 -
dw BigDecompressionBuffer+$1C40 ; C1 - Progressive Cane dw $0 ; C1 -
dw BigDecompressionBuffer+$0860 ; C2 - Progressive Bug Net dw $0 ; C2 -
dw $0 ; C3 - dw $0 ; C3 -
dw $0 ; C4 - dw $0 ; C4 -
dw $0 ; C5 - dw $0 ; C5 -

View File

@@ -4,29 +4,29 @@
ItemDowngradeFix: ItemDowngradeFix:
JSL.l AddInventory JSL.l AddInventory
BMI .dontWrite ; thing we wrote over part 1 BMI .dontWrite ; thing we wrote over part 1
CPY.b #$1B : BEQ .isPowerGloves ; Power Gloves CPY.b #$1B : BEQ .isPowerGloves ; Power Gloves
CPY.b #$05 : BEQ .isRedShield ; Red Shield CPY.b #$05 : BEQ .isRedShield ; Red Shield
CPY.b #$04 : BEQ .isBlueShield ; Blue Shield CPY.b #$04 : BEQ .isBlueShield ; Blue Shield
CPY.b #$0C : BEQ .isBlueBoomerang ; Blue Boomerang CPY.b #$0C : BEQ .isBlueBoomerang ; Blue Boomerang
CPY.b #$0B : BEQ .isBow ; Bow CPY.b #$0B : BEQ .isBow ; Bow
CPY.b #$3A : BEQ .isBowAndArrows ; Bow CPY.b #$3A : BEQ .isBowAndArrows ; Bow
CPY.b #$49 : BEQ .isSword ; Fighter's Sword CPY.b #$49 : BEQ .isSword ; Fighter's Sword
CPY.b #$01 : BEQ .isSword ; Master Sword CPY.b #$01 : BEQ .isSword ; Master Sword
CPY.b #$50 : BEQ .isSword ; Master Sword (Safe) CPY.b #$50 : BEQ .isSword ; Master Sword (Safe)
CPY.b #$02 : BEQ .isSword ; Tempered Sword CPY.b #$02 : BEQ .isSword ; Tempered Sword
CPY.b #$3B : BEQ .isSilverArrowBow ; Silver Arrow Bow CPY.b #$3B : BEQ .isSilverArrowBow ; Silver Arrow Bow
CPY.b #$2A : BEQ .isRedBoomerang ; Red Boomerang CPY.b #$2A : BEQ .isRedBoomerang ; Red Boomerang
CPY.b #$0D : BEQ .isMagicPowder ; Magic Powder CPY.b #$0D : BEQ .isMagicPowder ; Magic Powder
CPY.b #$14 : BEQ .isFlute ; Flute CPY.b #$14 : BEQ .isFlute ; Flute
CPY.b #$13 : BEQ .isShovel ; Shovel CPY.b #$13 : BEQ .isShovel ; Shovel
CPY.b #$29 : BEQ .isMushroom ; Mushroom CPY.b #$29 : BEQ .isMushroom ; Mushroom
CPY.b #$00 : BEQ .isUncleSwordShield ; Fighter's Sword & Shield CPY.b #$00 : BEQ .isUncleSwordShield ; Fighter's Sword & Shield
.done .done
STA.b [Scrap00] ; thing we wrote over part 2 STA.b [Scrap00] ; thing we wrote over part 2
.dontWrite .dontWrite
RTL RTL
@@ -55,7 +55,7 @@ RTL
RTL RTL
.isSword .isSword
PHA PHA
LDA.l HighestSword : STA.b Scrap04 LDA.l HighestSword : STA.b Scrap04
TYA ; load sword item TYA ; load sword item
CMP.b #$49 : BNE + : LDA.b #$00 : + ; convert extra fighter's sword to normal one CMP.b #$49 : BNE + : LDA.b #$00 : + ; convert extra fighter's sword to normal one
CMP.b #$50 : BNE + : LDA.b #$01 : + ; convert extra master sword to normal one CMP.b #$50 : BNE + : LDA.b #$01 : + ; convert extra master sword to normal one
@@ -66,11 +66,11 @@ RTL
+ +
PLA PLA
JMP .done JMP .done
.isUncleSwordShield .isUncleSwordShield
PHA PHA
LDA.l HighestSword : STA.b [Scrap00] ; already set to 1 if we had no sword, always keep highest LDA.l HighestSword : STA.b [Scrap00] ; already set to 1 if we had no sword, always keep highest
INC.b Scrap00 INC.b Scrap00
LDA.l HighestShield : STA.b [Scrap00] LDA.l HighestShield : STA.b [Scrap00]
PLA PLA
RTL RTL
;================================================================================ ;================================================================================

View File

@@ -1,147 +1,149 @@
table "data/textwordcharmap.txt"
org $B28000 org $B28000
; You have found ; You have found
; the map of ; the map of
Notice_MapOf: Notice_MapOf:
db $74, $00, $C2, $00, $DE, $00, $E4, $00, $FF, $00, $D7, $00, $D0, $00, $E5, $00, $D4, $00, $FF, $00, $D5, $00, $DE, $00, $E4, $00, $DD, $00, $D3 db $74 : dw "You have found"
db $75, $00, $E3, $00, $D7, $00, $D4, $00, $FF, $00, $DC, $00, $D0, $00, $DF, $00, $FF, $00, $DE, $00, $D5 db $75 : dw "the map of"
dw #$7F7F dw $7F7F
; You have found ; You have found
; the compass of ; the compass of
Notice_CompassOf: Notice_CompassOf:
db $74, $00, $C2, $00, $DE, $00, $E4, $00, $FF, $00, $D7, $00, $D0, $00, $E5, $00, $D4, $00, $FF, $00, $D5, $00, $DE, $00, $E4, $00, $DD, $00, $D3 db $74 : dw "You have found"
db $75, $00, $E3, $00, $D7, $00, $D4, $00, $FF, $00, $D2, $00, $DE, $00, $DC, $00, $DF, $00, $D0, $00, $E2, $00, $E2, $00, $FF, $00, $DE, $00, $D5 db $75 : dw "the compass of"
dw #$7F7F dw $7F7F
; Oh look! it's ; Oh look! it's
; the big key of ; the big key of
Notice_BigKeyOf: Notice_BigKeyOf:
db $74, $00, $B8, $00, $D7, $00, $FF, $00, $DB, $00, $DE, $00, $DE, $00, $DA, $00, $C7, $00, $FF, $00, $D8, $00, $E3, $00, $9D, $00, $E2 db $74 : dw "Oh look! it's"
db $75, $00, $E3, $00, $D7, $00, $D4, $00, $FF, $00, $D1, $00, $D8, $00, $D6, $00, $FF, $00, $DA, $00, $D4, $00, $E8, $00, $FF, $00, $DE, $00, $D5 db $75 : dw "the big key of"
dw #$7F7F dw $7F7F
; this is a ; This is a
; small key to ; small key to
Notice_SmallKeyOf: Notice_SmallKeyOf:
db $74, $00, $BD, $00, $D7, $00, $D8, $00, $E2, $00, $FF, $00, $D8, $00, $E2, $00, $FF, $00, $D0 db $74 : dw "This is a"
db $75, $00, $E2, $00, $DC, $00, $D0, $00, $DB, $00, $DB, $00, $FF, $00, $DA, $00, $D4, $00, $E8, $00, $FF, $00, $E3, $00, $DE db $75 : dw "small key to"
dw #$7F7F dw $7F7F
; You picked up ; You picked up
Notice_Crystal: Notice_Crystal:
db $74, $00, $C2, $00, $DE, $00, $E4, $00, $FF, $00, $DF, $00, $D8, $00, $D2, $00, $DA, $00, $D4, $00, $D3, $00, $FF, $00, $E4, $00, $DF db $74 : dw "You picked up"
dw $7F7F dw $7F7F
; light world ; Light World
Notice_LightWorld: Notice_LightWorld:
db $76, $00, $B5, $00, $D8, $00, $D6, $00, $D7, $00, $E3, $00, $FF, $00, $C0, $00, $DE, $00, $E1, $00, $DB, $00, $D3 db $76 : dw "Light World"
dw #$7F7F dw $7F7F
; dark world ; Dark World
Notice_DarkWorld: Notice_DarkWorld:
db $76, $00, $AD, $00, $D0, $00, $E1, $00, $DA, $00, $FF, $00, $C0, $00, $DE, $00, $E1, $00, $DB, $00, $D3 db $76 : dw "Dark World"
dw #$7F7F dw $7F7F
; Ganons Tower ; Ganons Tower
Notice_GTower: Notice_GTower:
db $76, $00, $B0, $00, $D0, $00, $DD, $00, $DE, $00, $DD, $00, $E2, $00, $FF, $00, $BD, $00, $DE, $00, $E6, $00, $D4, $00, $E1 db $76 : dw "Ganons Tower"
dw #$7F7F dw $7F7F
; Turtle Rock ; Turtle Rock
Notice_TRock: Notice_TRock:
db $76, $00, $BD, $00, $E4, $00, $E1, $00, $E3, $00, $DB, $00, $D4, $00, $FF, $00, $BB, $00, $DE, $00, $D2, $00, $DA db $76 : dw "Turtle Rock"
dw #$7F7F dw $7F7F
; Thieves Town ; Thieves Town
Notice_Thieves: Notice_Thieves:
db $76, $00, $BD, $00, $D7, $00, $D8, $00, $D4, $00, $E5, $00, $D4, $00, $E2, $00, $FF, $00, $BD, $00, $DE, $00, $E6, $00, $DD db $76 : dw "Thieves Town"
dw #$7F7F dw $7F7F
; Tower of Hera ; Tower of Hera
Notice_Hera: Notice_Hera:
db $76, $00, $BD, $00, $DE, $00, $E6, $00, $D4, $00, $E1, $00, $FF, $00, $DE, $00, $D5, $00, $FF, $00, $B1, $00, $D4, $00, $E1, $00, $D0 db $76 : dw "Tower of Hera"
dw #$7F7F dw $7F7F
; Ice Palace ; Ice Palace
Notice_Ice: Notice_Ice:
db $76, $00, $B2, $00, $D2, $00, $D4, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4 db $76 : dw "Ice Palace"
dw #$7F7F dw $7F7F
; Skull Woods ; Skull Woods
Notice_Skull: Notice_Skull:
db $76, $00, $BC, $00, $DA, $00, $E4, $00, $DB, $00, $DB, $00, $FF, $00, $C0, $00, $DE, $00, $DE, $00, $D3, $00, $E2 db $76 : dw "Skull Woods"
dw #$7F7F dw $7F7F
; Misery Mire ; Misery Mire
Notice_Mire: Notice_Mire:
db $76, $00, $B6, $00, $D8, $00, $E2, $00, $D4, $00, $E1, $00, $E8, $00, $FF, $00, $B6, $00, $D8, $00, $E1, $00, $D4 db $76 : dw "Misery Mire"
dw #$7F7F dw $7F7F
; Dark Palace ; Dark Palace
Notice_PoD: Notice_PoD:
db $76, $00, $AD, $00, $D0, $00, $E1, $00, $DA, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4 db $76 : dw "Dark Palace"
dw #$7F7F dw $7F7F
; Swamp Palace ; Swamp Palace
Notice_Swamp: Notice_Swamp:
db $76, $00, $BC, $00, $E6, $00, $D0, $00, $DC, $00, $DF, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4 db $76 : dw "Swamp Palace"
dw #$7F7F dw $7F7F
; Castle Tower ; Castle Tower
Notice_AgaTower: Notice_AgaTower:
db $76, $00, $AC, $00, $D0, $00, $E2, $00, $E3, $00, $DB, $00, $D4, $00, $FF, $00, $BD, $00, $DE, $00, $E6, $00, $D4, $00, $E1 db $76 : dw "Castle Tower"
dw #$7F7F dw $7F7F
; Desert Palace ; Desert Palace
Notice_Desert: Notice_Desert:
db $76, $00, $AD, $00, $D4, $00, $E2, $00, $D4, $00, $E1, $00, $E3, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4 db $76 : dw "Desert Palace"
dw #$7F7F dw $7F7F
; Eastern Palace ; Eastern Palace
Notice_Eastern: Notice_Eastern:
db $76, $00, $AE, $00, $D0, $00, $E2, $00, $E3, $00, $D4, $00, $E1, $00, $DD, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4 db $76 : dw "Eastern Palace"
dw #$7F7F dw $7F7F
; Hyrule Castle ; Hyrule Castle
Notice_Castle: Notice_Castle:
db $76, $00, $B1, $00, $E8, $00, $E1, $00, $E4, $00, $DB, $00, $D4, $00, $FF, $00, $AC, $00, $D0, $00, $E2, $00, $E3, $00, $DB, $00, $D4 db $76 : dw "Hyrule Castle"
dw #$7F7F dw $7F7F
; Hyrule Castle ; Hyrule Castle
Notice_Sewers: Notice_Sewers:
db $76, $00, $B1, $00, $E8, $00, $E1, $00, $E4, $00, $DB, $00, $D4, $00, $FF, $00, $AC, $00, $D0, $00, $E2, $00, $E3, $00, $DB, $00, $D4 db $76 : dw "Hyrule Castle"
dw #$7F7F dw $7F7F
; This Dungeon ; This Dungeon
Notice_Self: Notice_Self:
db $76, $00, $E3, $00, $D7, $00, $D8, $00, $E2, $00, $FF, $00, $D3, $00, $E4, $00, $DD, $00, $D6, $00, $D4, $00, $DE, $00, $Dd db $76 : dw "this dungeon"
dw #$7F7F dw $7F7F
; Crystal numbers ; Crystal numbers
Notice_One: Notice_One:
db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $DE, $00, $DD, $00, $D4 db $75 : dw "crystal one"
dw #$7F7F dw $7F7F
Notice_Two: Notice_Two:
db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $E3, $00, $E6, $00, $DE db $75 : dw "crystal two"
dw #$7F7F dw $7F7F
Notice_Three: Notice_Three:
db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $E3, $00, $D7, $00, $E1, $00, $D4, $00, $D4 db $75 : dw "crystal three"
dw #$7F7F dw $7F7F
Notice_Four: Notice_Four:
db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $D5, $00, $DE, $00, $E4, $00, $E1 db $75 : dw "crystal four"
dw #$7F7F dw $7F7F
Notice_Five: Notice_Five:
db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $D5, $00, $D8, $00, $E5, $00, $D4 db $75 : dw "crystal five"
dw #$7F7F dw $7F7F
Notice_Six: Notice_Six:
db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $E2, $00, $D8, $00, $E7 db $75 : dw "crystal six"
dw #$7F7F dw $7F7F
Notice_Seven: Notice_Seven:
db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $E2, $00, $D4, $00, $E5, $00, $D4, $00, $DD db $75 : dw "crystal seven"
dw #$7F7F dw $7F7F

View File

@@ -5,28 +5,28 @@
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
LampCheck: LampCheck:
LDA.l LightConeModifier : CMP.b #$01 : BNE + : RTL : + LDA.l LightConeModifier : CMP.b #$01 : BNE + : RTL : +
CMP.b #$FF : BNE + : INC : RTL : + CMP.b #$FF : BNE + : INC : RTL : +
LDA.l LampEquipment : BNE .lamp ; skip if we already have lantern LDA.l LampEquipment : BNE .lamp ; skip if we already have lantern
LDA.w DungeonID : BNE + ; check if we're in sewers LDA.w DungeonID : BNE + ; check if we're in sewers
LDA.l LampConeSewers : RTL LDA.l LampConeSewers : RTL
+ : TDC + : TDC
.lamp .lamp
RTL RTL
;================================================================================ ;================================================================================
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; Output: 0 locked, 1 open ; Output: 0 locked, 1 open
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
CheckForZelda: CheckForZelda:
LDA.l ProgressIndicator : CMP.b #$02 : !BLT + ; Skip if rain is falling LDA.l ProgressIndicator : CMP.b #$02 : !BLT + ; Skip if rain is falling
LDA.b #$01 ; pretend we have zelda anyway LDA.b #$01 ; pretend we have zelda anyway
RTL RTL
+ +
LDA.l FollowerIndicator LDA.l FollowerIndicator
RTL RTL
;================================================================================ ;================================================================================
SetOverlayIfLamp: SetOverlayIfLamp:
JSL.l LampCheck JSL.l LampCheck
STA.b SUBDESQ ; write it directly to the overlay, this isn't a terrible idea at all STA.b SUBDESQ ; write it directly to the overlay, this isn't a terrible idea at all
RTL RTL
;================================================================================ ;================================================================================
; Mantle Object Changes ; Mantle Object Changes

90
msu.asm
View File

@@ -164,27 +164,27 @@ CheckMusicLoadRequest:
.continue .continue
LDA.l TournamentSeed : BNE +++ LDA.l TournamentSeed : BNE +++
LDA.w MSUPackRequest LDA.l MSUPackRequest
CMP.w MSUPackCurrent : BEQ +++ CMP.l MSUPackCurrent : BEQ +++
CMP.w MSUPackCount : !BLT ++ CMP.l MSUPackCount : !BLT ++
CMP.b #$FE : !BLT + CMP.b #$FE : !BLT +
STA.w MSUPackCurrent STA.l MSUPackCurrent
SEP #$10 SEP #$10
LDA.b #$00 LDA.b #$00
LDX.b #$07 LDX.b #$07
- -
STA.w MSUFallbackTable,X STA.l MSUFallbackTable,X
DEX : BPL - DEX : BPL -
REP #$10 REP #$10
BRA +++ BRA +++
+ : LDA.w MSUPackCurrent : STA.w MSUPackRequest + : LDA.l MSUPackCurrent : STA.l MSUPackRequest
++ : STA.w MSUPackCurrent ++ : STA.l MSUPackCurrent
JSL MSUInit_check_fallback JSL MSUInit_check_fallback
+++ +++
LDA.w MusicControlRequest : CMP.b #$08 : BEQ ++ ; Mirror SFX is not affected by NoBGM or pack $FE LDA.w MusicControlRequest : CMP.b #$08 : BEQ ++ ; Mirror SFX is not affected by NoBGM or pack $FE
LDA.l NoBGM : BNE + LDA.l NoBGM : BNE +
LDA.w MSUPackCurrent : CMP.b #$FE : BNE ++ LDA.l MSUPackCurrent : CMP.b #$FE : BNE ++
+ : JMP .mute + : JMP .mute
++ ++
@@ -240,7 +240,7 @@ CheckMusicLoadRequest:
LDA.l MusicShuffleTable-1,X : DEC : PHA LDA.l MusicShuffleTable-1,X : DEC : PHA
AND.b #$07 : TAY AND.b #$07 : TAY
PLA : LSR #3 : TAX PLA : LSR #3 : TAX
LDA.w MSUFallbackTable,X : BEQ .secondary_fallback : CMP.b #$FF : BEQ .mute LDA.l MSUFallbackTable,X : BEQ .secondary_fallback : CMP.b #$FF : BEQ .mute
- : CPY #$00 : BEQ + - : CPY #$00 : BEQ +
LSR : DEY : BRA - LSR : DEY : BRA -
@@ -348,7 +348,7 @@ SpiralStairsPreCheck:
+ +
LDA.l BigKeyField : AND.w #$0004 : BEQ .done ; Check that we have the GT big key LDA.l BigKeyField : AND.w #$0004 : BEQ .done ; Check that we have the GT big key
LDA.w MSUFallbackTable+7 : AND.w #$0004 : BEQ .done ; Check that we have the extended track LDA.l MSUFallbackTable+7 : AND.w #$0004 : BEQ .done ; Check that we have the extended track
.fade .fade
LDX.b #$F1 : STX.w MusicControlRequest LDX.b #$F1 : STX.w MusicControlRequest
@@ -401,10 +401,10 @@ MSUInit:
PHP PHP
LDA.b #$00 LDA.b #$00
STA.w MSULoadedTrack STA.l MSULoadedTrack
STA.w MSUResumeTrack STA.l MSUResumeTrack
STA.w MSUResumeTime : STA.w MSUResumeTime+1 : STA.w MSUResumeTime+2 : STA.w MSUResumeTime+3 STA.l MSUResumeTime : STA.l MSUResumeTime+1 : STA.l MSUResumeTime+2 : STA.l MSUResumeTime+3
STA.w MSUResumeControl STA.l MSUResumeControl
LDA.l NoBGM : BNE .done LDA.l NoBGM : BNE .done
@@ -431,7 +431,7 @@ MSUInit:
.wait_pack .wait_pack
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_BUSY : BNE .wait_pack LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_BUSY : BNE .wait_pack
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BEQ .check_pack LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BEQ .check_pack
TXA : STA.w MSUPackCount TXA : STA.l MSUPackCount
BRA + BRA +
; Check the current MSU-1 pack for tracks that require SPC fallback ; Check the current MSU-1 pack for tracks that require SPC fallback
@@ -453,7 +453,7 @@ MSUInit:
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE + LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE +
SEC SEC
+ +
LDA.w MSUFallbackTable,X : ROL : STA.w MSUFallbackTable,X LDA.l MSUFallbackTable,X : ROL : STA.l MSUFallbackTable,X
DEY : BPL .next_track DEY : BPL .next_track
DEX : BPL + DEX : BPL +
@@ -474,11 +474,11 @@ MSUInit:
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
MSUStopPlaying: MSUStopPlaying:
PHA : XBA : PHA PHA : XBA : PHA
LDA.w MSULoadedTrack LDA.l MSULoadedTrack
JSR IsResumableTrack : BCC + JSR IsResumableTrack : BCC +
; dont save if we already saved recently ; dont save if we already saved recently
REP #$20 REP #$20
LDA.w MSUResumeTrack : AND #$00FF : BEQ ++ LDA.l MSUResumeTrack : AND #$00FF : BEQ ++
LDA.l NMIFrames : !SUB MSUResumeTime : PHA LDA.l NMIFrames : !SUB MSUResumeTime : PHA
LDA.l NMIFrames+2 : SBC MSUResumeTime+2 : BNE +++ LDA.l NMIFrames+2 : SBC MSUResumeTime+2 : BNE +++
PLA : CMP.l MSUResumeTimer : !BLT .too_early PLA : CMP.l MSUResumeTimer : !BLT .too_early
@@ -487,12 +487,12 @@ PHA : XBA : PHA
PLA PLA
++ ++
; saving ; saving
LDA.l NMIFrames : STA.w MSUResumeTime LDA.l NMIFrames : STA.l MSUResumeTime
LDA.l NMIFrames+2 : STA.w MSUResumeTime+2 LDA.l NMIFrames+2 : STA.l MSUResumeTime+2
SEP #$20 SEP #$20
LDA.w MSULoadedTrack : STA.w MSUResumeTrack LDA.l MSULoadedTrack : STA.l MSUResumeTrack
LDA.b #$00 : STA.w MSULoadedTrack ; dont take this path if we're calling again LDA.b #$00 : STA.l MSULoadedTrack ; dont take this path if we're calling again
LDA.b #!FLAG_MSU_RESUME : STA.w MSUCTL ; save this track's position LDA.b #!FLAG_MSU_RESUME : STA.w MSUCTL ; save this track's position
PLA : XBA : PLA PLA : XBA : PLA
RTS RTS
@@ -523,23 +523,23 @@ MSUMain:
LDX.w MusicControl : BEQ + LDX.w MusicControl : BEQ +
JMP .command_ff JMP .command_ff
+ +
LDA.w MSUDelayedCommand : BEQ .do_fade LDA.l MSUDelayedCommand : BEQ .do_fade
.check_busy .check_busy
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_BUSY : BNE - LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_BUSY : BNE -
.ready .ready
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE - LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE -
.start .start
LDA.w MSUResumeControl : BIT.b #!FLAG_RESUME_CANCEL : BEQ + LDA.l MSUResumeControl : BIT.b #!FLAG_RESUME_CANCEL : BEQ +
EOR.b #!FLAG_RESUME_CANCEL : STA.w MSUResumeControl EOR.b #!FLAG_RESUME_CANCEL : STA.l MSUResumeControl
REP #$20 : LDA.w MSULoadedTrack : STA.w MSUTRACK : SEP #$20 REP #$20 : LDA.l MSULoadedTrack : STA.w MSUTRACK : SEP #$20
BRA - BRA -
+ +
LDA.b #!VAL_VOLUME_FULL LDA.b #!VAL_VOLUME_FULL
STA.w TargetVolume STA.w TargetVolume
LDA.w MSUResumeControl : BIT.b #!FLAG_RESUME_FADEIN : BEQ + LDA.l MSUResumeControl : BIT.b #!FLAG_RESUME_FADEIN : BEQ +
EOR.b #!FLAG_RESUME_FADEIN : STA.w MSUResumeControl EOR.b #!FLAG_RESUME_FADEIN : STA.l MSUResumeControl
LDA.b #$00 LDA.b #$00
BRA ++ BRA ++
+ +
@@ -551,17 +551,17 @@ MSUMain:
LDA.w CurrentMSUTrack : DEC : PHA LDA.w CurrentMSUTrack : DEC : PHA
AND.b #$07 : TAY AND.b #$07 : TAY
PLA : LSR #3 : TAX PLA : LSR #3 : TAX
LDA.w MSUFallbackTable,X : BEQ +++ : CMP.b #$FF : BEQ ++ LDA.l MSUFallbackTable,X : BEQ +++ : CMP.b #$FF : BEQ ++
- : CPY #$00 : BEQ + - : CPY #$00 : BEQ +
LSR : DEY : BRA - LSR : DEY : BRA -
+ +
AND.b #$01 : BEQ +++ AND.b #$01 : BEQ +++
++ : LDA.w MSUDelayedCommand ++ : LDA.l MSUDelayedCommand
+++ : STA.w MSUCTL +++ : STA.w MSUCTL
LDA.b #$00 LDA.b #$00
STA.w MSUDelayedCommand STA.l MSUDelayedCommand
JML SPCContinue JML SPCContinue
.do_fade: .do_fade:
@@ -624,9 +624,9 @@ MSUMain:
+ +
CPX.w CurrentControlRequest : BEQ - CPX.w CurrentControlRequest : BEQ -
LDA.b #$00 : XBA LDA.b #$00 : XBA
LDA.w MSUPackCurrent : BEQ + LDA.l MSUPackCurrent : BEQ +
- : CMP.w MSUPackCount : !BLT + - : CMP.l MSUPackCount : !BLT +
!SUB.w MSUPackCount : BRA - !SUB.l MSUPackCount : BRA -
+ +
JSR MSUStopPlaying JSR MSUStopPlaying
@@ -639,11 +639,11 @@ MSUMain:
DEX : BNE - DEX : BNE -
+ +
STA.w MSUTRACK STA.w MSUTRACK
STA.w MSULoadedTrack STA.l MSULoadedTrack
SEP #$20 SEP #$20
PLX PLX
TXA : CMP.w MSUResumeTrack : BNE + ; dont resume if too late TXA : CMP.l MSUResumeTrack : BNE + ; dont resume if too late
REP #$20 REP #$20
LDA.l NMIFrames : !SUB MSUResumeTime : PHA LDA.l NMIFrames : !SUB MSUResumeTime : PHA
LDA.l NMIFrames+2 : SBC MSUResumeTime+2 : BNE ++ LDA.l NMIFrames+2 : SBC MSUResumeTime+2 : BNE ++
@@ -656,8 +656,8 @@ MSUMain:
SEP #$20 SEP #$20
LDA.b #!FLAG_RESUME_CANCEL LDA.b #!FLAG_RESUME_CANCEL
.done_resume: .done_resume:
STA.w MSUResumeControl STA.l MSUResumeControl
LDA.b #$00 : STA.w MSUResumeTrack LDA.b #$00 : STA.l MSUResumeTrack
+ +
CPX #07 : BNE + ; Kakariko Village CPX #07 : BNE + ; Kakariko Village
LDA.b GameMode : CMP #$07 : BNE + LDA.b GameMode : CMP #$07 : BNE +
@@ -667,12 +667,12 @@ MSUMain:
+ +
TXA TXA
++ ++
STA.w MSULoadedTrack STA.l MSULoadedTrack
STX.w CurrentMSUTrack STX.w CurrentMSUTrack
LDA.w MSUPackCurrent : CMP #$FE : !BLT + LDA.l MSUPackCurrent : CMP #$FE : !BLT +
LDA.b #$00 : BRA ++ LDA.b #$00 : BRA ++
+ : LDA.l MSUTrackList-1,X + : LDA.l MSUTrackList-1,X
++ : STA.w MSUDelayedCommand ++ : STA.l MSUDelayedCommand
LDA.l MSUExtendedFallbackList-1,X LDA.l MSUExtendedFallbackList-1,X
CMP.b #17 : BEQ + CMP.b #17 : BEQ +
CMP.b #22 : BEQ + CMP.b #22 : BEQ +
@@ -722,9 +722,9 @@ PendantFanfareWait:
LDA.w MSUID+2 : CMP.w #!VAL_MSU_ID_23 : BNE .spc LDA.w MSUID+2 : CMP.w #!VAL_MSU_ID_23 : BNE .spc
LDA.w MSUID+4 : CMP.w #!VAL_MSU_ID_45 : BNE .spc LDA.w MSUID+4 : CMP.w #!VAL_MSU_ID_45 : BNE .spc
SEP #$20 SEP #$20
LDA.w MSUPackCurrent : CMP #$FE : !BGE .spc LDA.l MSUPackCurrent : CMP #$FE : !BGE .spc
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE .spc LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE .spc
LDA.w MSUDelayedCommand : BNE .continue LDA.l MSUDelayedCommand : BNE .continue
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done
.continue .continue
jml PendantFanfareContinue jml PendantFanfareContinue
@@ -746,9 +746,9 @@ CrystalFanfareWait:
LDA.w MSUID+2 : CMP.w #!VAL_MSU_ID_23 : BNE .spc LDA.w MSUID+2 : CMP.w #!VAL_MSU_ID_23 : BNE .spc
LDA.w MSUID+4 : CMP.w #!VAL_MSU_ID_45 : BNE .spc LDA.w MSUID+4 : CMP.w #!VAL_MSU_ID_45 : BNE .spc
SEP #$20 SEP #$20
LDA.w MSUPackCurrent : CMP.b #$FE : !BGE .spc LDA.l MSUPackCurrent : CMP.b #$FE : !BGE .spc
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE .spc LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE .spc
LDA.w MSUDelayedCommand : BNE .continue LDA.l MSUDelayedCommand : BNE .continue
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done
.continue .continue
jml CrystalFanfareContinue jml CrystalFanfareContinue

View File

@@ -5,158 +5,151 @@
!CTile = $295F !CTile = $295F
NewDrawHud: NewDrawHud:
PHB PHB
SEP #$30 SEP #$30
REP #$10 REP #$10
LDA.b #$7E LDA.b #$7E
PHA : PLB PHA : PLB
;================================================================================ ;================================================================================
NewHUD_DrawBombs: NewHUD_DrawBombs:
LDA.l InfiniteBombs : BNE .infinite LDA.l InfiniteBombs : BEQ .finite
LDA.l SpecialWeapons : AND.b #$7F : CMP #$01 : BNE .normal
LDA.l SpecialWeaponLevel : BEQ .no_bombs
.infinite .infinite
LDY.w #!InfiniteTile+0 LDY.w #!InfiniteTile+0
LDX.w #!InfiniteTile+1 LDX.w #!InfiniteTile+1
BRA .draw BRA .draw
.no_bombs .finite
LDY.w #!BlankTile LDA.w BombsEquipment
LDX.w #!BlankTile JSR HUDHex2Digit
BRA .draw
.normal
LDA.w BombsEquipment
JSR HUDHex2Digit
.draw .draw
STY.w HUDBombCount+0 STY.w HUDBombCount+0
STX.w HUDBombCount+2 STX.w HUDBombCount+2
;================================================================================ ;================================================================================
NewHUD_DrawRupees: NewHUD_DrawRupees:
REP #$20 REP #$20
LDA.w DisplayRupees LDA.w DisplayRupees
JSR HUDHex4Digit JSR HUDHex4Digit
LDA.b Scrap04 : TAX : STX.w HUDRupees+0 ; 1000s LDA.b Scrap04 : TAX : STX.w HUDRupees+0 ; 1000s
LDA.b Scrap05 : TAX : STX.w HUDRupees+2 ; 100s LDA.b Scrap05 : TAX : STX.w HUDRupees+2 ; 100s
LDA.b Scrap06 : TAX : STX.w HUDRupees+4 ; 10s LDA.b Scrap06 : TAX : STX.w HUDRupees+4 ; 10s
LDA.b Scrap07 : TAX : STX.w HUDRupees+6 ; 1s LDA.b Scrap07 : TAX : STX.w HUDRupees+6 ; 1s
;================================================================================ ;================================================================================
NewHUD_DrawArrows: NewHUD_DrawArrows:
SEP #$20 SEP #$20
LDA.l ArrowMode : BNE NewHUD_DrawGoal LDA.l ArrowMode : BNE NewHUD_DrawGoal
LDA.l InfiniteArrows : BEQ .finite LDA.l InfiniteArrows : BEQ .finite
.infinite .infinite
LDY.w #!InfiniteTile+0 LDY.w #!InfiniteTile+0
LDX.w #!InfiniteTile+1 LDX.w #!InfiniteTile+1
BRA .draw BRA .draw
.finite .finite
LDA.w CurrentArrows LDA.w CurrentArrows
JSR HUDHex2Digit JSR HUDHex2Digit
.draw .draw
STY.w HUDArrowCount+0 STY.w HUDArrowCount+0
STX.w HUDArrowCount+2 STX.w HUDArrowCount+2
;================================================================================ ;================================================================================
NewHUD_DrawGoal: NewHUD_DrawGoal:
REP #$20 REP #$20
LDA.w UpdateHUDFlag : BEQ .no_goal LDA.l UpdateHUDFlag : BEQ .no_goal
LDA.l GoalItemRequirement : BEQ .no_goal LDA.l GoalItemRequirement : BEQ .no_goal
LDA.l GoalItemIcon : STA.w HUDGoalIndicator LDA.l GoalItemIcon : STA.w HUDGoalIndicator
LDA.w #!SlashTile : STA.w HUDGoalIndicator+8 LDA.w #!SlashTile : STA.w HUDGoalIndicator+8
LDA.l GoalCounter LDA.l GoalCounter
JSR HUDHex4Digit JSR HUDHex4Digit
LDA.b Scrap05 : TAX : STX.w HUDGoalIndicator+2 ; draw 100's digit LDA.b Scrap05 : TAX : STX.w HUDGoalIndicator+2 ; draw 100's digit
LDA.b Scrap06 : TAX : STX.w HUDGoalIndicator+4 ; draw 10's digit LDA.b Scrap06 : TAX : STX.w HUDGoalIndicator+4 ; draw 10's digit
LDA.b Scrap07 : TAX : STX.w HUDGoalIndicator+6 ; draw 1's digit LDA.b Scrap07 : TAX : STX.w HUDGoalIndicator+6 ; draw 1's digit
REP #$20 REP #$20
LDA.l GoalItemRequirement : CMP.w #$FFFF : BNE .real_goal LDA.l GoalItemRequirement : CMP.w #$FFFF : BNE .real_goal
LDX.w #!BlankTile LDX.w #!BlankTile
STX.w HUDGoalIndicator+10 STX.w HUDGoalIndicator+10
STX.w HUDGoalIndicator+12 STX.w HUDGoalIndicator+12
STX.w HUDGoalIndicator+14 STX.w HUDGoalIndicator+14
.no_goal .no_goal
SEP #$20 SEP #$20
BRA NewHUD_DrawKeys BRA NewHUD_DrawKeys
.real_goal .real_goal
JSR HUDHex4Digit JSR HUDHex4Digit
LDA.b Scrap05 : TAX : STX.w HUDGoalIndicator+10 ; draw 100's digit LDA.b Scrap05 : TAX : STX.w HUDGoalIndicator+10 ; draw 100's digit
LDA.b Scrap06 : TAX : STX.w HUDGoalIndicator+12 ; draw 10's digit LDA.b Scrap06 : TAX : STX.w HUDGoalIndicator+12 ; draw 10's digit
LDA.b Scrap07 : TAX : STX.w HUDGoalIndicator+14 ; draw 1's digit LDA.b Scrap07 : TAX : STX.w HUDGoalIndicator+14 ; draw 1's digit
;================================================================================ ;================================================================================
NewHUD_DrawKeys: NewHUD_DrawKeys:
LDA.l CurrentSmallKeys LDA.l CurrentSmallKeys
CMP.b #$FF CMP.b #$FF
BNE .in_dungeon BNE .in_dungeon
LDY.w #!BlankTile LDY.w #!BlankTile
STY.w HUDKeyIcon STY.w HUDKeyIcon
STY.w HUDKeyDigits+0 STY.w HUDKeyDigits+0
STY.w HUDKeyDigits+2 STY.w HUDKeyDigits+2
BRA NewHUD_DrawDungeonCounters BRA NewHUD_DrawDungeonCounters
.in_dungeon .in_dungeon
JSR HUDHex2Digit JSR HUDHex2Digit
CPY.w #$2490 CPY.w #$2490
BNE .real_10s BNE .real_10s
LDY.w #!BlankTile LDY.w #!BlankTile
.real_10s .real_10s
STY.w HUDKeyDigits+0 STY.w HUDKeyDigits+0
STX.w HUDKeyDigits+2 STX.w HUDKeyDigits+2
;================================================================================ ;================================================================================
NewHUD_DrawDungeonCounters: NewHUD_DrawDungeonCounters:
LDA.w UpdateHUDFlag : BEQ NewHUD_DrawPrizeIcon LDA.l UpdateHUDFlag : BEQ NewHUD_DrawPrizeIcon
LDA.l CompassMode : ORA.l MapHUDMode : BIT.b #$03 : BEQ NewHUD_DrawPrizeIcon LDA.l CompassMode : ORA.l MapHUDMode : BIT.b #$03 : BEQ NewHUD_DrawPrizeIcon
LDX.b IndoorsFlag : BNE + LDX.b IndoorsFlag : BNE +
JMP.w NewHUD_DrawMagicMeter JMP.w NewHUD_DrawMagicMeter
+ +
SEP #$30 SEP #$30
; extra hard safeties for getting dungeon ID to prevent crashes ; extra hard safeties for getting dungeon ID to prevent crashes
LDA.w DungeonID LDA.w DungeonID
CMP.b #$1B : BCS NewHUD_DrawPrizeIcon ; Skip if not in a valid dungeon ID CMP.b #$1B : BCS NewHUD_DrawPrizeIcon ; Skip if not in a valid dungeon ID
AND.b #$FE : TAX AND.b #$FE : TAX
LSR : TAY LSR : TAY
PHX : PHY PHX : PHY
JSR.w DrawCompassCounts JSR.w DrawCompassCounts
SEP #$10 SEP #$10
PLY : PLX PLY : PLX
JSR.w DrawMapCounts JSR.w DrawMapCounts
;================================================================================ ;================================================================================
NewHUD_DrawPrizeIcon: NewHUD_DrawPrizeIcon:
REP #$10 REP #$10
SEP #$20 SEP #$20
LDA.b GameMode LDA.b GameMode
CMP.b #$12 : BEQ .no_prize CMP.b #$12 : BEQ .no_prize
CMP.b #$0E : BEQ + CMP.b #$0E : BEQ +
LDA.w UpdateHUDFlag : BEQ NewHUD_DrawItemCounter LDA.l UpdateHUDFlag : BEQ NewHUD_DrawItemCounter
+ +
LDA.w DungeonID LDA.w DungeonID
CMP.b #$1A : BCS .no_prize CMP.b #$1A : BCS .no_prize
CMP.b #$04 : BCC .no_prize CMP.b #$04 : BCC .no_prize
CMP.b #$08 : BNE .dungeon CMP.b #$08 : BNE .dungeon
@@ -173,17 +166,17 @@ NewHUD_DrawPrizeIcon:
LDA.l MapMode LDA.l MapMode
REP #$30 REP #$30
BEQ .prize BEQ .prize
LDA.l MapField LDA.l MapField
AND.l DungeonItemMasks,X AND.l DungeonItemMasks,X
BEQ .no_prize BEQ .no_prize
.prize .prize
TYX TYX
LDA.l CrystalPendantFlags_2,X LDA.l CrystalPendantFlags_2,X
BIT.w #$0080 BIT.w #$0080
BNE .no_icon BNE .no_icon
BIT.w #$0040 BIT.w #$0040
BNE .crystal BNE .crystal
@@ -193,159 +186,159 @@ NewHUD_DrawPrizeIcon:
.crystal .crystal
LDY.w #!CTile LDY.w #!CTile
BRA .draw_prize BRA .draw_prize
.no_icon .no_icon
LDY.w #!BlankTile LDY.w #!BlankTile
.draw_prize .draw_prize
STY.w HUDPrizeIcon STY.w HUDPrizeIcon
;================================================================================ ;================================================================================
NewHUD_DrawItemCounter: NewHUD_DrawItemCounter:
REP #$20 REP #$20
LDA.w UpdateHUDFlag : BEQ NewHUD_DrawMagicMeter LDA.l UpdateHUDFlag : BEQ NewHUD_DrawMagicMeter
LDA.l ItemCounterHUD : AND.w #$00FF : BEQ NewHUD_DrawMagicMeter LDA.l ItemCounterHUD : AND.w #$00FF : BEQ NewHUD_DrawMagicMeter
LDA.w #!SlashTile : STA.w HUDGoalIndicator+$08 LDA.w #!SlashTile : STA.w HUDGoalIndicator+$08
LDA.l TotalItemCount : CMP.w #1000 : BCS .item_four_digits LDA.l TotalItemCount : CMP.w #1000 : BCS .item_four_digits
LDA.w TotalItemCountTiles+$02 : STA.w HUDGoalIndicator+$0A LDA.w TotalItemCountTiles+$02 : STA.w HUDGoalIndicator+$0A
LDA.w TotalItemCountTiles+$04 : STA.w HUDGoalIndicator+$0C LDA.w TotalItemCountTiles+$04 : STA.w HUDGoalIndicator+$0C
LDA.w TotalItemCountTiles+$06 : STA.w HUDGoalIndicator+$0E LDA.w TotalItemCountTiles+$06 : STA.w HUDGoalIndicator+$0E
LDA.w TotalItemCounter LDA.w TotalItemCounter
JSR.w HUDHex4Digit JSR.w HUDHex4Digit
LDA.b $05 : TAX : STX.w HUDGoalIndicator+$02 LDA.b $05 : TAX : STX.w HUDGoalIndicator+$02
LDA.b $06 : TAX : STX.w HUDGoalIndicator+$04 LDA.b $06 : TAX : STX.w HUDGoalIndicator+$04
LDA.b $07 : TAX : STX.w HUDGoalIndicator+$06 LDA.b $07 : TAX : STX.w HUDGoalIndicator+$06
BRA NewHUD_DrawMagicMeter BRA NewHUD_DrawMagicMeter
.item_four_digits .item_four_digits
LDA.w TotalItemCountTiles+$00 : STA.w HUDGoalIndicator+$0A LDA.w TotalItemCountTiles+$00 : STA.w HUDGoalIndicator+$0A
LDA.w TotalItemCountTiles+$02 : STA.w HUDGoalIndicator+$0C LDA.w TotalItemCountTiles+$02 : STA.w HUDGoalIndicator+$0C
LDA.w TotalItemCountTiles+$04 : STA.w HUDGoalIndicator+$0E LDA.w TotalItemCountTiles+$04 : STA.w HUDGoalIndicator+$0E
LDA.w TotalItemCountTiles+$06 : STA.w HUDGoalIndicator+$10 LDA.w TotalItemCountTiles+$06 : STA.w HUDGoalIndicator+$10
LDA.w TotalItemCounter LDA.w TotalItemCounter
JSR.w HUDHex4Digit JSR.w HUDHex4Digit
LDA.b $04 : TAX : STX.w HUDGoalIndicator+$00 LDA.b $04 : TAX : STX.w HUDGoalIndicator+$00
LDA.b $05 : TAX : STX.w HUDGoalIndicator+$02 LDA.b $05 : TAX : STX.w HUDGoalIndicator+$02
LDA.b $06 : TAX : STX.w HUDGoalIndicator+$04 LDA.b $06 : TAX : STX.w HUDGoalIndicator+$04
LDA.b $07 : TAX : STX.w HUDGoalIndicator+$06 LDA.b $07 : TAX : STX.w HUDGoalIndicator+$06
;================================================================================ ;================================================================================
DrawMagicMeter_mp_tilemap = $0DFE0F DrawMagicMeter_mp_tilemap = $0DFE0F
NewHUD_DrawMagicMeter: NewHUD_DrawMagicMeter:
SEP #$31 SEP #$31
LDA.l CurrentMagic LDA.l CurrentMagic
ADC.b #$06 ; carry set by above for +1 to get +7 ADC.b #$06 ; carry set by above for +1 to get +7
AND.b #$F8 AND.b #$F8
TAY TAY
LDA.l InfiniteMagic LDA.l InfiniteMagic
BEQ .set_index BEQ .set_index
.infinite_magic .infinite_magic
LDA.b #$80 LDA.b #$80
STA.w CurrentMagic STA.w CurrentMagic
TAY TAY
LDA.b FrameCounter LDA.b FrameCounter
REP #$30 REP #$30
AND.w #$000C AND.w #$000C
LSR LSR
BRA .recolor BRA .recolor
.set_index ; this branch is always 0000 when taken .set_index ; this branch is always 0000 when taken
REP #$30 REP #$30
TDC TDC
.recolor .recolor
TAX TAX
LDA.l MagicMeterColorMasks,X LDA.l MagicMeterColorMasks,X
TYX TYX
TAY : AND.l DrawMagicMeter_mp_tilemap+0,X : STA.w HUDTileMapBuffer+$046 TAY : AND.l DrawMagicMeter_mp_tilemap+0,X : STA.w HUDTileMapBuffer+$046
TYA : AND.l DrawMagicMeter_mp_tilemap+2,X : STA.w HUDTileMapBuffer+$086 TYA : AND.l DrawMagicMeter_mp_tilemap+2,X : STA.w HUDTileMapBuffer+$086
TYA : AND.l DrawMagicMeter_mp_tilemap+4,X : STA.w HUDTileMapBuffer+$0C6 TYA : AND.l DrawMagicMeter_mp_tilemap+4,X : STA.w HUDTileMapBuffer+$0C6
TYA : AND.l DrawMagicMeter_mp_tilemap+6,X : STA.w HUDTileMapBuffer+$106 TYA : AND.l DrawMagicMeter_mp_tilemap+6,X : STA.w HUDTileMapBuffer+$106
;================================================================================ ;================================================================================
NewHUD_DoneDrawing: NewHUD_DoneDrawing:
STZ.w UpdateHUDFlag LDA.w #$0000 : STA.l UpdateHUDFlag
PLB PLB
RTL RTL
;================================================================================ ;================================================================================
MagicMeterColorMasks: MagicMeterColorMasks:
dw $FFFF ; green - KEEP GREEN FIRST dw $FFFF ; green - KEEP GREEN FIRST
dw $EFFF ; blue dw $EFFF ; blue
dw $E7FF ; red dw $E7FF ; red
dw $EBFF ; yellow dw $EBFF ; yellow
dw $E3FF ; orange dw $E3FF ; orange
;================================================================================ ;================================================================================
DrawCompassCounts: DrawCompassCounts:
LDA.l CompassMode : BEQ .done LDA.l CompassMode : BEQ .done
; no compass needed if this bit is set ; no compass needed if this bit is set
BIT.b #$02 : BNE .draw_compass_count BIT.b #$02 : BNE .draw_compass_count
REP #$20 REP #$20
LDA.l CompassField : AND.l DungeonItemMasks,X : BEQ .done LDA.l CompassField : AND.l DungeonItemMasks,X : BEQ .done
.draw_compass_count .draw_compass_count
SEP #$20 SEP #$20
TYX : BNE .not_sewers TYX : BNE .not_sewers
INX INX
.not_sewers .not_sewers
LDA.l DungeonLocationsChecked, X LDA.l DungeonLocationsChecked, X
PHA PHA
LDA.l CompassTotalsWRAM,X LDA.l CompassTotalsWRAM,X
JSR HUDHex2Digit JSR HUDHex2Digit
STY.w HUDTileMapBuffer+$9A : STX.w HUDTileMapBuffer+$9C STY.w HUDTileMapBuffer+$9A : STX.w HUDTileMapBuffer+$9C
LDX.w #!BlankTile : STX.w HUDTileMapBuffer+$92 LDX.w #!BlankTile : STX.w HUDTileMapBuffer+$92
LDX.w #!SlashTile : STX.w HUDTileMapBuffer+$98 LDX.w #!SlashTile : STX.w HUDTileMapBuffer+$98
PLA PLA
JSR HUDHex2Digit JSR HUDHex2Digit
STY.w HUDTileMapBuffer+$94 : STX.w HUDTileMapBuffer+$96 STY.w HUDTileMapBuffer+$94 : STX.w HUDTileMapBuffer+$96
.done .done
SEP #$20 SEP #$20
RTS RTS
;================================================================================ ;================================================================================
DrawMapCounts: DrawMapCounts:
LDA.l MapHUDMode : BEQ .done LDA.l MapHUDMode : BEQ .done
; no map needed if this bit is set ; no map needed if this bit is set
BIT.b #$02 : BNE .draw_map_count BIT.b #$02 : BNE .draw_map_count
REP #$20 REP #$20
LDA.l MapField : AND.l DungeonItemMasks,X : BEQ .done LDA.l MapField : AND.l DungeonItemMasks,X : BEQ .done
.draw_map_count .draw_map_count
SEP #$20 SEP #$20
TYX : BNE .not_sewers TYX : BNE .not_sewers
INX INX
.not_sewers .not_sewers
LDA.l DungeonCollectedKeys, X LDA.l DungeonCollectedKeys, X
PHA PHA
LDA.l MapTotalsWRAM,X LDA.l MapTotalsWRAM,X
JSR HUDHex2Digit JSR HUDHex2Digit
STX.w HUDTileMapBuffer+$A6 STX.w HUDTileMapBuffer+$A6
LDX.w #!SlashTile : STX.w HUDTileMapBuffer+$A4 LDX.w #!SlashTile : STX.w HUDTileMapBuffer+$A4
PLA PLA
JSR HUDHex2Digit JSR HUDHex2Digit
STX.w HUDTileMapBuffer+$A2 STX.w HUDTileMapBuffer+$A2
.done .done
SEP #$20 SEP #$20
RTS RTS
;================================================================================ ;================================================================================
@@ -355,41 +348,41 @@ RTS
;=================================================================================================== ;===================================================================================================
HUDHex2Digit: HUDHex2Digit:
SEP #$30 ; clear high byte of X and Y and make it so they don't get B SEP #$30 ; clear high byte of X and Y and make it so they don't get B
ASL : TAX ASL : TAX
REP #$10 REP #$10
LDA.b #$24 : XBA ; tile props in high byte LDA.b #$24 : XBA ; tile props in high byte
LDA.l FastHexTable,X : LSR #4 : ORA.b #$90 LDA.l FastHexTable,X : LSR #4 : ORA.b #$90
TAY TAY
LDA.l FastHexTable,X : AND.b #$0F : ORA.b #$90 LDA.l FastHexTable,X : AND.b #$0F : ORA.b #$90
TAX TAX
RTS RTS
HUDHex4Digit: HUDHex4Digit:
JSL HexToDec JSL HexToDec
REP #$30 REP #$30
LDA.l HexToDecDigit2 : ORA.w #$9090 : STA.b Scrap04 LDA.l HexToDecDigit2 : ORA.w #$9090 : STA.b Scrap04
LDA.l HexToDecDigit4 : ORA.w #$9090 : STA.b Scrap06 LDA.l HexToDecDigit4 : ORA.w #$9090 : STA.b Scrap06
LDA.w #$2400 LDA.w #$2400
SEP #$20 SEP #$20
RTS RTS
HUDHex2Digit_Long: HUDHex2Digit_Long:
JSR HUDHex2Digit JSR HUDHex2Digit
REP #$20 REP #$20
RTL RTL
HUDHex4Digit_Long: HUDHex4Digit_Long:
JSR HUDHex4Digit JSR HUDHex4Digit
REP #$20 REP #$20
RTL RTL
;================================================================================ ;================================================================================
@@ -421,11 +414,11 @@ UpdateHearts:
CPX.b #$01 CPX.b #$01
BMI .done_hearts BMI .done_hearts
PHX PHX
LDA.l HUDHeartColors_index : ASL : TAX LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_game_hud,X LDA.l HUDHeartColors_masks_game_hud,X
PLX PLX
ORA.w #$20A0 ORA.w #$20A0
CPY.b #$01 CPY.b #$01
BPL .add_heart BPL .add_heart
@@ -467,16 +460,16 @@ UpdateHearts:
CMP.w #$0005 CMP.w #$0005
BCS .more_than_half BCS .more_than_half
LDA.l HUDHeartColors_index : ASL : TAX LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_game_hud,X LDA.l HUDHeartColors_masks_game_hud,X
ORA.w #$20A1 ORA.w #$20A1
STA.b ($09) STA.b ($09)
BRA .skip_partial BRA .skip_partial
.more_than_half .more_than_half
LDA.l HUDHeartColors_index : ASL : TAX LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_game_hud,X LDA.l HUDHeartColors_masks_game_hud,X
ORA.w #$20A0 ORA.w #$20A0
STA.b ($09) STA.b ($09)
.skip_partial .skip_partial
@@ -486,29 +479,29 @@ UpdateHearts:
RTL RTL
CheckHeartPaletteFileSelect: CheckHeartPaletteFileSelect:
LDA.l HUDHeartColors_index : ASL : TAX LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_file_select,X LDA.l HUDHeartColors_masks_file_select,X
ORA.w #$0200 ORA.w #$0200
LDX.w #$000A LDX.w #$000A
RTL RTL
CheckHeartPalette: CheckHeartPalette:
PHX PHX
LDA.l HUDHeartColors_index : ASL : TAX LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_game_hud,X LDA.l HUDHeartColors_masks_game_hud,X
ORA.w #$20A0 ORA.w #$20A0
PLX PLX
RTS RTS
ColorAnimatedHearts: ColorAnimatedHearts:
PHX PHX
REP #$20 REP #$20
LDA.l HUDHeartColors_index : ASL : TAX LDA.l HUDHeartColors_index : ASL : TAX
LDA.l HUDHeartColors_masks_game_hud,X LDA.l HUDHeartColors_masks_game_hud,X
PLX PLX
ORA.l HeartFramesBaseTiles,X ORA.l HeartFramesBaseTiles,X
STA.b [Scrap00],Y STA.b [Scrap00],Y
SEP #$20 SEP #$20
RTL RTL
HeartFramesBaseTiles: HeartFramesBaseTiles:

1427
newitems.asm Executable file → Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -17,7 +17,7 @@ RTL
;================================================================================ ;================================================================================
HUDRebuildIndoorHole: HUDRebuildIndoorHole:
PHA PHA
INC.w UpdateHUDFlag LDA.b #$01 : STA.l UpdateHUDFlag
LDA.l GenericKeys : BEQ .normal LDA.l GenericKeys : BEQ .normal
.generic .generic
PLA PLA
@@ -30,7 +30,7 @@ RTL
RTL RTL
;================================================================================ ;================================================================================
HUDRebuildIndoor: HUDRebuildIndoor:
INC.w UpdateHUDFlag LDA.b #$01 : STA.l UpdateHUDFlag
LDA.l GenericKeys : BEQ .normal LDA.l GenericKeys : BEQ .normal
.generic .generic
LDA.b #$00 : STA.l RoomDarkness LDA.b #$00 : STA.l RoomDarkness

View File

@@ -10,7 +10,7 @@ QuickSwap:
LDA.l QuickSwapFlag : BEQ .done LDA.l QuickSwapFlag : BEQ .done
LDA.w ItemCursor : BEQ .done ; Skip everything if we don't have any items LDA.w ItemCursor : BEQ .done ; Skip everything if we don't have any items
INC.w UpdateHUDFlag LDA.b #$01 : STA.l UpdateHUDFlag
LDY.b #$14 LDY.b #$14
PHX PHX
XBA ; restore the stashed value XBA ; restore the stashed value
@@ -34,7 +34,6 @@ QuickSwap:
CPX.b #$01 : BEQ + ; bow CPX.b #$01 : BEQ + ; bow
CPX.b #$05 : BEQ + ; powder CPX.b #$05 : BEQ + ; powder
CPX.b #$0D : BEQ + ; flute CPX.b #$0D : BEQ + ; flute
CPX.b #$0E : BEQ + ; bug net
CPX.b #$10 : BEQ + ; bottle CPX.b #$10 : BEQ + ; bottle
BRA .store BRA .store
+ STX.w ItemCursor : JSL ProcessMenuButtons_y_pressed + STX.w ItemCursor : JSL ProcessMenuButtons_y_pressed
@@ -60,10 +59,10 @@ RCode:
- -
+ CPX.b #$14 : BNE + : LDX.b #$00 ;will wrap around to 1 + CPX.b #$14 : BNE + : LDX.b #$00 ;will wrap around to 1
+ INX + INX
DEY : BEQ + DEY : BEQ +
.nextItem .nextItem
JSL.l IsItemAvailable : BEQ - JSL.l IsItemAvailable : BEQ -
+ +
RTS RTS
LCode: LCode:
@@ -77,17 +76,17 @@ LCode:
- -
+ CPX.b #$01 : BNE + : LDX.b #$15 ; will wrap around to $14 + CPX.b #$01 : BNE + : LDX.b #$15 ; will wrap around to $14
+ DEX + DEX
DEY : BEQ + DEY : BEQ +
.nextItem .nextItem
JSL.l IsItemAvailable : BEQ - JSL.l IsItemAvailable : BEQ -
+ +
RTS RTS
IsItemAvailable: IsItemAvailable:
LDA.l InfiniteBombs : BEQ .finite LDA.l InfiniteBombs : BEQ .finite
.infinite .infinite
CPX.b #$04 : BNE .finite CPX.b #$04 : BNE .finite
LDA.b #$01 : RTL LDA.b #$01 : RTL
.finite .finite
LDA.l EquipmentWRAM-1, X LDA.l EquipmentWRAM-1, X
RTL RTL

82
ram.asm
View File

@@ -376,6 +376,13 @@ SpriteCoordCacheY = $7E0FDA ;
; ;
NoMenu = $7E0FFC ; When set prevents menu, mirror, medallions NoMenu = $7E0FFC ; When set prevents menu, mirror, medallions
; ;
;===================================================================================================
;===================================================================================================
; DO NOT ADD ANY RANDOMIZER VARIABLES TO THE SPACE FROM $1100 to $1FFF
;---------------------------------------------------------------------------------------------------
; It causes isses with major glitches
;===================================================================================================
;===================================================================================================
GFXStripes = $7E1000 ; Used by stripes for arbitrary VRAM transfers. $100 bytes. GFXStripes = $7E1000 ; Used by stripes for arbitrary VRAM transfers. $100 bytes.
RoomStripes = $7E1100 ; Used for room drawing. RoomStripes = $7E1100 ; Used for room drawing.
; ;
@@ -388,26 +395,7 @@ DelayTimer = $7E1CE9 ;
; ;
TextID = $7E1CF0 ; Message ID and page. Word length. TextID = $7E1CF0 ; Message ID and page. Word length.
; ;
UpdateHUDFlag = $7E1E03 ; Flag used to mark HUD updates and avoid heavy code segments.
;
ToastBuffer = $7E1E0E ; Multiworld buffer. Word length.
;
MSUResumeTime = $7E1E6B ; Mirrored MSU block
MSUResumeControl = $7E1E6F ;
MSUFallbackTable = $7E1E70 ;
MSUDelayedCommand = $7E1E79 ;
MSUPackCount = $7E1E7A ;
MSUPackCurrent = $7E1E7B ;
MSUPackRequest = $7E1E7C ;
MSULoadedTrack = $7E1E7D ;
MSUResumeTrack = $7E1E7F ;
ClockHours = $7E1E90 ; Clock Hours
ClockMinutes = $7E1E94 ; Clock Minutes
ClockSeconds = $7E1E98 ; Clock Seconds
ClockBuffer = $7E1E9C ; Clock Temporary
ScratchBufferNV = $7E1EA0 ; Non-volatile scratch buffer. Must preserve values through return.
ScratchBufferV = $7E1EB0 ; Volatile scratch buffer. Can clobber at will.
;================================================================================ ;================================================================================
; UNMIRRORED WRAM ; UNMIRRORED WRAM
@@ -419,6 +407,28 @@ TileUploadBuffer = $7EA180 ; 0x300 bytes
; ;
ItemGetGFX = $7EBD40 ; Item receipt graphics location ItemGetGFX = $7EBD40 ; Item receipt graphics location
; ;
UpdateHUDFlag = $7EBE00 ; Flag used to mark HUD updates and avoid heavy code segments.
;
ToastBuffer = $7EBE02 ; Multiworld buffer. Word length.
;
MSUResumeTime = $7EBE6B ; Mirrored MSU block
MSUResumeControl = $7EBE6F ;
MSUFallbackTable = $7EBE70 ;
MSUDelayedCommand = $7EBE79 ;
MSUPackCount = $7EBE7A ;
MSUPackCurrent = $7EBE7B ;
MSUPackRequest = $7EBE7C ;
MSULoadedTrack = $7EBE7D ;
MSUResumeTrack = $7EBE7F ;
ClockHours = $7EBE90 ; Clock Hours
ClockMinutes = $7EBE94 ; Clock Minutes
ClockSeconds = $7EBE98 ; Clock Seconds
ClockBuffer = $7EBE9C ; Clock Temporary
ScratchBufferNV = $7EBEA0 ; Non-volatile scratch buffer. Must preserve values through return.
ScratchBufferV = $7EBEB0 ; Volatile scratch buffer. Can clobber at will.
RoomFade = $7EC005 ; Flags fade to black on room transitions. Word length. RoomFade = $7EC005 ; Flags fade to black on room transitions. Word length.
FadeTimer = $7EC007 ; Timer for transition fading and mosaics. Word length. FadeTimer = $7EC007 ; Timer for transition fading and mosaics. Word length.
FadeDirection = $7EC009 ; Word length FadeDirection = $7EC009 ; Word length
@@ -861,23 +871,23 @@ endmacro
%assertRAM(MessageSubModule, $7E1CD8) %assertRAM(MessageSubModule, $7E1CD8)
%assertRAM(MessageCursor, $7E1CE8) %assertRAM(MessageCursor, $7E1CE8)
%assertRAM(DelayTimer, $7E1CE9) %assertRAM(DelayTimer, $7E1CE9)
%assertRAM(TextID, $7E1CF0) ;%assertRAM(TextID, $7E1CF0)
%assertRAM(ToastBuffer, $7E1E0E) ;%assertRAM(ToastBuffer, $7E1E0E)
%assertRAM(MSUResumeTime, $7E1E6B) ;%assertRAM(MSUResumeTime, $7E1E6B)
%assertRAM(MSUResumeControl, $7E1E6F) ;%assertRAM(MSUResumeControl, $7E1E6F)
%assertRAM(MSUFallbackTable, $7E1E70) ;%assertRAM(MSUFallbackTable, $7E1E70)
%assertRAM(MSUDelayedCommand, $7E1E79) ;%assertRAM(MSUDelayedCommand, $7E1E79)
%assertRAM(MSUPackCount, $7E1E7A) ;%assertRAM(MSUPackCount, $7E1E7A)
%assertRAM(MSUPackCurrent, $7E1E7B) ;%assertRAM(MSUPackCurrent, $7E1E7B)
%assertRAM(MSUPackRequest, $7E1E7C) ;%assertRAM(MSUPackRequest, $7E1E7C)
%assertRAM(MSULoadedTrack, $7E1E7D) ;%assertRAM(MSULoadedTrack, $7E1E7D)
%assertRAM(MSUResumeTrack, $7E1E7F) ;%assertRAM(MSUResumeTrack, $7E1E7F)
%assertRAM(ClockHours, $7E1E90) ;%assertRAM(ClockHours, $7E1E90)
%assertRAM(ClockMinutes, $7E1E94) ;%assertRAM(ClockMinutes, $7E1E94)
%assertRAM(ClockSeconds, $7E1E98) ;%assertRAM(ClockSeconds, $7E1E98)
%assertRAM(ClockBuffer, $7E1E9C) ;%assertRAM(ClockBuffer, $7E1E9C)
%assertRAM(ScratchBufferNV, $7E1EA0) ;%assertRAM(ScratchBufferNV, $7E1EA0)
%assertRAM(ScratchBufferV, $7E1EB0) ;%assertRAM(ScratchBufferV, $7E1EB0)
%assertRAM(TileUploadBuffer, $7EA180) %assertRAM(TileUploadBuffer, $7EA180)
%assertRAM(RoomFade, $7EC005) %assertRAM(RoomFade, $7EC005)
%assertRAM(FadeTimer, $7EC007) %assertRAM(FadeTimer, $7EC007)

View File

@@ -11,18 +11,13 @@ LoadBombCount16:
.infinite .infinite
RTL RTL
StoreBombCount: StoreBombCount:
JSL IncrementBombsPlacedCounter PHA
INC.w UpdateHUDFlag LDA.b #$01 : STA.l UpdateHUDFlag
PHA : LDA.l InfiniteBombs : BEQ .finite LDA.l InfiniteBombs : BEQ .finite
.infinite .infinite
PLA : LDA.b #$01 : RTL PLA : LDA.b #$01 : RTL
.finite .finite
PLA : STA.l BombsEquipment PLA : STA.l BombsEquipment
BNE .done
LDA.l ItemOnB : CMP #$04 : BNE .done
LDA.b #$00 : STA.l ItemOnB
.done
LDA.l BombsEquipment
RTL RTL
SearchForEquippedItem: SearchForEquippedItem:
LDA.l InfiniteBombs : BEQ + LDA.l InfiniteBombs : BEQ +
@@ -46,11 +41,11 @@ DecrementArrows:
LDA.b IndoorsFlag : BEQ .not_archery_game ; in overworld LDA.b IndoorsFlag : BEQ .not_archery_game ; in overworld
LDA.w $0B9A : BEQ .shoot_arrow ; arrow game active LDA.w $0B9A : BEQ .shoot_arrow ; arrow game active
LDA.b #$00 : BRA .done LDA.b #$00 : BRA .done
.not_archery_game .not_archery_game
LDA.l CurrentArrows : BNE .shoot_arrow ; check if we have arrows LDA.l CurrentArrows : BNE .shoot_arrow ; check if we have arrows
BRA .done BRA .done
.shoot_arrow .shoot_arrow
PHX PHX
REP #$20 REP #$20

View File

@@ -107,10 +107,6 @@ RTL
; Out: A = RNG Result ; Out: A = RNG Result
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
GetStaticRNG: GetStaticRNG:
LDA.l SeededRNG : BNE .seeded
JML GetRandomInt
RTL
.seeded
PHX : PHP PHX : PHP
REP #$30 ; set 16-bit accumulator and index registers REP #$30 ; set 16-bit accumulator and index registers
AND.w #$000F AND.w #$000F

View File

@@ -1,599 +0,0 @@
;--------------------------------------------------------------------------------
!ANCILLA_DAMAGE = "$86EC84"
; start with X = sprite index, A = ancilla type index
;--------------------------------------------------------------------------------
DamageClassCalc:
PHA
LDA GanonVulnerabilityItem : BEQ +
LDA $0E20, X : CMP #$D7 : BNE +
PLA
JSL Ganon_CheckAncillaVulnerability
RTL
+
LDA SpecialWeapons : AND.b #$7F : CMP #$06 : BEQ .cane_immune ; only crystal switches in bee mode
PLA
CMP #$01 : BEQ .red_cane
CMP #$2C : BEQ .red_cane
CMP #$31 : BEQ .blue_cane
CMP #$0C : BEQ .beam
BRA .not_cane_or_beam
.red_cane
PHA
LDA SpecialWeapons : AND.b #$7F : CMP.b #$04 : BEQ .special_cane
CMP.b #$05 : BEQ .special_cane
LDA SpecialWeapons : AND.b #$80 : BNE .cane_immune
BRA .normal
.blue_cane
PHA
LDA SpecialWeapons : AND.b #$7F : CMP.b #$03 : BEQ .special_cane
CMP.b #$05 : BEQ .special_cane
LDA SpecialWeapons : AND.b #$80 : BNE .cane_immune
BRA .normal
.cane_immune
LDA $0E20, X : CMP.b #$1E : BEQ .normal ; crystal switch
PLA
BRA .impervious
.special_cane
PLA
LDA $0E20, X : CMP.b #$D6 : BEQ .unstunned_ganon
CMP.b #$88 : BEQ .mothula
BRA .special_level
.impervious
LDA #$FF
RTL
.beam
PHA
LDA SpecialWeapons : AND.b #$7F : CMP.b #$02 : BNE .normal
PLA
LDA #$05
RTL
.normal
PLA
.not_cane_or_beam
CMP #$07 : BNE .no_change
LDA SpecialWeapons : AND.b #$7F : CMP #$01 : BNE .normal_bombs
LDA SpecialWeaponLevel : BEQ .normal_bombs
LDA $0E20, X : CMP.b #$D6 : BEQ .unstunned_ganon
CMP.b #$D7 : BEQ .stunned_ganon
CMP.b #$88 : BEQ .mothula
CMP.b #$91 : BEQ .stalfos_knight
CMP.b #$92 : BEQ .helmasaur_king
.special_level
LDA SpecialWeaponLevel
BRA .done
.mothula
LDA SpecialWeaponLevel
CMP #$04 : !BGE .fix_mothula
BRA .done
.fix_mothula
LDA #$03
BRA .done
.stalfos_knight
LDA StalfosBombDamage : BEQ .special_level
LDA #$08
BRA .done
.helmasaur_king
LDA $0DB0, X : CMP #$03 : !BGE .special_level
LDA #$08
BRA .done
.unstunned_ganon
LDA $04C5 : CMP.b #$02 : BNE .impervious
LDA $0EE0, X : BNE .impervious
LDA #$34 : STA $0EE0, X ; give the poor pig some iframes
BRA .special_level
.stunned_ganon
LDA $0EE0, X : BNE .impervious
LDA #$34 : STA $0EE0, X ; give the poor pig some iframes
LDA #$20 : STA $0F10, X ; knock ganon back or something? idk
LDA #$09
BRA .done
.normal_bombs
LDA #$07
.no_change
PHX : TAX
LDA.l !ANCILLA_DAMAGE, X
PLX
CMP.b #$06 : BNE .done ; not arrows
LDA BowEquipment : CMP.b #$03 : !BGE .actual_silver_arrows
.normal_arrows
LDA #$06
.done
RTL
.actual_silver_arrows
LDA $0E20, X : CMP.b #$D7 : BNE +
LDA SpecialWeapons : AND.b #$7F : CMP #$01 : BEQ .normal_arrows
LDA #$20 : STA $0F10, X
+
LDA #$09
RTL
; end with X = sprite index, A = damage class
;--------------------------------------------------------------------------------
!SPRITE_SETUP_HIT_BOX_LONG = "$8683EA"
!UTILITY_CHECK_IF_HIT_BOXES_OVERLAP_LONG = "$8683E6"
; start with X = ancilla index, Y = sprite index
;--------------------------------------------------------------------------------
Utility_CheckAncillaOverlapWithSprite:
LDA $0E20, Y : CMP #$09 : BEQ .giant_moldorm
CMP #$CB : BEQ .trinexx
.not_giant_moldorm ; ordinary collision checking
PHY : PHX
TYX
JSL !SPRITE_SETUP_HIT_BOX_LONG
PLX : PLY
JSL !UTILITY_CHECK_IF_HIT_BOXES_OVERLAP_LONG
RTL
.giant_moldorm
LDA.w $0E10, Y : BNE .ignore_collision ; Moldy can have little a I-Frames, as a treat
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BNE ++
LDA.w $0C4A, X : CMP.b #$07 : BEQ .check_collision_moldorm
BRA .ignore_collision ; don't collide with non-bombs
++ : CMP.b #$03 : BNE ++
LDA.w $0C4A, X : CMP.b #$31 : BEQ .check_collision_moldorm
BRA .ignore_collision ; don't collide with non-byrna
++ : CMP.b #$04 : BNE ++
LDA.w $0C4A, X : CMP.b #$01 : BEQ .check_collision_moldorm
CMP.b #$2C : BEQ .check_collision_moldorm
BRA .ignore_collision ; don't collide with non-somaria
++ : CMP.b #$05 : BNE .ignore_collision
LDA.w $0C4A, X : CMP.b #$01 : BEQ .check_collision_moldorm
CMP.b #$2C : BEQ .check_collision_moldorm
CMP.b #$31 : BEQ .check_collision_moldorm
BRA .ignore_collision ; don't collide with non-canes
.check_collision_moldorm
JSR SetUpMoldormHitbox
JSL !UTILITY_CHECK_IF_HIT_BOXES_OVERLAP_LONG
RTL
.ignore_collision
CLC
RTL
.trinexx
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BNE ++
LDA.w $0C4A, X : CMP.b #$07 : BEQ .check_collision_trinexx
BRA .ignore_collision ; don't collide with non-bombs
++ : CMP.b #$03 : BNE ++
LDA.w $0C4A, X : CMP.b #$31 : BEQ .check_collision_trinexx
JMP .ignore_collision ; don't collide with non-byrna
++ : CMP.b #$04 : BNE ++
LDA.w $0C4A, X : CMP.b #$01 : BEQ .check_collision_trinexx
CMP.b #$2C : BEQ .check_collision_trinexx
JMP .ignore_collision ; don't collide with non-somaria
++ : CMP #$05 : BNE .ignore_collision
LDA.w $0C4A, X : CMP.b #$01 : BEQ .check_collision_trinexx
CMP.b #$2C : BEQ .check_collision_trinexx
CMP.b #$31 : BEQ .check_collision_trinexx
JMP .ignore_collision ; don't collide with non-canes
.check_collision_trinexx
JSR SetUpTrinexxHitbox
JSL !UTILITY_CHECK_IF_HIT_BOXES_OVERLAP_LONG
RTL
; returns carry clear if there was no overlap
;--------------------------------------------------------------------------------
SetUpTrinexxHitbox:
; rearrange trinexx's hitbox to be her middle instead of her head
LDA $0CAA, Y : PHA
LDA $0E60, Y : PHA
LDA $0D10, Y : PHA
LDA $0D30, Y : PHA
LDA $0D00, Y : PHA
LDA $0D20, Y : PHA
LDA #$80 : STA $0CAA, Y
PHX
LDA $0E80, Y : !SUB.l $9DAF28 : AND.b #$7F : TAX
LDA $7FFC00, X : STA $0D10, Y
LDA $7FFC80, X : STA $0D30, Y
LDA $7FFD00, X : STA $0D00, Y
LDA $7FFD80, X : STA $0D20, Y
TYX
STZ $0E60, X
JSL !SPRITE_SETUP_HIT_BOX_LONG
PLX
PLA : STA $0D20, Y
PLA : STA $0D00, Y
PLA : STA $0D30, Y
PLA : STA $0D10, Y
PLA : STA $0E60, Y
PLA : STA $0CAA, Y
RTS
;--------------------------------------------------------------------------------
SetUpMoldormHitbox:
; rearrange moldorm's hitbox to be his tail instead of his head
LDA $0D90, Y : PHA
LDA $0F60, Y : PHA
LDA $0D10, Y : PHA
LDA $0D30, Y : PHA
LDA $0D00, Y : PHA
LDA $0D20, Y : PHA
PHY : PHX
LDA $0E80, Y : !SUB.b #$30 : AND.b #$7F : TAX
LDA $7FFC00, X : STA $0D10, Y
LDA $7FFC80, X : STA $0D30, Y
LDA $7FFD00, X : STA $0D00, Y
LDA $7FFD80, X : STA $0D20, Y
LDA #$01 : STA $09D0, Y
TYX
STZ $0F60, X
JSL !SPRITE_SETUP_HIT_BOX_LONG
PLX : PLY
PLA : STA $0D20, Y
PLA : STA $0D00, Y
PLA : STA $0D30, Y
PLA : STA $0D10, Y
PLA : STA $0F60, Y
PLA : STA $0D90, Y
RTS
;--------------------------------------------------------------------------------
; start with X = ancilla index, Y = sprite index
Utility_CheckHelmasaurKingCollision:
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BNE ++
LDA.w $0C4A, X : CMP.b #$07 : BEQ .collide
BRA .normal ; normal behavior with non-bombs
++ : CMP.b #$03 : BNE ++
LDA.w $0C4A, X : CMP.b #$31 : BEQ .collide
BRA .normal ; normal behavior with non-byrna
++ : CMP.b #$04 : BNE ++
LDA.w $0C4A, X : CMP.b #$01 : BEQ .collide
CMP.b #$2C : BEQ .collide
BRA .normal ; normal behavior with non-somaria
++ : CMP.b #$05 : BNE .normal
LDA.w $0C4A, X : CMP.b #$01 : BEQ .collide
CMP.b #$2C : BEQ .collide
CMP.b #$31 : BEQ .collide
BRA .normal ; normal behavior with non-canes
.collide
CLC
RTL
.normal
LDA.w $0DB0, Y : CMP.b #$03
RTL
; returns carry set if there is collision immunity
;--------------------------------------------------------------------------------
Utility_CheckImpervious:
LDA $0E20, X : CMP.b #$CB : BNE .normal
.trinexx
LDA SpecialWeapons : AND.b #$7F : CMP.b #$06 : BEQ .check_sidenexx
LDA SpecialWeapons : AND.b #$80 : BNE +
BRA .normal
+
LDA $0301 : AND.b #$0A : BNE .impervious ; impervious to hammer
.check_sidenexx
LDA.w $0DD1 : ORA.w $0DD2 : BNE .impervious ; at least one sidenexx alive
LDA.w $0D80, X : CMP.b #$02 : BCS .impervious ; at least one sidenexx alive
BRA .not_impervious
.normal
LDA $0E60, X : AND.b #$40 : BNE .impervious
LDA $0CF2 : CMP #$FF : BEQ .impervious ; special "always-impervious" class
LDA $0E20, X : CMP.b #$CC : BEQ .sidenexx : CMP.b #$CD : BEQ .sidenexx
LDA $0301 : AND.b #$0A : BEQ .not_impervious ; normal behavior if not hammer
JSL Ganon_CheckHammerVulnerability : BCS .not_impervious
LDA SpecialWeapons : AND.b #$80 : BEQ .not_impervious
LDA $0E20, X : CMP.b #$1E : BEQ .not_impervious ; crystal switch
CMP.b #$40 : BEQ .not_impervious ; aga barrier
BRA .impervious
.not_impervious
LDA #$00 : RTL
.impervious
LDA #$01 : RTL
.sidenexx
LDA $0CAA, X : AND.b #$04 : BEQ .vulnerable
LDA.l SpecialWeapons : AND.b #$80 : BEQ .not_impervious
LDA $0CF2 : CMP #$06 : !BLT .impervious ; swords are ineffective
BRA .not_impervious
.vulnerable
LDA.l SpecialWeapons : AND.b #$80 : BEQ .not_impervious
LDA $0CF2 : CMP #$06 : !BGE .impervious ; non-swords are ineffective
BRA .not_impervious
; returns nonzero A if impervious
;--------------------------------------------------------------------------------
!SPRITE_INITIALIZED_SEGMENTED = "$1DD6D1"
; start with X = sprite index
;--------------------------------------------------------------------------------
AllowBombingMoldorm:
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BEQ .no_disable_projectiles
CMP.b #$03 : BEQ .no_disable_projectiles
CMP.b #$04 : BEQ .no_disable_projectiles
CMP.b #$05 : BEQ .no_disable_projectiles
CMP.b #$06 : BEQ .no_disable_projectiles
INC $0BA0, X
.no_disable_projectiles
JSL !SPRITE_INITIALIZED_SEGMENTED
RTL
;--------------------------------------------------------------------------------
AllowBombingBarrier:
; what we wrote over
LDA $0D00, X : !SUB.b #$0C : STA $0D00, X
LDA $0E20, X : CMP #$40 : BNE .disable_projectiles
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BEQ .no_disable_projectiles
CMP.b #$03 : BEQ .no_disable_projectiles
CMP.b #$04 : BEQ .no_disable_projectiles
CMP.b #$05 : BEQ .no_disable_projectiles
CMP.b #$06 : BEQ .no_disable_projectiles
.disable_projectiles
INC $0BA0, X
.no_disable_projectiles
RTL
;--------------------------------------------------------------------------------
DrawBombInMenu:
JSL LoadBombCount16 : AND.w #$00FF : BEQ .noBombs
LDA SpecialWeapons : AND.w #$007F : CMP.w #$0001 : BNE .vanillaBombs
LDA.l SpecialWeaponLevel : AND.w #$00FF : BEQ .noBombs : STA $02
LDA.w #$FC81 : STA $04
BRA .done
.vanillaBombs
LDA.w #$0001 : STA $02
LDA.w #$F699 : STA $04
BRA .done
.noBombs
LDA.w #$0000 : STA $02
LDA.w #$F699 : STA $04
.done
RTL
;--------------------------------------------------------------------------------
DrawSwordInMenu:
LDA SpecialWeapons : AND.w #$007F : CMP.w #$0001 : BEQ .specialSword
CMP.w #$0003 : BEQ .specialSword
CMP.w #$0004 : BEQ .specialSword
CMP.w #$0005 : BEQ .specialSword
CMP.w #$0008 : BEQ .specialSword
LDA SwordEquipment : AND.w #$00FF : CMP.w #$00FF : BEQ .noSword
.hasSword
STA $02
LDA.w #$F859 : STA $04
RTL
.noSword
LDA.w #$0000 : STA $02
LDA.w #$F859 : STA $04
RTL
.specialSword
LDA SpecialWeaponLevel : AND.w #$00FF : STA $02
LDA.w #$FC51 : STA $04
RTL
;--------------------------------------------------------------------------------
DrawBombInYBox:
CPX.w #$0004 : BNE .done
LDA SpecialWeapons : AND.w #$007F : CMP.w #$0001 : BNE .vanilla
LDA SpecialWeaponLevel : AND.w #$00FF : CLC : ADC.w #$00BD : BRA .done
.vanilla
LDA.w #$0001
.done
RTL
;--------------------------------------------------------------------------------
BombIcon:
dw $207F, $207F, $3C88, $3C89, $2C88, $2C89, $2488, $2489, $2888, $2889,$2888, $2889
DrawBombOnHud:
PHB
LDA.w #$0149
LDX.w #HUD_TileMap
LDY.w #$C700
MVN $A17E
PLB
LDA.l SpecialWeapons : AND.w #$007F : CMP.w #$0001 : BNE .regularBombs
LDA.l SpecialWeaponLevel : AND.w #$00FF : ASL #2 : TAX
LDA.l BombIcon, X : STA.l $7EC71A
LDA.l BombIcon+2, X : STA.l $7EC71C
.regularBombs
RTL
;--------------------------------------------------------------------------------
BombSpriteColor:
db $04, $08, $04, $02, $0A, $0A
SetBombSpriteColor:
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BNE .normal
PHX
LDA.l SpecialWeaponLevel
TAX
LDA.l BombSpriteColor, X
STA $0B
PLX
RTL
.normal
LDA #$04 : STA $0B
RTL
;--------------------------------------------------------------------------------
StoreSwordDamage:
LDA.l SpecialWeapons : AND.b #$7F : CMP #$02 : BEQ +
LDA.l $06ED39, X : RTL
+
LDA #$05
RTL
;--------------------------------------------------------------------------------
BeeDamageClass:
db $FF
db $06, $00, $07, $08, $0A
db $0B, $0C, $0D, $0E, $0F
db $FF, $03, $FF, $FF, $FF
db $FF, $01, $01, $FF, $FF
;--------------------------------------------------------------------------------
CheckDetonateBomb:
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BEQ .detonate_bombs
CMP.b #$06 : BEQ .release_bee
CLC : RTL
.detonate_bombs
LDX.b #09
.check_ancilla
LDA.w $0C4A, X
CMP.b #$07
BNE .next_ancilla
LDA.b #03
STA.w $039F, X
.next_ancilla
DEX
BPL .check_ancilla
JMP .done
.release_bee
LDX.w $0202
LDA.l BeeDamageClass, X : CMP.b #$FF : BEQ .nope
JSL $1EDCC9
BMI .nope
LDX.w $0202
LDA.l BeeDamageClass, X
CMP.b #$06 : BNE .set_bee_class
LDA.l BowEquipment : CMP.b #$03 : !BGE .silver_arrows
LDA.b #$06
BRA .set_bee_class
.silver_arrows
LDA.b #$09
.set_bee_class
STA.w $0ED0, Y
BRA .done
.nope
LDA.b #$3C
STA.w $0CF8
JSL $0DBB67
ORA.w $0CF8
STA.w $012E
.done
SEC
RTL
;--------------------------------------------------------------------------------
SetBeeType:
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$06 : BEQ .bee_mode
LDX.w $0202
.check_bee_type
LDA.l EquipmentWRAM-1, X
TAX
LDA.l BottleContents-1, X
CMP.b #$08
BNE .regular_bee
LDA.b #$01
STA.w $0EB0, Y
.regular_bee
LDA.b #$01
STA.w $0ED0, Y
RTL
.bee_mode
LDX.w $0202
CPX.b #$10 : BEQ .check_bee_type
BRA .regular_bee
;--------------------------------------------------------------------------------
ArrghusBoing:
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$06 : BNE .done
LDA.w $0F60, X : AND.b #$BF : STA.w $0F60, X
.done
; what we wrote over
LDA.b #$03
STA.w $0D80, X
RTL
;--------------------------------------------------------------------------------
BeeCheckTarget:
CPY.w $0FA0
BEQ .unsuitable_target
LDA.w $0DD0,Y
CMP.b #$09
BCC .unsuitable_target
LDA.w $0F00,Y
BNE .unsuitable_target
; in bee-mode skip targets that the bee can't hurt
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$06 : BNE +
JSR BeeCheckDamage
CMP.b #$00 : BEQ .unsuitable_target
+
LDA.w $0E40,Y
BMI .potential_target
LDA.w $0F20,Y
CMP.w $0F20,X
BNE .unsuitable_target
LDA.w $0F60,Y
AND.b #$40
BEQ +
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$06 : BNE .unsuitable_target
; in bee mode, allow targetting anti-fairies, bunny beams, and keese
LDA.w $0E20,Y
CMP.b #$15 : BEQ + ; anti-fairy
CMP.b #$6F : BEQ + ; keese
CMP.b #$D1 : BEQ + ; bunny beam
BRA .unsuitable_target
+
LDA.w $0BA0,Y
BEQ .valid_target
BRA .unsuitable_target
.potential_target
LDA.w $0EB0,X
BEQ .unsuitable_target
LDA.w $0CD2,Y
AND.b #$40
BNE .valid_target
.unsuitable_target
CLC : RTL
.valid_target
SEC : RTL
;--------------------------------------------------------------------------------
BeeCheckDamage:
PHX : PHP
REP #$20
LDA.w $0E20,Y : AND.w #$00FF
ASL #4
SEP #$20
ORA.w $0ED0,X
REP #$30
TAX
SEP #$20
JSL LookupDamageLevel
SEP #$10
PLP : PLX
RTS
;--------------------------------------------------------------------------------
CheckBugNet:
LDA.w $037A : AND.b #$10 : BEQ .done ; normal behavior if not bugnet
PHP ; we want to preserve the carry bit
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$08 : BNE .return_10 ; normal behavior if not bugnet mode
.bugnet_mode
LDA.w $0E20, X : CMP.b #$E3 : BEQ .return_10 ; normal behavior if fairy
CMP.b #$79 : BEQ .return_10 ; normal behavior if bee
CMP.b #$B2 : BEQ .return_10 ; normal behavior if bee
PLP : LDA.b #$00 : RTL
.return_10
PLP : LDA.b #$10
.done
RTL
;--------------------------------------------------------------------------------
SetHammerClass:
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$08 : BNE .normal ; normal behavior if not bugnet mode
LDA.w $037A : AND.b #$10 : BEQ .normal ; normal behavior if not bugnet
LDA 4, S : TAX ; get sprite index off of stack
LDA.w $0E20, X : CMP.b #$88 : BNE .not_mothula
LDA.l SpecialWeaponLevel
CMP #$04 : !BGE .fix_mothula
BRA .done
.fix_mothula
LDA #$03
BRA .done
.not_mothula
LDA.l SpecialWeaponLevel
.done
STA.w $0CF2
RTL
.normal
LDA.w $0301
AND.b #$0A
BEQ .not_hammer
LDA.b #$03
STA.w $0CF2
.not_hammer
RTL

View File

@@ -187,9 +187,7 @@ ItemLimitCounts: skip 16 ; Keeps track of limited non-progressive items s
; See: ItemSubstitutionRules in tables.asm ; See: ItemSubstitutionRules in tables.asm
; Right now this is only used for three items but extra space is ; Right now this is only used for three items but extra space is
; reserved ; reserved
skip 35 ; Unused skip 37 ; Unused
SpecialWeaponLevel: skip 1 ; Keeps track of level of weapon in item modes
ItemOnB: skip 1 ; same table as $0202; $01 = arrows .. $14 = mirror
ProgressIndicator: skip 1 ; $00 = Pre-Uncle | $01 = Post-Uncle item | $02 = Zelda Rescued ProgressIndicator: skip 1 ; $00 = Pre-Uncle | $01 = Post-Uncle item | $02 = Zelda Rescued
; $03 = Agahnim 1 defeated ; $03 = Agahnim 1 defeated
; $04 and above don't do anything. $00-$02 used in standard mode ; $04 and above don't do anything. $00-$02 used in standard mode
@@ -323,8 +321,7 @@ DungeonsCompleted: skip 2 ; Bitfield indicating whether a dungeon's prize
; This has the same shape as the dungeon item bitfields. ; This has the same shape as the dungeon item bitfields.
MapCountDisplay: skip 2 ; MapCountDisplay: skip 2 ;
CrystalCounter: skip 2 ; Total Number of crystals collected (integer) CrystalCounter: skip 2 ; Total Number of crystals collected (integer)
BombsPlaced: skip 2 ; Total Number of bombs placed (16-bit integer) skip 40 ; Unused
skip 38 ; Unused
ServiceSequence: ; See servicerequest.asm ServiceSequence: ; See servicerequest.asm
ServiceSequenceRx: skip 8 ; Service sequence receive ServiceSequenceRx: skip 8 ; Service sequence receive
ServiceSequenceTx: skip 8 ; Service sequence transmit ServiceSequenceTx: skip 8 ; Service sequence transmit
@@ -414,9 +411,7 @@ DisplayRupeesSRAM: skip 21 ;
CurrentArrowsSRAM: skip 21 ; CurrentArrowsSRAM: skip 21 ;
InventoryTrackingSRAM: skip 2 ; InventoryTrackingSRAM: skip 2 ;
BowTrackingSRAM: skip 2 ; BowTrackingSRAM: skip 2 ;
skip 51 ; skip 53 ;
SpecialWeaponLevelSRAM: skip 1 ;
ItemOnBSRAM: skip 1 ;
ProgressIndicatorSRAM: skip 1 ; ProgressIndicatorSRAM: skip 1 ;
skip 19 ; skip 19 ;
FileNameVanillaSRAM: skip 8 ; First four characters of file name FileNameVanillaSRAM: skip 8 ; First four characters of file name
@@ -545,8 +540,6 @@ endmacro
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
%assertSRAM(InventoryTracking, $7EF38C) %assertSRAM(InventoryTracking, $7EF38C)
%assertSRAM(BowTracking, $7EF38E) %assertSRAM(BowTracking, $7EF38E)
%assertSRAM(SpecialWeaponLevel, $7EF3C3)
%assertSRAM(ItemOnB, $7EF3C4)
%assertSRAM(ItemLimitCounts, $7EF390) %assertSRAM(ItemLimitCounts, $7EF390)
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
%assertSRAM(GameCounter, $7EF3FF) %assertSRAM(GameCounter, $7EF3FF)
@@ -678,7 +671,6 @@ endmacro
%assertSRAM(CurrentArrowsSRAM, $700377) %assertSRAM(CurrentArrowsSRAM, $700377)
%assertSRAM(InventoryTrackingSRAM, $70038C) %assertSRAM(InventoryTrackingSRAM, $70038C)
%assertSRAM(BowTrackingSRAM, $70038E) %assertSRAM(BowTrackingSRAM, $70038E)
%assertSRAM(SpecialWeaponLevelSRAM, $7003C3)
%assertSRAM(ProgressIndicatorSRAM, $7003C5) %assertSRAM(ProgressIndicatorSRAM, $7003C5)
%assertSRAM(FileNameVanillaSRAM, $7003D9) %assertSRAM(FileNameVanillaSRAM, $7003D9)
%assertSRAM(FileValiditySRAM, $7003E1) %assertSRAM(FileValiditySRAM, $7003E1)

177
stats.asm
View File

@@ -78,12 +78,12 @@ IncrementSmallKeys:
STA.l CurrentSmallKeys ; thing we wrote over, write small key count STA.l CurrentSmallKeys ; thing we wrote over, write small key count
PHX PHX
LDA.l StatsLocked : BNE + LDA.l StatsLocked : BNE +
LDA.l SmallKeyCounter : INC : STA.l SmallKeyCounter LDA.l SmallKeyCounter : INC : STA.l SmallKeyCounter
+ +
JSL.l UpdateKeys JSL.l UpdateKeys
PHY : LDY.b #24 : JSL.l AddInventory : PLY PHY : LDY.b #24 : JSL.l AddInventory : PLY
JSL.l HUD_RebuildLong JSL.l HUD_RebuildLong
INC.w UpdateHUDFlag LDA.b #$01 : STA.l UpdateHUDFlag
PLX PLX
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -106,7 +106,7 @@ IncrementSmallKeysNoPrimary:
++ ++
PLP PLP
+ +
INC.w UpdateHUDFlag LDA.b #$01 : STA.l UpdateHUDFlag
JSL.l HUD_RebuildLong JSL.l HUD_RebuildLong
PLX PLX
RTL RTL
@@ -124,51 +124,32 @@ CountChestKeyLong:
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
CountChestKey: CountChestKey:
PHA : PHX PHA : PHX
LDA.l StatsLocked : BNE .done LDA.l StatsLocked : BNE .done
CPY.b #$24 : BEQ .this_dungeon CPY.b #$24 : BEQ .this_dungeon
TYA TYA
AND.b #$0F : CMP.b #$02 : BCC .hc_sewers AND.b #$0F : CMP.b #$02 : BCC .hc_sewers
TAX TAX
LDA.l DungeonCollectedKeys,X : INC : STA.l DungeonCollectedKeys,X LDA.l DungeonCollectedKeys,X : INC : STA.l DungeonCollectedKeys,X
BRA .done BRA .done
.this_dungeon .this_dungeon
LDA.w DungeonID : CMP.b #$03 : BCC .hc_sewers LDA.w DungeonID : CMP.b #$03 : BCC .hc_sewers
LSR : TAX LSR : TAX
LDA.l DungeonCollectedKeys,X : INC : STA.l DungeonCollectedKeys,X LDA.l DungeonCollectedKeys,X : INC : STA.l DungeonCollectedKeys,X
BRA .done BRA .done
.hc_sewers .hc_sewers
LDA.l SewerCollectedKeys : INC LDA.l SewerCollectedKeys : INC
STA.l SewerCollectedKeys : STA.l HCCollectedKeys STA.l SewerCollectedKeys : STA.l HCCollectedKeys
.done .done
PLX : PLA PLX : PLA
RTS RTS
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
CountBonkItem: ; called from GetBonkItem in bookofmudora.asm
LDA.b RoomIndex
CMP.b #115 : BNE +
LDA.l BonkKey_Desert
BRA ++
+
CMP.b #140 : BNE +
LDA.l BonkKey_GTower : BRA ++
+
LDA.b #$24
++
CMP.b #$24 : BNE +
PHY
TAY
JSR CountChestKey
PLY
+
RTL
;--------------------------------------------------------------------------------
IncrementAgahnim2Sword: IncrementAgahnim2Sword:
PHA PHA
JSL.l IncrementBossSword JSL.l IncrementBossSword
PLA PLA
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IncrementDeathCounter: IncrementDeathCounter:
@@ -197,16 +178,6 @@ IncrementChestTurnCounter:
PLA PLA
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IncrementBombsPlacedCounter:
PHA
LDA StatsLocked : BNE +
PHP : REP #$20
LDA BombsPlaced : INC : STA BombsPlaced
PLP
+
PLA
RTL
;--------------------------------------------------------------------------------
IncrementChestCounter: IncrementChestCounter:
LDA.b #$01 : STA.w ItemReceiptMethod ; thing we wrote over LDA.b #$01 : STA.w ItemReceiptMethod ; thing we wrote over
PHA PHA
@@ -227,22 +198,22 @@ RTL
DecrementItemCounter: DecrementItemCounter:
PHA PHA
LDA.l StatsLocked : BNE + LDA.l StatsLocked : BNE +
REP #$20 REP #$20
LDA.l TotalItemCounter : DEC : STA.l TotalItemCounter LDA.l TotalItemCounter : DEC : STA.l TotalItemCounter
SEP #$20 SEP #$20
+ +
PLA PLA
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IncrementBigChestCounter: IncrementBigChestCounter:
JSL.l Dungeon_SaveRoomQuadrantData ; thing we wrote over JSL.l Dungeon_SaveRoomQuadrantData ; thing we wrote over
PHA PHA
LDA.l StatsLocked : BNE + LDA.l StatsLocked : BNE +
LDA.l BigKeysBigChests : INC : AND.b #$0F : TAX LDA.l BigKeysBigChests : INC : AND.b #$0F : TAX
LDA.l BigKeysBigChests : AND.b #$F0 : STA.l BigKeysBigChests LDA.l BigKeysBigChests : AND.b #$F0 : STA.l BigKeysBigChests
TXA : ORA.l BigKeysBigChests : STA.l BigKeysBigChests TXA : ORA.l BigKeysBigChests : STA.l BigKeysBigChests
+ +
PLA PLA
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IncrementDamageTakenCounter_Eight: IncrementDamageTakenCounter_Eight:
@@ -304,13 +275,13 @@ IncrementMagicUseCounterOne:
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IncrementOWMirror: IncrementOWMirror:
PHA PHA
LDA.b #$08 : STA.w RaceGameFlag ; fail race game LDA.b #$08 : STA.w RaceGameFlag ; fail race game
LDA.l StatsLocked : BNE + LDA.l StatsLocked : BNE +
LDA.l CurrentWorld : BEQ + ; only do this for DW->LW LDA.l CurrentWorld : BEQ + ; only do this for DW->LW
LDA.l OverworldMirrors : INC : STA.l OverworldMirrors LDA.l OverworldMirrors : INC : STA.l OverworldMirrors
+ +
PLA PLA
JMP StatTransitionCounter JMP StatTransitionCounter
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IncrementUWMirror: IncrementUWMirror:
@@ -326,8 +297,8 @@ IncrementUWMirror:
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IncrementSpentRupees: IncrementSpentRupees:
DEC A : BPL .subtractRupees DEC A : BPL .subtractRupees
LDA.w #$0000 : STA.l CurrentRupees LDA.w #$0000 : STA.l CurrentRupees
RTL RTL
.subtractRupees .subtractRupees
PHA : PHP PHA : PHP
@@ -343,46 +314,36 @@ IndoorTileTransitionCounter:
JMP StatTransitionCounter JMP StatTransitionCounter
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
IndoorSubtileTransitionCounter: IndoorSubtileTransitionCounter:
LDA.b #$01 : STA.l RedrawFlag ; set redraw flag for items LDA.b #$01 : STA.l RedrawFlag ; set redraw flag for items
STZ.w SomariaSwitchFlag ; stuff we wrote over STZ.w SomariaSwitchFlag ; stuff we wrote over
STZ.w SpriteRoomTag STZ.w SpriteRoomTag
JMP StatTransitionCounter JMP StatTransitionCounter
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
StatsFinalPrep: StatsFinalPrep:
PHA : PHX : PHP PHA : PHX : PHP
SEP #$30 ; set 8-bit accumulator and index registers SEP #$30
LDA.l StatsLocked : BNE .ramPostOnly
INC : STA.l StatsLocked
JSL.l IncrementFinalSword
LDA.l Aga2Duck : BEQ .ramPostOnly
LDA.l ScreenTransitions : DEC : STA.l ScreenTransitions ; remove extra transition from exiting gtower via duck
.ramPostOnly
LDA.l SwordBossKills : LSR #4 : !ADD SwordBossKills : STA.l BossKills
LDA.l SwordBossKills+1 : LSR #4 : !ADD SwordBossKills+1 : !ADD BossKills : AND.b #$0F : STA.l BossKills
LDA.l StatsLocked : BNE .ramPostOnly LDA.l NMIFrames : !SUB LoopFrames : STA.l LagTime
INC : STA.l StatsLocked LDA.l NMIFrames+1 : SBC LoopFrames+1 : STA.l LagTime+1
LDA.l NMIFrames+2 : SBC LoopFrames+2 : STA.l LagTime+2
LDA.l NMIFrames+3 : SBC LoopFrames+3 : STA.l LagTime+3
JSL.l IncrementFinalSword LDA.l RupeesSpent : !ADD DisplayRupees : STA.l RupeesCollected
LDA.l RupeesSpent+1 : ADC DisplayRupees+1 : STA.l RupeesCollected+1
LDA.l HighestMail : INC : STA.l HighestMail ; add green mail to mail count REP #$20
LDA.l TotalItemCounter : !SUB ChestsOpened : STA.l NonChestCounter
LDA.l ScreenTransitions : DEC : STA.l ScreenTransitions ; remove extra transition from exiting gtower via duck .done
PLP : PLX : PLA
.ramPostOnly LDA.b #$19 : STA.b GameMode ; thing we wrote over, load triforce room
LDA.l SwordBossKills : LSR #4 : !ADD SwordBossKills : STA.l BossKills STZ.b GameSubMode
LDA.l SwordBossKills+1 : LSR #4 : !ADD SwordBossKills+1 : !ADD BossKills : AND.b #$0F : STA.l BossKills STZ.b SubSubModule
LDA.l NMIFrames : !SUB LoopFrames : STA.l LagTime
LDA.l NMIFrames+1 : SBC LoopFrames+1 : STA.l LagTime+1
LDA.l NMIFrames+2 : SBC LoopFrames+2 : STA.l LagTime+2
LDA.l NMIFrames+3 : SBC LoopFrames+3 : STA.l LagTime+3
LDA.l RupeesSpent : !ADD DisplayRupees : STA.l RupeesCollected
LDA.l RupeesSpent+1 : ADC DisplayRupees+1 : STA.l RupeesCollected+1
REP #$20
LDA.l TotalItemCounter : !SUB ChestsOpened : STA.l NonChestCounter
.done
PLP : PLX : PLA
LDA.b #$19 : STA.b GameMode ; thing we wrote over, load triforce room
STZ.b GameSubMode
STZ.b SubSubModule
RTL RTL
;--------------------------------------------------------------------------------
; Notes:
; s&q counter
;================================================================================

View File

@@ -3,59 +3,53 @@
;=================================================================================================== ;===================================================================================================
table "data/creditscharmapbighi.txt" table "data/creditscharmapbighi.txt"
YourSpriteCreditsHi: YourSpriteCreditsHi:
db 2, 55, " " ; $238002 db 2
db 55
db " " ; $238002
table "data/creditscharmapbiglo.txt" table "data/creditscharmapbiglo.txt"
YourSpriteCreditsLo: YourSpriteCreditsLo:
db 2, 55, " " ; $238020 db 2
db 55
db " " ; $238020
!FEATURE_PATREON_SUPPORTERS ?= 0
table "data/creditscharmapbighi.txt" table "data/creditscharmapbighi.txt"
FirstSwordStatsHi: PatronCredit1Hi:
db 2, 55, "FIRST SWORD " ; $23803E db 2
db 55
db " " ; $23803E
table "data/creditscharmapbiglo.txt" table "data/creditscharmapbiglo.txt"
FirstSwordStatsLo: PatronCredit1Lo:
db 2, 55, "FIRST SWORD " ; $23805C db 2
db 55
db " " ; $23805C
table "data/creditscharmapbighi.txt" table "data/creditscharmapbighi.txt"
SwordlessKillsHi: PatronCredit2Hi:
db 2, 55, "SWORDLESS /13" ; $23807A db 2
db 55
db " " ; $23807A
table "data/creditscharmapbiglo.txt" table "data/creditscharmapbiglo.txt"
SwordlessKillsLo: PatronCredit2Lo:
db 2, 55, "SWORDLESS /13" ; $238098 db 2
db 55
db " " ; $238098
table "data/creditscharmapbighi.txt" table "data/creditscharmapbighi.txt"
FighterSwordKillsHi: PatronCredit3Hi:
db 2, 55, "FIGHTER'S SWORD /13" ; $2380B6 db 2
db 55
db " " ; $2380B6
table "data/creditscharmapbiglo.txt" table "data/creditscharmapbiglo.txt"
FighterSwordKillsLo: PatronCredit3Lo:
db 2, 55, "FIGHTER'S SWORD /13" ; $2380D4 db 2
db 55
table "data/creditscharmapbighi.txt" db " " ; $2380D4
MasterSwordKillsHi:
db 2, 55, "MASTER SWORD /13" ; $2380F2
table "data/creditscharmapbiglo.txt"
MasterSwordKillsLo:
db 2, 55, "MASTER SWORD /13" ; $238110
table "data/creditscharmapbighi.txt"
TemperedSwordKillsHi:
db 2, 55, "TEMPERED SWORD /13" ; $23812E
table "data/creditscharmapbiglo.txt"
TemperedSwordKillsLo:
db 2, 55, "TEMPERED SWORD /13" ; $23814C
table "data/creditscharmapbighi.txt"
GoldSwordKillsHi:
db 2, 55, "GOLD SWORD /13" ; $23816A
table "data/creditscharmapbiglo.txt"
GoldSwordKillsLo:
db 2, 55, "GOLD SWORD /13" ; $238188
;=================================================================================================== ;===================================================================================================
@@ -542,6 +536,24 @@ CreditsLineBlank:
%blankline() %blankline()
%blankline() %blankline()
if !FEATURE_PATREON_SUPPORTERS
%smallcredits("PATREON SUPPORTERS", "yellow")
%addarbline(PatronCredit1Hi)
%addarbline(PatronCredit1Lo)
%blankline()
%addarbline(PatronCredit2Hi)
%addarbline(PatronCredit2Lo)
%blankline()
%addarbline(PatronCredit3Hi)
%addarbline(PatronCredit3Lo)
%blankline()
%blankline()
endif
%smallcredits("SPECIAL THANKS", "red") %smallcredits("SPECIAL THANKS", "red")
%blankline() %blankline()
@@ -574,7 +586,7 @@ CreditsLineBlank:
%blankline() %blankline()
%bigcredits("AND&") %bigcredits("AND")
%blankline() %blankline()
@@ -599,17 +611,20 @@ CreditsLineBlank:
%emptyline() %emptyline()
%emptyline() %emptyline()
%emptyline() %emptyline()
%emptyline()
%emptyline() if !FEATURE_PATREON_SUPPORTERS == 0
%emptyline() %emptyline()
%emptyline() %emptyline()
%emptyline() %emptyline()
%emptyline() %emptyline()
%emptyline() %emptyline()
%emptyline() %emptyline()
%emptyline() %emptyline()
%emptyline() %emptyline()
%emptyline() %emptyline()
%emptyline()
%emptyline()
endif
;=================================================================================================== ;===================================================================================================
@@ -640,8 +655,7 @@ endif
%blankline() %blankline()
%blankline() %blankline()
%addarbline(FirstSwordStatsHi) %bigcreditsleft("FIRST SWORD")
%addarbline(FirstSwordStatsLo)
%blankline() %blankline()
@@ -664,28 +678,23 @@ endif
%blankline() %blankline()
%blankline() %blankline()
%addarbline(SwordlessKillsHi) %bigcreditsleft("SWORDLESS /13")
%addarbline(SwordlessKillsLo)
%blankline() %blankline()
%addarbline(FighterSwordKillsHi) %bigcreditsleft("FIGHTER'S SWORD /13")
%addarbline(FighterSwordKillsLo)
%blankline() %blankline()
%addarbline(MasterSwordKillsHi) %bigcreditsleft("MASTER SWORD /13")
%addarbline(MasterSwordKillsLo)
%blankline() %blankline()
%addarbline(TemperedSwordKillsHi) %bigcreditsleft("TEMPERED SWORD /13")
%addarbline(TemperedSwordKillsLo)
%blankline() %blankline()
%addarbline(GoldSwordKillsHi) %bigcreditsleft("GOLD SWORD /13")
%addarbline(GoldSwordKillsLo)
%blankline() %blankline()
%blankline() %blankline()
@@ -707,10 +716,6 @@ endif
%blankline() %blankline()
%bigcreditsleft("BOMBS PLACED")
%blankline()
%bigcreditsleft("SAVE AND QUITS") %bigcreditsleft("SAVE AND QUITS")
%blankline() %blankline()
@@ -730,6 +735,11 @@ endif
%bigcreditsleft("TOTAL LAG TIME") %bigcreditsleft("TOTAL LAG TIME")
%blankline() %blankline()
%blankline()
%blankline()
%blankline()
%blankline() %blankline()
@@ -758,3 +768,5 @@ endif
%emptyline() %emptyline()
%emptyline() %emptyline()
%emptyline() %emptyline()
;---------------------------------------------------------------------------------------------------

View File

@@ -22,18 +22,16 @@
!MAGICUSED_Y = 349 !MAGICUSED_Y = 349
!BONKS_X = 26 !BONKS_X = 26
!BONKS_Y = 352 !BONKS_Y = 352
!BOMBS_X = 26
!BOMBS_Y = 355
!SAVE_AND_QUITS_X = 26 !SAVE_AND_QUITS_X = 26
!SAVE_AND_QUITS_Y = 358 !SAVE_AND_QUITS_Y = 355
!DEATHS_X = 26 !DEATHS_X = 26
!DEATHS_Y = 361 !DEATHS_Y = 358
!FAERIE_REVIVALS_X = 26 !FAERIE_REVIVALS_X = 26
!FAERIE_REVIVALS_Y = 364 !FAERIE_REVIVALS_Y = 361
!TOTAL_MENU_TIME_X = 19 !TOTAL_MENU_TIME_X = 19
!TOTAL_MENU_TIME_Y = 367 !TOTAL_MENU_TIME_Y = 364
!TOTAL_LAG_TIME_X = 19 !TOTAL_LAG_TIME_X = 19
!TOTAL_LAG_TIME_Y = 370 !TOTAL_LAG_TIME_Y = 367
!COLLECTION_RATE_X = 22 !COLLECTION_RATE_X = 22
!COLLECTION_RATE_Y = 380 !COLLECTION_RATE_Y = 380
!TOTAL_TIME_X = 19 !TOTAL_TIME_X = 19
@@ -61,7 +59,6 @@ CreditsStats:
%AddStat(DamageCounter, 0, 0, 16, 5, !DAMAGETAKEN_X, !DAMAGETAKEN_Y) %AddStat(DamageCounter, 0, 0, 16, 5, !DAMAGETAKEN_X, !DAMAGETAKEN_Y)
%AddStat(MagicCounter, 0, 0, 16, 5, !MAGICUSED_X, !MAGICUSED_Y) %AddStat(MagicCounter, 0, 0, 16, 5, !MAGICUSED_X, !MAGICUSED_Y)
%AddStat(BonkCounter, 0, 0, 08, 3, !BONKS_X, !BONKS_Y) %AddStat(BonkCounter, 0, 0, 08, 3, !BONKS_X, !BONKS_Y)
%AddStat(BombsPlaced, 0, 0, 16, 4, !BOMBS_X, !BOMBS_Y)
%AddStat(SaveQuitCounter, 0, 0, 08, 2, !SAVE_AND_QUITS_X, !SAVE_AND_QUITS_Y) %AddStat(SaveQuitCounter, 0, 0, 08, 2, !SAVE_AND_QUITS_X, !SAVE_AND_QUITS_Y)
%AddStat(DeathCounter, 0, 0, 08, 2, !DEATHS_X, !DEATHS_Y) %AddStat(DeathCounter, 0, 0, 08, 2, !DEATHS_X, !DEATHS_Y)
%AddStat(FaerieRevivalCounter, 0, 0, 08, 3, !FAERIE_REVIVALS_X, !FAERIE_REVIVALS_Y) %AddStat(FaerieRevivalCounter, 0, 0, 08, 3, !FAERIE_REVIVALS_X, !FAERIE_REVIVALS_Y)

View File

@@ -12,33 +12,24 @@ LoadSwordForDamage:
JSR.w LoadModifiedSwordLevel ; load normal sword value JSR.w LoadModifiedSwordLevel ; load normal sword value
RTL RTL
;================================================================================ ;================================================================================
macro LookupDamageSubclass(table_address)
PHP
REP #$20 ; set 16-bit accumulator
TXA : LSR : TAX : BCS +
PLP
LDA.l <table_address>, X
LSR #4
BRA ++
+
PLP
LDA.l <table_address>, X
AND.b #$0F
++
endmacro
;================================================================================
LookupDamageLevel: LookupDamageLevel:
CPX.w #$0918 : BNE + CPX.w #$0918 : BNE +
LDA.l StalfosBombDamage LDA.l StalfosBombDamage
RTL RTL
+ +
LDA SpecialWeapons : AND.b #$7F : CMP.b #$02 : BEQ .pseudo_table PHP
LDA SpecialWeapons : AND.b #$80 : BNE .bomb_table REP #$20 ; set 16-bit accumulator
%LookupDamageSubclass(Damage_Table) : RTL TXA : LSR : TAX : BCS .lower
.bomb_table .upper
%LookupDamageSubclass(Damage_Table_Bombs) : RTL PLP
.pseudo_table LDA.l Damage_Table, X
%LookupDamageSubclass(Damage_Table_Pseudo) : RTL LSR #4
RTL
.lower
PLP
LDA.l Damage_Table, X
AND.b #$0F
RTL
;================================================================================ ;================================================================================
LoadModifiedSwordLevel: ; returns short LoadModifiedSwordLevel: ; returns short
LDA.l SwordModifier : BEQ + LDA.l SwordModifier : BEQ +
@@ -72,39 +63,29 @@ LoadModifiedMagicLevel:
LDA.l MagicConsumption ; load normal magic value LDA.l MagicConsumption ; load normal magic value
RTL RTL
;================================================================================ ;================================================================================
; ChallengeModes - Permanent Ice Modifier ($01 bit) ; $7E0348 - Ice Value
LoadModifiedIceFloorValue: LoadModifiedIceFloorValue_a11:
LDA.b RoomIndex : CMP.b #$91 : BEQ + : CMP.b #$92 : BEQ + : CMP.b #$93 : BEQ + ; mire basement currently broken - not sure why
LDA.b LinkState : CMP.b #$01 : BEQ + : CMP.b #$17 : BEQ + : CMP.b #$1C : BEQ +
LDA.b LinkSpeed : CMP.b #$02 : BEQ +
LDA.b LinkSlipping : BNE +
LDA.w TileActIce : ORA.l IceModifier : AND.b #$11 : RTL
+ : LDA.w TileActIce : AND.b #$11
RTL
LoadModifiedIceFloorValue_a01:
LDA.b RoomIndex : CMP.b #$91 : BEQ + : CMP.b #$92 : BEQ + : CMP.b #$93 : BEQ + ; mire basement currently broken - not sure why LDA.b RoomIndex : CMP.b #$91 : BEQ + : CMP.b #$92 : BEQ + : CMP.b #$93 : BEQ + ; mire basement currently broken - not sure why
LDA.b LinkState : CMP.b #$01 : BEQ + : CMP.b #$17 : BEQ + : CMP.b #$1C : BEQ + LDA.b LinkState : CMP.b #$01 : BEQ + : CMP.b #$17 : BEQ + : CMP.b #$1C : BEQ +
LDA.b LinkSpeed : CMP.b #$02 : BEQ + LDA.b LinkSpeed : CMP.b #$02 : BEQ +
LDA.b LinkSlipping : BNE + LDA.b LinkSlipping : BNE +
LDA.l ChallengeModes : BIT #$01 : BEQ ++ LDA.w TileActIce : ORA.l IceModifier : AND.b #$01 : RTL
LDA.l RoomIndex : CMP #$16 : BEQ ++ ; swamp supertile with current -- fine for temporary physics but impossible without boots for permanent + : LDA.w TileActIce : AND.b #$01
LDA.w TileActIce : ORA.l IceModifier : ORA.b #$10 : RTS RTL
++ : LDA.w TileActIce : ORA.l IceModifier : RTS
+ : LDA.w TileActIce
RTS
LoadModifiedIceFloorValue_a11:
JSR LoadModifiedIceFloorValue : AND.b #$11 : RTL
LoadModifiedIceFloorValue_a01:
JSR LoadModifiedIceFloorValue : AND.b #$01 : RTL
;================================================================================ ;================================================================================
CheckTabletSword: CheckTabletSword:
LDA.l AllowHammerTablets : BEQ + LDA.l AllowHammerTablets : BEQ +
LDA.l HammerEquipment : BNE .allow ; check for hammer LDA.l HammerEquipment : BEQ + ; check for hammer
+
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BEQ .check_special
CMP.b #$03 : BEQ .check_special
CMP.b #$04 : BEQ .check_special
CMP.b #$05 : BEQ .check_special
CMP.b #$06 : BEQ .allow
CMP.b #$08 : BEQ .check_special
BRA .normal
.allow
LDA.b #$02 : RTL LDA.b #$02 : RTL
.check_special +
LDA.l SpecialWeaponLevel : CMP.b #$02 : !BGE .allow ; check for master bombs
.normal
LDA.l SwordEquipment ; get actual sword value LDA.l SwordEquipment ; get actual sword value
RTL RTL
;================================================================================ ;================================================================================
@@ -112,27 +93,15 @@ GetSwordLevelForEvilBarrier:
LDA.l AllowHammerEvilBarrierWithFighterSword : BEQ + LDA.l AllowHammerEvilBarrierWithFighterSword : BEQ +
LDA.b #$FF : RTL LDA.b #$FF : RTL
+ +
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$08 : BEQ + LDA.l SwordEquipment
LDA.l SwordEquipment : RTL RTL
+
LDA.l SpecialWeaponLevel : RTL
;================================================================================ ;================================================================================
CheckGanonHammerDamage: CheckGanonHammerDamage:
LDA.l HammerableGanon : BEQ + LDA.l HammerableGanon : BEQ +
LDA.w SpriteTypeTable, X : CMP.b #$D8 ; original behavior except ganon LDA.w SpriteTypeTable, X : CMP.b #$D8 ; original behavior except ganon
RTL RTL
+ +
LDA.l GanonVulnerabilityItem : CMP.b #$0C : BEQ +
LDA.w SpriteTypeTable, X : CMP.b #$D6 ; original behavior LDA.w SpriteTypeTable, X : CMP.b #$D6 ; original behavior
RTL
+
LDA $0E20, X : CMP.b #$D8 : BCC +
RTL
+
CMP.b #$D6 : BNE +
RTL
+
CLC
RTL RTL
;================================================================================ ;================================================================================
GetSmithSword: GetSmithSword:
@@ -158,7 +127,7 @@ GetSmithSword:
REP #$20 : LDA.l CurrentRupees : !SUB.w #$000A : STA.l CurrentRupees : SEP #$20 ; Take 10 rupees REP #$20 : LDA.l CurrentRupees : !SUB.w #$000A : STA.l CurrentRupees : SEP #$20 ; Take 10 rupees
JSL ItemSet_SmithSword JSL ItemSet_SmithSword
.done .done
JML.l Smithy_AlreadyGotSword JML.l Smithy_AlreadyGotSword
;================================================================================ ;================================================================================

View File

@@ -92,44 +92,7 @@ SmithSword:
db $02 ; #$02 = Tempered Sword (default) db $02 ; #$02 = Tempered Sword (default)
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; 0x18002B (Unused) ; 0x18002B- 0x180030 (Unused)
;--------------------------------------------------------------------------------
org $B0802C ; PC 0x18002C
AllowedItemOnB:
db #$00
; $00 = None (default)
; $01 - $20 = Only selected item
; $FF = Any valid
;--------------------------------------------------------------------------------
org $B0802D ; PC 0x18002D
ChallengeModes:
; ---- ---i
; i: Permanent Ice Physics
db #$00 ; #$00 = Default behavior;
;--------------------------------------------------------------------------------
org $B0802E ; PC 0x18002E
GanonVulnerabilityItem:
db #$00 ; #$00 = Default behavior (silver arrows)
;--------------------------------------------------------------------------------
org $B0802F ; PC 0x18002F
SpecialWeapons:
db #$00
; s - - - m m m m (bitfield)
; s - only swords damage can hurt enemies
; m - special weapon mode
; $00 = Off (default)
; $01 = Bomb mode
; $02 = Pseudosword
; $03 = Byrna mode
; $04 = Somaria mode
; $05 = Canes mode
; $06 = Bee mode
; $07 = Unused
; $08 = Bugnet mode
;--------------------------------------------------------------------------------
org $B08030 ; PC 0x180030
EnableSRAMTrace:
db #$00 ; #$00 = Off (default) - #$01 = On
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $B08031 ; PC 0x180031 org $B08031 ; PC 0x180031
EnableEasterEggs: EnableEasterEggs:
@@ -249,7 +212,7 @@ db $01 ; #$00 = Off - #$01 = On (default)
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $B08050 ; PC 0x180050 - 0x18005C org $B08050 ; PC 0x180050 - 0x18005C
CrystalPendantFlags_2: CrystalPendantFlags_2:
db $02 ; Ganons Tower - because 5D is not available right now - sewers doesn't get one db $02 ; Ganons Tower - because 5D is not available right now - sewers doesn't get one
db $00 ; Hyrule Castle db $00 ; Hyrule Castle
db $00 ; Eastern Palace db $00 ; Eastern Palace
db $00 ; Desert Palace db $00 ; Desert Palace
@@ -257,7 +220,7 @@ CrystalPendantFlags_2:
db $40 ; Swamp Palace db $40 ; Swamp Palace
db $40 ; Palace of Darkness db $40 ; Palace of Darkness
db $40 ; Misery Mire db $40 ; Misery Mire
db $40 ; Skull Woods db $40 ; Skull Woods
db $40 ; Ice Palace db $40 ; Ice Palace
.hera .hera
db $00 ; Tower of Hera db $00 ; Tower of Hera
@@ -387,9 +350,7 @@ org $B0808E ; PC 0x18008E
FakeBoots: FakeBoots:
db $00 ; #$00 = Off (default) - #$01 = On db $00 ; #$00 = Off (default) - #$01 = On
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $30808F ; PC 0x18008F ; 0x18008F (unused)
SeededRNG:
db $01 ; #$00 = Off - #$01 = Seeded RNG (default for rando)
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $B08090 ; PC 0x180090 - 0x180097 org $B08090 ; PC 0x180090 - 0x180097
ProgressiveSwordLimit: ProgressiveSwordLimit:
@@ -649,7 +610,7 @@ dw $6434 ; #6434 - Crystal
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $82A09B ; PC 0x1209B - Bank02.asm:5802 - (pool MilestoneItem_Flags:) org $82A09B ; PC 0x1209B - Bank02.asm:5802 - (pool MilestoneItem_Flags:)
CrystalPendantFlags: CrystalPendantFlags:
db $00 ; Sewers db $00 ; Sewers
db $00 ; Hyrule Castle db $00 ; Hyrule Castle
db $04 ; Eastern Palace db $04 ; Eastern Palace
db $02 ; Desert Palace db $02 ; Desert Palace
@@ -657,7 +618,7 @@ CrystalPendantFlags:
db $10 ; Swamp Palace db $10 ; Swamp Palace
db $02 ; Palace of Darkness db $02 ; Palace of Darkness
db $01 ; Misery Mire db $01 ; Misery Mire
db $40 ; Skull Woods db $40 ; Skull Woods
db $04 ; Ice Palace db $04 ; Ice Palace
.hera .hera
db $01 ; Tower of Hera db $01 ; Tower of Hera
@@ -1458,16 +1419,6 @@ db $04
;AD - Small Key of Ganon's Tower ;AD - Small Key of Ganon's Tower
;AE - Reserved ;AE - Reserved
;AF - Generic Small Key ;AF - Generic Small Key
;B0 - reserved for bee traps
;B1 - reserved for bonk shuffle
;B2 - reserved for bonk shuffle
;B3 - reserved for bonk shuffle
;B4 - reserved for bonk shuffle
;B5 - reserved for bonk shuffle
;B6 - Progressive Bomb
;B7 - Progressive Cane
;B8 - Progressive Bug Net
;================================================================================ ;================================================================================
;;Residual Portal ;;Residual Portal
;org $8283E0 ; PC 0x103E0 (Bank02.asm:816) (BNE) ;org $8283E0 ; PC 0x103E0 (Bank02.asm:816) (BNE)

View File

@@ -36,12 +36,12 @@ endmacro
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
CalculateTimer: CalculateTimer:
LDA.w #$0000 LDA.w #$0000
STA.w ClockHours ; clear digit storage STA.l ClockHours ; clear digit storage
STA.w ClockHours+2 STA.l ClockHours+2
STA.w ClockMinutes STA.l ClockMinutes
STA.w ClockMinutes+2 STA.l ClockMinutes+2
STA.w ClockSeconds STA.l ClockSeconds
STA.w ClockSeconds+2 STA.l ClockSeconds+2
LDA.l TimerStyle : AND.w #$00FF : CMP.w #$0002 : BNE + ; Stopwatch Mode LDA.l TimerStyle : AND.w #$00FF : CMP.w #$0002 : BNE + ; Stopwatch Mode
%Sub32(NMIFrames,ChallengeTimer,ClockBuffer) %Sub32(NMIFrames,ChallengeTimer,ClockBuffer)
@@ -57,8 +57,8 @@ CalculateTimer:
LDA.l NMIFrames+2 : STA.l ChallengeTimer+2 LDA.l NMIFrames+2 : STA.l ChallengeTimer+2
RTS RTS
++ CMP.w #$0001 : BNE ++ ; Negative Time ++ CMP.w #$0001 : BNE ++ ; Negative Time
LDA.w ClockBuffer : EOR.w #$FFFF : !ADD.w #$0001 : STA.w ClockBuffer LDA.l ClockBuffer : EOR.w #$FFFF : !ADD.w #$0001 : STA.l ClockBuffer
LDA.w ClockBuffer+2 : EOR.w #$FFFF : ADC.w #$0000 : STA.w ClockBuffer+2 LDA.l ClockBuffer+2 : EOR.w #$FFFF : ADC.w #$0000 : STA.l ClockBuffer+2
LDA.w #$0001 : STA.l ClockStatus ; Set Negative Mode LDA.w #$0001 : STA.l ClockStatus ; Set Negative Mode
BRA .prepDigits BRA .prepDigits
++ CMP.w #$0002 : BNE ++ ; OHKO ++ CMP.w #$0002 : BNE ++ ; OHKO
@@ -92,12 +92,12 @@ CalculateTimer:
%Sub32(ClockBuffer,.second,ClockBuffer) : BRA - %Sub32(ClockBuffer,.second,ClockBuffer) : BRA -
+ +
LDA.w ClockHours : !ADD.w #$2490 : STA.w ClockHours ; convert decimal values to tiles LDA.l ClockHours : !ADD.w #$2490 : STA.l ClockHours ; convert decimal values to tiles
LDA.w ClockHours+2 : !ADD.w #$2490 : STA.w ClockHours+2 LDA.l ClockHours+2 : !ADD.w #$2490 : STA.l ClockHours+2
LDA.w ClockMinutes : !ADD.w #$2490 : STA.w ClockMinutes LDA.l ClockMinutes : !ADD.w #$2490 : STA.l ClockMinutes
LDA.w ClockMinutes+2 : !ADD.w #$2490 : STA.w ClockMinutes+2 LDA.l ClockMinutes+2 : !ADD.w #$2490 : STA.l ClockMinutes+2
LDA.w ClockSeconds : !ADD.w #$2490 : STA.w ClockSeconds LDA.l ClockSeconds : !ADD.w #$2490 : STA.l ClockSeconds
LDA.w ClockSeconds+2 : !ADD.w #$2490 : STA.w ClockSeconds+2 LDA.l ClockSeconds+2 : !ADD.w #$2490 : STA.l ClockSeconds+2
RTS RTS
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
.hour .hour
@@ -110,23 +110,22 @@ dw #$003C, #$0000
dw #$FFFF, #$7FFF dw #$FFFF, #$7FFF
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
DrawChallengeTimer: DrawChallengeTimer:
JSR.w CheckOHKO : BCC ++ JSR.w CheckOHKO : BCC ++
AND.w #$00FF : BEQ + AND.w #$00FF : BEQ +
LDA.w #$2807 : STA.l HUDTileMapBuffer+$90 LDA.w #$2807 : STA.l HUDTileMapBuffer+$90
LDA.w #$280A : STA.l HUDTileMapBuffer+$92 LDA.w #$280A : STA.l HUDTileMapBuffer+$92
LDA.w #$280B : STA.l HUDTileMapBuffer+$94 LDA.w #$280B : STA.l HUDTileMapBuffer+$94
LDA.w #$280C : STA.l HUDTileMapBuffer+$96 LDA.w #$280C : STA.l HUDTileMapBuffer+$96
RTL RTL
+ +
LDA.w #$247F : STA.l HUDTileMapBuffer+$90 LDA.w #$247F : STA.l HUDTileMapBuffer+$90
STA.l HUDTileMapBuffer+$92 STA.l HUDTileMapBuffer+$92
STA.l HUDTileMapBuffer+$94 STA.l HUDTileMapBuffer+$94
STA.l HUDTileMapBuffer+$96 STA.l HUDTileMapBuffer+$96
++ ++
LDA.l TimerStyle : BNE + : RTL : + ; Hud Timer
LDA.l TimerStyle : BNE + : RTL : + ; Hud Timer LDA.w #$2807 : STA.l HUDTileMapBuffer+$92
LDA.w #$2807 : STA.l HUDTileMapBuffer+$92 LDA.l ClockStatus : AND.w #$0002 : BEQ + ; DNF / OKHO
LDA.l ClockStatus : AND.w #$0002 : BEQ + ; DNF / OKHO
LDA.l TimeoutBehavior : AND.w #$00FF : BNE ++ ; DNF LDA.l TimeoutBehavior : AND.w #$00FF : BNE ++ ; DNF
LDA.w #$2808 : STA.l HUDTileMapBuffer+$94 LDA.w #$2808 : STA.l HUDTileMapBuffer+$94
@@ -148,15 +147,15 @@ DrawChallengeTimer:
LDA.l TimerRestart : BNE +++ : RTL : +++ LDA.l TimerRestart : BNE +++ : RTL : +++
BRA ++ BRA ++
+ ; Show Timer + ; Show Timer
LDA.l ClockStatus : AND.w #$0001 : !ADD.w #$2804 : STA.l HUDTileMapBuffer+$94 LDA.l ClockStatus : AND.w #$0001 : !ADD.w #$2804 : STA.l HUDTileMapBuffer+$94
LDA.w ClockHours+2 : STA.l HUDTileMapBuffer+$96 LDA.l ClockHours+2 : STA.l HUDTileMapBuffer+$96
LDA.w ClockHours : STA.l HUDTileMapBuffer+$98 LDA.l ClockHours : STA.l HUDTileMapBuffer+$98
LDA.w #$2806 : STA.l HUDTileMapBuffer+$9A LDA.w #$2806 : STA.l HUDTileMapBuffer+$9A
LDA.w ClockMinutes+2 : STA.l HUDTileMapBuffer+$9C LDA.l ClockMinutes+2 : STA.l HUDTileMapBuffer+$9C
LDA.w ClockMinutes : STA.l HUDTileMapBuffer+$9E LDA.l ClockMinutes : STA.l HUDTileMapBuffer+$9E
LDA.w #$2806 : STA.l HUDTileMapBuffer+$A0 LDA.w #$2806 : STA.l HUDTileMapBuffer+$A0
LDA.w ClockSeconds+2 : STA.l HUDTileMapBuffer+$A2 LDA.l ClockSeconds+2 : STA.l HUDTileMapBuffer+$A2
LDA.w ClockSeconds : STA.l HUDTileMapBuffer+$A4 LDA.l ClockSeconds : STA.l HUDTileMapBuffer+$A4
++ ++
LDA.b FrameCounter : AND.w #$001F : BNE + : JSR CalculateTimer : + LDA.b FrameCounter : AND.w #$001F : BNE + : JSR CalculateTimer : +
@@ -173,15 +172,14 @@ OHKOTimer:
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
CheckOHKO: CheckOHKO:
SEP #$20 SEP #$20
LDA.l OHKOFlag : CMP.l OHKOCached : BNE .change LDA.l OHKOFlag : CMP.l OHKOCached : BNE .change
REP #$20 REP #$21
CLC RTS
RTS .change
.change STA.l OHKOCached
STA.l OHKOCached LDA.b #$01 : STA.l UpdateHUDFlag
INC.w UpdateHUDFlag REP #$20
REP #$20 SEC
SEC
RTS RTS
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------

View File

@@ -4,8 +4,9 @@
; in: X(w) - Length in Tiles ; in: X(w) - Length in Tiles
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
DoToast: DoToast:
PHY : PHP PHY : PHP : PHA
LDY.w ToastBuffer LDA.l ToastBuffer : TAY
PLA
JSL.l WriteVRAMBlock JSL.l WriteVRAMBlock
PLP : PLY PLP : PLY
RTL RTL

View File

@@ -8,15 +8,15 @@
GetSpriteID: GetSpriteID:
JSL.l AttemptItemSubstitution JSL.l AttemptItemSubstitution
JSR.w ResolveLootID JSR.w ResolveLootID
CMP.b #$6D : BEQ .server_F0 ; Server Request F0 CMP.b #$6D : BEQ .server_F0 ; Server Request F0
CMP.b #$6E : BEQ .server_F1 ; Server Request F1 CMP.b #$6E : BEQ .server_F1 ; Server Request F1
CMP.b #$6F : BEQ .server_F2 ; Server Request F2 CMP.b #$6F : BEQ .server_F2 ; Server Request F2
BRA .normal BRA .normal
.server_F0 .server_F0
JSL.l ItemVisualServiceRequest_F0 JSL.l ItemVisualServiceRequest_F0
BRA .normal BRA .normal
.server_F1 .server_F1
JSL.l ItemVisualServiceRequest_F1 JSL.l ItemVisualServiceRequest_F1
BRA .normal BRA .normal
.server_F2 .server_F2
JSL.l ItemVisualServiceRequest_F2 JSL.l ItemVisualServiceRequest_F2
@@ -32,17 +32,18 @@ RTL
; out: A - Palette ; out: A - Palette
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
GetSpritePalette: GetSpritePalette:
JSL.l AttemptItemSubstitution JSL.l AttemptItemSubstitution
JSR.w ResolveLootID JSR.w ResolveLootID
.resolved .resolved
TAX TAX
LDA.l SpriteProperties_standing_palette, X : BIT #$80 : BNE .load_palette LDA.l SpriteProperties_standing_palette, X : BIT #$80 : BNE .load_palette
ASL ASL
RTL RTL
.load_palette .load_palette
JSL.l LoadItemPalette JSL.l LoadItemPalette
ASL ASL
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; PrepDynamicTile ; PrepDynamicTile
; in: SpriteID,X - Loot ID ; in: SpriteID,X - Loot ID
@@ -50,15 +51,15 @@ RTL
PrepDynamicTile: PrepDynamicTile:
PHX : PHY : PHB PHX : PHY : PHB
JSR.w ResolveLootID JSR.w ResolveLootID
- -
JSR.w LoadDynamicTileOAMTable JSR.w LoadDynamicTileOAMTable
JSL TransferItemReceiptToBuffer_using_ReceiptID JSL TransferItemReceiptToBuffer_using_ReceiptID
SEP #$30 SEP #$30
PLB : PLY : PLX PLB : PLY : PLX
RTL RTL
.loot_resolved .loot_resolved
PHX : PHY : PHB PHX : PHY : PHB
BRA - BRA -
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -67,34 +68,34 @@ RTL
; out: A - Loot ID ; out: A - Loot ID
;-------------------------------------------------------------------------------- 20/847B ;-------------------------------------------------------------------------------- 20/847B
LoadDynamicTileOAMTable: LoadDynamicTileOAMTable:
PHP PHP
REP #$20 REP #$20
LDA.w #$0000 : STA.l SpriteOAM : STA.l SpriteOAM+2 LDA.w #$0000 : STA.l SpriteOAM : STA.l SpriteOAM+2
LDA.w #$0200 : STA.l SpriteOAM+6 LDA.w #$0200 : STA.l SpriteOAM+6
SEP #$20 SEP #$20
LDA.b #$24 : STA.l SpriteOAM+4 LDA.b #$24 : STA.l SpriteOAM+4
LDA.w SpriteID,X LDA.w SpriteID,X
JSL.l GetSpritePalette_resolved JSL.l GetSpritePalette_resolved
STA.l SpriteOAM+5 : STA.l SpriteOAM+13 STA.l SpriteOAM+5 : STA.l SpriteOAM+13
PHX PHX
LDA.l SpriteProperties_standing_width,X : BEQ .narrow LDA.l SpriteProperties_standing_width,X : BEQ .narrow
BRA .done BRA .done
.narrow .narrow
REP #$20 REP #$20
LDA.w #$0400 : STA.l SpriteOAM+7 : STA.l SpriteOAM+14 LDA.w #$0400 : STA.l SpriteOAM+7 : STA.l SpriteOAM+14
LDA.w #$0000 : STA.l SpriteOAM+14 LDA.w #$0000 : STA.l SpriteOAM+14
LDA.w #$0800 : STA.l SpriteOAM+9 LDA.w #$0800 : STA.l SpriteOAM+9
LDA.w #$3400 : STA.l SpriteOAM+11 LDA.w #$3400 : STA.l SpriteOAM+11
SEP #$20 SEP #$20
LDA.b #$04 : STA.l SpriteOAM LDA.b #$04 : STA.l SpriteOAM
.done .done
TXA TXA
PLX PLX
PLP PLP
RTS RTS
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
; DrawDynamicTile ; DrawDynamicTile
@@ -104,66 +105,66 @@ RTS
; This wastes two OAM slots if you don't want a shadow - fix later - I wrote "fix later" over a year ago and it's still not fixed (Aug 6, 2017) - lol (May 25th, 2019) ; This wastes two OAM slots if you don't want a shadow - fix later - I wrote "fix later" over a year ago and it's still not fixed (Aug 6, 2017) - lol (May 25th, 2019)
;-------------------------------------------------------------------------------- 2084B8 ;-------------------------------------------------------------------------------- 2084B8
DrawDynamicTile: DrawDynamicTile:
PHX PHX
TAX TAX
LDA.l SpriteProperties_standing_width,X : BEQ .narrow LDA.l SpriteProperties_standing_width,X : BEQ .narrow
.full .full
PLX PLX
LDA.b #$01 : STA.b Scrap06 LDA.b #$01 : STA.b Scrap06
LDA.b #$0C : JSL.l OAM_AllocateFromRegionC LDA.b #$0C : JSL.l OAM_AllocateFromRegionC
LDA.b #$02 : PHA LDA.b #$02 : PHA
BRA .draw BRA .draw
.narrow .narrow
PLX PLX
LDA.b #$02 : STA.b Scrap06 LDA.b #$02 : STA.b Scrap06
LDA.b #$10 : JSL.l OAM_AllocateFromRegionC LDA.b #$10 : JSL.l OAM_AllocateFromRegionC
LDA.b #$03 : PHA LDA.b #$03 : PHA
.draw .draw
LDA.b #SpriteOAM>>0 : STA.b Scrap08 LDA.b #SpriteOAM>>0 : STA.b Scrap08
LDA.b #SpriteOAM>>8 : STA.b Scrap09 LDA.b #SpriteOAM>>8 : STA.b Scrap09
STZ.b Scrap07 STZ.b Scrap07
LDA.b #$7E : PHB : PHA : PLB LDA.b #$7E : PHB : PHA : PLB
LDA.b #$01 : STA.l SpriteSkipEOR LDA.b #$01 : STA.l SpriteSkipEOR
JSL Sprite_DrawMultiple_quantity_preset JSL Sprite_DrawMultiple_quantity_preset
LDA.b #$00 : STA.l SpriteSkipEOR LDA.b #$00 : STA.l SpriteSkipEOR
PLB PLB
LDA.b OAMPtr : !ADD.b #$08 : STA.b OAMPtr ; leave the pointer in the right spot to draw the shadow, if desired LDA.b OAMPtr : !ADD.b #$08 : STA.b OAMPtr ; leave the pointer in the right spot to draw the shadow, if desired
LDA.b OAMPtr+2 : INC #2 : STA.b OAMPtr+2 LDA.b OAMPtr+2 : INC #2 : STA.b OAMPtr+2
PLA PLA
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
DrawDynamicTileNoShadow: DrawDynamicTileNoShadow:
PHX PHX
TAX TAX
LDA.l SpriteProperties_standing_width,X : BEQ .narrow LDA.l SpriteProperties_standing_width,X : BEQ .narrow
.full .full
PLX PLX
LDA.b #$01 : STA.b Scrap06 LDA.b #$01 : STA.b Scrap06
LDA.b #$04 : JSL.l OAM_AllocateFromRegionC LDA.b #$04 : JSL.l OAM_AllocateFromRegionC
BRA .draw BRA .draw
.narrow .narrow
PLX PLX
LDA.b #$02 : STA.b Scrap06 LDA.b #$02 : STA.b Scrap06
LDA.b #$08 : JSL.l OAM_AllocateFromRegionC LDA.b #$08 : JSL.l OAM_AllocateFromRegionC
.draw .draw
LDA.b #SpriteOAM>>0 : STA.b Scrap08 LDA.b #SpriteOAM>>0 : STA.b Scrap08
LDA.b #SpriteOAM>>8 : STA.b Scrap09 LDA.b #SpriteOAM>>8 : STA.b Scrap09
STZ.b Scrap07 STZ.b Scrap07
LDA.b #$7E : PHB : PHA : PLB LDA.b #$7E : PHB : PHA : PLB
LDA.b #$01 : STA.l SpriteSkipEOR LDA.b #$01 : STA.l SpriteSkipEOR
JSL Sprite_DrawMultiple_quantity_preset JSL Sprite_DrawMultiple_quantity_preset
LDA.l Bob : BNE + : LDA.b #$00 : STA.l SpriteSkipEOR : + ; Bob fix is conditional LDA.l Bob : BNE + : LDA.b #$00 : STA.l SpriteSkipEOR : + ; Bob fix is conditional
PLB PLB
LDA.b OAMPtr : !ADD.b #$08 : STA.b OAMPtr LDA.b OAMPtr : !ADD.b #$08 : STA.b OAMPtr
LDA.b OAMPtr+2 : INC #2 : STA.b OAMPtr+2 LDA.b OAMPtr+2 : INC #2 : STA.b OAMPtr+2
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -172,12 +173,12 @@ LoadModifiedTileBufferAddress:
PHA PHA
LDA.l TileUploadOffsetOverride : BEQ + LDA.l TileUploadOffsetOverride : BEQ +
TAX TAX
LDY.w #$0002 LDY.w #$0002
LDA.w #$0000 : STA.l TileUploadOffsetOverride LDA.w #$0000 : STA.l TileUploadOffsetOverride
BRA .done BRA .done
+ +
LDX.w #$2D40 LDX.w #$2D40
LDY.w #$0002 LDY.w #$0002
.done .done
PLA PLA
RTL RTL
@@ -189,30 +190,30 @@ RTL
; out: Carry - 1 = On Screen, 0 = Off Screen ; out: Carry - 1 = On Screen, 0 = Off Screen
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
Sprite_IsOnscreen: Sprite_IsOnscreen:
JSR .check_sprite JSR .check_sprite
BCS + BCS +
REP #$20 REP #$20
LDA.b BG2H : PHA : !SUB.w #$0F : STA.b BG2H LDA.b BG2H : PHA : !SUB.w #$0F : STA.b BG2H
LDA.b BG2V : PHA : !SUB.w #$0F : STA.b BG2V LDA.b BG2V : PHA : !SUB.w #$0F : STA.b BG2V
SEP #$20 SEP #$20
JSR .check_sprite JSR .check_sprite
REP #$20 REP #$20
PLA : STA.b BG2V PLA : STA.b BG2V
PLA : STA.b BG2H PLA : STA.b BG2H
SEP #$20 SEP #$20
+ +
RTL RTL
.check_sprite .check_sprite
LDA.w SpritePosXLow, X : CMP.b BG2H LDA.w SpritePosXLow, X : CMP.b BG2H
LDA.w SpritePosXHigh, X : SBC.b BG2H+1 : BNE .offscreen LDA.w SpritePosXHigh, X : SBC.b BG2H+1 : BNE .offscreen
LDA.w SpritePosYLow, X : CMP.b BG2V LDA.w SpritePosYLow, X : CMP.b BG2V
LDA.w SpritePosYHigh, X : SBC.b BG2V+1 : BNE .offscreen LDA.w SpritePosYHigh, X : SBC.b BG2V+1 : BNE .offscreen
SEC SEC
RTS RTS
.offscreen .offscreen
CLC CLC
RTS RTS
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
@@ -278,27 +279,27 @@ RTL
; in: Y(w) - Address of Data to Copy ; in: Y(w) - Address of Data to Copy
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
WriteVRAMBlock: WriteVRAMBlock:
PHX PHX
LDX.w GFXStripes ; get pointer LDX.w GFXStripes ; get pointer
AND.w #$7F : STA.w GFXStripes+2, X : INX #2 ; set destination AND.w #$7F : STA.w GFXStripes+2, X : INX #2 ; set destination
PLA : ASL : AND.w #$3FFF : STA.w GFXStripes+2, X : INX #2 ; set length PLA : ASL : AND.w #$3FFF : STA.w GFXStripes+2, X : INX #2 ; set length
PHX PHX
TYX ; set X to source TYX ; set X to source
PHA PHA
TXA : !ADD #$1002 : TAY ; set Y to dest TXA : !ADD #$1002 : TAY ; set Y to dest
PLA PLA
;A is already the value we need for mvn ;A is already the value we need for mvn
MVN $7F7E ; currently we transfer from our buffers in 7F to the vram buffer in 7E MVN $7F7E ; currently we transfer from our buffers in 7F to the vram buffer in 7E
!ADD 1, s ; add the length in A to the stack pointer on the top of the stack !ADD 1, s ; add the length in A to the stack pointer on the top of the stack
PLX : TAX ; pull and promptly ignore, copying the value we just got over it PLX : TAX ; pull and promptly ignore, copying the value we just got over it
SEP #$20 ; set 8-bit accumulator SEP #$20 ; set 8-bit accumulator
LDA.b #$FF : STA.w GFXStripes+$02, X LDA.b #$FF : STA.w GFXStripes+$02, X
STX.w GFXStripes STX.w GFXStripes
LDA.b #01 : STA.w NMISTRIPES LDA.b #01 : STA.w NMISTRIPES
REP #$20 ; set 16-bit accumulator REP #$20 ; set 16-bit accumulator
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;Byte 1 byte 2 Byte 3 byte 4 ;Byte 1 byte 2 Byte 3 byte 4
@@ -318,126 +319,109 @@ RTL
;================================================================================ ;================================================================================
DynamicDrawCleanup: DynamicDrawCleanup:
PHA PHA
REP #$20 REP #$20
LDA.w #$F000 LDA.w #$F000
STA.w OAMBuffer STA.w OAMBuffer
STA.w OAMBuffer+$04 STA.w OAMBuffer+$04
STA.w OAMBuffer+$08 STA.w OAMBuffer+$08
STA.w OAMBuffer+$0C STA.w OAMBuffer+$0C
STZ.w OAMBuffer+$02 STZ.w OAMBuffer+$02
STZ.w OAMBuffer+$06 STZ.w OAMBuffer+$06
STZ.w OAMBuffer+$0A STZ.w OAMBuffer+$0A
STZ.w OAMBuffer+$0E STZ.w OAMBuffer+$0E
SEP #$20 SEP #$20
PLA PLA
RTL RTL
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
CheckReceivedItemPropertiesBeforeLoad: CheckReceivedItemPropertiesBeforeLoad:
PHX PHX
LDX.w CurrentSpriteSlot LDX.w CurrentSpriteSlot
LDA.w AncillaID,X : CMP.b #$29 : BEQ .falling_sprite LDA.w AncillaID,X : CMP.b #$29 : BEQ .falling_sprite
PLX PLX
LDA.b RoomIndex : BEQ .normalCode LDA.b RoomIndex : BEQ .normalCode
LDA.l RoomFade : BNE .load_palette LDA.l RoomFade : BNE .load_palette
.normalCode .normalCode
LDA.l SpriteProperties_chest_palette,X : BIT #$80 : BNE .load_palette LDA.l SpriteProperties_chest_palette,X : BIT #$80 : BNE .load_palette
RTL RTL
.load_palette .load_palette
JSL.l LoadItemPalette JSL.l LoadItemPalette
RTL RTL
.falling_sprite .falling_sprite
PLX PLX
LDA.l SpriteProperties_standing_palette,X : BIT #$80 : BNE .load_palette LDA.l SpriteProperties_standing_palette,X : BIT #$80 : BNE .load_palette
RTL RTL
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
LoadItemPalette: LoadItemPalette:
; In: X - Loot ID ; In: X - Loot ID
; Out: A - Sprite palette index ; Out: A - Sprite palette index
PHX : PHY : PHB PHX : PHY : PHB
LDA.b #PalettesVanillaBank>>16 : STA.b Scrap0C LDA.b #PalettesVanillaBank>>16 : STA.b Scrap0C
PEA $7E00 PEA $7E00
PLB : PLB PLB : PLB
REP #$30 REP #$30
TXA : ASL : TAX
CPX.w #$00C0 : BNE .not_prog_bombs LDA.l SpriteProperties_palette_addr,X : STA.b Scrap0A
LDA.l SpecialWeaponLevel : AND.w #$00FF : BNE + LDY.w #$000E
LDA.w #PalettesVanilla_blue_ice+$0E : BRA .continue ; none
+ DEC : BNE +
LDA.w #PalettesVanilla_green_blue_guard+$0E : BRA .continue ; fighter
+ DEC : BNE +
LDA.w #PalettesVanilla_blue_ice+$0E : BRA .continue ; master
+ DEC : BNE +
LDA.w #PalettesVanilla_red_melon+$0E : BRA .continue ; tempered
+ LDA.w #PalettesCustom_golden_bombs : BRA .continue ; gold
.not_prog_bombs
TXA : ASL : TAX
LDA.l SpriteProperties_palette_addr, X
.continue
STA.b Scrap0A
LDY.w #$000E
JSR.w AuxPaletteCheck : BCS .aux JSR.w AuxPaletteCheck : BCS .aux
LDA.w TransparencyFlag : BNE .SP05 LDA.w TransparencyFlag : BNE .SP05
- -
LDA.b [Scrap0A], Y LDA.b [Scrap0A], Y
STA.w PaletteBuffer+$0170,Y STA.w PaletteBuffer+$0170,Y
DEY #2 DEY #2
BPL - BPL -
LDA.w #$0003 LDA.w #$0003
BRA .done BRA .done
.SP05 .SP05
- -
LDA.b [Scrap0A], Y LDA.b [Scrap0A], Y
STA.w PaletteBuffer+$01B0,Y STA.w PaletteBuffer+$01B0,Y
DEY #2 DEY #2
BPL - BPL -
LDA.w #$0005 LDA.w #$0005
.done .done
SEP #$30 SEP #$30
PLB : PLY : PLX PLB : PLY : PLX
INC.b NMICGRAM INC.b NMICGRAM
RTL RTL
.aux .aux
LDA.w TransparencyFlag : BNE .SP05_aux LDA.w TransparencyFlag : BNE .SP05_aux
- -
LDA.b [Scrap0A], Y LDA.b [Scrap0A], Y
STA.w PaletteBufferAux+$0170,Y STA.w PaletteBufferAux+$0170,Y
DEY #2 DEY #2
BPL - BPL -
LDA.w #$0003 LDA.w #$0003
BRA .done BRA .done
.SP05_aux .SP05_aux
- -
LDA.b [Scrap0A], Y LDA.b [Scrap0A], Y
STA.w PaletteBufferAux+$01B0,Y STA.w PaletteBufferAux+$01B0,Y
DEY #2 DEY #2
BPL - BPL -
LDA.w #$0005 LDA.w #$0005
BRA .done BRA .done
TransferVRAMStripes: TransferVRAMStripes:
JSL.l TransferNewNameStripes JSL.l TransferNewNameStripes
JSL.l DoDungeonMapBossIcon JSL.l DoDungeonMapBossIcon
LDA.b NMISTRIPES : CMP.b #$01 ; What we wrote over LDA.b NMISTRIPES : CMP.b #$01 ; What we wrote over
RTL RTL
ItemReceiptWidthCheck: ItemReceiptWidthCheck:
PHX PHX
LDX.w CurrentSpriteSlot LDX.w CurrentSpriteSlot
LDA.w AncillaID,X : CMP.b #$29 : BEQ .falling_sprite LDA.w AncillaID,X : CMP.b #$29 : BEQ .falling_sprite
PLX PLX
LDA.l SpriteProperties_chest_width, X LDA.l SpriteProperties_chest_width, X
RTL RTL
.falling_sprite .falling_sprite
PLX PLX
LDA.l SpriteProperties_standing_width, X LDA.l SpriteProperties_standing_width, X
RTL RTL
AuxPaletteCheck: AuxPaletteCheck:
@@ -446,17 +430,17 @@ AuxPaletteCheck:
; We have to put an item's palette in the aux buffer in rooms where standing ; We have to put an item's palette in the aux buffer in rooms where standing
; item gfx are loaded in the middle of a fade-in/out such as the spiral staircase ; item gfx are loaded in the middle of a fade-in/out such as the spiral staircase
; fade for GT torch room and the Hera cage. ; fade for GT torch room and the Hera cage.
PHX PHX
SEP #$30 SEP #$30
LDA.w ItemReceiptMethod : BNE .main_buffer ; Never use aux if we're actually receiving an item LDA.w ItemReceiptMethod : BNE .main_buffer ; Never use aux if we're actually receiving an item
LDA.w RoomIndex : CMP.b #$8C : BEQ .aux_buffer ; GT torch/Hope room LDA.w RoomIndex : CMP.b #$8C : BEQ .aux_buffer ; GT torch/Hope room
LDA.w RoomIndex : CMP.b #$87 : BEQ .aux_buffer ; Hera cage/basement LDA.w RoomIndex : CMP.b #$87 : BEQ .aux_buffer ; Hera cage/basement
.main_buffer .main_buffer
REP #$31 REP #$31
PLX PLX
RTS RTS
.aux_buffer .aux_buffer
SEC SEC
REP #$30 REP #$30
PLX PLX
RTS RTS

View File

@@ -139,8 +139,6 @@ RoomTag_GetHeartForPrize = $81C709
RoomTag_GetHeartForPrize_spawn_prize = $81C731 RoomTag_GetHeartForPrize_spawn_prize = $81C731
RoomTag_GetHeartForPrize_delete_tag = $81C749 RoomTag_GetHeartForPrize_delete_tag = $81C749
Chicken_SpawnAvengerChicken = $86A7DB Chicken_SpawnAvengerChicken = $86A7DB
Link_UseHammer = $879F82
Link_UseBugNet = $87AFEE
Link_PerformOpenChest_no_replacement = $87B59F Link_PerformOpenChest_no_replacement = $87B59F
Sprite_EA_HeartContainer_main = $85EF47 Sprite_EA_HeartContainer_main = $85EF47
Ancilla_ExecuteAll = $88832B Ancilla_ExecuteAll = $88832B

View File

@@ -1,141 +0,0 @@
;--------------------------------------------------------------------------------
!ANCILLA_DAMAGE = "$06EC84"
; start with X = sprite index, A = ancilla type index
;--------------------------------------------------------------------------------
Ganon_CheckAncillaVulnerability:
PHA
LDA $0EE0, X : BNE .not_vulnerable_pla
PLA
PHX : PHA
LDA.l GanonVulnerabilityItem
TAX : PLA
CMP.l Ganon_CheckByAncilla, X : BNE +
PLX : BRA .vulnerable
+
PLX : PHA
LDA.l GanonVulnerabilityItem
CMP #$01 : BEQ .silver_arrows
CMP #$11 : BEQ .somaria
BRA .not_vulnerable_pla
.silver_arrows
PLA : CMP #$09 : BNE .not_vulnerable
LDA BowEquipment : CMP.b #$03 : !BGE +
LDA #$09 : BRA .not_vulnerable
+
BRA .vulnerable
.hammer
BRA .not_vulnerable_pla ; NYI
.golden_bee
BRA .not_vulnerable_pla ; NYI
.somaria
PLA : CMP #$01 : BEQ .vulnerable
CMP #$2C : BEQ .vulnerable
BRA .vulnerable
.vulnerable
PHX
LDA.l GanonVulnerabilityItem
TAX
LDA.l Ganon_IFrameDuration, X
PLX
STA $0EE0, X ; give the poor pig some iframes
LDA #$20 : STA $0F10, X
LDA #$09
RTL
.not_vulnerable_pla
PLA
.not_vulnerable
PHX : TAX
LDA.l !ANCILLA_DAMAGE, X
PLX
RTL
; end with X = sprite index, A = damage class
;--------------------------------------------------------------------------------
!ANCILLA_CHECK_SPRITE_DAMAGE_PRESET_CLASS = "$06ECE6"
;--------------------------------------------------------------------------------
Ganon_CheckPowderVulnerability: ; we know it's powder
LDA.l GanonVulnerabilityItem : CMP #$05 : BNE .normal ; ganon not vulnerable to powder
LDA $0E20, X : CMP #$D7 : BNE .normal ; not stunned ganon
LDA $0EE0, X : BNE .normal ; ganon has iframes
LDA.l Ganon_IFrameDuration+$05
STA $0EE0, X ; give the poor pig some iframes
LDA #$20 : STA $0F10, X
LDA #$09
BRA .done
.normal
LDA.b #$0A
.done
JSL.l !ANCILLA_CHECK_SPRITE_DAMAGE_PRESET_CLASS
RTL
;--------------------------------------------------------------------------------
Ganon_CheckBeeVulnerability: ; we know it's a bee
; X is bee sprite index
; Y is target sprite index
LDA.l GanonVulnerabilityItem : CMP #$10 : BNE .normal ; ganon not vulnerable to bee
LDA $0E20, Y : CMP #$D7 : BNE .normal ; not stunned ganon
LDA $0EE0, Y : BNE .normal ; ganon has iframes
LDA.l Ganon_IFrameDuration+$10
STA $0EE0, Y ; give the poor pig some iframes
LDA #$20 : STA $0F10, Y
LDA #$09
BRA .done
.normal
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$06 : BNE .regular_bee
LDA.w $0ED0, X
BRA .done
.regular_bee
LDA.b #$01
.done
TYX
JSL.l !ANCILLA_CHECK_SPRITE_DAMAGE_PRESET_CLASS
RTL
;--------------------------------------------------------------------------------
Ganon_CheckInvincible:
LDA $04C5 : CMP.b #$02 : BEQ .not_transparent
LDA $0E20, X : CMP #$D7 : BNE .transparent ; non-stunned ganon
LDA $0301 : AND.b #$0A : BEQ .transparent ; normal behavior if not hammer
LDA.l GanonVulnerabilityItem : CMP #$0C : BNE .transparent ; ganon not vulnerable to hammer
.not_transparent
LDA #$00 : RTL
.transparent
LDA #$01 : RTL
; return non-zero A if ganon should be invincible
;--------------------------------------------------------------------------------
Ganon_CheckHammerVulnerability: ; we know it's hammer
LDA.l GanonVulnerabilityItem : CMP #$0C : BNE .normal ; ganon not vulnerable to hammer
LDA $0E20, X : CMP #$D7 : BNE .normal ; not stunned ganon
LDA $0EE0, X : BNE .normal ; ganon has iframes
LDA.l Ganon_IFrameDuration+$0C
STA $0EE0, X ; give the poor pig some iframes
LDA #$20 : STA $0F10, X
LDA #$09 : STA $0CF2 ; set damage class to silver
SEC : RTL
.normal
CLC : RTL
; return carry set bit if stunned Ganon and Ganon vulnerable to hammer
;--------------------------------------------------------------------------------
CheckBeeBoss:
; Y is sprite index
LDA.l SpecialWeapons : AND.b #$7F : CMP #$06 : BNE .not_bee_mode
LDA #$00 : RTL
.not_bee_mode
LDA.l GanonVulnerabilityItem : CMP #$10 : BNE .normal ; ganon not vulnerable to bee
LDA $0E20, Y : CMP #$D7 : BNE .normal ; not stunned ganon
LDA #$00 : RTL
.normal
LDA $0B6B, Y : AND.b #$02
RTL
; return non-zero A if entity is a boss (and bee should not attack)
;--------------------------------------------------------------------------------
Ganon_CheckByAncilla:
db #$00 ; default behavior--we shouldn't be checking the table here anyway
db #$00, #$05, #$1F, #$07, #$00
db #$02, #$0B, #$19, #$18, #$1C
db #$00, #$00, #$00, #$00, #$00
db #$00, #$00, #$31, #$00, #$00
Ganon_IFrameDuration:
db #$00 ; default behavior--we shouldn't be here anyway
db #$00, #$00, #$00, #$34, #$00
db #$00, #$00, #$00, #$00, #$00
db #$00, #$00, #$00, #$00, #$00
db #$00, #$00, #$00, #$00, #$00
;--------------------------------------------------------------------------------

View File

@@ -9,11 +9,11 @@ SpawnZelda:
+ RTL + RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
EndRainState: EndRainState:
LDA.l InitProgressIndicator : BIT.b #$80 : BNE + ; check for instant post-aga LDA.l InitProgressIndicator : BIT.b #$80 : BNE + ; check for instant post-aga
LDA.b #$02 : STA.l ProgressIndicator LDA.b #$02 : STA.l ProgressIndicator
RTL RTL
+ +
LDA.b #$03 : STA.l ProgressIndicator LDA.b #$03 : STA.l ProgressIndicator
LDA.l InitLumberjackOW : STA.l OverworldEventDataWRAM+$02 LDA.l InitLumberjackOW : STA.l OverworldEventDataWRAM+$02
RTL RTL
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------