Files
dockipelago/worlds/tloz_oos/patching/asm/locations.yaml
Jonathan Tinney 7971961166
Some checks failed
Analyze modified files / flake8 (push) Failing after 2m28s
Build / build-win (push) Has been cancelled
Build / build-ubuntu2204 (push) Has been cancelled
ctest / Test C++ ubuntu-latest (push) Has been cancelled
ctest / Test C++ windows-latest (push) Has been cancelled
Analyze modified files / mypy (push) Has been cancelled
Build and Publish Docker Images / Push Docker image to Docker Hub (push) Successful in 5m4s
Native Code Static Analysis / scan-build (push) Failing after 5m2s
type check / pyright (push) Successful in 1m7s
unittests / Test Python 3.11.2 ubuntu-latest (push) Failing after 16m23s
unittests / Test Python 3.12 ubuntu-latest (push) Failing after 28m19s
unittests / Test Python 3.13 ubuntu-latest (push) Failing after 14m49s
unittests / Test hosting with 3.13 on ubuntu-latest (push) Successful in 5m0s
unittests / Test Python 3.13 macos-latest (push) Has been cancelled
unittests / Test Python 3.11 windows-latest (push) Has been cancelled
unittests / Test Python 3.13 windows-latest (push) Has been cancelled
add schedule I, sonic 1/frontiers/heroes, spirit island
2026-04-02 23:46:36 -07:00

480 lines
14 KiB
YAML

0b/6a6c/: dwbe locations.hollyGift
0b/64cc/: dwbe locations.blainoPrize
09/660f/: dw locations.underwaterItemBelowNatzuBridge
09/6281/: dw locations.floodgateKeeperHouse
09/66c6/: dw locations.springBananaTree
09/62a3/: dw locations.goronMountainPits
0b/7332/: dwbe locations.oldManInTreehouse
0b/6418/: dwbe locations.lostWoodsPedestal
08/4ce4/: dwbe locations.syrupShop1
08/4ce0/: dwbe locations.syrupShop2
08/4ce2/: dwbe locations.syrupShop3
08/4cd6/: dwbe locations.horonShop1
08/4cd4/: dwbe locations.horonShop2
08/4cd0/: dwbe locations.horonShop3
08/4cce/: dwbe locations.memberShop1
08/4cd2/: dwbe locations.memberShop2
08/4cd8/: dwbe locations.memberShop3
08/4cea/: dwbe locations.advanceShop1
08/4cec/: dwbe locations.advanceShop2
08/4cee/: dwbe locations.advanceShop3
0b/4fc5/: dwbe locations.towerOfWinter
0b/4fb9/: dwbe locations.towerOfSummer
0b/4fb5/: dwbe locations.towerOfSpring
0b/4fc1/: dwbe locations.towerOfAutumn
0b/6646/: dwbe locations.subrosianDanceHall
09/77da/: dwbe locations.subrosianMarket1
09/77e2/: dwbe locations.subrosianMarket2
09/77ee/: dwbe locations.subrosianMarket3
09/77f2/: dwbe locations.subrosianMarket4
09/77f4/: dwbe locations.subrosianMarket5
09/66b1/: dw locations.d1Basement
0b/4c0b/: dwbe locations.d4DiveSpot
09/5051/: dwbe locations.d5ArmosChest
0b/4c22/: dwbe locations.d5Basement
09/5689/: dw locations.d7ArmosPuzzle
0b/4fd5/: dwbe locations.mayorGift
0b/5c1b/: dwbe locations.goronGift
0b/5094/: dwbe locations.drLeftReward
0b/50e3/: dwbe locations.malonTrade
0b/5067/: dwbe locations.mrsRuulTrade
14/4bda/: dwbe locations.subrosianChefTrade
0b/61d3/: dwbe locations.biggoronTrade
0b/6353/: dwbe locations.ingoTrade
0b/5263/: dwbe locations.yellingOldManTrade
0b/5f41/: dwbe locations.syrupTrade
0b/521a/: dwbe locations.tickTockTrade
0b/63e5/: dwbe locations.guruguruTrade
# Seed trees (ID only as they can only receive seed items)
0d/68fb/: db locations.horonVillageSeedTree.id - $20
0d/68fe/: db locations.woodsOfWinterSeedTree.id - $20
0d/6901/: db locations.northHoronSeedTree.id - $20
0d/6904/: db locations.spoolSwampSeedTree.id - $20
0d/6907/: db locations.sunkenCitySeedTree.id - $20
0d/690a/: db locations.tarmRuinsSeedTree.id - $20
# D0 end chest
0a/7b90/: db locations.d0SwordChest.id
0a/7b92/: db locations.d0SwordChest.subid
# Temple of Seasons
15/70ce/: db locations.templeOfSeasons.id
15/70cc/: db locations.templeOfSeasons.subid
# Samasa Desert Pit
09/648c/: dw locations.samasaDesertPit
0b/60b1/: db locations.samasaDesertPit.id
# Maku Tree Gift
15/613a/: db locations.makuTree.id
15/613d/: db locations.makuTree.subid
09/7e16/: db locations.makuTree.id
09/7e19/: db locations.makuTree.subid
# Diving spot outside D4
0b/734e/: dwbe locations.divingSpotOutsideD4
0b/7358/: dwbe locations.divingSpotOutsideD4
##### SUBROSIA SEASIDE ########################################
# Note for the future, INTERAC_DATING_ROSA_EVENT subid 2 is an interaction that follows the player until they leave the beach
# (warp (can't find why) or walk to a room <60) and creates the treasure if the right tile is dug
08/62a5/: | # Replace "checkGlobalFlag" on GLOBALFLAG_STAR_ORE_FOUND
call getThisRoomFlags
bit 5,a
08/62fd/checkGotBeachCheckInThisRoom: | # Replace "call checkTreasureObtained"
call getThisRoomFlags
bit 5,a
db $20 ; Replace "jr c" by "jr nz"
# Star Ore item doesn't get a subid in vanilla game, we need to optimize that procedure to be able to set one
08/62e3/: |
jr z,$18
/copy s,$08,$22e4,$06
jr nz,$10
push bc
ld bc,locations.subrosiaSeaside
call createTreasure
pop bc
08/630f/: |
ld hl,$c866
set 5,(hl)
##### BOMB FLOWER ############################################
09/4397/: call objectSetInvisible
09/43be/: |
ld bc,locations.bombFlower
jp spawnTreasureOnLink
# Remove the problematic check where Bomb Flower interaction is removed if you own
# Bomb Flower (even in vanilla, this seems useless since the "GOT_ITEM" room flag
# is checked first...)
09/435c/: |
nop
nop
nop
nop
nop
##### GOLDEN BEASTS OLD MAN ####################################
# Make the golden beasts old man give a treasure instead of a ring
15/6ad9/: |
ld bc,locations.goldenBeastsOldMan
jp spawnTreasureOnLink
# Change the golden beasts old man requirement (both checked value and text)
15/6acf/goldenBeastsRequirement: db option.goldenBeastsRequirement
# Change the "jr z" into a "jr nc" to allow having more beasts killed than needed
15/6ad2/: db $30
##### TREEHOUSE OLD MAN ############################################
# Change the essence requirement for treehouse old man
0a/4f8b/: db option.treehouseOldManRequirement
##### GREAT FURNACE ###############################################
# Great Furnace location usually doesn't need a subID since it gives a Hard Ore with subid 0.
# Change that to allow randomized items with nonzero subID.
15//setHardOreIds: |
inc l
ld (hl),locations.greatFurnace.id
inc l
ld (hl),locations.greatFurnace.subid
ret
15/5b83/: call setHardOreIds
# Change the drop if you leave then come back to the room
09/66ea/: dw locations.greatFurnace
##### HARD ORE SMITHY ###############################################
# Skip "has shield" check for forging hard ore
0b/75c6/: db jumpifitemobtained,TREASURE_PUNCH
# Rework of the "subrosianSmith_giveUpgradedShield" function to handle randomized
# item and set a proper flag for client tracking
15/62a7/: |
call getThisRoomFlags
set 6,(hl) ; +0x40 on room flag
ld bc,locations.subrosianSmithyOre
jp spawnTreasureOnLink
##### BELL SMITHY ###############################################
0a/641d/: db $00,$00,$00 ; nop instructions about wPirateBellState
0a/6422/: db $38 ; and jr c, meaning we always reforge if we have the rusty bell
# Remove the "post-endgame" discussion when no items are reforgeable (patch is changed by secret_locations.yaml)
0b/7596/: dw $7598
# The "secret checking" script space is free (from 2f611 to 2f622 included)
0b/7611/reforgeRustyBell: |
db orroomflag,$80
db loseitem,TREASURE_RUSTY_BELL
db giveitem,locations.subrosianSmithyBell.id,locations.subrosianSmithyBell.subid
dwbe $75b6
0b/75b3/: dwbe reforgeRustyBell
##### TEMPLE OF SEASONS ##############################################
# don't display normal fixed text for temple of seasons item.
15/70be/: |
nop
nop
nop
# rod cutscene
15/70cf/: call giveTreasureCustom
##### MASTER DIVER'S TRADE #########################################
# Change Master Diver's condition from "has flippers" to "has obtained item"
0b/72f0/: db jumpifroomflagset,$80
# remove master's plaque from inventory to prevent confusion.
0b//script_diverGiveItem: |
db giveitem, locations.masterPlaqueTrade.id, locations.masterPlaqueTrade.subid
db orroomflag,$80
db loseitem,TREASURE_MASTERS_PLAQUE
db retscript
0b/730d/: |
db callscript
dw script_diverGiveItem
##### MT CUCCO PLATFORM CAVE ########################################
# mt. cucco platform cave item is normally created using ring-specific code.
# values are replaced at randomization.
09/641a/: |
ld bc,locations.mtCuccoPlatformCave
call createTreasure
##### LOST WOODS PEDESTAL ###########################################
# ignore sword level for lost woods pedestal.
08/7e62/: ld a,$01
# remove second sword (used to trigger spin slash) from lost woods script.
0b/641a/: db retscript
0b/6421/: db retscript
# This function is written in place of @checkTransition and does all the work
# in handling Lost Woods transitions, deciding in which room should the player
# be warped and whether related counter should be incremented.
# ----------------
# in(C): room index to warp to if sequence is complete
# in(DE): address to the transition counter
# in(HL): address to expected transitions table
# out(A): counter value
# out(Z): set if transition is complete
01/5e01/checkSpecialLostWoodsTransitions: |
ld a,(de)
rst 18 ; rst_addDoubleIndex
; Test the transition direction
ld b,(hl) ; b <- expected direction
ld a,(wScreenTransitionDirection)
cp b
jr nz,@wrongTransition
; Test the transition season
inc hl
ld b,(hl) ; b <- expected season
ld a,(wRoomStateModifier)
cp b
jr nz,@wrongTransition
; Successful transition, increment counter
ld a,(de)
cp $03
jr z,@complete
; On progress (not completion), increase counter and loop back to same room
inc a
ld (de),a ; Update transition counter
ld (wCustomBuffer),a ; Set some nonzero value in custom buffer to schedule the loopback
xor a ; Clear C flag to ensure we are testing the other sequence
ret
; On completion, warp to room in C and reset counter
@complete:
xor a
ld (de),a ; Update transition counter
ld a,c
ld (wActiveRoom),a
scf ; Set carry flag to indicate calling function we are overriding the destination
ret
; Reset counter on wrong transition
@wrongTransition:
xor a
ld (de),a
ret
# This function is written in the middle of @checkSwordUpgradeTransitions letting
# some space before and after for safety
01/5e48/checkNorthTransitions: |
; Clear the custom buffer used to store whether we need to loopback to the same map for complex cases
; (e.g. we are making progress in the sequence but transitioning to the right)
xor a
ld (wCustomBuffer),a
ld de,wLostWoodsTransitionCounter1
ld hl,@northTransitions
ld c,$30
jp checkSpecialLostWoodsTransitions
@northTransitions:
/include lostWoodsMainSequence
01/5dd3/: call checkNorthTransitions
# This function is written in place of @checkSwordUpgradeTransitions
01/5e31/checkPedestalTransitions: |
ld de,wLostWoodsTransitionCounter2
ld hl,@pedestalTransitions
ld c,$c9
call checkSpecialLostWoodsTransitions
ret c
; Since this is the second function being called, check if something was store inside the custom buffer
; to know if we need to force loopback before going back to vanilla code
jp enforceLoopbackOnProgress
@pedestalTransitions:
/include lostWoodsPedestalSequence
01/5dd7/: call checkPedestalTransitions
# This function reads the custom buffer to enforce a loopback to the same room if some progress was made on one of the
# sequences
01//enforceLoopbackOnProgress: |
ld a,(wCustomBuffer)
or a
ret z
ld a,$40
ld (wActiveRoom),a
scf
ret
##### HERO'S CAVE CHEST ############################################
# stop hero's cave chest from giving a second sword that causes a spin slash.
0a/7bb8/: jr $17
##### SUBROSIAN HIDE AND SEEK ############################################
# removes the event where the subrosians steal your feather.
11/6f8c/: db $ff
# set fixed items for the first dig and all subsequent digs
15/5dd6/: |
; First dig: put randomized item
ld bc,locations.subrosiaHideAndSeek
jr $25
; Subsequent digs: put 50 Ore Chunks
ld bc,$3700
jr $20
# allow to transition away from the screen even if the item is not dug
09/659b/: |
xor a
ld ($ccab),a
jp interactionDelete
##### VASU'S GIFT ###################################################
# Vasu usually gives a ring, we need him to give a treasure instead
15/49a6/: |
ld bc,locations.vasuGift
jp spawnTreasureOnLink
##### LONELY GORON'S GIFT ###################################################
# Instructions to remove most of the Goron's ring box upgrade script
0b/5bff/: db $eb
0b/5c00/: db $eb,$eb,$eb,$eb,$eb,$eb,$eb,$eb,$eb,$eb,$eb,$eb,$eb,$eb,$eb,$eb
0b/5c10/: db $eb,$eb,$eb,$eb,$eb,$eb,$eb,$eb,$eb,$eb
##### SUBROSIAN SIGN-LOVING GUY ########################################
# Edit subrosian_checkSignsDestroyed to edit the condition
15/592c/: |
ld a,(wTotalSignsDestroyed)
ld b,a
ld c,$05 # condition met text
cp option.signGuyRequirement
jr nc,$14
ld c,$00 # tell requirement text
jr $10
# Change the item given
15/595d/: |
ld bc,locations.subrosianSignLovingGuy
jp spawnTreasureOnLink
##### MAPLE TRADE ######################################################
# Make Maple trade a randomized item which sets a custom flag, both for client tracking purpose
# and to prevent from obtaining this item several times (@state3 of INTERACID_GHASTLY_DOLL)
0a/53cc/: |
call interactionIncState
# Test flag to skip treasure creation if item has already been obtained (from several Lon Lon Eggs in pool)
ld a,(wBoughtShopItems2)
bit 3,a
ret nz
# Create a treasure with a forced collect mode (using multiworld collect override)
ld bc,locations.mapleTrade
call spawnTreasureOnLink
ld l,$71
ld (hl),COLLECT_PICKUP_NOFLAG
# Set a flag to tell it has been collected
ld a,(wBoughtShopItems2)
or $08
ld (wBoughtShopItems2),a
ret
# Remove timer after getting Maple trade item
0a/540e/: |
nop
nop
nop
nop
##### TALON TRADE ######################################################
# Make Talon spawn a real treasure interaction instead of a fixed trade item
15//spawnTalonTreasure: |
call getFreeInteractionSlot
ret nz
ld (hl),INTERACID_TREASURE
inc l
ld (hl),locations.talonTrade.id
inc l
ld (hl),locations.talonTrade.subid
ld l,$4b ; y
ld (hl),$68
ld l,$4d ; x
ld (hl),$48
; Put a forced collect mode which overrides any kind of deduction from room ID
ld l,$71
ld (hl),COLLECT_PICKUP_NOFLAG
ret
# Edit caveTalonScript to call that specific function
0b/607d/: |
db asm15
dw spawnTalonTreasure
db $eb,$eb ; do nothing (initcollisions for nothing)
# Look for an interaction of type treasure in the room, and move the first
# one found on Link for him to collect it.
15//moveTreasureOnLink: |
push hl
push de
push bc
ld hl,$d041
@loop:
ld a,(hl)
cp INTERACID_TREASURE
jr nz,@next
@found:
ld de,$d00b ; wLink.yh
call objectCopyPosition_rawAddress
jr @end
@next:
ld a,h
cp $df
jr z,@end
inc h
jr @loop
@end:
pop bc
pop de
pop hl
ret
# Edit talon_giveMushroomAfterWaking to move the treasure behind him on Link
# instead of giving an item spawned on the fly
14/49f5/: |
db asm15
dw moveTreasureOnLink