Compare commits
21 Commits
kara
...
use_text_t
| Author | SHA1 | Date | |
|---|---|---|---|
| 29d241bcbe | |||
|
|
dcb0a2b42d | ||
|
|
de8703e13f | ||
|
|
2daa8daaae | ||
|
|
ce8497e3d2 | ||
|
|
014b3a719a | ||
|
|
85581b6813 | ||
|
|
cec4e0430b | ||
|
|
d81a19c367 | ||
|
|
88ef1f385d | ||
|
|
7001767c9b | ||
|
|
7116cb6557 | ||
|
|
85e338ad67 | ||
|
|
032d15fba6 | ||
|
|
f133ce7159 | ||
|
|
c5d8c69396 | ||
|
|
f71759754e | ||
|
|
507ba379cf | ||
|
|
334f721a29 | ||
|
|
0fdb6ed133 | ||
|
|
cc36ccc0b1 |
@@ -155,9 +155,6 @@ incsrc toast.asm
|
||||
incsrc fastcredits.asm
|
||||
incsrc msu.asm
|
||||
incsrc dungeonmap.asm
|
||||
incsrc special_weapons.asm
|
||||
incsrc variable_ganon_vulnerability.asm
|
||||
incsrc item_on_b.asm
|
||||
incsrc hextodec.asm
|
||||
incsrc textrenderer.asm
|
||||
warnpc $A58000
|
||||
@@ -242,16 +239,6 @@ InvertedCastleHole: ;address used by front end. DO NOT MOVE!
|
||||
incbin "data/sheet73.gfx"
|
||||
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
|
||||
GFX_HUD_Palette:
|
||||
incbin "data/hudpalette.pal"
|
||||
|
||||
@@ -65,11 +65,10 @@ GiveBonkItem:
|
||||
PHY : LDY.b #$24 : JSL.l AddInventory : PLY ; do inventory processing for a small key
|
||||
LDA.l CurrentSmallKeys : INC A : STA.l CurrentSmallKeys
|
||||
LDA.b #$2F : JSL.l Sound_SetSfx3PanLong
|
||||
JSL CountBonkItem
|
||||
LDA.b #$01 : STA.l UpdateHUDFlag
|
||||
RTL
|
||||
.notKey
|
||||
PHY : TAY : JSL.l Link_ReceiveItem : PLY
|
||||
JSL CountBonkItem
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
LoadBonkItem:
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
|
||||
rm ../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
|
||||
|
||||
@@ -5,8 +5,6 @@ dw $0000, $7E4E, $6FF4, $1CF5, $7FFF, $1CE7, $7A10, $64A5
|
||||
dw $7FFF, $093B, $169F, $7E8D, $7FFF, $1CE7, $7A10, $64A5
|
||||
.golden_sword
|
||||
dw $0000, $033F, $7FFF, $2640, $7FFF, $1CE7, $7A10, $64A5
|
||||
.golden_bombs
|
||||
dw $0000, $7FFF, $27FF, $02BC, $4F5F, $1CE7, $2E9C, $14B6
|
||||
.fighter_shield
|
||||
dw $0000, $7FFF, $27FF, $5E2D, $7FFF, $1CE7, $7A10, $64A5
|
||||
.red_shield
|
||||
|
||||
@@ -143,11 +143,6 @@ SetEscapeAssist:
|
||||
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 SpecialWeapons : AND.b #$7F : CMP #$01 : BNE +
|
||||
LDA.l SpecialWeaponLevel : BEQ +
|
||||
LDA #$01 : STA InfiniteBombs
|
||||
+
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
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
61
data/textbytecharmap.txt
Normal 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
61
data/textwordcharmap.txt
Normal 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
|
||||
116
dialog.asm
116
dialog.asm
@@ -61,7 +61,7 @@ LoadDialogAddressIndirect:
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
FreeDungeonItemNotice:
|
||||
STA.w ScratchBufferV
|
||||
STA.l ScratchBufferV
|
||||
|
||||
PHA : PHX : PHY
|
||||
PHP
|
||||
@@ -70,59 +70,59 @@ FreeDungeonItemNotice:
|
||||
REP #$10 ; set 16-bit index registers
|
||||
PEI.b (Scrap00)
|
||||
LDA.b Scrap02 : PHA
|
||||
LDA.w ScratchBufferNV : PHA
|
||||
LDA.w ScratchBufferNV+1 : PHA
|
||||
LDA.l ScratchBufferNV : PHA
|
||||
LDA.l ScratchBufferNV+1 : PHA
|
||||
;--------------------------------
|
||||
|
||||
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.w ScratchBufferV : CMP.b #$24 : BNE + ; general small key
|
||||
LDA.l ScratchBufferV : CMP.b #$24 : BNE + ; general small key
|
||||
%CopyDialog(Notice_SmallKeyOf)
|
||||
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
|
||||
%CopyDialog(Notice_Self)
|
||||
JMP .done
|
||||
+ : 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)
|
||||
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
|
||||
%CopyDialog(Notice_Self)
|
||||
JMP .done
|
||||
+ : 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)
|
||||
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
|
||||
%CopyDialog(Notice_Self)
|
||||
JMP .done
|
||||
+ : 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)
|
||||
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
|
||||
%CopyDialog(Notice_Self)
|
||||
JMP .done
|
||||
+
|
||||
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...
|
||||
%CopyDialog(Notice_MapOf)
|
||||
JMP .dungeon
|
||||
+ : 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)
|
||||
JMP .dungeon
|
||||
+ : 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)
|
||||
JMP .dungeon
|
||||
+ : 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.w ScratchBufferV : CMP.b #$AF : BNE ++ : JMP .skip : ++
|
||||
LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of...
|
||||
LDA.l ScratchBufferV : CMP.b #$AF : BNE ++ : JMP .skip : ++
|
||||
%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
|
||||
+ : 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 +
|
||||
%CopyDialog(Notice_Crystal)
|
||||
JMP .crystal
|
||||
@@ -131,14 +131,14 @@ FreeDungeonItemNotice:
|
||||
|
||||
.dungeon
|
||||
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
|
||||
LDA.w ScratchBufferV
|
||||
LDA.l ScratchBufferV
|
||||
AND.b #$0F
|
||||
STA.w ScratchBufferNV+1
|
||||
LDA.w ScratchBufferNV : BEQ +
|
||||
LDA.w ScratchBufferNV
|
||||
LDA.b #$0F : !SUB.w ScratchBufferNV+1 : STA.w ScratchBufferNV+1 ; flip the values for small keys
|
||||
STA.l ScratchBufferNV+1
|
||||
LDA.l ScratchBufferNV : BEQ +
|
||||
LDA.l ScratchBufferNV
|
||||
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
|
||||
REP #$20
|
||||
LDA.l DungeonItemIDMap,X : CMP.w #$0003 : BCC .hc_sewers
|
||||
@@ -152,7 +152,7 @@ FreeDungeonItemNotice:
|
||||
JMP.w .done
|
||||
+
|
||||
SEP #$20
|
||||
LDA.w ScratchBufferNV+1
|
||||
LDA.l ScratchBufferNV+1
|
||||
CMP.b #$00 : BNE + ; ...light world
|
||||
%CopyDialog(Notice_LightWorld) : JMP .done
|
||||
+ : CMP.b #$01 : BNE + ; ...dark world
|
||||
@@ -190,7 +190,7 @@ FreeDungeonItemNotice:
|
||||
|
||||
.crystal
|
||||
LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer
|
||||
LDA.w ScratchBufferV
|
||||
LDA.l ScratchBufferV
|
||||
AND.b #$0F ; looking at low bits only
|
||||
CMP.b #$00 : BNE +
|
||||
%CopyDialog(Notice_Six) : JMP .done
|
||||
@@ -216,8 +216,8 @@ FreeDungeonItemNotice:
|
||||
|
||||
;--------------------------------
|
||||
.skip
|
||||
PLA : STA.w ScratchBufferNV+1
|
||||
PLA : STA.w ScratchBufferNV
|
||||
PLA : STA.l ScratchBufferNV+1
|
||||
PLA : STA.l ScratchBufferNV
|
||||
PLA : STA.b Scrap02
|
||||
REP #$20
|
||||
PLA : STA.b Scrap00
|
||||
@@ -248,10 +248,7 @@ RTL
|
||||
DialogFairyThrow:
|
||||
LDA.l Restrict_Ponds : BEQ .normal
|
||||
LDA.l BottleContentsOne
|
||||
ORA.l BottleContentsTwo
|
||||
ORA.l BottleContentsThree
|
||||
ORA.l BottleContentsFour
|
||||
BNE .normal
|
||||
ORA.l BottleContentsTwo : ORA.l BottleContentsThree : ORA.l BottleContentsFour : BNE .normal
|
||||
|
||||
.noInventory
|
||||
LDA.w SpriteActivity, X : !ADD #$08 : STA.w SpriteActivity, X
|
||||
@@ -287,57 +284,24 @@ DialogGanon2:
|
||||
|
||||
REP #$20
|
||||
BCS +
|
||||
LDA.w #$018D : JMP .done
|
||||
LDA.w #$018D : BRA ++
|
||||
+
|
||||
LDA.l GanonVulnerabilityItem : AND #$00FF : BNE .special_item
|
||||
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
|
||||
LDA.w #$0192 : JMP .done
|
||||
LDA.w #$0192 : BRA ++
|
||||
+
|
||||
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
|
||||
LDA.w #$0194 : JMP .done
|
||||
LDA.w #$0194 : BRA ++
|
||||
+
|
||||
BIT.w #$0080 : BEQ + ; branch if no bow
|
||||
LDA.w #$0193 : JMP .done
|
||||
LDA.w #$0193 : BRA ++
|
||||
+
|
||||
LDA.w #$016E : JMP .done
|
||||
.special_item
|
||||
CMP.w #$0001 : BEQ .silver_arrows
|
||||
CMP.w #$0004 : BEQ .bombs
|
||||
CMP.w #$0005 : BEQ .powder
|
||||
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
|
||||
LDA.w #$016E
|
||||
++
|
||||
STA.w TextID
|
||||
SEP #$20
|
||||
JSL.l Sprite_ShowMessageMinimal_Alt
|
||||
@@ -350,8 +314,11 @@ DialogEtherTablet:
|
||||
PLA : JML Sprite_ShowMessageUnconditional ; Wacky Hylian Text
|
||||
+
|
||||
BIT.b Joy1A_New : BVC - ; Show normal text if Y is not pressed
|
||||
JSL CheckTabletSword : BMI .yesText
|
||||
CMP.b #$02 : !BGE .noText
|
||||
LDA.l AllowHammerTablets : BEQ ++
|
||||
LDA.l HammerEquipment : BEQ .yesText : BRA .noText
|
||||
++
|
||||
LDA.l SwordEquipment : CMP.b #$FF : BEQ .yesText : CMP.b #$02 : BCS .noText
|
||||
;++
|
||||
.yesText
|
||||
PLA
|
||||
LDA.b #$0C
|
||||
@@ -369,8 +336,11 @@ DialogBombosTablet:
|
||||
PLA : JML Sprite_ShowMessageUnconditional ; Wacky Hylian Text
|
||||
+
|
||||
BIT.b Joy1A_New : BVC - ; Show normal text if Y is not pressed
|
||||
JSL CheckTabletSword : BMI .yesText
|
||||
CMP.b #$02 : !BGE .noText
|
||||
LDA.l AllowHammerTablets : BEQ ++
|
||||
LDA.l HammerEquipment : BEQ .yesText : BRA .noText
|
||||
++
|
||||
LDA.l SwordEquipment : CMP.b #$FF : BEQ .yesText : CMP.b #$02 : !BGE .noText
|
||||
;++
|
||||
.yesText
|
||||
PLA
|
||||
LDA.b #$0D
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
;--------------------------------------------------------------------------------
|
||||
SpawnDungeonPrize:
|
||||
PHX : PHB
|
||||
TAX
|
||||
LDA.b $06,S : STA.b ScrapBuffer72 ; Store current RoomTag index
|
||||
TXA
|
||||
JSL.l AttemptItemSubstitution
|
||||
JSL.l ResolveLootIDLong
|
||||
STA.w ItemReceiptID
|
||||
@@ -14,6 +17,7 @@ SpawnDungeonPrize:
|
||||
LDA.w ItemReceiptID
|
||||
STA.w AncillaGet,X : STA.w SpriteID,X
|
||||
JSR.w AddDungeonPrizeAncilla
|
||||
LDX.b ScrapBuffer72 : STZ.b RoomTag,X
|
||||
.failed_spawn
|
||||
PLB : PLX
|
||||
RTL
|
||||
|
||||
@@ -155,7 +155,7 @@ JML.l AllowStartFromExitReturn
|
||||
STZ.b SubSubModule
|
||||
STZ.w DeathReloadFlag
|
||||
STZ.w RespawnFlag
|
||||
INC.w UpdateHUDFlag
|
||||
LDA.b #$01 : STA.l UpdateHUDFlag
|
||||
|
||||
JSL Equipment_SearchForEquippedItemLong
|
||||
JSL HUD_RebuildLong2
|
||||
|
||||
@@ -22,7 +22,7 @@ JML.l ReturnFromOnDrawHud
|
||||
OnDungeonEntrance:
|
||||
STA.l PegColor ; thing we wrote over
|
||||
JSL MaybeFlagDungeonTotalsEntrance
|
||||
INC.w UpdateHUDFlag
|
||||
LDA.w #$0001 : STA.l UpdateHUDFlag
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OnDungeonBossExit:
|
||||
@@ -46,7 +46,7 @@ OnDungeonExit:
|
||||
STA.w DungeonID : STZ.w Map16ChangeIndex ; thing we wrote over
|
||||
|
||||
PHA : PHP
|
||||
INC.w UpdateHUDFlag
|
||||
LDA.w #$0001 : STA.l UpdateHUDFlag
|
||||
JSL.l HUD_RebuildLong
|
||||
JSL.l FloodGateResetInner
|
||||
JSL.l SetSilverBowMode
|
||||
@@ -226,7 +226,7 @@ OnOWTransition:
|
||||
PHP
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
LDA.b #$FF : STA.l RNGLockIn ; clear lock-in
|
||||
INC.w UpdateHUDFlag
|
||||
LDA.b #$01 : STA.l UpdateHUDFlag
|
||||
PLP
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -308,16 +308,15 @@ DrawPlayerFileShared:
|
||||
%fs_drawBottle(EquipmentSRAM+$1F,9,23)
|
||||
|
||||
; Sword
|
||||
LDA.l SpecialWeapons : AND.w #$007F : CMP #$0001 : BEQ .bombSword
|
||||
LDA.l EquipmentSRAM+$19 : AND.w #$00FF : BNE +
|
||||
%fs_drawItemGray(3,26,FileSelectItems_fighters_sword)
|
||||
JMP ++
|
||||
BRA ++
|
||||
+ : DEC : BNE +
|
||||
%fs_drawItem(3,26,FileSelectItems_fighters_sword)
|
||||
JMP ++
|
||||
BRA ++
|
||||
+ : DEC : BNE +
|
||||
%fs_drawItem(3,26,FileSelectItems_master_sword)
|
||||
JMP ++
|
||||
BRA ++
|
||||
+ : DEC : BNE +
|
||||
%fs_drawItem(3,26,FileSelectItems_tempered_sword)
|
||||
BRA ++
|
||||
@@ -327,29 +326,6 @@ DrawPlayerFileShared:
|
||||
+
|
||||
; a sword value above 4 is either corrupted or 0xFF (a.k.a. swordless)
|
||||
%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
|
||||
@@ -628,18 +604,6 @@ FileSelectItems:
|
||||
.good_bee_bottle
|
||||
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:
|
||||
LDA.w #$02DB|!FS_COLOR_GREEN : %fs_draw16x8(0,10)
|
||||
@@ -650,30 +614,11 @@ FileSelectDrawHudBar:
|
||||
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.l SpecialWeapons : AND.w #$007F : CMP.w #$0001 : BEQ .colorBombs
|
||||
LDA.w #$02CB|!FS_COLOR_BLUE : %fs_draw16x8(0,14)
|
||||
LDA.l BombsEquipmentSRAM : AND.w #$00FF
|
||||
JSL.l HUDHex2Digit_Long
|
||||
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)
|
||||
BRA ++
|
||||
|
||||
.colorBombs
|
||||
LDA.l SpecialWeaponLevelSRAM : AND.w #$00FF : BNE +
|
||||
; no bombs, draw no icon
|
||||
BRA ++
|
||||
+ : DEC : BNE +
|
||||
LDA.w #$02CB|!FS_COLOR_GREEN : %fs_draw16x8(0,14)
|
||||
BRA ++
|
||||
+ : DEC : BNE +
|
||||
LDA.w #$02CB|!FS_COLOR_BLUE : %fs_draw16x8(0,14)
|
||||
BRA ++
|
||||
+ : 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)
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
14
hardmode.asm
14
hardmode.asm
@@ -76,18 +76,12 @@ GetItemDamageValue:
|
||||
CPX.b #$04 : BEQ .boomerang
|
||||
CPX.b #$05 : BEQ .boomerang
|
||||
CPX.b #$39 : BEQ .hookshot
|
||||
CPX.b #$3B : BEQ .hookshot
|
||||
CPX.b #$3C : 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
|
||||
CPX.b #$3b : BEQ .hookshot
|
||||
CPX.b #$3c : BEQ .hookshot
|
||||
CPX.b #$3d : BEQ .hookshot
|
||||
|
||||
.normal
|
||||
LDA.l $8DB8F1, X ; what we wrote over
|
||||
LDA.l $8DB8F1,x ;what we wrote over
|
||||
RTL
|
||||
.boomerang
|
||||
LDA.l StunItemAction : AND.b #$01 : BNE .normal
|
||||
|
||||
@@ -45,9 +45,11 @@ DrawHeartPieceGFX:
|
||||
LDA.w SpriteControl, X : ORA.b #$20 : STA.w SpriteControl, X
|
||||
PLA
|
||||
JSL.l DrawDynamicTile
|
||||
REP #$21
|
||||
LDA.b Scrap00
|
||||
CLC : ADC.b #$04
|
||||
ADC.w #$0004
|
||||
STA.b Scrap00
|
||||
SEP #$20
|
||||
JSL.l Sprite_DrawShadowLong
|
||||
BRA .done
|
||||
+
|
||||
|
||||
160
hooks.asm
160
hooks.asm
@@ -1000,7 +1000,7 @@ org $81C517 : JSL.l CheckDungeonCompletion
|
||||
org $81C523 : JSL.l CheckDungeonCompletion
|
||||
org $81C710 : JSL.l CheckSpawnPrize
|
||||
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 $88C415 : JSL.l PendantMusicCheck
|
||||
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
|
||||
;--------------------------------------------------------------------------------
|
||||
; 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)
|
||||
; LDX.w #HUD_TileMap
|
||||
; org $8DFA9C ; <- 6FA9C - headsup_display.asm : 629 (MVN $0D, $7E ; $Transfer 0x014A bytes from $6FE77 -> $7EC700)
|
||||
; MVN $A17E
|
||||
org $8DFA96 ; <- 6FA96 - headsup_display.asm : 626 (LDX.w #.hud_tilemap)
|
||||
LDX.w #HUD_TileMap
|
||||
org $8DFA9C ; <- 6FA9C - headsup_display.asm : 629 (MVN $0D, $7E ; $Transfer 0x014A bytes from $6FE77 -> $7EC700)
|
||||
MVN $A17E
|
||||
;--------------------------------------------------------------------------------
|
||||
org $8DFB1F : JSL CheckHUDSilverArrows
|
||||
org $8DFB29 : BRA UpdateHUDBuffer_update_item_check_arrows
|
||||
@@ -1421,7 +1420,7 @@ RebuildHUD_update_long:
|
||||
JSR.w RebuildHUD_update : RTL
|
||||
|
||||
RefreshIcon_UpdateHUD:
|
||||
INC.w UpdateHUDFlag
|
||||
LDA.b #$01 : STA.l UpdateHUDFlag
|
||||
JSR.w RebuildHUD
|
||||
JSR.w UpdateEquippedItem
|
||||
RTS
|
||||
@@ -2450,153 +2449,6 @@ JSL FixJingleGlitch
|
||||
org $81C65F
|
||||
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
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
ProcessMenuButtons:
|
||||
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 #$80 : BNE .b_pressed ; check for P1 B-button
|
||||
LDA.b Joy1A_All : BIT.b #$20 : BNE .sel_held
|
||||
.sel_unheld
|
||||
LDA.l HudFlag : AND.b #$60 : BEQ +
|
||||
@@ -30,18 +29,6 @@ RTL
|
||||
STA.l HudFlag
|
||||
JSL.l MaybePlaySelectSFX
|
||||
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
|
||||
.y_pressed ; Note: used as entry point by quickswap code. Must preserve X.
|
||||
LDA.b #$10 : STA.w MenuBlink
|
||||
@@ -108,27 +95,6 @@ RTL
|
||||
SEC
|
||||
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:
|
||||
@@ -279,10 +245,9 @@ StampItem:
|
||||
LDA.b [Scrap0B] : BNE .skip
|
||||
INC.b Scrap0B : INC.b Scrap0B
|
||||
LDA.b [Scrap0B] : BNE .skip
|
||||
LDA.l NMIFrames+2 : STA.b [Scrap0B]
|
||||
DEC.b Scrap0B : DEC.b Scrap0B
|
||||
LDA.l NMIFrames : STA.b [Scrap0B]
|
||||
INC.b Scrap0B : INC.b Scrap0B
|
||||
LDA.l NMIFrames+2 : STA.b [Scrap0B]
|
||||
.skip
|
||||
SEP #$20
|
||||
RTS
|
||||
@@ -331,24 +296,11 @@ RTS
|
||||
IncrementBossSword:
|
||||
PHX
|
||||
LDA.l StatsLocked : BNE .done
|
||||
|
||||
.start
|
||||
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BEQ .check_special_weapon
|
||||
CMP.b #$03 : BEQ .check_special_weapon
|
||||
CMP.b #$04 : BEQ .check_special_weapon
|
||||
CMP.b #$05 : BEQ .check_special_weapon
|
||||
CMP.b #$08 : BEQ .check_special_weapon
|
||||
|
||||
.check_sword
|
||||
LDA.l SwordEquipment : CMP.b #$FF : BNE +
|
||||
BRA .none
|
||||
+
|
||||
ASL : TAX
|
||||
JMP.w (.vectors,X)
|
||||
.check_special_weapon
|
||||
LDA.l SpecialWeaponLevel
|
||||
ASL : TAX
|
||||
JMP.w (.vectors,X)
|
||||
|
||||
.vectors
|
||||
dw .none
|
||||
@@ -356,7 +308,6 @@ IncrementBossSword:
|
||||
dw .master
|
||||
dw .tempered
|
||||
dw .golden
|
||||
dw .golden
|
||||
|
||||
.none
|
||||
LDA.l SwordlessBossKills : INC : STA.l SwordlessBossKills
|
||||
@@ -394,7 +345,11 @@ IncrementFinalSword:
|
||||
REP #$20
|
||||
LDA.w RoomIndex : BNE .done
|
||||
SEP #$20
|
||||
JMP IncrementBossSword_start
|
||||
LDA.l SwordEquipment : CMP.b #$FF : BNE +
|
||||
BRA IncrementBossSword_none
|
||||
+
|
||||
ASL : TAX
|
||||
JMP.w (IncrementBossSword_vectors,X)
|
||||
.done
|
||||
SEP #$20
|
||||
PLX
|
||||
@@ -409,7 +364,7 @@ Link_ReceiveItem_HUDRefresh:
|
||||
+
|
||||
|
||||
JSL.l HUD_RefreshIconLong ; thing we wrote over
|
||||
INC.w UpdateHUDFlag
|
||||
LDA.b #$01 : STA.l UpdateHUDFlag
|
||||
JSL.l PostItemGet
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -424,7 +379,7 @@ HandleBombAbsorbtion:
|
||||
LDA.b #$04 : STA.w ItemCursor ; set selected item to bombs
|
||||
LDA.b #$01 : STA.w CurrentYItem ; set selected item to bombs
|
||||
JSL.l HUD_RebuildLong
|
||||
INC.w UpdateHUDFlag
|
||||
LDA.b #$01 : STA.l UpdateHUDFlag
|
||||
+
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -447,7 +402,6 @@ AddYMarker:
|
||||
+ CMP.w #$10 : BEQ .drawJarMarker
|
||||
|
||||
.drawNormal
|
||||
JSR CanPressB : BCS .drawBBubble
|
||||
LDA.w #$7C60
|
||||
BRA .drawTile
|
||||
|
||||
@@ -455,20 +409,12 @@ AddYMarker:
|
||||
LDA.w MenuBlink : AND.w #$0020 : BNE .drawXBubble
|
||||
|
||||
.drawYBubble
|
||||
JSR CanPressB : BCC .drawY
|
||||
LDA.w MenuBlink : AND.w #$0020 : BNE .drawBBubble
|
||||
.drawY
|
||||
LDA.w #$3D4F
|
||||
BRA .drawTile
|
||||
|
||||
.drawXBubble
|
||||
JSR MakeCircleBlue
|
||||
LDA.w #$2D3E
|
||||
BRA .drawTile
|
||||
|
||||
.drawBBubble
|
||||
JSR MakeCircleRed
|
||||
LDA.w #$293F
|
||||
|
||||
.drawTile
|
||||
STA.w $FFC4, Y
|
||||
@@ -497,24 +443,6 @@ MakeCircleBlue:
|
||||
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
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -806,8 +734,7 @@ SpawnShovelItem:
|
||||
AND.b #$F0 : STA.w SpritePosXLow, Y
|
||||
LDA.b LinkPosX+1 : ADC.b #$00 : STA.w SpritePosXHigh, Y
|
||||
|
||||
LDA.b LinkPosY : !ADD.b #$16
|
||||
AND.b #$F0 : STA.w SpritePosYLow, Y
|
||||
LDA.b LinkPosY : !ADD.b #$16 : AND.b #$F0 : STA.w SpritePosYLow, Y
|
||||
LDA.b LinkPosY+1 : ADC.b #$00 : STA.w SpritePosYHigh, Y
|
||||
|
||||
LDA.b #$00 : STA.w SpriteLayer, Y
|
||||
|
||||
@@ -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
|
||||
@@ -328,9 +328,9 @@ endmacro
|
||||
%ReceiptProps($BD, -4, 0, $49, $F36A, $FF, skip, skip) ; BD -
|
||||
%ReceiptProps($BE, -4, 0, $49, $F36A, $FF, skip, skip) ; BE -
|
||||
%ReceiptProps($BF, -4, 0, $49, $F36A, $FF, skip, skip) ; BF -
|
||||
%ReceiptProps($C0, -4, 0, $13, $F36A, $FF, prog_weapon, skip) ; C0 - Progressive Bombs
|
||||
%ReceiptProps($C1, -4, 4, $07, $F36A, $FF, prog_weapon, skip) ; C1 - Progressive Cane
|
||||
%ReceiptProps($C2, -4, 0, $27, $F36A, $FF, prog_weapon, skip) ; C2 - Progressive Bug Net
|
||||
%ReceiptProps($C0, -4, 0, $49, $F36A, $FF, skip, skip) ; C0 -
|
||||
%ReceiptProps($C1, -4, 0, $49, $F36A, $FF, skip, skip) ; C1 -
|
||||
%ReceiptProps($C2, -4, 0, $49, $F36A, $FF, skip, skip) ; C2 -
|
||||
%ReceiptProps($C3, -4, 0, $49, $F36A, $FF, skip, skip) ; C3 -
|
||||
%ReceiptProps($C4, -4, 0, $49, $F36A, $FF, skip, skip) ; C4 -
|
||||
%ReceiptProps($C5, -4, 0, $49, $F36A, $FF, skip, skip) ; C5 -
|
||||
@@ -607,9 +607,9 @@ endmacro
|
||||
%SpriteProps($BD, 2, 2, $04, $04, $0000) ; BD -
|
||||
%SpriteProps($BE, 2, 2, $04, $04, $0000) ; BE -
|
||||
%SpriteProps($BF, 2, 2, $04, $04, $0000) ; BF -
|
||||
%SpriteProps($C0, 2, 2, $FF, $FF, PalettesVanilla_blue_ice+$0E) ; C0 - Progressive Bombs
|
||||
%SpriteProps($C1, 0, 0, $05, $05, PalettesCustom_red_shield) ; C1 - Progressive Cane
|
||||
%SpriteProps($C2, 2, 2, $01, $01, PalettesVanilla_red_melon+$0E) ; C2 - Progressive Bug Net
|
||||
%SpriteProps($C0, 2, 2, $04, $04, $0000) ; C0 -
|
||||
%SpriteProps($C1, 2, 2, $04, $04, $0000) ; C1 -
|
||||
%SpriteProps($C2, 2, 2, $04, $04, $0000) ; C2 -
|
||||
%SpriteProps($C3, 2, 2, $04, $04, $0000) ; C3 -
|
||||
%SpriteProps($C4, 2, 2, $04, $04, $0000) ; C4 -
|
||||
%SpriteProps($C5, 2, 2, $04, $04, $0000) ; C5 -
|
||||
@@ -764,7 +764,7 @@ endmacro
|
||||
%InventoryItem($46, $0001, $0000, $0000) ; 46 - 300 rupees
|
||||
%InventoryItem($47, $0001, $0000, $0000) ; 47 - 20 rupees green
|
||||
%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($4B, $0089, BootsTime, $0000) ; 4B - Boots
|
||||
%InventoryItem($4C, $0015, $0000, CapacityUpgrades) ; 4C - Bomb capacity (50)
|
||||
@@ -883,9 +883,9 @@ endmacro
|
||||
%InventoryItem($BD, $0001, $0000, $0000) ; BD -
|
||||
%InventoryItem($BE, $0001, $0000, $0000) ; BE -
|
||||
%InventoryItem($BF, $0001, $0000, $0000) ; BF -
|
||||
%InventoryItem($C0, $0015, SwordTime, $0000) ; C0 - Progressive Bombs
|
||||
%InventoryItem($C1, $0085, SwordTime, $0000) ; C1 - Progressive Cane
|
||||
%InventoryItem($C2, $0085, SwordTime, $0000) ; C2 - Progressive Bug Net
|
||||
%InventoryItem($C0, $0001, $0000, $0000) ; C0 -
|
||||
%InventoryItem($C1, $0001, $0000, $0000) ; C1 -
|
||||
%InventoryItem($C2, $0001, $0000, $0000) ; C2 -
|
||||
%InventoryItem($C3, $0001, $0000, $0000) ; C3 -
|
||||
%InventoryItem($C4, $0001, $0000, $0000) ; C4 -
|
||||
%InventoryItem($C5, $0001, $0000, $0000) ; C5 -
|
||||
@@ -1147,9 +1147,9 @@ ItemReceiptGraphicsOffsets:
|
||||
dw $0 ; BD -
|
||||
dw $0 ; BE -
|
||||
dw $0 ; BF -
|
||||
dw BigDecompressionBuffer+$1080 ; C0 - Progressive Bombs
|
||||
dw BigDecompressionBuffer+$1C40 ; C1 - Progressive Cane
|
||||
dw BigDecompressionBuffer+$0860 ; C2 - Progressive Bug Net
|
||||
dw $0 ; C0 -
|
||||
dw $0 ; C1 -
|
||||
dw $0 ; C2 -
|
||||
dw $0 ; C3 -
|
||||
dw $0 ; C4 -
|
||||
dw $0 ; C5 -
|
||||
@@ -1417,9 +1417,9 @@ StandingItemGraphicsOffsets:
|
||||
dw $0 ; BD -
|
||||
dw $0 ; BE -
|
||||
dw $0 ; BF -
|
||||
dw BigDecompressionBuffer+$1080 ; C0 - Progressive Bombs
|
||||
dw BigDecompressionBuffer+$1C40 ; C1 - Progressive Cane
|
||||
dw BigDecompressionBuffer+$0860 ; C2 - Progressive Bug Net
|
||||
dw $0 ; C0 -
|
||||
dw $0 ; C1 -
|
||||
dw $0 ; C2 -
|
||||
dw $0 ; C3 -
|
||||
dw $0 ; C4 -
|
||||
dw $0 ; C5 -
|
||||
|
||||
130
itemtext.asm
130
itemtext.asm
@@ -1,147 +1,149 @@
|
||||
table "data/textwordcharmap.txt"
|
||||
|
||||
org $B28000
|
||||
; You have found
|
||||
; the map of
|
||||
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 $75, $00, $E3, $00, $D7, $00, $D4, $00, $FF, $00, $DC, $00, $D0, $00, $DF, $00, $FF, $00, $DE, $00, $D5
|
||||
dw #$7F7F
|
||||
db $74 : dw "You have found"
|
||||
db $75 : dw "the map of"
|
||||
dw $7F7F
|
||||
|
||||
; You have found
|
||||
; the compass of
|
||||
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 $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
|
||||
dw #$7F7F
|
||||
db $74 : dw "You have found"
|
||||
db $75 : dw "the compass of"
|
||||
dw $7F7F
|
||||
|
||||
; Oh look! it's
|
||||
; the big key of
|
||||
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 $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
|
||||
dw #$7F7F
|
||||
db $74 : dw "Oh look! it's"
|
||||
db $75 : dw "the big key of"
|
||||
dw $7F7F
|
||||
|
||||
; this is a
|
||||
; This is a
|
||||
; small key to
|
||||
Notice_SmallKeyOf:
|
||||
db $74, $00, $BD, $00, $D7, $00, $D8, $00, $E2, $00, $FF, $00, $D8, $00, $E2, $00, $FF, $00, $D0
|
||||
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
|
||||
dw #$7F7F
|
||||
db $74 : dw "This is a"
|
||||
db $75 : dw "small key to"
|
||||
dw $7F7F
|
||||
|
||||
; You picked up
|
||||
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
|
||||
|
||||
; light world
|
||||
; Light World
|
||||
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
|
||||
dw #$7F7F
|
||||
db $76 : dw "Light World"
|
||||
dw $7F7F
|
||||
|
||||
; dark world
|
||||
; Dark World
|
||||
Notice_DarkWorld:
|
||||
db $76, $00, $AD, $00, $D0, $00, $E1, $00, $DA, $00, $FF, $00, $C0, $00, $DE, $00, $E1, $00, $DB, $00, $D3
|
||||
dw #$7F7F
|
||||
db $76 : dw "Dark World"
|
||||
dw $7F7F
|
||||
|
||||
; Ganons Tower
|
||||
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
|
||||
dw #$7F7F
|
||||
db $76 : dw "Ganons Tower"
|
||||
dw $7F7F
|
||||
|
||||
; Turtle Rock
|
||||
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
|
||||
dw #$7F7F
|
||||
db $76 : dw "Turtle Rock"
|
||||
dw $7F7F
|
||||
|
||||
; Thieves Town
|
||||
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
|
||||
dw #$7F7F
|
||||
db $76 : dw "Thieves Town"
|
||||
dw $7F7F
|
||||
|
||||
; Tower of 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
|
||||
dw #$7F7F
|
||||
db $76 : dw "Tower of Hera"
|
||||
dw $7F7F
|
||||
|
||||
; Ice Palace
|
||||
Notice_Ice:
|
||||
db $76, $00, $B2, $00, $D2, $00, $D4, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4
|
||||
dw #$7F7F
|
||||
db $76 : dw "Ice Palace"
|
||||
dw $7F7F
|
||||
|
||||
; Skull Woods
|
||||
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
|
||||
dw #$7F7F
|
||||
db $76 : dw "Skull Woods"
|
||||
dw $7F7F
|
||||
|
||||
; Misery 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
|
||||
dw #$7F7F
|
||||
db $76 : dw "Misery Mire"
|
||||
dw $7F7F
|
||||
|
||||
; Dark Palace
|
||||
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
|
||||
dw #$7F7F
|
||||
db $76 : dw "Dark Palace"
|
||||
dw $7F7F
|
||||
|
||||
; Swamp Palace
|
||||
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
|
||||
dw #$7F7F
|
||||
db $76 : dw "Swamp Palace"
|
||||
dw $7F7F
|
||||
|
||||
; Castle Tower
|
||||
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
|
||||
dw #$7F7F
|
||||
db $76 : dw "Castle Tower"
|
||||
dw $7F7F
|
||||
|
||||
; Desert Palace
|
||||
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
|
||||
dw #$7F7F
|
||||
db $76 : dw "Desert Palace"
|
||||
dw $7F7F
|
||||
|
||||
; Eastern Palace
|
||||
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
|
||||
dw #$7F7F
|
||||
db $76 : dw "Eastern Palace"
|
||||
dw $7F7F
|
||||
|
||||
; Hyrule 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
|
||||
dw #$7F7F
|
||||
db $76 : dw "Hyrule Castle"
|
||||
dw $7F7F
|
||||
|
||||
; Hyrule Castle
|
||||
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
|
||||
dw #$7F7F
|
||||
db $76 : dw "Hyrule Castle"
|
||||
dw $7F7F
|
||||
|
||||
; This Dungeon
|
||||
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
|
||||
dw #$7F7F
|
||||
db $76 : dw "this dungeon"
|
||||
dw $7F7F
|
||||
|
||||
; Crystal numbers
|
||||
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
|
||||
dw #$7F7F
|
||||
db $75 : dw "crystal one"
|
||||
dw $7F7F
|
||||
|
||||
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
|
||||
dw #$7F7F
|
||||
db $75 : dw "crystal two"
|
||||
dw $7F7F
|
||||
|
||||
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
|
||||
dw #$7F7F
|
||||
db $75 : dw "crystal three"
|
||||
dw $7F7F
|
||||
|
||||
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
|
||||
dw #$7F7F
|
||||
db $75 : dw "crystal four"
|
||||
dw $7F7F
|
||||
|
||||
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
|
||||
dw #$7F7F
|
||||
db $75 : dw "crystal five"
|
||||
dw $7F7F
|
||||
|
||||
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
|
||||
dw #$7F7F
|
||||
db $75 : dw "crystal six"
|
||||
dw $7F7F
|
||||
|
||||
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
|
||||
dw #$7F7F
|
||||
db $75 : dw "crystal seven"
|
||||
dw $7F7F
|
||||
|
||||
90
msu.asm
90
msu.asm
@@ -164,27 +164,27 @@ CheckMusicLoadRequest:
|
||||
|
||||
.continue
|
||||
LDA.l TournamentSeed : BNE +++
|
||||
LDA.w MSUPackRequest
|
||||
CMP.w MSUPackCurrent : BEQ +++
|
||||
CMP.w MSUPackCount : !BLT ++
|
||||
LDA.l MSUPackRequest
|
||||
CMP.l MSUPackCurrent : BEQ +++
|
||||
CMP.l MSUPackCount : !BLT ++
|
||||
CMP.b #$FE : !BLT +
|
||||
STA.w MSUPackCurrent
|
||||
STA.l MSUPackCurrent
|
||||
SEP #$10
|
||||
LDA.b #$00
|
||||
LDX.b #$07
|
||||
-
|
||||
STA.w MSUFallbackTable,X
|
||||
STA.l MSUFallbackTable,X
|
||||
DEX : BPL -
|
||||
REP #$10
|
||||
BRA +++
|
||||
+ : LDA.w MSUPackCurrent : STA.w MSUPackRequest
|
||||
++ : STA.w MSUPackCurrent
|
||||
+ : LDA.l MSUPackCurrent : STA.l MSUPackRequest
|
||||
++ : STA.l MSUPackCurrent
|
||||
JSL MSUInit_check_fallback
|
||||
+++
|
||||
|
||||
LDA.w MusicControlRequest : CMP.b #$08 : BEQ ++ ; Mirror SFX is not affected by NoBGM or pack $FE
|
||||
LDA.l NoBGM : BNE +
|
||||
LDA.w MSUPackCurrent : CMP.b #$FE : BNE ++
|
||||
LDA.l MSUPackCurrent : CMP.b #$FE : BNE ++
|
||||
+ : JMP .mute
|
||||
++
|
||||
|
||||
@@ -240,7 +240,7 @@ CheckMusicLoadRequest:
|
||||
LDA.l MusicShuffleTable-1,X : DEC : PHA
|
||||
AND.b #$07 : TAY
|
||||
PLA : LSR #3 : TAX
|
||||
LDA.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 +
|
||||
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.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
|
||||
LDX.b #$F1 : STX.w MusicControlRequest
|
||||
@@ -401,10 +401,10 @@ MSUInit:
|
||||
PHP
|
||||
|
||||
LDA.b #$00
|
||||
STA.w MSULoadedTrack
|
||||
STA.w MSUResumeTrack
|
||||
STA.w MSUResumeTime : STA.w MSUResumeTime+1 : STA.w MSUResumeTime+2 : STA.w MSUResumeTime+3
|
||||
STA.w MSUResumeControl
|
||||
STA.l MSULoadedTrack
|
||||
STA.l MSUResumeTrack
|
||||
STA.l MSUResumeTime : STA.l MSUResumeTime+1 : STA.l MSUResumeTime+2 : STA.l MSUResumeTime+3
|
||||
STA.l MSUResumeControl
|
||||
|
||||
LDA.l NoBGM : BNE .done
|
||||
|
||||
@@ -431,7 +431,7 @@ MSUInit:
|
||||
.wait_pack
|
||||
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_BUSY : BNE .wait_pack
|
||||
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BEQ .check_pack
|
||||
TXA : STA.w MSUPackCount
|
||||
TXA : STA.l MSUPackCount
|
||||
BRA +
|
||||
|
||||
; Check the current MSU-1 pack for tracks that require SPC fallback
|
||||
@@ -453,7 +453,7 @@ MSUInit:
|
||||
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE +
|
||||
SEC
|
||||
+
|
||||
LDA.w MSUFallbackTable,X : ROL : STA.w MSUFallbackTable,X
|
||||
LDA.l MSUFallbackTable,X : ROL : STA.l MSUFallbackTable,X
|
||||
|
||||
DEY : BPL .next_track
|
||||
DEX : BPL +
|
||||
@@ -474,11 +474,11 @@ MSUInit:
|
||||
;--------------------------------------------------------------------------------
|
||||
MSUStopPlaying:
|
||||
PHA : XBA : PHA
|
||||
LDA.w MSULoadedTrack
|
||||
LDA.l MSULoadedTrack
|
||||
JSR IsResumableTrack : BCC +
|
||||
; dont save if we already saved recently
|
||||
REP #$20
|
||||
LDA.w MSUResumeTrack : AND #$00FF : BEQ ++
|
||||
LDA.l MSUResumeTrack : AND #$00FF : BEQ ++
|
||||
LDA.l NMIFrames : !SUB MSUResumeTime : PHA
|
||||
LDA.l NMIFrames+2 : SBC MSUResumeTime+2 : BNE +++
|
||||
PLA : CMP.l MSUResumeTimer : !BLT .too_early
|
||||
@@ -487,12 +487,12 @@ PHA : XBA : PHA
|
||||
PLA
|
||||
++
|
||||
; saving
|
||||
LDA.l NMIFrames : STA.w MSUResumeTime
|
||||
LDA.l NMIFrames+2 : STA.w MSUResumeTime+2
|
||||
LDA.l NMIFrames : STA.l MSUResumeTime
|
||||
LDA.l NMIFrames+2 : STA.l MSUResumeTime+2
|
||||
SEP #$20
|
||||
|
||||
LDA.w MSULoadedTrack : STA.w MSUResumeTrack
|
||||
LDA.b #$00 : STA.w MSULoadedTrack ; dont take this path if we're calling again
|
||||
LDA.l MSULoadedTrack : STA.l MSUResumeTrack
|
||||
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
|
||||
PLA : XBA : PLA
|
||||
RTS
|
||||
@@ -523,23 +523,23 @@ MSUMain:
|
||||
LDX.w MusicControl : BEQ +
|
||||
JMP .command_ff
|
||||
+
|
||||
LDA.w MSUDelayedCommand : BEQ .do_fade
|
||||
LDA.l MSUDelayedCommand : BEQ .do_fade
|
||||
|
||||
.check_busy
|
||||
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_BUSY : BNE -
|
||||
.ready
|
||||
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE -
|
||||
.start
|
||||
LDA.w MSUResumeControl : BIT.b #!FLAG_RESUME_CANCEL : BEQ +
|
||||
EOR.b #!FLAG_RESUME_CANCEL : STA.w MSUResumeControl
|
||||
REP #$20 : LDA.w MSULoadedTrack : STA.w MSUTRACK : SEP #$20
|
||||
LDA.l MSUResumeControl : BIT.b #!FLAG_RESUME_CANCEL : BEQ +
|
||||
EOR.b #!FLAG_RESUME_CANCEL : STA.l MSUResumeControl
|
||||
REP #$20 : LDA.l MSULoadedTrack : STA.w MSUTRACK : SEP #$20
|
||||
BRA -
|
||||
+
|
||||
LDA.b #!VAL_VOLUME_FULL
|
||||
STA.w TargetVolume
|
||||
|
||||
LDA.w MSUResumeControl : BIT.b #!FLAG_RESUME_FADEIN : BEQ +
|
||||
EOR.b #!FLAG_RESUME_FADEIN : STA.w MSUResumeControl
|
||||
LDA.l MSUResumeControl : BIT.b #!FLAG_RESUME_FADEIN : BEQ +
|
||||
EOR.b #!FLAG_RESUME_FADEIN : STA.l MSUResumeControl
|
||||
LDA.b #$00
|
||||
BRA ++
|
||||
+
|
||||
@@ -551,17 +551,17 @@ MSUMain:
|
||||
LDA.w CurrentMSUTrack : DEC : PHA
|
||||
AND.b #$07 : TAY
|
||||
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 +
|
||||
LSR : DEY : BRA -
|
||||
+
|
||||
|
||||
AND.b #$01 : BEQ +++
|
||||
++ : LDA.w MSUDelayedCommand
|
||||
++ : LDA.l MSUDelayedCommand
|
||||
+++ : STA.w MSUCTL
|
||||
LDA.b #$00
|
||||
STA.w MSUDelayedCommand
|
||||
STA.l MSUDelayedCommand
|
||||
JML SPCContinue
|
||||
|
||||
.do_fade:
|
||||
@@ -624,9 +624,9 @@ MSUMain:
|
||||
+
|
||||
CPX.w CurrentControlRequest : BEQ -
|
||||
LDA.b #$00 : XBA
|
||||
LDA.w MSUPackCurrent : BEQ +
|
||||
- : CMP.w MSUPackCount : !BLT +
|
||||
!SUB.w MSUPackCount : BRA -
|
||||
LDA.l MSUPackCurrent : BEQ +
|
||||
- : CMP.l MSUPackCount : !BLT +
|
||||
!SUB.l MSUPackCount : BRA -
|
||||
+
|
||||
|
||||
JSR MSUStopPlaying
|
||||
@@ -639,11 +639,11 @@ MSUMain:
|
||||
DEX : BNE -
|
||||
+
|
||||
STA.w MSUTRACK
|
||||
STA.w MSULoadedTrack
|
||||
STA.l MSULoadedTrack
|
||||
SEP #$20
|
||||
|
||||
PLX
|
||||
TXA : CMP.w MSUResumeTrack : BNE + ; dont resume if too late
|
||||
TXA : CMP.l MSUResumeTrack : BNE + ; dont resume if too late
|
||||
REP #$20
|
||||
LDA.l NMIFrames : !SUB MSUResumeTime : PHA
|
||||
LDA.l NMIFrames+2 : SBC MSUResumeTime+2 : BNE ++
|
||||
@@ -656,8 +656,8 @@ MSUMain:
|
||||
SEP #$20
|
||||
LDA.b #!FLAG_RESUME_CANCEL
|
||||
.done_resume:
|
||||
STA.w MSUResumeControl
|
||||
LDA.b #$00 : STA.w MSUResumeTrack
|
||||
STA.l MSUResumeControl
|
||||
LDA.b #$00 : STA.l MSUResumeTrack
|
||||
+
|
||||
CPX #07 : BNE + ; Kakariko Village
|
||||
LDA.b GameMode : CMP #$07 : BNE +
|
||||
@@ -667,12 +667,12 @@ MSUMain:
|
||||
+
|
||||
TXA
|
||||
++
|
||||
STA.w MSULoadedTrack
|
||||
STA.l MSULoadedTrack
|
||||
STX.w CurrentMSUTrack
|
||||
LDA.w MSUPackCurrent : CMP #$FE : !BLT +
|
||||
LDA.l MSUPackCurrent : CMP #$FE : !BLT +
|
||||
LDA.b #$00 : BRA ++
|
||||
+ : LDA.l MSUTrackList-1,X
|
||||
++ : STA.w MSUDelayedCommand
|
||||
++ : STA.l MSUDelayedCommand
|
||||
LDA.l MSUExtendedFallbackList-1,X
|
||||
CMP.b #17 : BEQ +
|
||||
CMP.b #22 : BEQ +
|
||||
@@ -722,9 +722,9 @@ PendantFanfareWait:
|
||||
LDA.w MSUID+2 : CMP.w #!VAL_MSU_ID_23 : BNE .spc
|
||||
LDA.w MSUID+4 : CMP.w #!VAL_MSU_ID_45 : BNE .spc
|
||||
SEP #$20
|
||||
LDA.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 MSUDelayedCommand : BNE .continue
|
||||
LDA.l MSUDelayedCommand : BNE .continue
|
||||
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done
|
||||
.continue
|
||||
jml PendantFanfareContinue
|
||||
@@ -746,9 +746,9 @@ CrystalFanfareWait:
|
||||
LDA.w MSUID+2 : CMP.w #!VAL_MSU_ID_23 : BNE .spc
|
||||
LDA.w MSUID+4 : CMP.w #!VAL_MSU_ID_45 : BNE .spc
|
||||
SEP #$20
|
||||
LDA.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 MSUDelayedCommand : BNE .continue
|
||||
LDA.l MSUDelayedCommand : BNE .continue
|
||||
LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done
|
||||
.continue
|
||||
jml CrystalFanfareContinue
|
||||
|
||||
21
newhud.asm
21
newhud.asm
@@ -15,21 +15,14 @@ NewDrawHud:
|
||||
|
||||
;================================================================================
|
||||
NewHUD_DrawBombs:
|
||||
LDA.l InfiniteBombs : BNE .infinite
|
||||
LDA.l SpecialWeapons : AND.b #$7F : CMP #$01 : BNE .normal
|
||||
LDA.l SpecialWeaponLevel : BEQ .no_bombs
|
||||
LDA.l InfiniteBombs : BEQ .finite
|
||||
|
||||
.infinite
|
||||
LDY.w #!InfiniteTile+0
|
||||
LDX.w #!InfiniteTile+1
|
||||
BRA .draw
|
||||
|
||||
.no_bombs
|
||||
LDY.w #!BlankTile
|
||||
LDX.w #!BlankTile
|
||||
BRA .draw
|
||||
|
||||
.normal
|
||||
.finite
|
||||
LDA.w BombsEquipment
|
||||
JSR HUDHex2Digit
|
||||
|
||||
@@ -72,7 +65,7 @@ NewHUD_DrawArrows:
|
||||
;================================================================================
|
||||
NewHUD_DrawGoal:
|
||||
REP #$20
|
||||
LDA.w UpdateHUDFlag : BEQ .no_goal
|
||||
LDA.l UpdateHUDFlag : BEQ .no_goal
|
||||
LDA.l GoalItemRequirement : BEQ .no_goal
|
||||
|
||||
LDA.l GoalItemIcon : STA.w HUDGoalIndicator
|
||||
@@ -129,7 +122,7 @@ NewHUD_DrawKeys:
|
||||
|
||||
;================================================================================
|
||||
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
|
||||
LDX.b IndoorsFlag : BNE +
|
||||
JMP.w NewHUD_DrawMagicMeter
|
||||
@@ -154,7 +147,7 @@ NewHUD_DrawPrizeIcon:
|
||||
LDA.b GameMode
|
||||
CMP.b #$12 : BEQ .no_prize
|
||||
CMP.b #$0E : BEQ +
|
||||
LDA.w UpdateHUDFlag : BEQ NewHUD_DrawItemCounter
|
||||
LDA.l UpdateHUDFlag : BEQ NewHUD_DrawItemCounter
|
||||
+
|
||||
LDA.w DungeonID
|
||||
CMP.b #$1A : BCS .no_prize
|
||||
@@ -204,7 +197,7 @@ NewHUD_DrawPrizeIcon:
|
||||
;================================================================================
|
||||
NewHUD_DrawItemCounter:
|
||||
REP #$20
|
||||
LDA.w UpdateHUDFlag : BEQ NewHUD_DrawMagicMeter
|
||||
LDA.l UpdateHUDFlag : BEQ NewHUD_DrawMagicMeter
|
||||
LDA.l ItemCounterHUD : AND.w #$00FF : BEQ NewHUD_DrawMagicMeter
|
||||
LDA.w #!SlashTile : STA.w HUDGoalIndicator+$08
|
||||
LDA.l TotalItemCount : CMP.w #1000 : BCS .item_four_digits
|
||||
@@ -270,7 +263,7 @@ NewHUD_DrawMagicMeter:
|
||||
|
||||
;================================================================================
|
||||
NewHUD_DoneDrawing:
|
||||
STZ.w UpdateHUDFlag
|
||||
LDA.w #$0000 : STA.l UpdateHUDFlag
|
||||
PLB
|
||||
RTL
|
||||
|
||||
|
||||
55
newitems.asm
Executable file → Normal file
55
newitems.asm
Executable file → Normal file
@@ -429,7 +429,7 @@ ItemBehavior:
|
||||
.single_arrow
|
||||
LDA.l ArrowMode : BEQ +
|
||||
LDA.l CurrentArrows : INC : STA.l CurrentArrows ; Should be sole write to this address
|
||||
INC.w UpdateHUDFlag ; in retro/rupee bow mode.
|
||||
LDA.b #$01 : STA.l UpdateHUDFlag ; in retro/rupee bow mode.
|
||||
+
|
||||
RTS
|
||||
|
||||
@@ -660,23 +660,6 @@ ItemBehavior:
|
||||
.done
|
||||
RTS
|
||||
|
||||
.prog_weapon
|
||||
LDA.l SpecialWeaponLevel : INC : STA.l SpecialWeaponLevel
|
||||
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$01 : BEQ ..bombs
|
||||
CMP.b #$03 : BEQ ..byrna
|
||||
CMP.b #$04 : BEQ ..somaria
|
||||
CMP.b #$08 : BEQ ..bug_net
|
||||
RTS
|
||||
..bombs
|
||||
LDA.b #$01 : STA.l InfiniteBombs : RTS
|
||||
INC.w UpdateHUD
|
||||
..byrna
|
||||
LDA.b #$01 : STA.l ByrnaEquipment : RTS
|
||||
..somaria
|
||||
LDA.b #$01 : STA.l SomariaEquipment : RTS
|
||||
..bug_net
|
||||
LDA.b #$01 : STA.l BugNetEquipment : RTS
|
||||
|
||||
ResolveReceipt:
|
||||
PHA : PHX
|
||||
PHK : PLB
|
||||
@@ -823,15 +806,15 @@ ResolveLootID:
|
||||
JMP.w .have_item
|
||||
|
||||
.rng_single
|
||||
JSL.l GetRNGItemSingle : STA.w ScratchBufferV+6
|
||||
JSL.l GetRNGItemSingle : STA.l ScratchBufferV+6
|
||||
XBA : JSR.w MarkRNGItemSingle
|
||||
LDA.b #$FF : STA.l RNGLockIn ; clear lock-in
|
||||
LDA.w ScratchBufferV+6 : JMP.w .get_item
|
||||
LDA.l ScratchBufferV+6 : JMP.w .get_item
|
||||
|
||||
.rng_multi
|
||||
JSL.l GetRNGItemMulti : STA.w ScratchBufferV+6
|
||||
JSL.l GetRNGItemMulti : STA.l ScratchBufferV+6
|
||||
LDA.b #$FF : STA.l RNGLockIn ; clear lock-in
|
||||
LDA.w ScratchBufferV+6 : JMP.w .get_item
|
||||
LDA.l ScratchBufferV+6 : JMP.w .get_item
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
DungeonItemMasks:
|
||||
@@ -886,7 +869,7 @@ HandleBowTracking:
|
||||
; at this point.
|
||||
LDA.w ItemReceiptMethod : CMP.b #$01 : BEQ +
|
||||
LDX.w CurrentSpriteSlot
|
||||
LDA.w SpriteMetaData,X : BEQ +
|
||||
LDA.w SpriteMetaData,X : BEQ .done
|
||||
BRA .done
|
||||
+
|
||||
LDA.b #$00
|
||||
@@ -956,32 +939,32 @@ GetRNGItemSingle:
|
||||
CMP.l RNGSingleTableSize : !BGE .single_reroll
|
||||
+++
|
||||
|
||||
STA.w ScratchBufferV ; put our index value here
|
||||
STA.l ScratchBufferV ; put our index value here
|
||||
LDX.b #$00
|
||||
TAY
|
||||
.recheck
|
||||
TYA
|
||||
JSR.w CheckSingleItem : BEQ .single_unused ; already used
|
||||
LDA.w ScratchBufferV : INC ; increment index
|
||||
LDA.l ScratchBufferV : INC ; increment index
|
||||
CMP.l RNGSingleTableSize : BCC +++ : LDA.b #$00 : +++ ; rollover index if needed
|
||||
STA.w ScratchBufferV ; store index
|
||||
STA.l ScratchBufferV ; store index
|
||||
INX : TAY : TXA : CMP.l RNGSingleTableSize : BCC .recheck
|
||||
LDA.b #$5A ; everything is gone, default to null item - MAKE THIS AN OPTION FOR THIS AND THE OTHER ONE
|
||||
BRA .single_done
|
||||
.single_unused
|
||||
LDA.w ScratchBufferV
|
||||
LDA.l ScratchBufferV
|
||||
.single_done
|
||||
TAX : LDA.l RNGSingleItemTable, X
|
||||
XBA : LDA.w ScratchBufferV : STA.l RNGLockIn : XBA
|
||||
XBA : LDA.l ScratchBufferV : STA.l RNGLockIn : XBA
|
||||
PLY
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
CheckSingleItem:
|
||||
LSR #3 : TAX
|
||||
LDA.l RNGItem, X : STA.w ScratchBufferV+2 ; load value to temporary
|
||||
LDA.l RNGItem, X : STA.l ScratchBufferV+2 ; load value to temporary
|
||||
PHX
|
||||
LDA.w ScratchBufferV : AND.b #$07 : TAX ; load 0-7 part into X
|
||||
LDA.w ScratchBufferV+2
|
||||
LDA.l ScratchBufferV : AND.b #$07 : TAX ; load 0-7 part into X
|
||||
LDA.l ScratchBufferV+2
|
||||
---
|
||||
CPX.b #$00 : BEQ +++
|
||||
LSR
|
||||
@@ -993,10 +976,10 @@ CheckSingleItem:
|
||||
RTS
|
||||
;--------------------------------------------------------------------------------
|
||||
MarkRNGItemSingle:
|
||||
LSR #3 : STA.w ScratchBufferV+1 : TAX
|
||||
LSR #3 : STA.l ScratchBufferV+1 : TAX
|
||||
LDA.l RNGItem, X
|
||||
STA.w ScratchBufferV+2
|
||||
LDA.w ScratchBufferV : AND.b #$07 : TAX ; load 0-7 part into X
|
||||
STA.l ScratchBufferV+2
|
||||
LDA.l ScratchBufferV : AND.b #$07 : TAX ; load 0-7 part into X
|
||||
LDA.b #01
|
||||
---
|
||||
CPX.b #$00 : BEQ +++
|
||||
@@ -1006,9 +989,9 @@ MarkRNGItemSingle:
|
||||
+++
|
||||
|
||||
PHA
|
||||
LDA.w ScratchBufferV+1 : TAX
|
||||
LDA.l ScratchBufferV+1 : TAX
|
||||
PLA
|
||||
ORA.w ScratchBufferV+2
|
||||
ORA.l ScratchBufferV+2
|
||||
STA.l RNGItem, X
|
||||
RTS
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
@@ -17,7 +17,7 @@ RTL
|
||||
;================================================================================
|
||||
HUDRebuildIndoorHole:
|
||||
PHA
|
||||
INC.w UpdateHUDFlag
|
||||
LDA.b #$01 : STA.l UpdateHUDFlag
|
||||
LDA.l GenericKeys : BEQ .normal
|
||||
.generic
|
||||
PLA
|
||||
@@ -30,7 +30,7 @@ RTL
|
||||
RTL
|
||||
;================================================================================
|
||||
HUDRebuildIndoor:
|
||||
INC.w UpdateHUDFlag
|
||||
LDA.b #$01 : STA.l UpdateHUDFlag
|
||||
LDA.l GenericKeys : BEQ .normal
|
||||
.generic
|
||||
LDA.b #$00 : STA.l RoomDarkness
|
||||
|
||||
@@ -10,7 +10,7 @@ QuickSwap:
|
||||
|
||||
LDA.l QuickSwapFlag : BEQ .done
|
||||
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
|
||||
PHX
|
||||
XBA ; restore the stashed value
|
||||
@@ -34,7 +34,6 @@ QuickSwap:
|
||||
CPX.b #$01 : BEQ + ; bow
|
||||
CPX.b #$05 : BEQ + ; powder
|
||||
CPX.b #$0D : BEQ + ; flute
|
||||
CPX.b #$0E : BEQ + ; bug net
|
||||
CPX.b #$10 : BEQ + ; bottle
|
||||
BRA .store
|
||||
+ STX.w ItemCursor : JSL ProcessMenuButtons_y_pressed
|
||||
|
||||
82
ram.asm
82
ram.asm
@@ -376,6 +376,13 @@ SpriteCoordCacheY = $7E0FDA ;
|
||||
;
|
||||
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.
|
||||
RoomStripes = $7E1100 ; Used for room drawing.
|
||||
;
|
||||
@@ -388,26 +395,7 @@ DelayTimer = $7E1CE9 ;
|
||||
;
|
||||
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
|
||||
@@ -419,6 +407,28 @@ TileUploadBuffer = $7EA180 ; 0x300 bytes
|
||||
;
|
||||
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.
|
||||
FadeTimer = $7EC007 ; Timer for transition fading and mosaics. Word length.
|
||||
FadeDirection = $7EC009 ; Word length
|
||||
@@ -861,23 +871,23 @@ endmacro
|
||||
%assertRAM(MessageSubModule, $7E1CD8)
|
||||
%assertRAM(MessageCursor, $7E1CE8)
|
||||
%assertRAM(DelayTimer, $7E1CE9)
|
||||
%assertRAM(TextID, $7E1CF0)
|
||||
%assertRAM(ToastBuffer, $7E1E0E)
|
||||
%assertRAM(MSUResumeTime, $7E1E6B)
|
||||
%assertRAM(MSUResumeControl, $7E1E6F)
|
||||
%assertRAM(MSUFallbackTable, $7E1E70)
|
||||
%assertRAM(MSUDelayedCommand, $7E1E79)
|
||||
%assertRAM(MSUPackCount, $7E1E7A)
|
||||
%assertRAM(MSUPackCurrent, $7E1E7B)
|
||||
%assertRAM(MSUPackRequest, $7E1E7C)
|
||||
%assertRAM(MSULoadedTrack, $7E1E7D)
|
||||
%assertRAM(MSUResumeTrack, $7E1E7F)
|
||||
%assertRAM(ClockHours, $7E1E90)
|
||||
%assertRAM(ClockMinutes, $7E1E94)
|
||||
%assertRAM(ClockSeconds, $7E1E98)
|
||||
%assertRAM(ClockBuffer, $7E1E9C)
|
||||
%assertRAM(ScratchBufferNV, $7E1EA0)
|
||||
%assertRAM(ScratchBufferV, $7E1EB0)
|
||||
;%assertRAM(TextID, $7E1CF0)
|
||||
;%assertRAM(ToastBuffer, $7E1E0E)
|
||||
;%assertRAM(MSUResumeTime, $7E1E6B)
|
||||
;%assertRAM(MSUResumeControl, $7E1E6F)
|
||||
;%assertRAM(MSUFallbackTable, $7E1E70)
|
||||
;%assertRAM(MSUDelayedCommand, $7E1E79)
|
||||
;%assertRAM(MSUPackCount, $7E1E7A)
|
||||
;%assertRAM(MSUPackCurrent, $7E1E7B)
|
||||
;%assertRAM(MSUPackRequest, $7E1E7C)
|
||||
;%assertRAM(MSULoadedTrack, $7E1E7D)
|
||||
;%assertRAM(MSUResumeTrack, $7E1E7F)
|
||||
;%assertRAM(ClockHours, $7E1E90)
|
||||
;%assertRAM(ClockMinutes, $7E1E94)
|
||||
;%assertRAM(ClockSeconds, $7E1E98)
|
||||
;%assertRAM(ClockBuffer, $7E1E9C)
|
||||
;%assertRAM(ScratchBufferNV, $7E1EA0)
|
||||
;%assertRAM(ScratchBufferV, $7E1EB0)
|
||||
%assertRAM(TileUploadBuffer, $7EA180)
|
||||
%assertRAM(RoomFade, $7EC005)
|
||||
%assertRAM(FadeTimer, $7EC007)
|
||||
|
||||
11
retro.asm
11
retro.asm
@@ -11,18 +11,13 @@ LoadBombCount16:
|
||||
.infinite
|
||||
RTL
|
||||
StoreBombCount:
|
||||
JSL IncrementBombsPlacedCounter
|
||||
INC.w UpdateHUDFlag
|
||||
PHA : LDA.l InfiniteBombs : BEQ .finite
|
||||
PHA
|
||||
LDA.b #$01 : STA.l UpdateHUDFlag
|
||||
LDA.l InfiniteBombs : BEQ .finite
|
||||
.infinite
|
||||
PLA : LDA.b #$01 : RTL
|
||||
.finite
|
||||
PLA : STA.l BombsEquipment
|
||||
BNE .done
|
||||
LDA.l ItemOnB : CMP #$04 : BNE .done
|
||||
LDA.b #$00 : STA.l ItemOnB
|
||||
.done
|
||||
LDA.l BombsEquipment
|
||||
RTL
|
||||
SearchForEquippedItem:
|
||||
LDA.l InfiniteBombs : BEQ +
|
||||
|
||||
@@ -107,10 +107,6 @@ RTL
|
||||
; Out: A = RNG Result
|
||||
;--------------------------------------------------------------------------------
|
||||
GetStaticRNG:
|
||||
LDA.l SeededRNG : BNE .seeded
|
||||
JML GetRandomInt
|
||||
RTL
|
||||
.seeded
|
||||
PHX : PHP
|
||||
REP #$30 ; set 16-bit accumulator and index registers
|
||||
AND.w #$000F
|
||||
|
||||
@@ -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
|
||||
14
sram.asm
14
sram.asm
@@ -187,9 +187,7 @@ ItemLimitCounts: skip 16 ; Keeps track of limited non-progressive items s
|
||||
; See: ItemSubstitutionRules in tables.asm
|
||||
; Right now this is only used for three items but extra space is
|
||||
; reserved
|
||||
skip 35 ; Unused
|
||||
SpecialWeaponLevel: skip 1 ; Keeps track of level of weapon in item modes
|
||||
ItemOnB: skip 1 ; same table as $0202; $01 = arrows .. $14 = mirror
|
||||
skip 37 ; Unused
|
||||
ProgressIndicator: skip 1 ; $00 = Pre-Uncle | $01 = Post-Uncle item | $02 = Zelda Rescued
|
||||
; $03 = Agahnim 1 defeated
|
||||
; $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.
|
||||
MapCountDisplay: skip 2 ;
|
||||
CrystalCounter: skip 2 ; Total Number of crystals collected (integer)
|
||||
BombsPlaced: skip 2 ; Total Number of bombs placed (16-bit integer)
|
||||
skip 38 ; Unused
|
||||
skip 40 ; Unused
|
||||
ServiceSequence: ; See servicerequest.asm
|
||||
ServiceSequenceRx: skip 8 ; Service sequence receive
|
||||
ServiceSequenceTx: skip 8 ; Service sequence transmit
|
||||
@@ -414,9 +411,7 @@ DisplayRupeesSRAM: skip 21 ;
|
||||
CurrentArrowsSRAM: skip 21 ;
|
||||
InventoryTrackingSRAM: skip 2 ;
|
||||
BowTrackingSRAM: skip 2 ;
|
||||
skip 51 ;
|
||||
SpecialWeaponLevelSRAM: skip 1 ;
|
||||
ItemOnBSRAM: skip 1 ;
|
||||
skip 53 ;
|
||||
ProgressIndicatorSRAM: skip 1 ;
|
||||
skip 19 ;
|
||||
FileNameVanillaSRAM: skip 8 ; First four characters of file name
|
||||
@@ -545,8 +540,6 @@ endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
%assertSRAM(InventoryTracking, $7EF38C)
|
||||
%assertSRAM(BowTracking, $7EF38E)
|
||||
%assertSRAM(SpecialWeaponLevel, $7EF3C3)
|
||||
%assertSRAM(ItemOnB, $7EF3C4)
|
||||
%assertSRAM(ItemLimitCounts, $7EF390)
|
||||
;--------------------------------------------------------------------------------
|
||||
%assertSRAM(GameCounter, $7EF3FF)
|
||||
@@ -678,7 +671,6 @@ endmacro
|
||||
%assertSRAM(CurrentArrowsSRAM, $700377)
|
||||
%assertSRAM(InventoryTrackingSRAM, $70038C)
|
||||
%assertSRAM(BowTrackingSRAM, $70038E)
|
||||
%assertSRAM(SpecialWeaponLevelSRAM, $7003C3)
|
||||
%assertSRAM(ProgressIndicatorSRAM, $7003C5)
|
||||
%assertSRAM(FileNameVanillaSRAM, $7003D9)
|
||||
%assertSRAM(FileValiditySRAM, $7003E1)
|
||||
|
||||
47
stats.asm
47
stats.asm
@@ -83,7 +83,7 @@ IncrementSmallKeys:
|
||||
JSL.l UpdateKeys
|
||||
PHY : LDY.b #24 : JSL.l AddInventory : PLY
|
||||
JSL.l HUD_RebuildLong
|
||||
INC.w UpdateHUDFlag
|
||||
LDA.b #$01 : STA.l UpdateHUDFlag
|
||||
PLX
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
@@ -106,7 +106,7 @@ IncrementSmallKeysNoPrimary:
|
||||
++
|
||||
PLP
|
||||
+
|
||||
INC.w UpdateHUDFlag
|
||||
LDA.b #$01 : STA.l UpdateHUDFlag
|
||||
JSL.l HUD_RebuildLong
|
||||
PLX
|
||||
RTL
|
||||
@@ -146,25 +146,6 @@ CountChestKey:
|
||||
PLX : PLA
|
||||
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:
|
||||
PHA
|
||||
JSL.l IncrementBossSword
|
||||
@@ -197,16 +178,6 @@ IncrementChestTurnCounter:
|
||||
PLA
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
IncrementBombsPlacedCounter:
|
||||
PHA
|
||||
LDA StatsLocked : BNE +
|
||||
PHP : REP #$20
|
||||
LDA BombsPlaced : INC : STA BombsPlaced
|
||||
PLP
|
||||
+
|
||||
PLA
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
IncrementChestCounter:
|
||||
LDA.b #$01 : STA.w ItemReceiptMethod ; thing we wrote over
|
||||
PHA
|
||||
@@ -350,17 +321,12 @@ JMP StatTransitionCounter
|
||||
;--------------------------------------------------------------------------------
|
||||
StatsFinalPrep:
|
||||
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 HighestMail : INC : STA.l HighestMail ; add green mail to mail count
|
||||
|
||||
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
|
||||
@@ -375,14 +341,9 @@ StatsFinalPrep:
|
||||
|
||||
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
|
||||
;--------------------------------------------------------------------------------
|
||||
; Notes:
|
||||
; s&q counter
|
||||
;================================================================================
|
||||
|
||||
@@ -3,59 +3,53 @@
|
||||
;===================================================================================================
|
||||
table "data/creditscharmapbighi.txt"
|
||||
YourSpriteCreditsHi:
|
||||
db 2, 55, " " ; $238002
|
||||
db 2
|
||||
db 55
|
||||
db " " ; $238002
|
||||
|
||||
table "data/creditscharmapbiglo.txt"
|
||||
YourSpriteCreditsLo:
|
||||
db 2, 55, " " ; $238020
|
||||
db 2
|
||||
db 55
|
||||
db " " ; $238020
|
||||
|
||||
!FEATURE_PATREON_SUPPORTERS ?= 0
|
||||
|
||||
table "data/creditscharmapbighi.txt"
|
||||
FirstSwordStatsHi:
|
||||
db 2, 55, "FIRST SWORD " ; $23803E
|
||||
PatronCredit1Hi:
|
||||
db 2
|
||||
db 55
|
||||
db " " ; $23803E
|
||||
|
||||
table "data/creditscharmapbiglo.txt"
|
||||
FirstSwordStatsLo:
|
||||
db 2, 55, "FIRST SWORD " ; $23805C
|
||||
PatronCredit1Lo:
|
||||
db 2
|
||||
db 55
|
||||
db " " ; $23805C
|
||||
|
||||
table "data/creditscharmapbighi.txt"
|
||||
SwordlessKillsHi:
|
||||
db 2, 55, "SWORDLESS /13" ; $23807A
|
||||
PatronCredit2Hi:
|
||||
db 2
|
||||
db 55
|
||||
db " " ; $23807A
|
||||
|
||||
table "data/creditscharmapbiglo.txt"
|
||||
SwordlessKillsLo:
|
||||
db 2, 55, "SWORDLESS /13" ; $238098
|
||||
PatronCredit2Lo:
|
||||
db 2
|
||||
db 55
|
||||
db " " ; $238098
|
||||
|
||||
table "data/creditscharmapbighi.txt"
|
||||
FighterSwordKillsHi:
|
||||
db 2, 55, "FIGHTER'S SWORD /13" ; $2380B6
|
||||
PatronCredit3Hi:
|
||||
db 2
|
||||
db 55
|
||||
db " " ; $2380B6
|
||||
|
||||
table "data/creditscharmapbiglo.txt"
|
||||
FighterSwordKillsLo:
|
||||
db 2, 55, "FIGHTER'S SWORD /13" ; $2380D4
|
||||
|
||||
table "data/creditscharmapbighi.txt"
|
||||
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
|
||||
PatronCredit3Lo:
|
||||
db 2
|
||||
db 55
|
||||
db " " ; $2380D4
|
||||
|
||||
;===================================================================================================
|
||||
|
||||
@@ -542,6 +536,24 @@ CreditsLineBlank:
|
||||
%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")
|
||||
|
||||
%blankline()
|
||||
@@ -574,7 +586,7 @@ CreditsLineBlank:
|
||||
|
||||
%blankline()
|
||||
|
||||
%bigcredits("AND&")
|
||||
%bigcredits("AND")
|
||||
|
||||
%blankline()
|
||||
|
||||
@@ -599,6 +611,8 @@ CreditsLineBlank:
|
||||
%emptyline()
|
||||
%emptyline()
|
||||
%emptyline()
|
||||
|
||||
if !FEATURE_PATREON_SUPPORTERS == 0
|
||||
%emptyline()
|
||||
%emptyline()
|
||||
%emptyline()
|
||||
@@ -610,6 +624,7 @@ CreditsLineBlank:
|
||||
%emptyline()
|
||||
%emptyline()
|
||||
%emptyline()
|
||||
endif
|
||||
|
||||
;===================================================================================================
|
||||
|
||||
@@ -640,8 +655,7 @@ endif
|
||||
%blankline()
|
||||
%blankline()
|
||||
|
||||
%addarbline(FirstSwordStatsHi)
|
||||
%addarbline(FirstSwordStatsLo)
|
||||
%bigcreditsleft("FIRST SWORD")
|
||||
|
||||
%blankline()
|
||||
|
||||
@@ -664,28 +678,23 @@ endif
|
||||
%blankline()
|
||||
%blankline()
|
||||
|
||||
%addarbline(SwordlessKillsHi)
|
||||
%addarbline(SwordlessKillsLo)
|
||||
%bigcreditsleft("SWORDLESS /13")
|
||||
|
||||
%blankline()
|
||||
|
||||
%addarbline(FighterSwordKillsHi)
|
||||
%addarbline(FighterSwordKillsLo)
|
||||
%bigcreditsleft("FIGHTER'S SWORD /13")
|
||||
|
||||
%blankline()
|
||||
|
||||
%addarbline(MasterSwordKillsHi)
|
||||
%addarbline(MasterSwordKillsLo)
|
||||
%bigcreditsleft("MASTER SWORD /13")
|
||||
|
||||
%blankline()
|
||||
|
||||
%addarbline(TemperedSwordKillsHi)
|
||||
%addarbline(TemperedSwordKillsLo)
|
||||
%bigcreditsleft("TEMPERED SWORD /13")
|
||||
|
||||
%blankline()
|
||||
|
||||
%addarbline(GoldSwordKillsHi)
|
||||
%addarbline(GoldSwordKillsLo)
|
||||
%bigcreditsleft("GOLD SWORD /13")
|
||||
|
||||
%blankline()
|
||||
%blankline()
|
||||
@@ -707,10 +716,6 @@ endif
|
||||
|
||||
%blankline()
|
||||
|
||||
%bigcreditsleft("BOMBS PLACED")
|
||||
|
||||
%blankline()
|
||||
|
||||
%bigcreditsleft("SAVE AND QUITS")
|
||||
|
||||
%blankline()
|
||||
@@ -730,6 +735,11 @@ endif
|
||||
%bigcreditsleft("TOTAL LAG TIME")
|
||||
|
||||
%blankline()
|
||||
%blankline()
|
||||
|
||||
|
||||
%blankline()
|
||||
%blankline()
|
||||
|
||||
|
||||
%blankline()
|
||||
@@ -758,3 +768,5 @@ endif
|
||||
%emptyline()
|
||||
%emptyline()
|
||||
%emptyline()
|
||||
|
||||
;---------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -22,18 +22,16 @@
|
||||
!MAGICUSED_Y = 349
|
||||
!BONKS_X = 26
|
||||
!BONKS_Y = 352
|
||||
!BOMBS_X = 26
|
||||
!BOMBS_Y = 355
|
||||
!SAVE_AND_QUITS_X = 26
|
||||
!SAVE_AND_QUITS_Y = 358
|
||||
!SAVE_AND_QUITS_Y = 355
|
||||
!DEATHS_X = 26
|
||||
!DEATHS_Y = 361
|
||||
!DEATHS_Y = 358
|
||||
!FAERIE_REVIVALS_X = 26
|
||||
!FAERIE_REVIVALS_Y = 364
|
||||
!FAERIE_REVIVALS_Y = 361
|
||||
!TOTAL_MENU_TIME_X = 19
|
||||
!TOTAL_MENU_TIME_Y = 367
|
||||
!TOTAL_MENU_TIME_Y = 364
|
||||
!TOTAL_LAG_TIME_X = 19
|
||||
!TOTAL_LAG_TIME_Y = 370
|
||||
!TOTAL_LAG_TIME_Y = 367
|
||||
!COLLECTION_RATE_X = 22
|
||||
!COLLECTION_RATE_Y = 380
|
||||
!TOTAL_TIME_X = 19
|
||||
@@ -61,7 +59,6 @@ CreditsStats:
|
||||
%AddStat(DamageCounter, 0, 0, 16, 5, !DAMAGETAKEN_X, !DAMAGETAKEN_Y)
|
||||
%AddStat(MagicCounter, 0, 0, 16, 5, !MAGICUSED_X, !MAGICUSED_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(DeathCounter, 0, 0, 08, 2, !DEATHS_X, !DEATHS_Y)
|
||||
%AddStat(FaerieRevivalCounter, 0, 0, 08, 3, !FAERIE_REVIVALS_X, !FAERIE_REVIVALS_Y)
|
||||
|
||||
@@ -12,33 +12,24 @@ LoadSwordForDamage:
|
||||
JSR.w LoadModifiedSwordLevel ; load normal sword value
|
||||
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:
|
||||
CPX.w #$0918 : BNE +
|
||||
LDA.l StalfosBombDamage
|
||||
RTL
|
||||
+
|
||||
LDA SpecialWeapons : AND.b #$7F : CMP.b #$02 : BEQ .pseudo_table
|
||||
LDA SpecialWeapons : AND.b #$80 : BNE .bomb_table
|
||||
%LookupDamageSubclass(Damage_Table) : RTL
|
||||
.bomb_table
|
||||
%LookupDamageSubclass(Damage_Table_Bombs) : RTL
|
||||
.pseudo_table
|
||||
%LookupDamageSubclass(Damage_Table_Pseudo) : RTL
|
||||
PHP
|
||||
REP #$20 ; set 16-bit accumulator
|
||||
TXA : LSR : TAX : BCS .lower
|
||||
.upper
|
||||
PLP
|
||||
LDA.l Damage_Table, X
|
||||
LSR #4
|
||||
RTL
|
||||
.lower
|
||||
PLP
|
||||
LDA.l Damage_Table, X
|
||||
AND.b #$0F
|
||||
RTL
|
||||
;================================================================================
|
||||
LoadModifiedSwordLevel: ; returns short
|
||||
LDA.l SwordModifier : BEQ +
|
||||
@@ -72,39 +63,29 @@ LoadModifiedMagicLevel:
|
||||
LDA.l MagicConsumption ; load normal magic value
|
||||
RTL
|
||||
;================================================================================
|
||||
; ChallengeModes - Permanent Ice Modifier ($01 bit)
|
||||
LoadModifiedIceFloorValue:
|
||||
; $7E0348 - Ice Value
|
||||
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.l ChallengeModes : BIT #$01 : BEQ ++
|
||||
LDA.l RoomIndex : CMP #$16 : BEQ ++ ; swamp supertile with current -- fine for temporary physics but impossible without boots for permanent
|
||||
LDA.w TileActIce : ORA.l IceModifier : ORA.b #$10 : RTS
|
||||
++ : LDA.w TileActIce : ORA.l IceModifier : RTS
|
||||
+ : LDA.w TileActIce
|
||||
RTS
|
||||
LoadModifiedIceFloorValue_a11:
|
||||
JSR LoadModifiedIceFloorValue : AND.b #$11 : RTL
|
||||
LDA.w TileActIce : ORA.l IceModifier : AND.b #$11 : RTL
|
||||
+ : LDA.w TileActIce : AND.b #$11
|
||||
RTL
|
||||
LoadModifiedIceFloorValue_a01:
|
||||
JSR LoadModifiedIceFloorValue : AND.b #$01 : RTL
|
||||
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 #$01 : RTL
|
||||
+ : LDA.w TileActIce : AND.b #$01
|
||||
RTL
|
||||
;================================================================================
|
||||
CheckTabletSword:
|
||||
LDA.l AllowHammerTablets : BEQ +
|
||||
LDA.l HammerEquipment : BNE .allow ; 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.l HammerEquipment : BEQ + ; check for hammer
|
||||
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
|
||||
RTL
|
||||
;================================================================================
|
||||
@@ -112,27 +93,15 @@ GetSwordLevelForEvilBarrier:
|
||||
LDA.l AllowHammerEvilBarrierWithFighterSword : BEQ +
|
||||
LDA.b #$FF : RTL
|
||||
+
|
||||
LDA.l SpecialWeapons : AND.b #$7F : CMP.b #$08 : BEQ +
|
||||
LDA.l SwordEquipment : RTL
|
||||
+
|
||||
LDA.l SpecialWeaponLevel : RTL
|
||||
LDA.l SwordEquipment
|
||||
RTL
|
||||
;================================================================================
|
||||
CheckGanonHammerDamage:
|
||||
LDA.l HammerableGanon : BEQ +
|
||||
LDA.w SpriteTypeTable, X : CMP.b #$D8 ; original behavior except ganon
|
||||
RTL
|
||||
+
|
||||
LDA.l GanonVulnerabilityItem : CMP.b #$0C : BEQ +
|
||||
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
|
||||
;================================================================================
|
||||
GetSmithSword:
|
||||
|
||||
53
tables.asm
53
tables.asm
@@ -92,44 +92,7 @@ SmithSword:
|
||||
db $02 ; #$02 = Tempered Sword (default)
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; 0x18002B (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
|
||||
; 0x18002B- 0x180030 (Unused)
|
||||
;--------------------------------------------------------------------------------
|
||||
org $B08031 ; PC 0x180031
|
||||
EnableEasterEggs:
|
||||
@@ -387,9 +350,7 @@ org $B0808E ; PC 0x18008E
|
||||
FakeBoots:
|
||||
db $00 ; #$00 = Off (default) - #$01 = On
|
||||
;--------------------------------------------------------------------------------
|
||||
org $30808F ; PC 0x18008F
|
||||
SeededRNG:
|
||||
db $01 ; #$00 = Off - #$01 = Seeded RNG (default for rando)
|
||||
; 0x18008F (unused)
|
||||
;--------------------------------------------------------------------------------
|
||||
org $B08090 ; PC 0x180090 - 0x180097
|
||||
ProgressiveSwordLimit:
|
||||
@@ -1458,16 +1419,6 @@ db $04
|
||||
;AD - Small Key of Ganon's Tower
|
||||
;AE - Reserved
|
||||
;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
|
||||
;org $8283E0 ; PC 0x103E0 (Bank02.asm:816) (BNE)
|
||||
|
||||
46
timer.asm
46
timer.asm
@@ -36,12 +36,12 @@ endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
CalculateTimer:
|
||||
LDA.w #$0000
|
||||
STA.w ClockHours ; clear digit storage
|
||||
STA.w ClockHours+2
|
||||
STA.w ClockMinutes
|
||||
STA.w ClockMinutes+2
|
||||
STA.w ClockSeconds
|
||||
STA.w ClockSeconds+2
|
||||
STA.l ClockHours ; clear digit storage
|
||||
STA.l ClockHours+2
|
||||
STA.l ClockMinutes
|
||||
STA.l ClockMinutes+2
|
||||
STA.l ClockSeconds
|
||||
STA.l ClockSeconds+2
|
||||
|
||||
LDA.l TimerStyle : AND.w #$00FF : CMP.w #$0002 : BNE + ; Stopwatch Mode
|
||||
%Sub32(NMIFrames,ChallengeTimer,ClockBuffer)
|
||||
@@ -57,8 +57,8 @@ CalculateTimer:
|
||||
LDA.l NMIFrames+2 : STA.l ChallengeTimer+2
|
||||
RTS
|
||||
++ CMP.w #$0001 : BNE ++ ; Negative Time
|
||||
LDA.w ClockBuffer : EOR.w #$FFFF : !ADD.w #$0001 : STA.w ClockBuffer
|
||||
LDA.w ClockBuffer+2 : EOR.w #$FFFF : ADC.w #$0000 : STA.w ClockBuffer+2
|
||||
LDA.l ClockBuffer : EOR.w #$FFFF : !ADD.w #$0001 : STA.l ClockBuffer
|
||||
LDA.l ClockBuffer+2 : EOR.w #$FFFF : ADC.w #$0000 : STA.l ClockBuffer+2
|
||||
LDA.w #$0001 : STA.l ClockStatus ; Set Negative Mode
|
||||
BRA .prepDigits
|
||||
++ CMP.w #$0002 : BNE ++ ; OHKO
|
||||
@@ -92,12 +92,12 @@ CalculateTimer:
|
||||
%Sub32(ClockBuffer,.second,ClockBuffer) : BRA -
|
||||
+
|
||||
|
||||
LDA.w ClockHours : !ADD.w #$2490 : STA.w ClockHours ; convert decimal values to tiles
|
||||
LDA.w ClockHours+2 : !ADD.w #$2490 : STA.w ClockHours+2
|
||||
LDA.w ClockMinutes : !ADD.w #$2490 : STA.w ClockMinutes
|
||||
LDA.w ClockMinutes+2 : !ADD.w #$2490 : STA.w ClockMinutes+2
|
||||
LDA.w ClockSeconds : !ADD.w #$2490 : STA.w ClockSeconds
|
||||
LDA.w ClockSeconds+2 : !ADD.w #$2490 : STA.w ClockSeconds+2
|
||||
LDA.l ClockHours : !ADD.w #$2490 : STA.l ClockHours ; convert decimal values to tiles
|
||||
LDA.l ClockHours+2 : !ADD.w #$2490 : STA.l ClockHours+2
|
||||
LDA.l ClockMinutes : !ADD.w #$2490 : STA.l ClockMinutes
|
||||
LDA.l ClockMinutes+2 : !ADD.w #$2490 : STA.l ClockMinutes+2
|
||||
LDA.l ClockSeconds : !ADD.w #$2490 : STA.l ClockSeconds
|
||||
LDA.l ClockSeconds+2 : !ADD.w #$2490 : STA.l ClockSeconds+2
|
||||
RTS
|
||||
;--------------------------------------------------------------------------------
|
||||
.hour
|
||||
@@ -123,7 +123,6 @@ DrawChallengeTimer:
|
||||
STA.l HUDTileMapBuffer+$94
|
||||
STA.l HUDTileMapBuffer+$96
|
||||
++
|
||||
|
||||
LDA.l TimerStyle : BNE + : RTL : + ; Hud Timer
|
||||
LDA.w #$2807 : STA.l HUDTileMapBuffer+$92
|
||||
LDA.l ClockStatus : AND.w #$0002 : BEQ + ; DNF / OKHO
|
||||
@@ -149,14 +148,14 @@ DrawChallengeTimer:
|
||||
BRA ++
|
||||
+ ; Show Timer
|
||||
LDA.l ClockStatus : AND.w #$0001 : !ADD.w #$2804 : STA.l HUDTileMapBuffer+$94
|
||||
LDA.w ClockHours+2 : STA.l HUDTileMapBuffer+$96
|
||||
LDA.w ClockHours : STA.l HUDTileMapBuffer+$98
|
||||
LDA.l ClockHours+2 : STA.l HUDTileMapBuffer+$96
|
||||
LDA.l ClockHours : STA.l HUDTileMapBuffer+$98
|
||||
LDA.w #$2806 : STA.l HUDTileMapBuffer+$9A
|
||||
LDA.w ClockMinutes+2 : STA.l HUDTileMapBuffer+$9C
|
||||
LDA.w ClockMinutes : STA.l HUDTileMapBuffer+$9E
|
||||
LDA.l ClockMinutes+2 : STA.l HUDTileMapBuffer+$9C
|
||||
LDA.l ClockMinutes : STA.l HUDTileMapBuffer+$9E
|
||||
LDA.w #$2806 : STA.l HUDTileMapBuffer+$A0
|
||||
LDA.w ClockSeconds+2 : STA.l HUDTileMapBuffer+$A2
|
||||
LDA.w ClockSeconds : STA.l HUDTileMapBuffer+$A4
|
||||
LDA.l ClockSeconds+2 : STA.l HUDTileMapBuffer+$A2
|
||||
LDA.l ClockSeconds : STA.l HUDTileMapBuffer+$A4
|
||||
++
|
||||
LDA.b FrameCounter : AND.w #$001F : BNE + : JSR CalculateTimer : +
|
||||
|
||||
@@ -175,12 +174,11 @@ RTL
|
||||
CheckOHKO:
|
||||
SEP #$20
|
||||
LDA.l OHKOFlag : CMP.l OHKOCached : BNE .change
|
||||
REP #$20
|
||||
CLC
|
||||
REP #$21
|
||||
RTS
|
||||
.change
|
||||
STA.l OHKOCached
|
||||
INC.w UpdateHUDFlag
|
||||
LDA.b #$01 : STA.l UpdateHUDFlag
|
||||
REP #$20
|
||||
SEC
|
||||
RTS
|
||||
|
||||
@@ -4,8 +4,9 @@
|
||||
; in: X(w) - Length in Tiles
|
||||
;--------------------------------------------------------------------------------
|
||||
DoToast:
|
||||
PHY : PHP
|
||||
LDY.w ToastBuffer
|
||||
PHY : PHP : PHA
|
||||
LDA.l ToastBuffer : TAY
|
||||
PLA
|
||||
JSL.l WriteVRAMBlock
|
||||
PLP : PLY
|
||||
RTL
|
||||
|
||||
@@ -43,6 +43,7 @@ RTL
|
||||
JSL.l LoadItemPalette
|
||||
ASL
|
||||
RTL
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
; PrepDynamicTile
|
||||
; in: SpriteID,X - Loot ID
|
||||
@@ -362,25 +363,8 @@ LoadItemPalette:
|
||||
PLB : PLB
|
||||
REP #$30
|
||||
|
||||
|
||||
CPX.w #$00C0 : BNE .not_prog_bombs
|
||||
LDA.l SpecialWeaponLevel : AND.w #$00FF : BNE +
|
||||
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
|
||||
|
||||
LDA.l SpriteProperties_palette_addr,X : STA.b Scrap0A
|
||||
LDY.w #$000E
|
||||
JSR.w AuxPaletteCheck : BCS .aux
|
||||
LDA.w TransparencyFlag : BNE .SP05
|
||||
|
||||
@@ -139,8 +139,6 @@ RoomTag_GetHeartForPrize = $81C709
|
||||
RoomTag_GetHeartForPrize_spawn_prize = $81C731
|
||||
RoomTag_GetHeartForPrize_delete_tag = $81C749
|
||||
Chicken_SpawnAvengerChicken = $86A7DB
|
||||
Link_UseHammer = $879F82
|
||||
Link_UseBugNet = $87AFEE
|
||||
Link_PerformOpenChest_no_replacement = $87B59F
|
||||
Sprite_EA_HeartContainer_main = $85EF47
|
||||
Ancilla_ExecuteAll = $88832B
|
||||
|
||||
@@ -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
|
||||
;--------------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user