Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
0b58acb
Key rings
Alchav Apr 22, 2026
5b94507
Supress errors
Alchav Apr 23, 2026
235c3a6
Graphics compressor
Alchav Apr 23, 2026
0f69038
Key Ring graphic
Alchav Apr 23, 2026
f921421
Shuffle Prizes
Alchav Apr 23, 2026
89a6cb0
Fix Crystal palette
Alchav Apr 23, 2026
9c3237c
Stabilize shuffled boss prize item flow, hooks, and palettes
Alchav Apr 25, 2026
59a36e3
Hide boss prize item during deferred textbox
Alchav Apr 25, 2026
c21dab7
Full width progressive items showing correctly as prizes
Alchav Apr 27, 2026
3aae5dd
Half-width prizes fixed
Alchav Apr 27, 2026
631a0c9
Fix Progressive Sword/Shield on prize locations
Alchav Apr 28, 2026
7e77526
Restrict boss prize draw offsets to milestone ancilla
Alchav Apr 28, 2026
6807eff
Remove stored boss prize X shift from narrow items
Alchav Apr 28, 2026
f23b23b
Document WRAM usage
Alchav Apr 28, 2026
38a1503
Fix Crystal palettes
Alchav Apr 28, 2026
1028c27
Merge key-rings-2 into shuffle-prizes
Alchav Apr 30, 2026
80f98c8
Fix Crystal Palettes!
Alchav May 1, 2026
deb7f30
Fix Crystal shadow on Prize locations
Alchav May 1, 2026
256e75e
Link once again holds items up
Alchav May 1, 2026
7d0bb57
Fix remaining prize x position issues
Alchav May 1, 2026
daa5d16
Fix prize shield palettes
Alchav May 1, 2026
4be33d7
The real x pos fix
Alchav May 1, 2026
08559d1
Silver Arrows just use single arrow graphic, key rings take the silve…
Alchav May 1, 2026
732cc8b
Add comments
Alchav May 1, 2026
0fcae34
Revert build.py for now
Alchav May 1, 2026
022baf9
Fix trap item graphics on prize location
Alchav May 1, 2026
32bcc1b
Merge branch 'main' into shuffle-prizes
Alchav May 1, 2026
5ac0528
Fix Small Key Ring for Current Dungeon on prize location
Alchav May 1, 2026
6ad54cc
Merge branch 'main' into shuffle-prizes
Alchav May 1, 2026
d139a85
Merge remote-tracking branch 'origin/shuffle-prizes' into shuffle-prizes
Alchav May 1, 2026
c32ab53
Require Number of Dungeons; check actual boss kills
Alchav May 2, 2026
6f45db1
Fix Crystal Palettes in Shops
May 2, 2026
8258934
Remove obsolete crystal palette workarounds
May 2, 2026
7e1b486
Fix Aga 1 and 2 checks for Ganon goal
May 3, 2026
21d63ab
Fix GT opening crash
May 3, 2026
49faf6f
Fix key ring for current dungeon animation skipped on chest
May 3, 2026
9529b77
Fix Boss Heart Container Fanfare
May 3, 2026
a4059b0
Earlier prize location check
May 3, 2026
5c52417
Substitute bombs for rupees when capacity is 0
May 3, 2026
7497aed
Record read hints
May 3, 2026
5b9554a
Fix Bomb substitution in shops
May 4, 2026
f38e105
Fix full-size pot key replacement sprite sizing
May 4, 2026
23c9099
Fix floodgate softlock not triggering
May 5, 2026
dbc8201
Add prize location IDs to entrance lookup table
Jun 22, 2026
afad00e
Keep hint read tracking from suppressing textboxes
Jun 22, 2026
bb8f696
Direct patch to Mothula sword damage
Jun 23, 2026
414470e
Don't lock up when reapplying freezes/stuns with sword
Alchav Jun 29, 2026
601d6d7
Merge remote-tracking branch 'origin/shuffle-prizes' into shuffle-prizes
Alchav Jun 29, 2026
52a8119
Crystals 5 and 6 are red
Jul 6, 2026
f59b7ac
Two-torch rooms
Jul 8, 2026
6f36454
Finish making red crystals red
Jul 12, 2026
9a811f9
Fix floodgate animation when left lever is good
Jul 12, 2026
c2ee799
Fix fourth heart piece on boss prize preventing warp-out
Jul 16, 2026
8acac4a
Wallmasters stay dead option
Jul 17, 2026
a9d27de
Dungeons cleared indicator row
Jul 19, 2026
cdf2d99
Room 131 three torch hack
Jul 19, 2026
9a11bb6
Fix boss_prize_shuffle off bug
Jul 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added 2026items.bin
Binary file not shown.
Binary file added 2026items.gfx
Binary file not shown.
58 changes: 51 additions & 7 deletions LTTP_RND_GeneralBugfixes.asm
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ incsrc itemdowngrade.asm
incsrc bugfixes.asm
incsrc darkworldspawn.asm
incsrc lampmantlecone.asm
incsrc floodgatesoftlock.asm
incsrc floodgates.asm
incsrc heartpieces.asm
incsrc npcitems.asm
incsrc utilities.asm
Expand All @@ -138,7 +138,6 @@ incsrc maidencrystals.asm
incsrc zoraking.asm
incsrc catfish.asm
incsrc flute.asm
incsrc dungeondrops.asm
incsrc halfmagicbat.asm
incsrc newitems.asm
incsrc mantle.asm
Expand All @@ -148,10 +147,6 @@ incsrc map.asm
incsrc msu.asm
incsrc dialog.asm
incsrc entrances.asm
incsrc clock.asm
incsrc accessability.asm
incsrc heartbeep.asm
incsrc capacityupgrades.asm
print "End of Coda Bank $20: ", pc
warnpc $A18000

Expand Down Expand Up @@ -179,6 +174,52 @@ org $A1FF00 ; static mapping area
incsrc init.asm

org $A48000 ; code bank - PUT NEW CODE HERE

; Current-dungeon key rings picked up from floor objects should add the
; dungeon's key quantity and update HUD/stats without the normal item fanfare.
Link_ReceiveItem_HandleCurrentDungeonKeyRing:
CPY.b #$CE : BNE .normalReceive
LDA !MULTIWORLD_ITEM_PLAYER_ID : BNE .normalReceive
JSL.l BossPrizeReceiveContextMatches : BCS .normalReceive
LDA $02E9 : CMP.b #$03 : BNE .normalReceive
JSL.l ReceiveCurrentDungeonKeyRingQuiet
JSL.l Player_HaltDashAttackLong
CLC
PLB
RTL

.normalReceive
LDA $02E9
BEQ .fromTextOrObject
CMP.b #$03 : BEQ .fromTextOrObject
.fromChestOrSprite
JML $0799F2
.fromTextOrObject
JML $0799C8

; Grant floor-object current-dungeon key rings directly because they should not
; use the normal hold-up animation.
ReceiveCurrentDungeonKeyRingQuiet:
PHX : PHY
LDA $040C : CMP.b #$FF : BEQ .cleanup
LSR : TAX
LDA.l KeyRingQuantities, X : BEQ .cleanup
CLC : ADC $7EF36F : STA $7EF36F
JSL.l UpdateKeys
LDY.b #$CE
JSL.l FullInventoryExternal
JSL.l CountChestKeyLong
JSL.l HUD_RebuildLong
.cleanup
STZ $02D8 : STZ $02D9 : STZ $02E9
STZ $02DA : STZ $037B : STZ $02E4
PLY : PLX
RTL

incsrc clock.asm
incsrc accessability.asm
incsrc heartbeep.asm
incsrc capacityupgrades.asm
incsrc timer.asm
incsrc doorframefixes.asm
incsrc music.asm
Expand Down Expand Up @@ -217,6 +258,7 @@ incsrc darkroomitems.asm
incsrc multiworld.asm
incsrc terrorpin.asm
incsrc RandSprite.asm
incsrc dungeondrops.asm
print "End of Coda Bank $24: ", pc
warnpc $A58000

Expand Down Expand Up @@ -264,8 +306,10 @@ warnpc $31A800

org $31A800
GFX_New_Items:
incbin newitems.gfx
;incbin newitems.gfx
;incbin eventitems.gfx ; *EVENT*
; 2026 item graphics include the key ring art
incbin 2026items.gfx
warnpc $31B000

org $31B000
Expand Down
Binary file modified c2e3e.bin
Binary file not shown.
Binary file modified c2e3e.gfx
Binary file not shown.
1 change: 1 addition & 0 deletions contrib.asm
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ Sprite_ShowSolicitedMessageIfPlayerFacing_Alt:

.SahasrahlaDialogs
REP #$20 : LDA.l MapReveal_Sahasrahla : ORA !MAP_OVERLAY : STA !MAP_OVERLAY : SEP #$20
JSL.l TrackHintRead
JSL DialogSahasrahla : BRA .SayNothing

.BombShopGuyDialog
Expand Down
Binary file modified damage_table.bin
Binary file not shown.
92 changes: 72 additions & 20 deletions darkroomitems.asm
Original file line number Diff line number Diff line change
@@ -1,27 +1,79 @@
CheckReceivedItemPropertiesBeforeLoad:
LDA $A0 : BEQ .normalCode
LDA $7EC005 : BNE .lightOff
.normalCode
LDA.l AddReceivedItemExpanded_properties, X ;Restore Rando Code
RTL

.lightOff
PHX : PHY : PHB
LDA.l AddReceivedItemExpanded_properties, X ; get palette

REP #$30
AND #$0007 ; mask out palette
ASL #5 ; multiply by 32
; Load received-item palette properties, using the boss-prize display item when
; the receive animation is showing a substituted/progressive prize.
CheckReceivedItemPropertiesBeforeLoad:
PHX
LDA $7F504C : BEQ +
LDA $7F504D : TAX
+
LDA $A0 : BEQ .normalCode
LDA $7EC005 : BNE .lightOff
.normalCode
JSR .loadProperty
PLX
CMP.b #$00 ; preserve vanilla BPL behavior by setting flags from the loaded property, not restored X
RTL

.lightOff
PHY : PHB
JSR .loadProperty

REP #$30
AND #$0007 ; mask out palette
ASL #5 ; multiply by 32
ADC #$C610 ; offset to latter half

TAX ; give to destination
LDY #$C610 ; target palette SP0 colors 8-F

LDA #$000F ; 16 bytes
MVN $7E, $7E ; move palette

SEP #$30
PLB : PLY : PLX
INC $15
LDA #$00
RTL

SEP #$30
PLB : PLY : PLX
INC $15
LDA #$00
RTL

; Swords and shields use inventory-dependent palette properties, so boss
; prizes need the resolved display item rather than the original item ID.
.loadProperty
LDA $7F504C : BEQ .normalProperty
TXA : CMP.b #$49 : BEQ .masterSword
CMP.b #$01 : BEQ .masterSword
CMP.b #$50 : BEQ .masterSword
CMP.b #$02 : BEQ .temperedSword
CMP.b #$03 : BEQ .goldenSword
CMP.b #$04 : BCC .normalProperty
CMP.b #$07 : BCC .shield

.normalProperty
LDA.l AddReceivedItemExpanded_properties, X ; Restore Rando Code
RTS

.masterSword
LDA.b #$02
RTS

.temperedSword
LDA.b #$01
RTS

.goldenSword
LDA.b #$04
RTS

.shield
LDA.b #$05
RTS

; Boss-prize crystals are spawned as ordinary receive-item objects, but still
; need the crystal-specific fanfare/state path once they are collected.
CrystalItemBehaviorCheck:
LDA $0C5E, X : CMP.b #$20 : BNE .ordinaryItem
LDA $0C54, X : CMP.b #$03 : BEQ .bossPrizeCrystal

.ordinaryItem
JML.l CrystalFanfareContinue

.bossPrizeCrystal
JML.l CrystalSpecialBehaviorContinue
71 changes: 67 additions & 4 deletions dialog.asm
Original file line number Diff line number Diff line change
Expand Up @@ -177,14 +177,24 @@ FreeDungeonItemNotice:
+ : LDA.l FreeItemText : AND.b #$08 : CMP.b #$08 : BNE + ; show message for dungeon big key
LDA !ITEM_TEMPORARY : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of...
%CopyDialog(Notice_BigKeyOf)
BRA .dungeon
BRL .dungeon
+ : LDA.l FreeItemText : AND.b #$01 : CMP.b #$01 : BNE + ; show message for dungeon small key
LDA !ITEM_TEMPORARY : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of...
LDA !ITEM_TEMPORARY : CMP.b #$AF : BNE ++ : BRL .skip : ++
%CopyDialog(Notice_SmallKeyOf)
PLA : AND.b #$0F : STA $7F5020 : LDA.b #$0F : !SUB $7F5020 : PHA
LDA #$01 : STA $7F5010 ; set up a flip for small keys
BRA .dungeon
; Key rings share the small-key notice flag but use their own text prefix.
+ : LDA.l FreeItemText : AND.b #$01 : CMP.b #$01 : BNE + ; show message for dungeon key ring
LDA !ITEM_TEMPORARY : AND.b #$F0 : CMP.b #$C0 : BNE + ; key ring of...
LDA !ITEM_TEMPORARY : CMP.b #$CE : !BLT .keyRingNotice
BRL .skip
.keyRingNotice
%CopyDialog(Notice_KeyRingOf)
PLA : AND.b #$0F : STA $7F5020 : LDA.b #$0F : !SUB $7F5020 : PHA
LDA #$01 : STA $7F5010 ; set up a flip for key rings
BRA .dungeon
+
BRL .skip ; it's not something we are going to give a notice for

Expand Down Expand Up @@ -398,20 +408,71 @@ DialogBombShopGuy:
JSL.l Sprite_ShowMessageUnconditional
RTL
;--------------------------------------------------------------------------------
!HINT_READ_FLAGS = "$7EF4F1"
;--------------------------------------------------------------------------------
TrackHintRead:
PHX : PHP
REP #$30
LDA.w $1CF0
LDX.w #$0000

-
CMP.l HintReadTable, X : BEQ .match
LDA.l HintReadTable, X : CMP.w #$FFFF : BEQ .done
INX #4
LDA.w $1CF0
BRA -

.match
LDA.l HintReadTable+2, X
PHA
AND.w #$00FF
TAX
PLA
XBA
SEP #$20
ORA.l !HINT_READ_FLAGS, X
STA.l !HINT_READ_FLAGS, X
.done
PLP : PLX
RTL
;--------------------------------------------------------------------------------
Main_ShowTextMessage_TrackHintRead:
; Are we in text mode? If so then end the routine.
LDA $10 : CMP.b #$0E : BEQ .already_in_text_mode

JSL.l TrackHintRead

STZ $0223 ; Otherwise set it so we are in text mode.
STZ $1CD8 ; Initialize the step in the submodule

; Go to text display mode (as opposed to maps, etc)
LDA.b #$02 : STA $11

; Store the current module in the temporary location.
LDA $10 : STA $010C

; Switch the main module ($10) to text mode.
LDA.b #$0E : STA $10

.already_in_text_mode
RTL
;--------------------------------------------------------------------------------
Main_ShowTextMessage_Alt:
; Are we in text mode? If so then end the routine.
LDA $10 : CMP.b #$0E : BEQ .already_in_text_mode
Sprite_ShowMessageMinimal_Alt:
STZ $11

PHX : PHY
PHX : PHY : PHP
SEP #$20
LDA.b $00 : PHA
LDA.b $01 : PHA
LDA.b $02 : PHA

LDA.b #$1C : STA.b $02
REP #$30
LDA.w $1CF0 : ASL : TAX
LDA.w $1CF0 : ASL : CLC : ADC.w $1CF0 : TAX
LDA.l $7f71c0, X
STA.b $00
SEP #$30
Expand All @@ -427,6 +488,8 @@ Sprite_ShowMessageMinimal_Alt:
BRL .end
+

JSL.l TrackHintRead

STZ $0223 ; Otherwise set it so we are in text mode.
STZ $1CD8 ; Initialize the step in the submodule

Expand All @@ -442,7 +505,7 @@ Sprite_ShowMessageMinimal_Alt:
PLA : STA.b $02
PLA : STA.b $01
PLA : STA.b $00
PLY : PLX
PLP : PLY : PLX

Main_ShowTextMessage_Alt_already_in_text_mode:
RTL
Expand Down
Loading