├── .github └── workflows │ ├── multiworld_build.yml │ └── python-parse-test.yml ├── .gitignore ├── .tinyci ├── LICENSE ├── README.md ├── assembler.const ├── assembler.py ├── backgroundEditor.py ├── cavegen.py ├── checkMetadata.py ├── docs ├── _config.yml ├── _includes │ └── head-custom.html ├── faq.html ├── favicon.ico ├── hack0.md ├── index.html ├── logo.png ├── plan-template.txt ├── style.css └── tips.html ├── entityData.py ├── entranceInfo.py ├── explorer.py ├── generator.py ├── getGFX.py ├── gfx ├── AgesGirl.bin ├── AgesGirl.bin.png ├── AgesGirl.bin.txt ├── Bowwow.bin ├── Bowwow.bin.png ├── Bowwow.bin.txt ├── Bunny.bin ├── Bunny.bin.png ├── Bunny.bin.txt ├── GrandmaUlrira.bin ├── GrandmaUlrira.bin.png ├── GrandmaUlrira.bin.txt ├── Kirby.bin ├── Kirby.bin.png ├── Kirby.bin.txt ├── Linker.txt ├── Luigi.bin ├── Luigi.bin.png ├── Luigi.bin.txt ├── MMLink.bin ├── MMLink.bin.png ├── MMLink.bin.txt ├── Marin.bin ├── Marin.bin.png ├── Marin.bin.txt ├── MarinAlpha.bin ├── MarinAlpha.bin.png ├── MarinAlpha.bin.txt ├── Mario.bin ├── Mario.bin.png ├── Mario.bin.txt ├── Martha.bin ├── Martha.bin.png ├── Martha.bin.txt ├── Matty.bin ├── Matty.bin.names ├── Matty.bin.png ├── Matty.bin.txt ├── Meme.bin ├── Meme.bin.names ├── Meme.bin.png ├── Meme.bin.txt ├── NESLink.bin ├── NESLink.bin.names ├── NESLink.bin.png ├── NESLink.bin.txt ├── Ninten.bin ├── Ninten.bin.png ├── Ninten.bin.txt ├── Richard.bin ├── Richard.bin.png ├── Richard.bin.txt ├── Ricky.bin ├── Ricky.bin.png ├── Rooster.bin ├── Rooster.bin.png ├── Rooster.bin.txt ├── Rosa.bin ├── Rosa.bin.png ├── Rosa.bin.txt ├── Saria.bin ├── Saria.bin.png ├── Saria.bin.txt ├── Sig.bin ├── Sig.bin.names ├── Sig.bin.png ├── Sig.bin.txt ├── Subrosian.bin ├── Subrosian.bin.names ├── Subrosian.bin.png ├── Subrosian.bin.txt ├── Tarin.bin ├── Tarin.bin.png ├── Tarin.bin.txt ├── X.bin ├── X.bin.png ├── X.bin.txt ├── ZeroMeaning.txt ├── template.png ├── template_extended.png └── template_extended2.png ├── gfxconv.py ├── hints.py ├── itempool.py ├── launch_web_ui.py ├── locations ├── all.py ├── anglerKey.py ├── beachSword.py ├── birdKey.py ├── boomerangGuy.py ├── chest.py ├── constants.py ├── droppedKey.py ├── faceKey.py ├── fishingMinigame.py ├── goldLeaf.py ├── heartContainer.py ├── heartPiece.py ├── hookshot.py ├── instrument.py ├── itemInfo.py ├── items.py ├── keyLocation.py ├── keyhole.py ├── madBatter.py ├── owlStatue.py ├── seashell.py ├── shop.py ├── song.py ├── startItem.py ├── toadstool.py ├── tradeSequence.py ├── tunicFairy.py └── witch.py ├── logic ├── __init__.py ├── dungeon1.py ├── dungeon2.py ├── dungeon3.py ├── dungeon4.py ├── dungeon5.py ├── dungeon6.py ├── dungeon7.py ├── dungeon8.py ├── dungeonChain.py ├── dungeonColor.py ├── location.py ├── main.py ├── overworld.py └── requirements.py ├── main.py ├── mapexport.py ├── mapgen ├── __init__.py ├── enemygen.py ├── imagegenerator.py ├── locationgen.py ├── locations │ ├── base.py │ ├── chest.py │ ├── entrance.py │ ├── entrance_info.py │ └── seashell.py ├── logic.py ├── map.py ├── roomgen.py ├── roomtype │ ├── base.py │ ├── forest.py │ ├── mountain.py │ ├── town.py │ └── water.py ├── tileset.py ├── util.py └── wfc.py ├── multiworld ├── arduinoConnector │ ├── arduinoConnector.ino │ ├── lua.exe │ ├── lua54.dll │ ├── serial.dll │ └── socket.dll ├── bizhawkConnector.lua ├── client.py ├── server.py └── socket.dll ├── musicData.py ├── patches ├── aesthetics.py ├── alttp.py ├── bank3e.asm │ ├── bowwow.asm │ ├── chest.asm │ ├── evilshop.asm │ ├── link.asm │ ├── main.asm │ ├── message.asm │ ├── multiworld.asm │ ├── nightmareminiboss.asm │ └── owl.asm ├── bank3e.py ├── bank3f.py ├── bingo.py ├── bomb.py ├── bowwow.py ├── cats │ ├── Aurene.bin │ ├── Garfield.bin │ ├── Marie.bin │ ├── Mausi.bin │ ├── ayrie.bin │ ├── bert.bin │ ├── binx.bin │ ├── carlo.bin │ ├── colby_jack.bin │ ├── dusty_daisy.bin │ ├── fluffy.bin │ ├── galactica.bin │ ├── henkie.bin │ ├── jack.bin │ ├── jose.bin │ ├── lola.bin │ ├── meep.bin │ ├── mora.bin │ ├── newton.bin │ ├── nyan.bin │ ├── patapouf.bin │ ├── pippin.bin │ ├── schoko.bin │ └── sunny.bin ├── chest.py ├── colorBook.py ├── core.py ├── desert.py ├── droppedKey.py ├── dungeon.py ├── endscreen.py ├── enemies.py ├── entrances.py ├── evilshop.py ├── extragfx.py ├── fishingMinigame.py ├── follower.py ├── goal.py ├── goldenLeaf.py ├── hardMode.py ├── health.py ├── heartPiece.py ├── instrument.py ├── inventory.py ├── madBatter.py ├── maptweaks.py ├── marin.txt ├── maze.py ├── multiworld.py ├── music.py ├── overworld.py ├── overworld │ ├── alttp │ │ ├── 00.json │ │ ├── 01.json │ │ ├── 02.json │ │ ├── 03.json │ │ ├── 04.json │ │ ├── 05.json │ │ ├── 06.json │ │ ├── 07.json │ │ ├── 08.json │ │ ├── 09.json │ │ ├── 0A.json │ │ ├── 0B.json │ │ ├── 0C.json │ │ ├── 0D.json │ │ ├── 0E.json │ │ ├── 0F.json │ │ ├── 10.json │ │ ├── 11.json │ │ ├── 12.json │ │ ├── 13.json │ │ ├── 14.json │ │ ├── 15.json │ │ ├── 16.json │ │ ├── 17.json │ │ ├── 18.json │ │ ├── 19.json │ │ ├── 1A.json │ │ ├── 1B.json │ │ ├── 1C.json │ │ ├── 1D.json │ │ ├── 1E.json │ │ ├── 1E8.json │ │ ├── 1F.json │ │ ├── 1F8.json │ │ ├── 20.json │ │ ├── 21.json │ │ ├── 22.json │ │ ├── 23.json │ │ ├── 24.json │ │ ├── 25.json │ │ ├── 26.json │ │ ├── 27.json │ │ ├── 28.json │ │ ├── 29.json │ │ ├── 2A.json │ │ ├── 2B.json │ │ ├── 2C.json │ │ ├── 2C8.json │ │ ├── 2D.json │ │ ├── 2DF.json │ │ ├── 2E.json │ │ ├── 2F.json │ │ ├── 30.json │ │ ├── 31.json │ │ ├── 32.json │ │ ├── 33.json │ │ ├── 34.json │ │ ├── 35.json │ │ ├── 36.json │ │ ├── 37.json │ │ ├── 38.json │ │ ├── 39.json │ │ ├── 3A.json │ │ ├── 3B.json │ │ ├── 3C.json │ │ ├── 3D.json │ │ ├── 3E.json │ │ ├── 3F.json │ │ ├── 40.json │ │ ├── 41.json │ │ ├── 42.json │ │ ├── 43.json │ │ ├── 44.json │ │ ├── 45.json │ │ ├── 46.json │ │ ├── 47.json │ │ ├── 48.json │ │ ├── 49.json │ │ ├── 4A.json │ │ ├── 4B.json │ │ ├── 4C.json │ │ ├── 4D.json │ │ ├── 4E.json │ │ ├── 4F.json │ │ ├── 50.json │ │ ├── 51.json │ │ ├── 52.json │ │ ├── 53.json │ │ ├── 54.json │ │ ├── 55.json │ │ ├── 56.json │ │ ├── 57.json │ │ ├── 58.json │ │ ├── 59.json │ │ ├── 5A.json │ │ ├── 5B.json │ │ ├── 5C.json │ │ ├── 5D.json │ │ ├── 5E.json │ │ ├── 5F.json │ │ ├── 60.json │ │ ├── 61.json │ │ ├── 62.json │ │ ├── 63.json │ │ ├── 64.json │ │ ├── 65.json │ │ ├── 66.json │ │ ├── 67.json │ │ ├── 68.json │ │ ├── 69.json │ │ ├── 6A.json │ │ ├── 6B.json │ │ ├── 6C.json │ │ ├── 6D.json │ │ ├── 6E.json │ │ ├── 6F.json │ │ ├── 70.json │ │ ├── 71.json │ │ ├── 72.json │ │ ├── 73.json │ │ ├── 74.json │ │ ├── 75.json │ │ ├── 76.json │ │ ├── 77.json │ │ ├── 78.json │ │ ├── 79.json │ │ ├── 7A.json │ │ ├── 7B.json │ │ ├── 7C.json │ │ ├── 7D.json │ │ ├── 7E.json │ │ ├── 7F.json │ │ ├── 80.json │ │ ├── 81.json │ │ ├── 82.json │ │ ├── 83.json │ │ ├── 84.json │ │ ├── 85.json │ │ ├── 86.json │ │ ├── 87.json │ │ ├── 88.json │ │ ├── 89.json │ │ ├── 8A.json │ │ ├── 8B.json │ │ ├── 8C.json │ │ ├── 8D.json │ │ ├── 8E.json │ │ ├── 8F.json │ │ ├── 90.json │ │ ├── 91.json │ │ ├── 92.json │ │ ├── 93.json │ │ ├── 94.json │ │ ├── 95.json │ │ ├── 96.json │ │ ├── 97.json │ │ ├── 98.json │ │ ├── 99.json │ │ ├── 9A.json │ │ ├── 9B.json │ │ ├── 9C.json │ │ ├── 9D.json │ │ ├── 9E.json │ │ ├── 9F.json │ │ ├── A0.json │ │ ├── A1.json │ │ ├── A2.json │ │ ├── A3.json │ │ ├── A4.json │ │ ├── A5.json │ │ ├── A6.json │ │ ├── A7.json │ │ ├── A8.json │ │ ├── A9.json │ │ ├── AA.json │ │ ├── AB.json │ │ ├── AC.json │ │ ├── AD.json │ │ ├── AE.json │ │ ├── AF.json │ │ ├── Alt06.json │ │ ├── Alt0E.json │ │ ├── Alt1B.json │ │ ├── Alt2B.json │ │ ├── Alt79.json │ │ ├── Alt8C.json │ │ ├── B0.json │ │ ├── B1.json │ │ ├── B2.json │ │ ├── B3.json │ │ ├── B4.json │ │ ├── B5.json │ │ ├── B6.json │ │ ├── B7.json │ │ ├── B8.json │ │ ├── B9.json │ │ ├── BA.json │ │ ├── BB.json │ │ ├── BC.json │ │ ├── BD.json │ │ ├── BE.json │ │ ├── BF.json │ │ ├── C0.json │ │ ├── C1.json │ │ ├── C2.json │ │ ├── C3.json │ │ ├── C4.json │ │ ├── C5.json │ │ ├── C6.json │ │ ├── C7.json │ │ ├── C8.json │ │ ├── C9.json │ │ ├── CA.json │ │ ├── CB.json │ │ ├── CC.json │ │ ├── CD.json │ │ ├── CE.json │ │ ├── CF.json │ │ ├── D0.json │ │ ├── D1.json │ │ ├── D2.json │ │ ├── D3.json │ │ ├── D4.json │ │ ├── D5.json │ │ ├── D6.json │ │ ├── D7.json │ │ ├── D8.json │ │ ├── D9.json │ │ ├── DA.json │ │ ├── DB.json │ │ ├── DC.json │ │ ├── DD.json │ │ ├── DE.json │ │ ├── DF.json │ │ ├── E0.json │ │ ├── E1.json │ │ ├── E2.json │ │ ├── E3.json │ │ ├── E4.json │ │ ├── E5.json │ │ ├── E6.json │ │ ├── E7.json │ │ ├── E8.json │ │ ├── E9.json │ │ ├── EA.json │ │ ├── EB.json │ │ ├── EC.json │ │ ├── ED.json │ │ ├── EE.json │ │ ├── EF.json │ │ ├── F0.json │ │ ├── F1.json │ │ ├── F2.json │ │ ├── F3.json │ │ ├── F4.json │ │ ├── F5.json │ │ ├── F6.json │ │ ├── F7.json │ │ ├── F8.json │ │ ├── F9.json │ │ ├── FA.json │ │ ├── FB.json │ │ ├── FC.json │ │ ├── FD.json │ │ ├── FE.json │ │ ├── FF.json │ │ ├── desert.png │ │ ├── hammer.png │ │ └── walrus.png │ └── dive │ │ ├── 00.json │ │ ├── 01.json │ │ ├── 06.json │ │ ├── 16.json │ │ ├── 62.json │ │ ├── 6C.json │ │ ├── 71.json │ │ ├── 72.json │ │ ├── 73.json │ │ ├── 81.json │ │ ├── 82.json │ │ ├── 83.json │ │ ├── 91.json │ │ ├── 92.json │ │ ├── 93.json │ │ ├── A1.json │ │ ├── A2.json │ │ ├── A3.json │ │ ├── B0.json │ │ ├── B1.json │ │ ├── B2.json │ │ └── B3.json ├── owl.py ├── phone.py ├── photographer.py ├── reduceRNG.py ├── rooster.py ├── save.py ├── seashell.py ├── shop.py ├── softlock.py ├── songs.py ├── tarin.py ├── titleScreen.py ├── tradeSequence.py ├── trendy.py ├── tunicFairy.py ├── weapons.py └── witch.py ├── plan.py ├── pointerTable.py ├── randomizer.py ├── rom.py ├── romTables.py ├── roomEditor.py ├── roomInfo.py ├── settings.py ├── spoilerLog.py ├── utils.py ├── worldSetup.py └── www ├── gfx2bin.html ├── index.html ├── js ├── options.js ├── ui.js └── worker.js ├── multiworld.html ├── mystery.html ├── plando.html └── style.css /.github/workflows/multiworld_build.yml: -------------------------------------------------------------------------------- 1 | name: Build multiworld client 2 | 3 | on: 4 | push: 5 | branches: [ "master" ] 6 | pull_request: 7 | branches: [ "master" ] 8 | 9 | permissions: 10 | contents: read 11 | 12 | jobs: 13 | build: 14 | runs-on: windows-latest 15 | 16 | steps: 17 | - uses: actions/checkout@v4 18 | - name: Install dependencies 19 | run: | 20 | python -m pip install --upgrade pip 21 | pip install -U pyinstaller 22 | pip install -U flask 23 | - name: Install pyevilemu 24 | run: | 25 | git clone https://github.com/daid/pyevilemu.git 26 | cd pyevilemu 27 | python setup.py install 28 | - name: Build with pyinstaller 29 | run: | 30 | cd multiworld 31 | pyinstaller --clean -y client.py -n multiworldclient 32 | - name: Upload windows dist build 33 | uses: actions/upload-artifact@v4 34 | with: 35 | name: multiworld-client-windows 36 | path: multiworld/dist/multiworldclient 37 | -------------------------------------------------------------------------------- /.tinyci: -------------------------------------------------------------------------------- 1 | [tinyci] 2 | enabled = True 3 | 4 | [build-test] 5 | directory = _test 6 | commands = 7 | python3 ../main.py ../input.gbc --timeout 120 --output /dev/null 8 | python3 ../main.py ../input.gbc --timeout 120 -s seashells=0 -s heartpiece=0 -s dungeon_items=keysanity --output /dev/null 9 | python3 ../main.py ../input.gbc --timeout 120 -s logic=glitched -s dungeon_items=keysanity -s heartpiece=0 -s seashells=0 -s heartcontainers=0 -s instruments=1 -s owlstatues=both -s dungeonshuffle=1 -s witch=0 -s boomerang=gift -s steal=never -s goal=instruments -s goalcount=random --output /dev/null 10 | python3 ../main.py ../input.gbc --timeout 120 -s logic=casual -s dungeon_items=keysy -s itempool=casual --output /dev/null 11 | python3 ../main.py ../input.gbc --timeout 120 -s textmode=none --output /dev/null 12 | python3 ../main.py ../input.gbc --timeout 120 -s overworld=dungeondive --output /dev/null 13 | ignore = 14 | python3 ../main.py ../input.gbc --timeout 120 --seashells --heartpiece --entranceshuffle simple --output /dev/null 15 | python3 ../main.py ../input.gbc --timeout 120 --seashells --heartpiece --entranceshuffle advanced --output /dev/null 16 | python3 ../main.py ../input.gbc --timeout 120 --seashells --heartpiece --entranceshuffle insanity --output /dev/null 17 | python3 ../main.py ../input.gbc --timeout 120 --seashells --heartpiece --spoilerformat text --spoilerfilename /dev/null --output /dev/null 18 | python3 ../main.py ../input.gbc --timeout 120 --seashells --heartpiece --spoilerformat json --spoilerfilename /dev/null --output /dev/null 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Daid 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Legend Of Zelda: Link's Awakening DX: Randomizer 2 | Or, LADXR for short. 3 | 4 | ## What is this? 5 | 6 | See https://daid.github.io/LADXR/ 7 | 8 | ## Usage 9 | 10 | The only requirements are: to use python3, and the English v1.0 ROM for Links Awakening DX. 11 | 12 | The proper SHA-1 for the rom is `d90ac17e9bf17b6c61624ad9f05447bdb5efc01a`. 13 | 14 | Basic usage: 15 | `python3 main.py zelda.gbc` 16 | 17 | The script will generate a new rom with item locations shuffled. There are many options, see `-h` on the script for details. 18 | 19 | There's also a little helper that launches the web UI locally: 20 | 21 | `python3 launch_web_ui.py` 22 | 23 | ## Development 24 | 25 | This is still in the early stage of development. Important bits are: 26 | * `randomizer.py`: Contains the actual logic to randomize the rom, and checks to make sure it can be solved. 27 | * `logic/*.py`: Contains the logic definitions of what connects to what in the world and what it requires to access that part. 28 | * `locations/*.py`: Contains definitions of location types, and what items can be there. As well as the code on how to place an item there. For example the Chest class has a list of all items that can be in a chest. And the needed rom patch to put that an item in a specific chest. 29 | * `patches/*.py`: Various patches on the code that are not directly related to a specific location. But more general fixes 30 | -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-hacker -------------------------------------------------------------------------------- /docs/_includes/head-custom.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {% include head-custom-theme-colors.html %} 6 | 7 | 8 | {% include head-custom-google-analytics.html %} 9 | 10 | 11 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/docs/favicon.ico -------------------------------------------------------------------------------- /docs/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/docs/logo.png -------------------------------------------------------------------------------- /docs/style.css: -------------------------------------------------------------------------------- 1 | .container { 2 | max-width: 1100px; 3 | background: #FFF; 4 | border: solid 1px #666; 5 | border-radius: 10px; 6 | margin-top: 20px; 7 | padding-bottom: 20px; 8 | margin-bottom: 200px; 9 | } 10 | .inputcontainer { 11 | display: flex; 12 | box-sizing: border-box; 13 | align-items: center; 14 | border: solid 1px #CCC; 15 | border-radius: 5px; 16 | width: 100%; 17 | height: 100%; 18 | } 19 | .inputcontainer * { 20 | margin: 0px; 21 | box-sizing: border-box; 22 | } 23 | .inputcontainer > :last-child { 24 | flex: 1 1 auto; 25 | background: #DDD; 26 | border: solid 1px #AAA; 27 | } 28 | .inputcontainerparent { 29 | padding: 1px 5px; 30 | } 31 | .tooltip::after { 32 | white-space: pre-wrap; 33 | width: 90%; 34 | pointer-events: none; 35 | } 36 | label { 37 | padding-right: 20px; 38 | } 39 | h1 { 40 | margin-bottom: 0px; 41 | } 42 | form { 43 | background: initial; 44 | border: initial; 45 | color: initial; 46 | margin: initial; 47 | padding: initial; 48 | } 49 | .selectromwarning { 50 | box-shadow: inset 0 0 0 2px red; 51 | } 52 | header .logo { 53 | left: 0; 54 | right: 0; 55 | text-align: center; 56 | display: block; 57 | } 58 | -------------------------------------------------------------------------------- /getGFX.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import PIL.Image 3 | import re 4 | 5 | url = "https://raw.githubusercontent.com/CrystalSaver/Z4RandomizerBeta2/master/" 6 | 7 | for k, v in requests.get(url + "asset-manifest.json").json()['files'].items(): 8 | m = re.match("static/media/Graphics(.+)\\.bin", k) 9 | assert m is not None 10 | if not k.startswith("static/media/Graphics") or not k.endswith(".bin"): 11 | continue 12 | name = m.group(1) 13 | 14 | data = requests.get(url + v).content 15 | 16 | icon = PIL.Image.new("P", (16, 16)) 17 | buffer = bytearray(b'\x00' * 16 * 8) 18 | for idx in range(0x0C0, 0x0C2): 19 | for y in range(16): 20 | a = data[idx * 32 + y * 2] 21 | b = data[idx * 32 + y * 2 + 1] 22 | for x in range(8): 23 | v = 0 24 | if a & (0x80 >> x): 25 | v |= 1 26 | if b & (0x80 >> x): 27 | v |= 2 28 | buffer[x+y*8] = v 29 | tile = PIL.Image.frombytes('P', (8, 16), bytes(buffer)) 30 | x = (idx % 16) * 8 31 | icon.paste(tile, (x, 0)) 32 | pal = icon.getpalette() 33 | assert pal is not None 34 | pal[0:3] = [150, 150, 255] 35 | pal[3:6] = [0, 0, 0] 36 | pal[6:9] = [59, 180, 112] 37 | pal[9:12] = [251, 221, 197] 38 | icon.putpalette(pal) 39 | icon = icon.resize((32, 32)) 40 | icon.save("gfx/%s.bin.png" % (name)) 41 | open("gfx/%s.bin" % (name), "wb").write(data) 42 | -------------------------------------------------------------------------------- /gfx/AgesGirl.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/AgesGirl.bin -------------------------------------------------------------------------------- /gfx/AgesGirl.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/AgesGirl.bin.png -------------------------------------------------------------------------------- /gfx/AgesGirl.bin.txt: -------------------------------------------------------------------------------- 1 | ZeroMeaning.txt -------------------------------------------------------------------------------- /gfx/Bowwow.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Bowwow.bin -------------------------------------------------------------------------------- /gfx/Bowwow.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Bowwow.bin.png -------------------------------------------------------------------------------- /gfx/Bowwow.bin.txt: -------------------------------------------------------------------------------- 1 | Linker.txt -------------------------------------------------------------------------------- /gfx/Bunny.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Bunny.bin -------------------------------------------------------------------------------- /gfx/Bunny.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Bunny.bin.png -------------------------------------------------------------------------------- /gfx/Bunny.bin.txt: -------------------------------------------------------------------------------- 1 | Linker.txt -------------------------------------------------------------------------------- /gfx/GrandmaUlrira.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/GrandmaUlrira.bin -------------------------------------------------------------------------------- /gfx/GrandmaUlrira.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/GrandmaUlrira.bin.png -------------------------------------------------------------------------------- /gfx/GrandmaUlrira.bin.txt: -------------------------------------------------------------------------------- 1 | ZeroMeaning.txt -------------------------------------------------------------------------------- /gfx/Kirby.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Kirby.bin -------------------------------------------------------------------------------- /gfx/Kirby.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Kirby.bin.png -------------------------------------------------------------------------------- /gfx/Kirby.bin.txt: -------------------------------------------------------------------------------- 1 | ZeroMeaning.txt -------------------------------------------------------------------------------- /gfx/Linker.txt: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Linker", 3 | "url": "https://twitter.com/BenjaminMaksym" 4 | } 5 | -------------------------------------------------------------------------------- /gfx/Luigi.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Luigi.bin -------------------------------------------------------------------------------- /gfx/Luigi.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Luigi.bin.png -------------------------------------------------------------------------------- /gfx/Luigi.bin.txt: -------------------------------------------------------------------------------- 1 | Linker.txt -------------------------------------------------------------------------------- /gfx/MMLink.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/MMLink.bin -------------------------------------------------------------------------------- /gfx/MMLink.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/MMLink.bin.png -------------------------------------------------------------------------------- /gfx/MMLink.bin.txt: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Spikey-Valentine, Thunder Wool, and Techokami", 3 | "url": "https://www.spriters-resource.com/custom_edited/thelegendofzeldacustoms/sheet/159119/" 4 | } 5 | -------------------------------------------------------------------------------- /gfx/Marin.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Marin.bin -------------------------------------------------------------------------------- /gfx/Marin.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Marin.bin.png -------------------------------------------------------------------------------- /gfx/Marin.bin.txt: -------------------------------------------------------------------------------- 1 | ZeroMeaning.txt -------------------------------------------------------------------------------- /gfx/MarinAlpha.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/MarinAlpha.bin -------------------------------------------------------------------------------- /gfx/MarinAlpha.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/MarinAlpha.bin.png -------------------------------------------------------------------------------- /gfx/MarinAlpha.bin.txt: -------------------------------------------------------------------------------- 1 | ZeroMeaning.txt -------------------------------------------------------------------------------- /gfx/Mario.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Mario.bin -------------------------------------------------------------------------------- /gfx/Mario.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Mario.bin.png -------------------------------------------------------------------------------- /gfx/Mario.bin.txt: -------------------------------------------------------------------------------- 1 | Linker.txt -------------------------------------------------------------------------------- /gfx/Martha.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Martha.bin -------------------------------------------------------------------------------- /gfx/Martha.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Martha.bin.png -------------------------------------------------------------------------------- /gfx/Martha.bin.txt: -------------------------------------------------------------------------------- 1 | ZeroMeaning.txt -------------------------------------------------------------------------------- /gfx/Matty.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Matty.bin -------------------------------------------------------------------------------- /gfx/Matty.bin.names: -------------------------------------------------------------------------------- 1 | TRADING_ITEM_NECKLACE:Bikini Top 2 | RED_TUNIC:Red Dress 3 | BLUE_TUNIC:Blue Dress 4 | -------------------------------------------------------------------------------- /gfx/Matty.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Matty.bin.png -------------------------------------------------------------------------------- /gfx/Matty.bin.txt: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Madam Materia", 3 | "url": "https://www.twitch.tv/isabelle_zephyr" 4 | } 5 | -------------------------------------------------------------------------------- /gfx/Meme.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Meme.bin -------------------------------------------------------------------------------- /gfx/Meme.bin.names: -------------------------------------------------------------------------------- 1 | SWORD:Stick 2 | MAGIC_ROD:Fire Flower 3 | INSTRUMENT1:Triforce of Power 4 | INSTRUMENT2:Star Power 5 | #INSTRUMENT3: 6 | INSTRUMENT4:Pendant Of Power 7 | #INSTRUMENT5: 8 | #INSTRUMENT6: 9 | INSTRUMENT7:Screw Attack 10 | INSTRUMENT8:Gameboy 11 | BOWWOW:Charmander 12 | RUPEE:Coin 13 | RUPEES:Coins 14 | -------------------------------------------------------------------------------- /gfx/Meme.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Meme.bin.png -------------------------------------------------------------------------------- /gfx/Meme.bin.txt: -------------------------------------------------------------------------------- 1 | Linker.txt -------------------------------------------------------------------------------- /gfx/NESLink.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/NESLink.bin -------------------------------------------------------------------------------- /gfx/NESLink.bin.names: -------------------------------------------------------------------------------- 1 | OCARINA:Flute 2 | -------------------------------------------------------------------------------- /gfx/NESLink.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/NESLink.bin.png -------------------------------------------------------------------------------- /gfx/NESLink.bin.txt: -------------------------------------------------------------------------------- 1 | ZeroMeaning.txt -------------------------------------------------------------------------------- /gfx/Ninten.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Ninten.bin -------------------------------------------------------------------------------- /gfx/Ninten.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Ninten.bin.png -------------------------------------------------------------------------------- /gfx/Ninten.bin.txt: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Swordy", 3 | "url": "" 4 | } 5 | -------------------------------------------------------------------------------- /gfx/Richard.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Richard.bin -------------------------------------------------------------------------------- /gfx/Richard.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Richard.bin.png -------------------------------------------------------------------------------- /gfx/Richard.bin.txt: -------------------------------------------------------------------------------- 1 | Linker.txt -------------------------------------------------------------------------------- /gfx/Ricky.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Ricky.bin -------------------------------------------------------------------------------- /gfx/Ricky.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Ricky.bin.png -------------------------------------------------------------------------------- /gfx/Rooster.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Rooster.bin -------------------------------------------------------------------------------- /gfx/Rooster.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Rooster.bin.png -------------------------------------------------------------------------------- /gfx/Rooster.bin.txt: -------------------------------------------------------------------------------- 1 | ZeroMeaning.txt -------------------------------------------------------------------------------- /gfx/Rosa.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Rosa.bin -------------------------------------------------------------------------------- /gfx/Rosa.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Rosa.bin.png -------------------------------------------------------------------------------- /gfx/Rosa.bin.txt: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Jill", 3 | "url": "" 4 | } 5 | -------------------------------------------------------------------------------- /gfx/Saria.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Saria.bin -------------------------------------------------------------------------------- /gfx/Saria.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Saria.bin.png -------------------------------------------------------------------------------- /gfx/Saria.bin.txt: -------------------------------------------------------------------------------- 1 | { 2 | "name": "MoonSuccubus", 3 | "url": "https://www.spriters-resource.com/custom_edited/thelegendofzeldacustoms/sheet/193204/" 4 | } 5 | -------------------------------------------------------------------------------- /gfx/Sig.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Sig.bin -------------------------------------------------------------------------------- /gfx/Sig.bin.names: -------------------------------------------------------------------------------- 1 | NIGHTMARE_KEY:Boss Key 2 | NIGHTMARE_KEY1:Boss Key for Tail Cave 3 | NIGHTMARE_KEY2:Boss Key for Bottle Grotto 4 | NIGHTMARE_KEY3:Boss Key for Key Cavern 5 | NIGHTMARE_KEY4:Boss Key for Angler's Tunnel 6 | NIGHTMARE_KEY5:Boss Key for Catfish's Maw 7 | NIGHTMARE_KEY6:Boss Key for Face Shrine 8 | NIGHTMARE_KEY7:Boss Key for Eagle's Tower 9 | NIGHTMARE_KEY8:Boss Key for Turtle Rock 10 | NIGHTMARE_KEY0:Boss Key for Color Dungeon 11 | RED_TUNIC:Red Lab Coat 12 | BLUE_TUNIC:Blue Lab Coat 13 | MEDICINE:Potion 14 | TOADSTOOL:Mushroom 15 | MAGIC_ROD:Magic Staff 16 | TRADING_ITEM_YOSHI_DOLL: Jiro Plush 17 | -------------------------------------------------------------------------------- /gfx/Sig.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Sig.bin.png -------------------------------------------------------------------------------- /gfx/Sig.bin.txt: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Madam Materia and Techokami", 3 | "url": "https://www.twitch.tv/isabelle_zephyr" 4 | } 5 | -------------------------------------------------------------------------------- /gfx/Subrosian.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Subrosian.bin -------------------------------------------------------------------------------- /gfx/Subrosian.bin.names: -------------------------------------------------------------------------------- 1 | SWORD:Rod of Seasons 2 | RUPEE:Chunk of Ore 3 | RUPEES:Chunks of Ore 4 | -------------------------------------------------------------------------------- /gfx/Subrosian.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Subrosian.bin.png -------------------------------------------------------------------------------- /gfx/Subrosian.bin.txt: -------------------------------------------------------------------------------- 1 | ZeroMeaning.txt -------------------------------------------------------------------------------- /gfx/Tarin.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Tarin.bin -------------------------------------------------------------------------------- /gfx/Tarin.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/Tarin.bin.png -------------------------------------------------------------------------------- /gfx/Tarin.bin.txt: -------------------------------------------------------------------------------- 1 | Linker.txt -------------------------------------------------------------------------------- /gfx/X.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/X.bin -------------------------------------------------------------------------------- /gfx/X.bin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/X.bin.png -------------------------------------------------------------------------------- /gfx/X.bin.txt: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AhziDahaka", 3 | "url": "" 4 | } 5 | -------------------------------------------------------------------------------- /gfx/ZeroMeaning.txt: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Zero Meaning", 3 | "url": "https://www.twitch.tv/zeromeaning/" 4 | } -------------------------------------------------------------------------------- /gfx/template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/template.png -------------------------------------------------------------------------------- /gfx/template_extended.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/template_extended.png -------------------------------------------------------------------------------- /gfx/template_extended2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/gfx/template_extended2.png -------------------------------------------------------------------------------- /locations/all.py: -------------------------------------------------------------------------------- 1 | from .beachSword import BeachSword 2 | from .chest import Chest, DungeonChest 3 | from .droppedKey import DroppedKey 4 | from .seashell import Seashell, SeashellMansionBonus, SeashellMansion 5 | from .heartContainer import HeartContainer 6 | from .owlStatue import OwlStatue 7 | from .madBatter import MadBatter 8 | from .shop import ShopItem 9 | from .startItem import StartItem 10 | from .toadstool import Toadstool 11 | from .witch import Witch 12 | from .goldLeaf import GoldLeaf, SlimeKey 13 | from .boomerangGuy import BoomerangGuy 14 | from .anglerKey import AnglerKey 15 | from .hookshot import HookshotDrop 16 | from .faceKey import FaceKey 17 | from .birdKey import BirdKey 18 | from .heartPiece import HeartPiece 19 | from .tunicFairy import TunicFairy 20 | from .song import Song 21 | from .instrument import Instrument 22 | from .fishingMinigame import FishingMinigame 23 | from .keyLocation import KeyLocation 24 | from .tradeSequence import TradeSequenceItem 25 | from .keyhole import KeyHole 26 | 27 | from .items import * 28 | -------------------------------------------------------------------------------- /locations/anglerKey.py: -------------------------------------------------------------------------------- 1 | from .droppedKey import DroppedKey 2 | 3 | 4 | class AnglerKey(DroppedKey): 5 | def __init__(self): 6 | super().__init__(0x0CE) 7 | 8 | def patch(self, rom, option, *, multiworld=None): 9 | super().patch(rom, option, multiworld=multiworld) 10 | # As the angler key can be in 2 possible rooms, patch both. 11 | rom.banks[0x3E][0x3800 + 0x1F8] = rom.banks[0x3E][0x3800 + 0x0CE] 12 | rom.banks[0x3E][0x3300 + 0x1F8] = rom.banks[0x3E][0x3300 + 0x0CE] 13 | -------------------------------------------------------------------------------- /locations/beachSword.py: -------------------------------------------------------------------------------- 1 | from .droppedKey import DroppedKey 2 | from .items import * 3 | from roomEditor import RoomEditor 4 | from assembler import ASM 5 | from typing import Optional 6 | from rom import ROM 7 | 8 | 9 | class BeachSword(DroppedKey): 10 | def __init__(self) -> None: 11 | super().__init__(0x0F2) 12 | 13 | def patch(self, rom: ROM, option: str, *, multiworld: Optional[int] = None) -> None: 14 | # Set the heart piece data 15 | super().patch(rom, option, multiworld=multiworld) 16 | 17 | # Patch the room to contain a heart piece instead of the sword on the beach 18 | re = RoomEditor(rom, 0x0F2) 19 | re.removeEntities(0x31) # remove sword 20 | re.addEntity(5, 5, 0x35) # add heart piece 21 | re.store(rom) 22 | 23 | # Prevent shield drops from the like-like from turning into swords. 24 | rom.patch(0x03, 0x1B9C, ASM("ld a, [wSwordLevel]"), ASM("ld a, $01"), fill_nop=True) 25 | rom.patch(0x03, 0x244D, ASM("ld a, [wSwordLevel]"), ASM("ld a, $01"), fill_nop=True) 26 | 27 | def read(self, rom: ROM) -> str: 28 | re = RoomEditor(rom, 0x0F2) 29 | if re.hasEntity(0x31): 30 | return SWORD 31 | return super().read(rom) 32 | -------------------------------------------------------------------------------- /locations/birdKey.py: -------------------------------------------------------------------------------- 1 | from .droppedKey import DroppedKey 2 | 3 | 4 | class BirdKey(DroppedKey): 5 | def __init__(self): 6 | super().__init__(0x27A) 7 | 8 | -------------------------------------------------------------------------------- /locations/faceKey.py: -------------------------------------------------------------------------------- 1 | from .droppedKey import DroppedKey 2 | 3 | 4 | class FaceKey(DroppedKey): 5 | def __init__(self): 6 | super().__init__(0x27F) 7 | -------------------------------------------------------------------------------- /locations/fishingMinigame.py: -------------------------------------------------------------------------------- 1 | from .droppedKey import DroppedKey 2 | from .constants import * 3 | 4 | 5 | class FishingMinigame(DroppedKey): 6 | def __init__(self): 7 | super().__init__(0x2B1) 8 | 9 | def configure(self, options): 10 | if options.heartpiece: 11 | super().configure(options) 12 | else: 13 | self.OPTIONS = [HEART_PIECE] 14 | -------------------------------------------------------------------------------- /locations/goldLeaf.py: -------------------------------------------------------------------------------- 1 | from .droppedKey import DroppedKey 2 | 3 | 4 | class GoldLeaf(DroppedKey): 5 | pass # Golden leaves are patched to work exactly like dropped keys 6 | 7 | 8 | class SlimeKey(DroppedKey): 9 | # The slime key is secretly a golden leaf and just normally uses logic depended on the room number. 10 | # As we patched it to act like a dropped key, we can just be a dropped key in the right room 11 | def __init__(self): 12 | super().__init__(0x0C6) 13 | -------------------------------------------------------------------------------- /locations/heartContainer.py: -------------------------------------------------------------------------------- 1 | from .droppedKey import DroppedKey 2 | from .items import * 3 | 4 | 5 | class HeartContainer(DroppedKey): 6 | # Due to the patches a heartContainers acts like a dropped key. 7 | def configure(self, options): 8 | if options.heartcontainers or options.hpmode in ('extralow', '5hit'): 9 | super().configure(options) 10 | elif options.hpmode == 'inverted': 11 | self.OPTIONS = [BAD_HEART_CONTAINER] 12 | elif options.hpmode == 'low': 13 | self.OPTIONS = [HEART_PIECE] 14 | else: 15 | self.OPTIONS = [HEART_CONTAINER] 16 | -------------------------------------------------------------------------------- /locations/heartPiece.py: -------------------------------------------------------------------------------- 1 | from .droppedKey import DroppedKey 2 | from .items import * 3 | 4 | 5 | class HeartPiece(DroppedKey): 6 | # Due to the patches a heartPiece acts like a dropped key. 7 | 8 | def configure(self, options): 9 | if options.heartpiece: 10 | super().configure(options) 11 | else: 12 | self.OPTIONS = [HEART_PIECE] 13 | -------------------------------------------------------------------------------- /locations/hookshot.py: -------------------------------------------------------------------------------- 1 | from .droppedKey import DroppedKey 2 | 3 | 4 | """ 5 | The hookshot is dropped by the master stalfos. 6 | The master stalfos drops a "key" with, and modifies a bunch of properties: 7 | 8 | ld a, $30 ; $7EE1: $3E $30 9 | call SpawnNewEntity_trampoline ; $7EE3: $CD $86 $3B 10 | 11 | And then the dropped key handles the rest with room number specific code. 12 | As we patched the dropped key, this requires no extra handling. 13 | """ 14 | 15 | 16 | class HookshotDrop(DroppedKey): 17 | def __init__(self): 18 | super().__init__(0x180) 19 | -------------------------------------------------------------------------------- /locations/instrument.py: -------------------------------------------------------------------------------- 1 | from .droppedKey import DroppedKey 2 | 3 | 4 | class Instrument(DroppedKey): 5 | # Thanks to patches, an instrument is just a dropped key as far as the randomizer is concerned. 6 | 7 | def configure(self, options): 8 | if not options.instruments and not options.goal == "seashells": 9 | self.OPTIONS = ["INSTRUMENT%d" % (self._location.dungeon)] 10 | -------------------------------------------------------------------------------- /locations/keyLocation.py: -------------------------------------------------------------------------------- 1 | from .itemInfo import ItemInfo 2 | 3 | 4 | class KeyLocation(ItemInfo): 5 | OPTIONS = [] 6 | 7 | def __init__(self, key): 8 | super().__init__() 9 | self.OPTIONS = [key] 10 | 11 | def patch(self, rom, option, *, multiworld=None): 12 | pass 13 | 14 | def read(self, rom): 15 | return self.OPTIONS[0] 16 | 17 | def configure(self, options): 18 | pass 19 | 20 | @property 21 | def nameId(self): 22 | return self.OPTIONS[0] if self.OPTIONS and len(self.OPTIONS) == 1 else "None" 23 | -------------------------------------------------------------------------------- /locations/madBatter.py: -------------------------------------------------------------------------------- 1 | from .itemInfo import ItemInfo 2 | from .constants import * 3 | 4 | 5 | class MadBatter(ItemInfo): 6 | OPTIONS = [POWER_BRACELET, SHIELD, BOW, HOOKSHOT, MAGIC_ROD, PEGASUS_BOOTS, OCARINA, 7 | FEATHER, SHOVEL, MAGIC_POWDER, BOMB, SWORD, FLIPPERS, MAGNIFYING_LENS, MEDICINE, 8 | TAIL_KEY, ANGLER_KEY, FACE_KEY, BIRD_KEY, GOLD_LEAF, SLIME_KEY, ROOSTER, HAMMER, 9 | RUPEES_50, RUPEES_20, RUPEES_100, RUPEES_200, RUPEES_500, 10 | SEASHELL, MESSAGE, BOOMERANG, HEART_PIECE, BOWWOW, ARROWS_10, SINGLE_ARROW, 11 | MAX_POWDER_UPGRADE, MAX_BOMBS_UPGRADE, MAX_ARROWS_UPGRADE, RED_TUNIC, BLUE_TUNIC, 12 | HEART_CONTAINER, BAD_HEART_CONTAINER, TOADSTOOL, SONG1, SONG2, SONG3, 13 | INSTRUMENT1, INSTRUMENT2, INSTRUMENT3, INSTRUMENT4, INSTRUMENT5, INSTRUMENT6, INSTRUMENT7, INSTRUMENT8, 14 | TRADING_ITEM_YOSHI_DOLL, TRADING_ITEM_RIBBON, TRADING_ITEM_DOG_FOOD, TRADING_ITEM_BANANAS, TRADING_ITEM_STICK, 15 | TRADING_ITEM_HONEYCOMB,TRADING_ITEM_PINEAPPLE, TRADING_ITEM_HIBISCUS, TRADING_ITEM_LETTER, TRADING_ITEM_BROOM, 16 | TRADING_ITEM_FISHING_HOOK,TRADING_ITEM_NECKLACE,TRADING_ITEM_SCALE,TRADING_ITEM_MAGNIFYING_GLASS, 17 | TAIL_CAVE_OPENED, KEY_CAVERN_OPENED, ANGLER_TUNNEL_OPENED, FACE_SHRINE_OPENED, CASTLE_GATE_OPENED, EAGLE_TOWER_OPENED 18 | ] 19 | MULTIWORLD = True 20 | 21 | def configure(self, options): 22 | return 23 | 24 | def patch(self, rom, option, *, multiworld=None): 25 | rom.banks[0x18][0x0F90 + (self.room & 0x0F)] = CHEST_ITEMS[option] 26 | if multiworld is not None: 27 | rom.banks[0x3E][0x3300 + self.room] = multiworld 28 | 29 | def read(self, rom): 30 | assert self._location is not None, hex(self.room) 31 | value = rom.banks[0x18][0x0F90 + (self.room & 0x0F)] 32 | for k, v in CHEST_ITEMS.items(): 33 | if v == value: 34 | return k 35 | raise ValueError("Could not find mad batter contents in ROM (0x%02x)" % (value)) 36 | 37 | def __repr__(self): 38 | return "%s:%03x" % (self.__class__.__name__, self.room) 39 | -------------------------------------------------------------------------------- /locations/song.py: -------------------------------------------------------------------------------- 1 | from .droppedKey import DroppedKey 2 | 3 | 4 | class Song(DroppedKey): 5 | pass 6 | -------------------------------------------------------------------------------- /locations/startItem.py: -------------------------------------------------------------------------------- 1 | from .itemInfo import ItemInfo 2 | from .constants import * 3 | from .droppedKey import DroppedKey 4 | from assembler import ASM 5 | from utils import formatText 6 | from roomEditor import RoomEditor 7 | 8 | 9 | class StartItem(DroppedKey): 10 | # We need to give something here that we can use to progress. 11 | OPTIONS = [SWORD, SHIELD, POWER_BRACELET, OCARINA, FEATHER, BOOMERANG, MAGIC_ROD, TAIL_KEY, SHOVEL, HOOKSHOT, PEGASUS_BOOTS, MAGIC_POWDER, BOMB] 12 | MULTIWORLD = False 13 | 14 | def __init__(self): 15 | super().__init__(0x2A3) 16 | self.give_bowwow = False 17 | 18 | def configure(self, options): 19 | if options.bowwow != 'normal': 20 | # When we have bowwow mode, we pretend to be a sword for logic reasons 21 | self.OPTIONS = [SWORD] 22 | self.give_bowwow = True 23 | elif options.randomstartlocation and options.entranceshuffle != 'none': 24 | self.OPTIONS.append(FLIPPERS) 25 | 26 | def patch(self, rom, option, *, multiworld=None): 27 | assert multiworld is None 28 | 29 | if self.give_bowwow: 30 | option = BOWWOW 31 | rom.texts[0xC8] = formatText("Got BowWow!") 32 | 33 | if option != SHIELD: 34 | rom.patch(5, 0x0CDA, ASM("ld a, $22"), ASM("ld a, $00")) # do not change links sprite into the one with a shield 35 | 36 | super().patch(rom, option) 37 | -------------------------------------------------------------------------------- /locations/toadstool.py: -------------------------------------------------------------------------------- 1 | from .droppedKey import DroppedKey 2 | from .items import * 3 | 4 | 5 | class Toadstool(DroppedKey): 6 | def __init__(self, room=0x050): 7 | super().__init__(room) 8 | 9 | def configure(self, options): 10 | if not options.witch: 11 | self.OPTIONS = [TOADSTOOL] 12 | else: 13 | super().configure(options) 14 | 15 | def read(self, rom): 16 | if len(self.OPTIONS) == 1: 17 | return TOADSTOOL 18 | return super().read(rom) 19 | -------------------------------------------------------------------------------- /locations/tunicFairy.py: -------------------------------------------------------------------------------- 1 | from .itemInfo import ItemInfo 2 | from .constants import * 3 | 4 | 5 | class TunicFairy(ItemInfo): 6 | OPTIONS = [POWER_BRACELET, SHIELD, BOW, HOOKSHOT, MAGIC_ROD, PEGASUS_BOOTS, OCARINA, 7 | FEATHER, SHOVEL, MAGIC_POWDER, BOMB, SWORD, FLIPPERS, MAGNIFYING_LENS, MEDICINE, 8 | TAIL_KEY, ANGLER_KEY, FACE_KEY, BIRD_KEY, GOLD_LEAF, SLIME_KEY, ROOSTER, HAMMER, 9 | RUPEES_50, RUPEES_20, RUPEES_100, RUPEES_200, RUPEES_500, 10 | SEASHELL, MESSAGE, BOOMERANG, HEART_PIECE, BOWWOW, ARROWS_10, SINGLE_ARROW, 11 | MAX_POWDER_UPGRADE, MAX_BOMBS_UPGRADE, MAX_ARROWS_UPGRADE, RED_TUNIC, BLUE_TUNIC, 12 | HEART_CONTAINER, BAD_HEART_CONTAINER, TOADSTOOL, SONG1, SONG2, SONG3, 13 | INSTRUMENT1, INSTRUMENT2, INSTRUMENT3, INSTRUMENT4, INSTRUMENT5, INSTRUMENT6, INSTRUMENT7, INSTRUMENT8, 14 | TRADING_ITEM_YOSHI_DOLL, TRADING_ITEM_RIBBON, TRADING_ITEM_DOG_FOOD, TRADING_ITEM_BANANAS, TRADING_ITEM_STICK, 15 | TRADING_ITEM_HONEYCOMB,TRADING_ITEM_PINEAPPLE, TRADING_ITEM_HIBISCUS, TRADING_ITEM_LETTER, TRADING_ITEM_BROOM, 16 | TRADING_ITEM_FISHING_HOOK,TRADING_ITEM_NECKLACE,TRADING_ITEM_SCALE,TRADING_ITEM_MAGNIFYING_GLASS, 17 | TAIL_CAVE_OPENED, KEY_CAVERN_OPENED, ANGLER_TUNNEL_OPENED, FACE_SHRINE_OPENED, CASTLE_GATE_OPENED, EAGLE_TOWER_OPENED 18 | ] 19 | 20 | def __init__(self, index): 21 | self.index = index 22 | super().__init__(0x301) 23 | 24 | def patch(self, rom, option, *, multiworld=None): 25 | assert multiworld is None 26 | rom.banks[0x36][0x11BF + self.index] = CHEST_ITEMS[option] 27 | 28 | def read(self, rom): 29 | value = rom.banks[0x36][0x11BF + self.index] 30 | for k, v in CHEST_ITEMS.items(): 31 | if v == value: 32 | return k 33 | raise ValueError("Could not find tunic fairy contents in ROM (0x%02x)" % (value)) 34 | 35 | @property 36 | def nameId(self): 37 | return "0x%03X-%s" % (self.room, self.index) 38 | -------------------------------------------------------------------------------- /locations/witch.py: -------------------------------------------------------------------------------- 1 | from .constants import * 2 | from .itemInfo import ItemInfo 3 | 4 | 5 | class Witch(ItemInfo): 6 | def __init__(self): 7 | super().__init__(0x2A2) 8 | 9 | OPTIONS = [POWER_BRACELET, SHIELD, BOW, HOOKSHOT, MAGIC_ROD, PEGASUS_BOOTS, OCARINA, 10 | FEATHER, SHOVEL, MAGIC_POWDER, BOMB, SWORD, FLIPPERS, MAGNIFYING_LENS, MEDICINE, 11 | TAIL_KEY, ANGLER_KEY, FACE_KEY, BIRD_KEY, GOLD_LEAF, SLIME_KEY, ROOSTER, HAMMER, 12 | RUPEES_50, RUPEES_20, RUPEES_100, RUPEES_200, RUPEES_500, 13 | SEASHELL, MESSAGE, BOOMERANG, HEART_PIECE, BOWWOW, ARROWS_10, SINGLE_ARROW, 14 | MAX_POWDER_UPGRADE, MAX_BOMBS_UPGRADE, MAX_ARROWS_UPGRADE, RED_TUNIC, BLUE_TUNIC, 15 | HEART_CONTAINER, BAD_HEART_CONTAINER, TOADSTOOL, SONG1, SONG2, SONG3, 16 | INSTRUMENT1, INSTRUMENT2, INSTRUMENT3, INSTRUMENT4, INSTRUMENT5, INSTRUMENT6, INSTRUMENT7, INSTRUMENT8, 17 | TRADING_ITEM_YOSHI_DOLL, TRADING_ITEM_RIBBON, TRADING_ITEM_DOG_FOOD, TRADING_ITEM_BANANAS, TRADING_ITEM_STICK, 18 | TRADING_ITEM_HONEYCOMB,TRADING_ITEM_PINEAPPLE, TRADING_ITEM_HIBISCUS, TRADING_ITEM_LETTER, TRADING_ITEM_BROOM, 19 | TRADING_ITEM_FISHING_HOOK,TRADING_ITEM_NECKLACE,TRADING_ITEM_SCALE,TRADING_ITEM_MAGNIFYING_GLASS, 20 | TAIL_CAVE_OPENED, KEY_CAVERN_OPENED, ANGLER_TUNNEL_OPENED, FACE_SHRINE_OPENED, CASTLE_GATE_OPENED, EAGLE_TOWER_OPENED 21 | ] 22 | 23 | def configure(self, options): 24 | if not options.witch: 25 | self.OPTIONS = [MAGIC_POWDER] 26 | 27 | def patch(self, rom, option, *, multiworld=None): 28 | assert multiworld is None 29 | if len(self.OPTIONS) == 1: 30 | return 31 | rom.patch(0x05, 0x08D5, "09", "%02x" % (CHEST_ITEMS[option])) 32 | 33 | def read(self, rom): 34 | if rom.banks[0x05][0x08EF] != 0x00: 35 | return MAGIC_POWDER 36 | value = rom.banks[0x05][0x08D5] 37 | for k, v in CHEST_ITEMS.items(): 38 | if v == value: 39 | return k 40 | raise ValueError("Could not find witch contents in ROM (0x%02x)" % (value)) 41 | -------------------------------------------------------------------------------- /logic/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/logic/__init__.py -------------------------------------------------------------------------------- /mapgen/enemygen.py: -------------------------------------------------------------------------------- 1 | from .tileset import walkable_tiles, entrance_tiles 2 | import random 3 | 4 | 5 | ENEMIES = { 6 | "mountains": [ 7 | (0x0B,), 8 | (0x0E,), 9 | (0x29,), 10 | (0x0E, 0x0E), 11 | (0x0E, 0x0E, 0x23), 12 | (0x0D,), (0x0D, 0x0D), 13 | ], 14 | "egg": [], 15 | "basic": [ 16 | (), (), (), (), (), (), 17 | (0x09,), (0x09, 0x09), # octorock 18 | (0x9B, 0x9B), (0x9B, 0x9B, 0x1B), # slimes 19 | (0xBB, 0x9B), # bush crawler + slime 20 | (0xB9,), 21 | (0x0B, 0x23), # likelike + moblin 22 | (0x14, 0x0B, 0x0B), # moblins + sword 23 | (0x0B, 0x23, 0x23), # likelike + moblin 24 | (0xAE, 0xAE), # flying octorock 25 | (0xBA, ), # Bomber 26 | (0x0D, 0x0D), (0x0D, ), 27 | ], 28 | "town": [ 29 | (), (), (0x6C, 0x6E), (0x6E,), (0x6E, 0x6E), 30 | ], 31 | "forest": [ 32 | (0x0B,), # moblins 33 | (0x0B, 0x0B), # moblins 34 | (0x14, 0x0B, 0x0B), # moblins + sword 35 | ], 36 | "beach": [ 37 | (0xC6, 0xC6), 38 | (0x0E, 0x0E, 0xC6), 39 | (0x0E, 0x0E, 0x09), 40 | ], 41 | "water": [], 42 | } 43 | 44 | 45 | def generate_enemies(room): 46 | options = ENEMIES[room.tileset_id] 47 | if not options: 48 | return 49 | positions = [] 50 | for y in range(1, 7): 51 | for x in range(1, 9): 52 | if room.tiles[x + y * 10] in walkable_tiles and room.tiles[x + (y - 1) * 10] not in entrance_tiles: 53 | positions.append((x, y)) 54 | for type_id in random.choice(options): 55 | if not positions: 56 | return 57 | x, y = random.choice(positions) 58 | positions.remove((x, y)) 59 | room.entities.append((x, y, type_id)) 60 | -------------------------------------------------------------------------------- /mapgen/locations/base.py: -------------------------------------------------------------------------------- 1 | from roomEditor import RoomEditor 2 | from ..map import RoomInfo 3 | 4 | 5 | class LocationBase: 6 | MAX_COUNT = 9999 7 | 8 | def __init__(self, room: RoomInfo, x, y): 9 | self.room = room 10 | self.x = x 11 | self.y = y 12 | room.locations.append(self) 13 | 14 | def prepare(self, rom): 15 | pass 16 | 17 | def update_room(self, rom, re: RoomEditor): 18 | pass 19 | 20 | def connect_logic(self, logic_location): 21 | raise NotImplementedError(self.__class__) 22 | 23 | def get_item_pool(self): 24 | raise NotImplementedError(self.__class__) 25 | -------------------------------------------------------------------------------- /mapgen/roomtype/base.py: -------------------------------------------------------------------------------- 1 | from ..tileset import open_tiles 2 | 3 | 4 | def plot_line(x0, y0, x1, y1): 5 | dx = abs(x1 - x0) 6 | sx = 1 if x0 < x1 else -1 7 | dy = -abs(y1 - y0) 8 | sy = 1 if y0 < y1 else -1 9 | error = dx + dy 10 | 11 | yield x0, y0 12 | while True: 13 | if x0 == x1 and y0 == y1: 14 | break 15 | e2 = 2 * error 16 | if e2 >= dy: 17 | error = error + dy 18 | x0 = x0 + sx 19 | yield x0, y0 20 | if e2 <= dx: 21 | error = error + dx 22 | y0 = y0 + sy 23 | yield x0, y0 24 | 25 | yield x1, y1 26 | 27 | 28 | class RoomType: 29 | def __init__(self, room): 30 | self.room = room 31 | room.room_type = self 32 | 33 | def seed(self, wfc, x, y): 34 | open_points = [] 35 | r = self.room.edge_left.get_open_range() 36 | if r: 37 | open_points.append((x + 1, y + (r[0] + r[1]) // 2)) 38 | r = self.room.edge_right.get_open_range() 39 | if r: 40 | open_points.append((x + 8, y + (r[0] + r[1]) // 2)) 41 | r = self.room.edge_up.get_open_range() 42 | if r: 43 | open_points.append((x + (r[0] + r[1]) // 2, y + 1)) 44 | r = self.room.edge_down.get_open_range() 45 | if r: 46 | open_points.append((x + (r[0] + r[1]) // 2, y + 6)) 47 | if len(open_points) < 2: 48 | return 49 | mid_x = sum([x for x, y in open_points]) // len(open_points) 50 | mid_y = sum([y for x, y in open_points]) // len(open_points) 51 | 52 | for x0, y0 in open_points: 53 | for px, py in plot_line(x0, y0, mid_x, mid_y): 54 | wfc.cell_data[(px, py)].init_options.intersection_update(open_tiles) 55 | -------------------------------------------------------------------------------- /mapgen/roomtype/forest.py: -------------------------------------------------------------------------------- 1 | from .base import RoomType 2 | from ..tileset import open_tiles 3 | import random 4 | 5 | 6 | class Forest(RoomType): 7 | def __init__(self, room): 8 | super().__init__(room) 9 | room.tileset_id = "forest" 10 | 11 | def seed(self, wfc, x, y): 12 | if self.room.room_up and isinstance(self.room.room_up.room_type, Forest) and self.room.edge_up.get_open_range() is None: 13 | self.room.edge_up.set_solid() 14 | if self.room.room_left and isinstance(self.room.room_left.room_type, Forest) and self.room.edge_left.get_open_range() is None: 15 | self.room.edge_left.set_solid() 16 | 17 | if self.room.room_up and isinstance(self.room.room_up.room_type, Forest) and random.random() < 0.5: 18 | door_x, door_y = x + 5 + random.randint(-1, 1), y + 3 + random.randint(-1, 1) 19 | wfc.cell_data[(door_x, door_y)].init_options.intersection_update({0xE3}) 20 | self.room.edge_up.set_solid() 21 | if self.room.edge_left.get_open_range() is not None: 22 | for x0 in range(x + 1, door_x): 23 | wfc.cell_data[(x0, door_y + 1)].init_options.intersection_update(open_tiles) 24 | if self.room.edge_right.get_open_range() is not None: 25 | for x0 in range(door_x + 1, x + 10): 26 | wfc.cell_data[(x0, door_y + 1)].init_options.intersection_update(open_tiles) 27 | else: 28 | super().seed(wfc, x, y) 29 | -------------------------------------------------------------------------------- /mapgen/roomtype/mountain.py: -------------------------------------------------------------------------------- 1 | from .base import RoomType 2 | from ..locations.entrance import EggEntrance 3 | import random 4 | 5 | 6 | class Mountain(RoomType): 7 | def __init__(self, room): 8 | super().__init__(room) 9 | room.tileset_id = "mountains" 10 | room.edge_left.set_open_min(3) 11 | room.edge_right.set_open_min(3) 12 | 13 | def seed(self, wfc, x, y): 14 | super().seed(wfc, x, y) 15 | if y == 0: 16 | if x == 0: 17 | wfc.cell_data[(0, 1)].init_options.intersection_update({0}) 18 | if x == wfc.w - 10: 19 | wfc.cell_data[(x + 9, 1)].init_options.intersection_update({0}) 20 | wfc.cell_data[(x + random.randint(3, 6), random.randint(0, 1))].init_options.intersection_update({0}) 21 | 22 | 23 | class MountainEgg(RoomType): 24 | def __init__(self, room): 25 | super().__init__(room) 26 | room.tileset_id = "egg" 27 | room.edge_left.force_solid() 28 | room.edge_right.force_solid() 29 | room.edge_down.set_open_min(5) 30 | room.edge_down.set_open_max(6) 31 | 32 | EggEntrance(room, 5, 4) 33 | 34 | def seed(self, wfc, x, y): 35 | super().seed(wfc, x, y) 36 | wfc.cell_data[(x + 2, y + 1)].init_options.intersection_update({0x00}) 37 | wfc.cell_data[(x + 2, y + 2)].init_options.intersection_update({0xEF}) 38 | wfc.cell_data[(x + 5, y + 3)].init_options.intersection_update({0xAA}) 39 | -------------------------------------------------------------------------------- /mapgen/roomtype/town.py: -------------------------------------------------------------------------------- 1 | from .base import RoomType 2 | from ..tileset import solid_tiles 3 | import random 4 | 5 | 6 | class Town(RoomType): 7 | def __init__(self, room): 8 | super().__init__(room) 9 | room.tileset_id = "town" 10 | 11 | def seed(self, wfc, x, y): 12 | ex = x + 5 + random.randint(-1, 1) 13 | ey = y + 3 + random.randint(-1, 1) 14 | wfc.cell_data[(ex, ey)].init_options.intersection_update({0xE2}) 15 | wfc.cell_data[(ex - 1, ey - 1)].init_options.intersection_update(solid_tiles) 16 | wfc.cell_data[(ex + 1, ey - 1)].init_options.intersection_update(solid_tiles) 17 | -------------------------------------------------------------------------------- /mapgen/roomtype/water.py: -------------------------------------------------------------------------------- 1 | from .base import RoomType 2 | import random 3 | 4 | 5 | class Water(RoomType): 6 | def __init__(self, room): 7 | super().__init__(room) 8 | room.tileset_id = "water" 9 | 10 | # def seed(self, wfc, x, y): 11 | # wfc.cell_data[(x + 5 + random.randint(-1, 1), y + 3 + random.randint(-1, 1))].init_options.intersection_update({0x0E}) 12 | 13 | 14 | class Beach(RoomType): 15 | def __init__(self, room): 16 | super().__init__(room) 17 | room.tileset_id = "beach" 18 | if self.room.room_down is None: 19 | self.room.edge_left.set_open_max(4) 20 | self.room.edge_right.set_open_max(4) 21 | self.room.edge_up.set_open_min(4) 22 | self.room.edge_up.set_open_max(6) 23 | 24 | def seed(self, wfc, x, y): 25 | if self.room.room_down is None: 26 | for n in range(1, 9): 27 | wfc.cell_data[(x + n, y + 5)].init_options.intersection_update({0x1E}) 28 | for n in range(1, 9): 29 | wfc.cell_data[(x + n, y + 7)].init_options.intersection_update({0x1F}) 30 | super().seed(wfc, x, y) -------------------------------------------------------------------------------- /mapgen/util.py: -------------------------------------------------------------------------------- 1 | 2 | def xyrange(w, h): 3 | for y in range(h): 4 | for x in range(w): 5 | yield x, y 6 | -------------------------------------------------------------------------------- /multiworld/arduinoConnector/lua.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/multiworld/arduinoConnector/lua.exe -------------------------------------------------------------------------------- /multiworld/arduinoConnector/lua54.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/multiworld/arduinoConnector/lua54.dll -------------------------------------------------------------------------------- /multiworld/arduinoConnector/serial.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/multiworld/arduinoConnector/serial.dll -------------------------------------------------------------------------------- /multiworld/arduinoConnector/socket.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/multiworld/arduinoConnector/socket.dll -------------------------------------------------------------------------------- /multiworld/socket.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/multiworld/socket.dll -------------------------------------------------------------------------------- /patches/bank3e.asm/link.asm: -------------------------------------------------------------------------------- 1 | ; Handle the serial link cable 2 | #IF HARDWARE_LINK 3 | ; FF> = Idle 4 | ; D6> = Read: D0><[L] D1><[H] [HL]> 5 | ; D9> = Write: D8><[L] D9><[H] DA><[^DATA] DB><[DATA] 6 | ; DD> = OrW: D8><[L] D9><[H] DA><[^DATA] DB><[DATA] (used to set flags without requiring a slow read,modify,write race condition) 7 | 8 | handleSerialLink: 9 | ; Check if we got a byte from hardware 10 | ldh a, [$FF01] 11 | 12 | cp $D6 13 | jr z, serialReadMem 14 | cp $D9 15 | jr z, serialWriteMem 16 | cp $DD 17 | jr z, serialOrMem 18 | 19 | finishSerialLink: 20 | ; Do a new idle transfer. 21 | ld a, $E4 22 | ldh [$FF01], a 23 | ld a, $81 24 | ldh [$FF02], a 25 | ret 26 | 27 | serialReadMem: 28 | ld a, $D0 29 | call serialTransfer 30 | ld h, a 31 | ld a, $D1 32 | call serialTransfer 33 | ld l, a 34 | ld a, [hl] 35 | call serialTransfer 36 | jr finishSerialLink 37 | 38 | serialWriteMem: 39 | ld a, $D8 40 | call serialTransfer 41 | ld h, a 42 | ld a, $D9 43 | call serialTransfer 44 | ld l, a 45 | ld a, $DA 46 | call serialTransfer 47 | cpl 48 | ld c, a 49 | ld a, $DB 50 | call serialTransfer 51 | cp c 52 | jr nz, finishSerialLink 53 | ld [hl], a 54 | jr finishSerialLink 55 | 56 | serialOrMem: 57 | ld a, $D8 58 | call serialTransfer 59 | ld h, a 60 | ld a, $D9 61 | call serialTransfer 62 | ld l, a 63 | ld a, $DA 64 | call serialTransfer 65 | cpl 66 | ld c, a 67 | ld a, $DB 68 | call serialTransfer 69 | cp c 70 | jr nz, finishSerialLink 71 | ld c, a 72 | ld a, [hl] 73 | or c 74 | ld [hl], a 75 | jr finishSerialLink 76 | 77 | ; Transfer A to the serial link and wait for it to be done and return the result in A 78 | serialTransfer: 79 | ldh [$FF01], a 80 | ld a, $81 81 | ldh [$FF02], a 82 | .loop: 83 | ldh a, [$FF02] 84 | and $80 85 | jr nz, .loop 86 | ldh a, [$FF01] 87 | ret 88 | 89 | #ENDIF 90 | -------------------------------------------------------------------------------- /patches/bank3e.asm/owl.asm: -------------------------------------------------------------------------------- 1 | HandleOwlStatue: 2 | call GetRoomStatusAddressInHL 3 | bit 5, [hl] 4 | ld d, $01 5 | ret nz 6 | set 5, [hl] 7 | 8 | ld hl, $7B16 9 | call OffsetPointerByRoomNumber 10 | ld a, [hl] 11 | ldh [$FFF1], a 12 | call ItemMessage 13 | call GiveItemFromChest 14 | ld d, $00 15 | ret 16 | 17 | 18 | 19 | GetRoomStatusAddressInHL: 20 | ld a, [$DBA5] ; isIndoor 21 | ld d, a 22 | ld hl, $D800 23 | ldh a, [$FFF6] ; room nr 24 | ld e, a 25 | ldh a, [$FFF7] ; map nr 26 | cp $FF 27 | jr nz, .notColorDungeon 28 | 29 | ld d, $00 30 | ld hl, $DDE0 31 | jr .notIndoorB 32 | 33 | .notColorDungeon: 34 | cp $1A 35 | jr nc, .notIndoorB 36 | 37 | cp $06 38 | jr c, .notIndoorB 39 | 40 | inc d 41 | 42 | .notIndoorB: 43 | add hl, de 44 | ret 45 | 46 | 47 | RenderOwlStatueItem: 48 | ld hl, $7B16 49 | call OffsetPointerByRoomNumber 50 | ld a, [hl] 51 | ldh [$FFF1], a 52 | jp RenderChestItem 53 | -------------------------------------------------------------------------------- /patches/bomb.py: -------------------------------------------------------------------------------- 1 | from assembler import ASM 2 | 3 | 4 | def onlyDropBombsWhenHaveBombs(rom): 5 | rom.patch(0x03, 0x1FC5, ASM("call $608C"), ASM("call $50B2")) 6 | # We use some of the unused chest code space here to remove the bomb if you do not have bombs in your inventory. 7 | rom.patch(0x03, 0x10B2, 0x112A, ASM(""" 8 | ld e, INV_SIZE 9 | ld hl, $DB00 10 | ld a, $02 11 | loop: 12 | cp [hl] 13 | jr z, resume 14 | dec e 15 | inc hl 16 | jr nz, loop 17 | jp UnloadEntity ; unload entity 18 | resume: 19 | jp $608C 20 | """), fill_nop=True) -------------------------------------------------------------------------------- /patches/cats/Aurene.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/Aurene.bin -------------------------------------------------------------------------------- /patches/cats/Garfield.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/Garfield.bin -------------------------------------------------------------------------------- /patches/cats/Marie.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/Marie.bin -------------------------------------------------------------------------------- /patches/cats/Mausi.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/Mausi.bin -------------------------------------------------------------------------------- /patches/cats/ayrie.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/ayrie.bin -------------------------------------------------------------------------------- /patches/cats/bert.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/bert.bin -------------------------------------------------------------------------------- /patches/cats/binx.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/binx.bin -------------------------------------------------------------------------------- /patches/cats/carlo.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/carlo.bin -------------------------------------------------------------------------------- /patches/cats/colby_jack.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/colby_jack.bin -------------------------------------------------------------------------------- /patches/cats/dusty_daisy.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/dusty_daisy.bin -------------------------------------------------------------------------------- /patches/cats/fluffy.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/fluffy.bin -------------------------------------------------------------------------------- /patches/cats/galactica.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/galactica.bin -------------------------------------------------------------------------------- /patches/cats/henkie.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/henkie.bin -------------------------------------------------------------------------------- /patches/cats/jack.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/jack.bin -------------------------------------------------------------------------------- /patches/cats/jose.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/jose.bin -------------------------------------------------------------------------------- /patches/cats/lola.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/lola.bin -------------------------------------------------------------------------------- /patches/cats/meep.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/meep.bin -------------------------------------------------------------------------------- /patches/cats/mora.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/mora.bin -------------------------------------------------------------------------------- /patches/cats/newton.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/newton.bin -------------------------------------------------------------------------------- /patches/cats/nyan.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/nyan.bin -------------------------------------------------------------------------------- /patches/cats/patapouf.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/patapouf.bin -------------------------------------------------------------------------------- /patches/cats/pippin.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/pippin.bin -------------------------------------------------------------------------------- /patches/cats/schoko.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/schoko.bin -------------------------------------------------------------------------------- /patches/cats/sunny.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/cats/sunny.bin -------------------------------------------------------------------------------- /patches/chest.py: -------------------------------------------------------------------------------- 1 | from assembler import ASM 2 | from utils import formatText 3 | from locations.constants import CHEST_ITEMS 4 | 5 | 6 | def fixChests(rom): 7 | # Patch the chest code, so it can give a lvl1 sword. 8 | # Normally, there is some code related to the owl event when getting the tail key, 9 | # as we patched out the owl. We use it to jump to our custom code in bank $3E to handle getting the item 10 | rom.patch(0x03, 0x109C, ASM(""" 11 | cp $11 ; if not tail key, skip 12 | jr nz, end 13 | push af 14 | ld a, [$C501] 15 | ld e, a 16 | ld hl, wEntitiesPrivateCountdown1Table 17 | add hl, de 18 | ld [hl], $38 19 | pop af 20 | end: 21 | ld e, a 22 | cp $21 ; if is message chest or higher number, next instruction is to skip giving things. 23 | """), ASM(""" 24 | ld a, $06 ; GiveItemMultiworld 25 | rst 8 26 | 27 | and a ; clear the carry flag to always skip giving stuff. 28 | """), fill_nop=True) 29 | 30 | # Instead of the normal logic to on which sprite data to show, we jump to our custom code in bank 3E. 31 | rom.patch(0x07, 0x3C36, None, ASM(""" 32 | ld a, $01 33 | rst 8 34 | jp $7C5E 35 | """), fill_nop=True) 36 | 37 | # Instead of the normal logic of showing the proper dialog, we jump to our custom code in bank 3E. 38 | rom.patch(0x07, 0x3C9C, None, ASM(""" 39 | ld a, $0A ; showItemMessageMultiworld 40 | rst 8 41 | jp $7CE9 42 | """)) 43 | 44 | # Sound to play is normally loaded from a table, which is no longer big enough. So always use the same sound. 45 | rom.patch(0x07, 0x3C81, ASM(""" 46 | add hl, de 47 | ld a, [hl] 48 | """), ASM("ld a, $01"), fill_nop=True) 49 | 50 | # Always spawn seashells even if you have the L2 sword 51 | rom.patch(0x14, 0x192F, ASM("ld a, $1C"), ASM("ld a, $20")) 52 | 53 | rom.texts[0x9A] = formatText("You found 10 {BOMB}!") 54 | 55 | 56 | def setMultiChest(rom, option): 57 | room = 0x2F2 58 | addr = room + 0x560 59 | rom.banks[0x14][addr] = CHEST_ITEMS[option] 60 | -------------------------------------------------------------------------------- /patches/colorBook.py: -------------------------------------------------------------------------------- 1 | from assembler import ASM 2 | 3 | def fixColorBook(rom): 4 | # patch to repair the color book shadow/flags. Can still fire projectiles over the book. 5 | rom.patch(0x03, 0x004A, "F2", "A2") 6 | # patch hitbox flags to match 1.2 7 | rom.patch(0x03, 0x0145, "80", "98") 8 | -------------------------------------------------------------------------------- /patches/desert.py: -------------------------------------------------------------------------------- 1 | from roomEditor import RoomEditor 2 | 3 | 4 | def desertAccess(rom): 5 | re = RoomEditor(rom, 0x0FD) 6 | re.entities = [(6, 2, 0xC4)] 7 | re.store(rom) 8 | -------------------------------------------------------------------------------- /patches/extragfx.py: -------------------------------------------------------------------------------- 1 | import utils 2 | 3 | 4 | def capacityUpgradeIcon(): 5 | return utils.createTileData(""" 6 | 33 7 | 3113 8 | 311113 9 | 33311333 10 | 3113 11 | 3333 12 | """) 13 | 14 | 15 | def songItemGraphics(): 16 | return utils.createTileData(""" 17 | 18 | 19 | ... 20 | . .222 21 | .2.2222 22 | .22.222. 23 | .22222.3 24 | .2..22.3 25 | .33...3 26 | .33.3.3 27 | ..233.3 28 | .22.2333 29 | .222.233 30 | .222... 31 | ... 32 | """ + """ 33 | 34 | 35 | .. 36 | .22 37 | .223 38 | ..222 39 | .33.22 40 | .3..22 41 | .33.33 42 | ..23. 43 | ..233. 44 | .22.333 45 | .22..233 46 | .. .23 47 | .. 48 | """ + """ 49 | 50 | 51 | ... 52 | .222. 53 | .2.332 54 | .23.32 55 | .233.2 56 | .222222 57 | .2222222 58 | .2..22.2 59 | .2.3.222 60 | .22...22 61 | .2333.. 62 | .23333 63 | .....""", " .23") 64 | 65 | 66 | def bingoBoard(rom): 67 | mural = rom.banks[0x32][0x1500:0x1500 + 8 * 0x10] 68 | mural[0x28:0x3A] = b'\x55\xAA\x00\xFF\x55\xAA\x00\xFF\x55\xAA\x00\xFF\x55\xAA\x00\xFF\x00\xFF' 69 | mural[0x48:0x5A] = b'\x55\xAA\x00\xFF\x55\xAA\x00\xFF\x55\xAA\x00\xFF\x55\xAA\x00\xFF\x00\xFF' 70 | return mural 71 | -------------------------------------------------------------------------------- /patches/fishingMinigame.py: -------------------------------------------------------------------------------- 1 | from assembler import ASM 2 | from roomEditor import RoomEditor 3 | 4 | 5 | def updateFinishingMinigame(rom): 6 | rom.patch(0x04, 0x26BE, 0x26DF, ASM(""" 7 | ld a, $0E ; GiveItemAndMessageForRoomMultiworld 8 | rst 8 9 | 10 | ; Mark selection as stopping minigame, as we are not asking a question. 11 | ld a, $01 12 | ld [$C177], a 13 | 14 | ; Check if we got rupees from the item skip getting rupees from the fish. 15 | ld a, [$DB90] 16 | ld hl, $DB8F 17 | or [hl] 18 | jp nz, $66FE 19 | """), fill_nop=True) 20 | -------------------------------------------------------------------------------- /patches/goldenLeaf.py: -------------------------------------------------------------------------------- 1 | from assembler import ASM 2 | 3 | 4 | def fixGoldenLeaf(rom): 5 | # Patch the golden leaf code so it jumps to the dropped key handling in bank 3E 6 | rom.patch(3, 0x2007, ASM(""" 7 | ld de, $5FFB 8 | call $3C77 ; RenderActiveEntitySprite 9 | """), ASM(""" 10 | ld a, $04 11 | rst 8 12 | """), fill_nop=True) 13 | rom.patch(3, 0x2018, None, ASM(""" 14 | ld a, $06 ; giveItemMultiworld 15 | rst 8 16 | jp $602F 17 | """)) 18 | rom.patch(3, 0x2037, None, ASM(""" 19 | ld a, $0a ; showMessageMultiworld 20 | rst 8 21 | jp $604B 22 | """)) 23 | 24 | # Patch all over the place to move the golden leafs to a different memory location. 25 | # We use $DB6D (dungeon 9 status), but we could also use $DB7A (wGhostSeeksGrave, which is only used by the ghost) 26 | rom.patch(0x00, 0x2D17, ASM("ld a, [$DB15]"), ASM("ld a, $06"), fill_nop=True) # Always load the slime tiles 27 | rom.patch(0x02, 0x3005, ASM("cp $06"), ASM("cp $01"), fill_nop=True) # Instead of checking for 6 leaves a the keyhole, just check for the key 28 | rom.patch(0x20, 0x1AD1, ASM("ld a, [$DB15]"), ASM("ld a, [wGoldenLeaves]")) # For the status screen, load the number of leafs from the proper memory 29 | rom.patch(0x03, 0x0980, ASM("ld a, [$DB15]"), ASM("ld a, [wGoldenLeaves]")) # If leaves >= 6 move richard 30 | rom.patch(0x06, 0x0059, ASM("ld a, [$DB15]"), ASM("ld a, [wGoldenLeaves]")) # If leaves >= 6 move richard 31 | rom.patch(0x06, 0x007D, ASM("ld a, [$DB15]"), ASM("ld a, [wGoldenLeaves]")) # Richard message if no leaves 32 | rom.patch(0x06, 0x00B8, ASM("ld [$DB15], a"), ASM("ld [wGoldenLeaves], a")) # Stores FF in the leaf counter if we opened the path 33 | # 6:40EE uses leaves == 6 to check if we have collected the key, but only to change the message. 34 | # rom.patch(0x06, 0x2AEF, ASM("ld a, [$DB15]"), ASM("ld a, [wGoldenLeaves]")) # Telephone message handler 35 | -------------------------------------------------------------------------------- /patches/heartPiece.py: -------------------------------------------------------------------------------- 1 | from assembler import ASM 2 | 3 | 4 | def fixHeartPiece(rom): 5 | # Patch all locations where the piece of heart is rendered. 6 | rom.patch(0x03, 0x1b52, ASM("ld de, $5A4D\ncall RenderActiveEntitySpritesPair"), ASM("ld a, $04\nrst 8"), fill_nop=True) # state 0 7 | 8 | # Write custom code in the first state handler, this overwrites all state handlers 9 | # Till state 5. 10 | rom.patch(0x03, 0x1A74, 0x1A98, ASM(""" 11 | ; Render sprite 12 | ld a, $05 13 | rst 8 14 | 15 | ; Handle item effect 16 | ld a, $06 ; giveItemMultiworld 17 | rst 8 18 | 19 | ;Show message 20 | ld a, $0A ; showMessageMultiworld 21 | rst 8 22 | 23 | ; Switch to state 5 24 | ld hl, wEntitiesStateTable 25 | add hl, bc 26 | ld [hl], $05 27 | ret 28 | """), fill_nop=True) 29 | # Insert a state 5 handler 30 | rom.patch(0x03, 0x1A98, 0x1B17, ASM(""" 31 | ; Render sprite 32 | ld a, $05 33 | rst 8 34 | 35 | ld a, [wDialogState] 36 | and a 37 | ret nz 38 | 39 | call $512A ; mark room as done 40 | call UnloadEntity 41 | ret 42 | """), fill_nop=True) 43 | -------------------------------------------------------------------------------- /patches/instrument.py: -------------------------------------------------------------------------------- 1 | from assembler import ASM 2 | 3 | 4 | def fixInstruments(rom): 5 | rom.patch(0x03, 0x1EA9, 0x1EAE, "", fill_nop=True) 6 | rom.patch(0x03, 0x1EB9, 0x1EC8, ASM(""" 7 | ; Render sprite 8 | ld a, $05 9 | rst 8 10 | """), fill_nop=True) 11 | 12 | # Patch the message and instrument giving code 13 | rom.patch(0x03, 0x1EE3, 0x1EF6, ASM(""" 14 | ; Handle item effect 15 | ld a, $06 ; giveItemMultiworld 16 | rst 8 17 | 18 | ;Show message 19 | ld a, $0A ; showMessageMultiworld 20 | rst 8 21 | """), fill_nop=True) 22 | 23 | # Color cycle palette 7 instead of 1 24 | rom.patch(0x36, 0x30F0, ASM("ld de, $DC5C"), ASM("ld de, $DC84")) 25 | -------------------------------------------------------------------------------- /patches/madBatter.py: -------------------------------------------------------------------------------- 1 | from assembler import ASM 2 | from utils import formatText 3 | 4 | 5 | def upgradeMadBatter(rom): 6 | # Normally the madbatter won't do anything if you have full capacity. Remove that check. 7 | rom.patch(0x18, 0x0F05, 0x0F1D, "", fill_nop=True) 8 | # Remove the code that finds which upgrade to apply, 9 | rom.patch(0x18, 0x0F9E, 0x0FC4, "", fill_nop=True) 10 | rom.patch(0x18, 0x0FD2, 0x0FD8, "", fill_nop=True) 11 | 12 | # Finally, at the last step, give the item and the item message. 13 | rom.patch(0x18, 0x1016, 0x101B, "", fill_nop=True) 14 | rom.patch(0x18, 0x101E, 0x1051, ASM(""" 15 | ; Mad batter rooms are E0,E1 and E2, load the item type from a table in the rom 16 | ; which only has 3 entries, and store it where bank 3E wants it. 17 | ldh a, [hMapRoom] ; current room 18 | and $0F 19 | ld d, $00 20 | ld e, a 21 | ld hl, $4F90 22 | add hl, de 23 | ld a, [hl] 24 | ldh [hActiveEntitySpriteVariant], a 25 | 26 | ; Give item 27 | ld a, $06 ; giveItemMultiworld 28 | rst 8 29 | ; Message 30 | ld a, $0A ; showMessageMultiworld 31 | rst 8 32 | ; Force the dialog at the bottom 33 | ld a, [wDialogState] 34 | and a 35 | ret z ; no dialog, skip 36 | or $80 37 | ld [wDialogState], a 38 | """), fill_nop=True) 39 | # Setup the default items 40 | rom.patch(0x18, 0x0F90, "406060", "848586") 41 | 42 | rom.texts[0xE2] = formatText("You can now carry more Magic Powder!") 43 | rom.texts[0xE3] = formatText("You can now carry more Bombs!") 44 | rom.texts[0xE4] = formatText("You can now carry more Arrows!") 45 | -------------------------------------------------------------------------------- /patches/maptweaks.py: -------------------------------------------------------------------------------- 1 | from roomEditor import RoomEditor, ObjectWarp, ObjectVertical 2 | 3 | 4 | def tweakMap(rom): 5 | # 5 holes at the castle, reduces to 3 6 | re = RoomEditor(rom, 0x078) 7 | re.objects[-1].count = 3 8 | re.overlay[7 + 6 * 10] = re.overlay[9 + 6 * 10] 9 | re.overlay[8 + 6 * 10] = re.overlay[9 + 6 * 10] 10 | re.store(rom) 11 | 12 | 13 | def addBetaRoom(rom): 14 | re = RoomEditor(rom, 0x1FC) 15 | re.objects[-1].target_y -= 0x10 16 | re.store(rom) 17 | re = RoomEditor(rom, 0x038) 18 | re.changeObject(5, 1, 0xE1) 19 | re.removeObject(0, 0) 20 | re.removeObject(0, 1) 21 | re.removeObject(0, 2) 22 | re.removeObject(6, 1) 23 | re.objects.append(ObjectVertical(0, 0, 0x38, 3)) 24 | re.objects.append(ObjectWarp(1, 0x1F, 0x1FC, 0x50, 0x7C)) 25 | re.store(rom) 26 | 27 | rom.room_sprite_data_indoor[0x0FC] = rom.room_sprite_data_indoor[0x1A1] 28 | 29 | 30 | def tweakBirdKeyRoom(rom): 31 | # Make the bird key accessible without the rooster 32 | re = RoomEditor(rom, 0x27A) 33 | re.removeObject(1, 6) 34 | re.removeObject(2, 6) 35 | re.removeObject(3, 5) 36 | re.removeObject(3, 6) 37 | re.moveObject(1, 5, 2, 6) 38 | re.moveObject(2, 5, 3, 6) 39 | re.addEntity(3, 5, 0x9D) 40 | re.store(rom) 41 | -------------------------------------------------------------------------------- /patches/music.py: -------------------------------------------------------------------------------- 1 | from assembler import ASM 2 | 3 | 4 | _LOOPING_MUSIC = (1, 2, 3, 4, 5, 6, 7, 8, 9, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 5 | 0x18, 0x19, 0x1C, 0x1D, 0x1F, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x2F, 0x31, 0x32, 0x33, 0x37, 6 | 0x39, 0x3A, 0x3C, 0x3E, 0x40, 0x48, 0x49, 0x4A, 0x4B, 0x4E, 0x50, 0x53, 0x54, 0x55, 0x57, 0x58, 0x59, 7 | 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61) 8 | 9 | 10 | def randomizeMusic(rom, rnd): 11 | # Randomize overworld 12 | for x in range(0, 16, 2): 13 | for y in range(0, 16, 2): 14 | idx = x + y * 16 15 | result = rnd.choice(_LOOPING_MUSIC) 16 | rom.banks[0x02][idx] = result 17 | rom.banks[0x02][idx+1] = result 18 | rom.banks[0x02][idx+16] = result 19 | rom.banks[0x02][idx+17] = result 20 | # Random music in dungeons/caves 21 | for n in range(0x20): 22 | rom.banks[0x02][0x100 + n] = rnd.choice(_LOOPING_MUSIC) 23 | 24 | 25 | def noMusic(rom): 26 | rom.patch(0x1B, 0x001E, ASM("ld hl, $D368\nldi a, [hl]"), ASM("xor a"), fill_nop=True) 27 | rom.patch(0x1E, 0x001E, ASM("ld hl, $D368\nldi a, [hl]"), ASM("xor a"), fill_nop=True) 28 | 29 | def shiftedMusic(rom): 30 | for n in range(18 * 4 + 2): 31 | freq = rom.banks[0x1B][0x09C2 + n * 2] | (rom.banks[0x1B][0x09C3 + n * 2] << 8) 32 | freq = max(0x20, min(int((freq - 8) * 0.95), 0x7FF)) 33 | rom.banks[0x1B][0x09C2 + n * 2] = freq & 0xFF 34 | rom.banks[0x1B][0x09C3 + n * 2] = (freq >> 8) & 0xFF 35 | 36 | freq = rom.banks[0x1E][0x09BF + n * 2] | (rom.banks[0x1E][0x09C0 + n * 2] << 8) 37 | freq = max(0x20, min(int((freq - 8) * 0.95), 0x7FF)) 38 | rom.banks[0x1E][0x09BF + n * 2] = freq & 0xFF 39 | rom.banks[0x1E][0x09C0 + n * 2] = (freq >> 8) & 0xFF 40 | -------------------------------------------------------------------------------- /patches/overworld/alttp/06.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[1, 1, 129, 78, 78, 78, 78, 78, 130, 1, 7 | 126, 129, 76, 4, 4, 4, 4, 10, 77, 130, 8 | 240, 56, 4, 4, 4, 112, 10, 10, 4, 123, 9 | 230, 56, 10, 201, 4, 10, 10, 201, 10, 57, 10 | 230, 47, 61, 10, 4, 4, 10, 4, 62, 79, 11 | 230, 63, 47, 48, 48, 48, 48, 48, 79, 64, 12 | 45, 46, 63, 59, 59, 59, 59, 59, 64, 64, 13 | 10, 57, 63, 59, 59, 59, 59, 59, 64, 60], 14 | "height":8, 15 | "id":1, 16 | "name":"Tiles", 17 | "opacity":1, 18 | "type":"tilelayer", 19 | "visible":true, 20 | "width":10, 21 | "x":0, 22 | "y":0 23 | }, 24 | { 25 | "draworder":"topdown", 26 | "id":2, 27 | "name":"EntityLayer", 28 | "objects":[], 29 | "opacity":1, 30 | "type":"objectgroup", 31 | "visible":true, 32 | "x":0, 33 | "y":0 34 | }], 35 | "nextlayerid":1, 36 | "nextobjectid":5, 37 | "orientation":"orthogonal", 38 | "properties":[ 39 | { 40 | "name":"animationset", 41 | "type":"string", 42 | "value":"0b" 43 | }, 44 | { 45 | "name":"attribset", 46 | "type":"string", 47 | "value":"27:2240" 48 | }, 49 | { 50 | "name":"palette", 51 | "type":"string", 52 | "value":"15" 53 | }, 54 | { 55 | "name":"tileset", 56 | "type":"string", 57 | "value":"3e" 58 | }], 59 | "renderorder":"right-down", 60 | "tiledversion":"1.10.2", 61 | "tileheight":16, 62 | "tilesets":[ 63 | { 64 | "columns":16, 65 | "firstgid":1, 66 | "image":"tiles_3e_0b_15_27_2240.png", 67 | "imageheight":256, 68 | "imagewidth":256, 69 | "margin":0, 70 | "name":"main", 71 | "spacing":0, 72 | "tilecount":256, 73 | "tileheight":16, 74 | "tilewidth":16 75 | }], 76 | "tilewidth":16, 77 | "type":"map", 78 | "version":"1.10", 79 | "width":10 80 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/07.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7 | 1, 125, 127, 126, 1, 125, 126, 129, 78, 78, 8 | 123, 123, 123, 123, 123, 123, 123, 123, 4, 4, 9 | 230, 230, 30, 81, 81, 81, 81, 76, 4, 10, 10 | 230, 30, 76, 4, 10, 4, 4, 4, 4, 4, 11 | 230, 56, 10, 4, 44, 7, 6, 8, 46, 4, 12 | 30, 76, 4, 44, 50, 4, 4, 4, 51, 45, 13 | 56, 4, 4, 56, 4, 4, 12, 10, 4, 4], 14 | "height":8, 15 | "id":1, 16 | "name":"Tiles", 17 | "opacity":1, 18 | "type":"tilelayer", 19 | "visible":true, 20 | "width":10, 21 | "x":0, 22 | "y":0 23 | }, 24 | { 25 | "draworder":"topdown", 26 | "id":2, 27 | "name":"EntityLayer", 28 | "objects":[], 29 | "opacity":1, 30 | "type":"objectgroup", 31 | "visible":true, 32 | "x":0, 33 | "y":0 34 | }], 35 | "nextlayerid":1, 36 | "nextobjectid":2, 37 | "orientation":"orthogonal", 38 | "properties":[ 39 | { 40 | "name":"animationset", 41 | "type":"string", 42 | "value":"0b" 43 | }, 44 | { 45 | "name":"attribset", 46 | "type":"string", 47 | "value":"27:2240" 48 | }, 49 | { 50 | "name":"palette", 51 | "type":"string", 52 | "value":"15" 53 | }, 54 | { 55 | "name":"tileset", 56 | "type":"string", 57 | "value":"3e" 58 | }], 59 | "renderorder":"right-down", 60 | "tiledversion":"1.10.2", 61 | "tileheight":16, 62 | "tilesets":[ 63 | { 64 | "columns":16, 65 | "firstgid":1, 66 | "image":"tiles_3e_0b_15_27_2240.png", 67 | "imageheight":256, 68 | "imagewidth":256, 69 | "margin":0, 70 | "name":"main", 71 | "spacing":0, 72 | "tilecount":256, 73 | "tileheight":16, 74 | "tilewidth":16 75 | }], 76 | "tilewidth":16, 77 | "type":"map", 78 | "version":"1.10", 79 | "width":10 80 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/08.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7 | 78, 78, 78, 78, 78, 78, 130, 1, 129, 78, 8 | 4, 4, 10, 201, 4, 4, 57, 240, 56, 4, 9 | 4, 4, 4, 4, 10, 4, 77, 81, 76, 4, 10 | 10, 4, 201, 4, 4, 4, 4, 4, 4, 10, 11 | 4, 4, 44, 7, 6, 8, 46, 4, 4, 4, 12 | 45, 45, 50, 4, 4, 4, 51, 46, 75, 74, 13 | 4, 4, 4, 4, 12, 4, 4, 57, 4, 4], 14 | "height":8, 15 | "id":1, 16 | "name":"Tiles", 17 | "opacity":1, 18 | "type":"tilelayer", 19 | "visible":true, 20 | "width":10, 21 | "x":0, 22 | "y":0 23 | }, 24 | { 25 | "draworder":"topdown", 26 | "id":2, 27 | "name":"EntityLayer", 28 | "objects":[], 29 | "opacity":1, 30 | "type":"objectgroup", 31 | "visible":true, 32 | "x":0, 33 | "y":0 34 | }], 35 | "nextlayerid":1, 36 | "nextobjectid":3, 37 | "orientation":"orthogonal", 38 | "properties":[ 39 | { 40 | "name":"animationset", 41 | "type":"string", 42 | "value":"0b" 43 | }, 44 | { 45 | "name":"attribset", 46 | "type":"string", 47 | "value":"27:2240" 48 | }, 49 | { 50 | "name":"palette", 51 | "type":"string", 52 | "value":"15" 53 | }, 54 | { 55 | "name":"tileset", 56 | "type":"string", 57 | "value":"3e" 58 | }], 59 | "renderorder":"right-down", 60 | "tiledversion":"1.10.2", 61 | "tileheight":16, 62 | "tilesets":[ 63 | { 64 | "columns":16, 65 | "firstgid":1, 66 | "image":"tiles_3e_0b_15_27_2240.png", 67 | "imageheight":256, 68 | "imagewidth":256, 69 | "margin":0, 70 | "name":"main", 71 | "spacing":0, 72 | "tilecount":256, 73 | "tileheight":16, 74 | "tilewidth":16 75 | }], 76 | "tilewidth":16, 77 | "type":"map", 78 | "version":"1.10", 79 | "width":10 80 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/0D.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7 | 1, 125, 126, 1, 129, 78, 78, 130, 1, 125, 8 | 240, 240, 240, 240, 56, 4, 10, 57, 240, 240, 9 | 230, 230, 230, 230, 56, 4, 4, 77, 81, 81, 10 | 230, 230, 230, 30, 76, 10, 4, 4, 4, 4, 11 | 230, 30, 81, 76, 4, 4, 44, 45, 45, 45, 12 | 230, 56, 4, 10, 4, 4, 56, 4, 10, 10, 13 | 230, 56, 4, 201, 4, 4, 47, 48, 48, 61], 14 | "height":8, 15 | "id":1, 16 | "name":"Tiles", 17 | "opacity":1, 18 | "type":"tilelayer", 19 | "visible":true, 20 | "width":10, 21 | "x":0, 22 | "y":0 23 | }, 24 | { 25 | "draworder":"topdown", 26 | "id":2, 27 | "name":"EntityLayer", 28 | "objects":[], 29 | "opacity":1, 30 | "type":"objectgroup", 31 | "visible":true, 32 | "x":0, 33 | "y":0 34 | }], 35 | "nextlayerid":1, 36 | "nextobjectid":4, 37 | "orientation":"orthogonal", 38 | "properties":[ 39 | { 40 | "name":"animationset", 41 | "type":"string", 42 | "value":"0b" 43 | }, 44 | { 45 | "name":"attribset", 46 | "type":"string", 47 | "value":"27:2240" 48 | }, 49 | { 50 | "name":"palette", 51 | "type":"string", 52 | "value":"15" 53 | }, 54 | { 55 | "name":"tileset", 56 | "type":"string", 57 | "value":"3e" 58 | }], 59 | "renderorder":"right-down", 60 | "tiledversion":"1.11.2", 61 | "tileheight":16, 62 | "tilesets":[ 63 | { 64 | "columns":16, 65 | "firstgid":1, 66 | "image":"tiles_3e_0b_15_27_2240.png", 67 | "imageheight":256, 68 | "imagewidth":256, 69 | "margin":0, 70 | "name":"main", 71 | "spacing":0, 72 | "tilecount":256, 73 | "tileheight":16, 74 | "tilewidth":16 75 | }], 76 | "tilewidth":16, 77 | "type":"map", 78 | "version":"1.10", 79 | "width":10 80 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/18.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [4, 4, 10, 4, 12, 4, 4, 57, 4, 10, 48, 48, 61, 4, 4, 4, 62, 79, 4, 10, 59, 59, 47, 73, 75, 74, 79, 64, 10, 4, 226, 59, 63, 59, 59, 59, 64, 60, 4, 4, 4, 10, 58, 59, 59, 59, 60, 4, 4, 10, 10, 10, 4, 10, 4, 4, 4, 10, 4, 4, 10, 4, 62, 73, 75, 74, 48, 61, 4, 4, 48, 48, 79, 59, 59, 59, 59, 47, 48, 48], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [{"height": 16, "id": 3, "name": "HEART_PIECE", "rotation": 0, "type": "entity", "visible": true, "width": 16, "x": 80, "y": 16}, {"height": 8, "id": 4, "name": "1:11:2fb:88:70", "rotation": 0, "type": "warp", "visible": true, "width": 8, "x": 0, "y": 0}], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 5, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2240"}, {"name": "palette", "type": "string", "value": "15"}, {"name": "tileset", "type": "string", "value": "3e"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_3e_0b_15_27_2240.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/19.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [4, 12, 12, 12, 12, 12, 4, 10, 47, 61, 12, 12, 4, 201, 4, 12, 12, 4, 58, 56, 12, 33, 4, 4, 4, 33, 12, 4, 10, 56, 12, 4, 4, 4, 4, 4, 12, 4, 4, 56, 12, 201, 4, 4, 4, 201, 12, 4, 44, 50, 12, 12, 4, 33, 4, 12, 12, 4, 56, 4, 4, 12, 12, 12, 12, 12, 4, 201, 56, 10, 48, 73, 68, 74, 48, 48, 61, 10, 56, 4], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [{"height": 16, "id": 3, "name": "WARP", "rotation": 0, "type": "entity", "visible": true, "width": 16, "x": 48, "y": 48}], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 4, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2240"}, {"name": "palette", "type": "string", "value": "15"}, {"name": "tileset", "type": "string", "value": "3e"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_3e_0b_15_27_2240.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/1C.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [4, 10, 10, 4, 57, 4, 4, 51, 45, 45, 10, 4, 4, 4, 57, 10, 4, 4, 4, 4, 4, 10, 62, 48, 79, 48, 73, 75, 74, 48, 10, 62, 79, 59, 64, 59, 226, 59, 59, 59, 48, 79, 64, 59, 64, 4, 4, 4, 72, 59, 59, 64, 64, 59, 64, 73, 75, 74, 53, 59, 59, 64, 64, 59, 64, 100, 100, 100, 100, 59, 59, 64, 64, 59, 64, 59, 59, 59, 59, 59], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [{"height": 8, "id": 1, "name": "1:0a:2ee:78:30", "rotation": 0, "type": "warp", "visible": true, "width": 8, "x": 0, "y": 0}], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 2, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2240"}, {"name": "palette", "type": "string", "value": "15"}, {"name": "tileset", "type": "string", "value": "3e"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_3e_0b_15_27_2240.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/1E8.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[224, 38, 34, 34, 34, 34, 34, 34, 39, 224, 38, 42, 6, 6, 6, 6, 6, 6, 43, 39, 36, 6, 16, 6, 6, 16, 6, 6, 6, 37, 36, 16, 6, 6, 6, 6, 16, 6, 6, 37, 36, 6, 6, 6, 16, 6, 6, 6, 6, 37, 36, 6, 6, 6, 6, 6, 6, 6, 6, 37, 40, 44, 6, 6, 6, 6, 6, 6, 45, 41, 224, 40, 35, 35, 62, 35, 35, 35, 41, 224], 7 | "height":8, 8 | "id":1, 9 | "name":"Tiles", 10 | "opacity":1, 11 | "type":"tilelayer", 12 | "visible":true, 13 | "width":10, 14 | "x":0, 15 | "y":0 16 | }, 17 | { 18 | "draworder":"topdown", 19 | "id":2, 20 | "name":"ObjectLayer", 21 | "objects":[ 22 | { 23 | "height":16, 24 | "id":1, 25 | "name":"HEART_PIECE", 26 | "rotation":0, 27 | "type":"entity", 28 | "visible":true, 29 | "width":16, 30 | "x":64, 31 | "y":16 32 | }], 33 | "opacity":1, 34 | "type":"objectgroup", 35 | "visible":true, 36 | "x":0, 37 | "y":0 38 | }], 39 | "nextlayerid":1, 40 | "nextobjectid":2, 41 | "orientation":"orthogonal", 42 | "renderorder":"right-down", 43 | "tiledversion":"1.5.0", 44 | "tileheight":16, 45 | "tilesets":[ 46 | { 47 | "columns":16, 48 | "firstgid":1, 49 | "image":"ZZ_indoor_0c_0c.png", 50 | "imageheight":256, 51 | "imagewidth":256, 52 | "margin":0, 53 | "name":"main", 54 | "spacing":0, 55 | "tilecount":256, 56 | "tileheight":16, 57 | "tilewidth":16 58 | }], 59 | "tilewidth":16, 60 | "type":"map", 61 | "version":1.5, 62 | "width":10 63 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/1F.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [4, 4, 10, 4, 4, 57, 4, 4, 51, 46, 4, 4, 4, 4, 62, 79, 10, 4, 4, 57, 73, 225, 74, 48, 79, 60, 4, 4, 10, 57, 59, 225, 59, 59, 60, 4, 4, 4, 4, 57, 4, 4, 4, 4, 4, 4, 4, 4, 4, 57, 4, 4, 4, 4, 10, 4, 4, 4, 62, 79, 48, 61, 4, 10, 4, 4, 62, 48, 79, 64, 59, 47, 48, 48, 48, 48, 79, 59, 64, 64], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [{"height": 16, "id": 6, "name": "HONEYCOMB", "rotation": 0, "type": "entity", "visible": true, "width": 16, "x": 16, "y": 64}, {"height": 16, "id": 7, "name": "HONEYCOMB", "rotation": 0, "type": "entity", "visible": true, "width": 16, "x": 80, "y": 80}, {"height": 16, "id": 8, "name": "HONEYCOMB", "rotation": 0, "type": "entity", "visible": true, "width": 16, "x": 112, "y": 48}], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 9, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2240"}, {"name": "palette", "type": "string", "value": "15"}, {"name": "tileset", "type": "string", "value": "3e"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_3e_0b_15_27_2240.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/1F8.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[224, 38, 34, 34, 72, 42, 36, 43, 39, 224, 38, 42, 6, 6, 6, 6, 40, 44, 43, 39, 36, 6, 16, 6, 6, 16, 16, 36, 6, 37, 36, 16, 6, 6, 6, 6, 16, 36, 175, 43, 36, 6, 6, 6, 16, 6, 6, 36, 6, 6, 36, 6, 6, 6, 6, 6, 6, 36, 6, 45, 40, 44, 6, 6, 6, 175, 38, 42, 45, 41, 224, 40, 35, 35, 35, 44, 36, 45, 41, 224], 7 | "height":8, 8 | "id":1, 9 | "name":"Tiles", 10 | "opacity":1, 11 | "type":"tilelayer", 12 | "visible":true, 13 | "width":10, 14 | "x":0, 15 | "y":0 16 | }, 17 | { 18 | "draworder":"topdown", 19 | "id":2, 20 | "name":"ObjectLayer", 21 | "objects":[ 22 | { 23 | "height":16, 24 | "id":2, 25 | "name":"PINCER", 26 | "rotation":0, 27 | "type":"entity", 28 | "visible":true, 29 | "width":16, 30 | "x":128, 31 | "y":48 32 | }, 33 | { 34 | "height":16, 35 | "id":4, 36 | "name":"PINCER", 37 | "rotation":0, 38 | "type":"entity", 39 | "visible":true, 40 | "width":16, 41 | "x":80, 42 | "y":96 43 | }], 44 | "opacity":1, 45 | "type":"objectgroup", 46 | "visible":true, 47 | "x":0, 48 | "y":0 49 | }], 50 | "nextlayerid":1, 51 | "nextobjectid":5, 52 | "orientation":"orthogonal", 53 | "renderorder":"right-down", 54 | "tiledversion":"1.5.0", 55 | "tileheight":16, 56 | "tilesets":[ 57 | { 58 | "columns":16, 59 | "firstgid":1, 60 | "image":"ZZ_indoor_0c_0c.png", 61 | "imageheight":256, 62 | "imagewidth":256, 63 | "margin":0, 64 | "name":"main", 65 | "spacing":0, 66 | "tilecount":256, 67 | "tileheight":16, 68 | "tilewidth":16 69 | }], 70 | "tilewidth":16, 71 | "type":"map", 72 | "version":1.5, 73 | "width":10 74 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/26.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [59, 64, 226, 59, 225, 59, 63, 63, 63, 63, 59, 64, 4, 213, 4, 4, 58, 63, 63, 63, 59, 64, 4, 4, 4, 4, 4, 58, 63, 63, 59, 64, 4, 4, 10, 4, 4, 4, 58, 63, 59, 64, 4, 4, 4, 201, 4, 10, 4, 58, 59, 64, 73, 75, 74, 48, 61, 4, 4, 4, 72, 64, 59, 59, 59, 59, 47, 61, 4, 4, 57, 64, 59, 59, 59, 59, 63, 47, 61, 201], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [{"height": 8, "id": 1, "name": "1:1f:1fd:58:50", "rotation": 0, "type": "warp", "visible": true, "width": 8, "x": 0, "y": 0}], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 2, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2240"}, {"name": "palette", "type": "string", "value": "15"}, {"name": "tileset", "type": "string", "value": "3e"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_3e_0b_15_27_2240.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/28.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [59, 59, 64, 59, 59, 59, 59, 63, 59, 59, 59, 59, 64, 59, 59, 59, 59, 63, 59, 59, 59, 59, 64, 59, 59, 59, 59, 63, 59, 59, 59, 59, 64, 59, 59, 226, 59, 63, 59, 59, 59, 59, 60, 4, 10, 4, 4, 58, 59, 59, 4, 4, 4, 4, 62, 54, 4, 4, 4, 4, 4, 4, 4, 62, 53, 4, 4, 62, 54, 4, 73, 75, 74, 79, 4, 4, 4, 57, 4, 4], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [{"height": 8, "id": 3, "name": "1:0a:2ea:50:7c", "rotation": 0, "type": "warp", "visible": true, "width": 8, "x": 0, "y": 0}], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 4, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2240"}, {"name": "palette", "type": "string", "value": "15"}, {"name": "tileset", "type": "string", "value": "3e"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_3e_0b_15_27_2240.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/29.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [59, 59, 59, 59, 59, 59, 47, 48, 56, 10, 59, 59, 59, 59, 59, 59, 63, 59, 47, 48, 59, 71, 4, 72, 59, 59, 63, 59, 63, 59, 59, 52, 75, 53, 59, 59, 63, 59, 63, 59, 59, 100, 100, 100, 59, 59, 63, 59, 63, 59, 4, 4, 4, 201, 4, 4, 58, 59, 63, 59, 4, 33, 4, 201, 201, 4, 10, 4, 63, 59, 10, 4, 201, 201, 4, 4, 4, 4, 63, 59], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 2, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2240"}, {"name": "palette", "type": "string", "value": "15"}, {"name": "tileset", "type": "string", "value": "3e"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_3e_0b_15_27_2240.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/2C8.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[1, 38, 34, 34, 39, 38, 34, 34, 39, 1, 38, 42, 14, 14, 43, 42, 14, 14, 43, 39, 36, 14, 161, 14, 14, 14, 14, 14, 45, 41, 36, 14, 14, 14, 14, 14, 14, 14, 37, 1, 40, 44, 14, 14, 45, 35, 35, 35, 41, 1, 1, 36, 168, 45, 41, 38, 34, 34, 39, 1, 1, 36, 175, 37, 1, 36, 33, 33, 37, 1, 1, 36, 14, 37, 1, 36, 14, 45, 41, 1], 7 | "height":8, 8 | "id":1, 9 | "name":"Tiles", 10 | "opacity":1, 11 | "type":"tilelayer", 12 | "visible":true, 13 | "width":10, 14 | "x":0, 15 | "y":0 16 | }, 17 | { 18 | "draworder":"topdown", 19 | "id":2, 20 | "name":"ObjectLayer", 21 | "objects":[ 22 | { 23 | "height":16, 24 | "id":1, 25 | "name":"HIDING_GEL", 26 | "rotation":0, 27 | "type":"entity", 28 | "visible":true, 29 | "width":16, 30 | "x":32, 31 | "y":48 32 | }, 33 | { 34 | "height":16, 35 | "id":2, 36 | "name":"HIDING_GEL", 37 | "rotation":0, 38 | "type":"entity", 39 | "visible":true, 40 | "width":16, 41 | "x":112, 42 | "y":48 43 | }], 44 | "opacity":1, 45 | "type":"objectgroup", 46 | "visible":true, 47 | "x":0, 48 | "y":0 49 | }], 50 | "nextlayerid":1, 51 | "nextobjectid":3, 52 | "orientation":"orthogonal", 53 | "renderorder":"right-down", 54 | "tiledversion":"1.5.0", 55 | "tileheight":16, 56 | "tilesets":[ 57 | { 58 | "columns":16, 59 | "firstgid":1, 60 | "image":"ZZ_indoor_00_04.png", 61 | "imageheight":256, 62 | "imagewidth":256, 63 | "margin":0, 64 | "name":"main", 65 | "spacing":0, 66 | "tilecount":256, 67 | "tileheight":16, 68 | "tilewidth":16 69 | }], 70 | "tilewidth":16, 71 | "type":"map", 72 | "version":1.5, 73 | "width":10 74 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/2DF.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[1, 14, 38, 34, 34, 34, 34, 34, 39, 1, 34, 34, 42, 175, 175, 168, 6, 6, 43, 39, 175, 175, 176, 6, 6, 168, 6, 6, 2, 37, 6, 6, 2, 6, 176, 176, 176, 175, 177, 37, 6, 6, 2, 170, 2, 2, 2, 6, 168, 37, 6, 176, 2, 176, 2, 177, 177, 175, 45, 41, 175, 177, 177, 177, 177, 45, 35, 35, 41, 14, 35, 35, 35, 35, 35, 41, 1, 1, 14, 14], 7 | "height":8, 8 | "id":1, 9 | "name":"Tiles", 10 | "opacity":1, 11 | "type":"tilelayer", 12 | "visible":true, 13 | "width":10, 14 | "x":0, 15 | "y":0 16 | }, 17 | { 18 | "draworder":"topdown", 19 | "id":2, 20 | "name":"ObjectLayer", 21 | "objects":[ 22 | { 23 | "height":16, 24 | "id":1, 25 | "name":"HEART_PIECE", 26 | "rotation":0, 27 | "type":"entity", 28 | "visible":true, 29 | "width":16, 30 | "x":96, 31 | "y":16 32 | }, 33 | { 34 | "height":16, 35 | "id":2, 36 | "name":"KEESE", 37 | "rotation":0, 38 | "type":"entity", 39 | "visible":true, 40 | "width":16, 41 | "x":80, 42 | "y":48 43 | }], 44 | "opacity":1, 45 | "type":"objectgroup", 46 | "visible":true, 47 | "x":0, 48 | "y":0 49 | }], 50 | "nextlayerid":1, 51 | "nextobjectid":3, 52 | "orientation":"orthogonal", 53 | "renderorder":"right-down", 54 | "tiledversion":"1.5.0", 55 | "tileheight":16, 56 | "tilesets":[ 57 | { 58 | "columns":16, 59 | "firstgid":1, 60 | "image":"ZZ_indoor_0c_04.png", 61 | "imageheight":256, 62 | "imagewidth":256, 63 | "margin":0, 64 | "name":"main", 65 | "spacing":0, 66 | "tilecount":256, 67 | "tileheight":16, 68 | "tilewidth":16 69 | }], 70 | "tilewidth":16, 71 | "type":"map", 72 | "version":1.5, 73 | "width":10 74 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/2E.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [59, 64, 234, 234, 234, 63, 63, 59, 59, 59, 59, 64, 234, 234, 234, 63, 63, 59, 59, 59, 59, 64, 234, 234, 234, 63, 63, 59, 59, 59, 72, 60, 15, 15, 15, 63, 63, 59, 59, 59, 57, 15, 15, 15, 15, 58, 63, 59, 59, 59, 57, 15, 15, 28, 15, 15, 58, 59, 59, 59, 57, 15, 15, 28, 28, 15, 15, 15, 15, 28, 51, 46, 15, 15, 28, 28, 15, 15, 28, 28], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 3, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "22:1800"}, {"name": "palette", "type": "string", "value": "06"}, {"name": "tileset", "type": "string", "value": "2e"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_2e_0b_06_22_1800.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/38.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [59, 59, 59, 60, 4, 10, 4, 57, 4, 4, 4, 4, 4, 4, 4, 62, 48, 53, 33, 4, 4, 62, 73, 75, 74, 53, 4, 4, 4, 4, 48, 79, 59, 59, 71, 4, 4, 62, 48, 48, 59, 60, 4, 4, 52, 48, 48, 53, 4, 4, 4, 4, 4, 4, 4, 4, 4, 10, 4, 4, 48, 61, 4, 201, 10, 4, 4, 4, 62, 48, 59, 47, 48, 48, 48, 48, 48, 48, 79, 59], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 2, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2240"}, {"name": "palette", "type": "string", "value": "15"}, {"name": "tileset", "type": "string", "value": "3e"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_3e_0b_15_27_2240.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/3A.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [59, 60, 4, 4, 4, 4, 57, 15, 15, 15, 4, 4, 4, 4, 4, 62, 79, 15, 15, 15, 4, 10, 4, 62, 48, 79, 60, 15, 15, 15, 201, 4, 62, 79, 59, 60, 15, 15, 15, 15, 48, 48, 79, 60, 15, 15, 15, 15, 203, 15, 59, 59, 60, 15, 15, 201, 203, 15, 15, 15, 15, 15, 15, 15, 203, 15, 201, 203, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 3, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2240"}, {"name": "palette", "type": "string", "value": "15"}, {"name": "tileset", "type": "string", "value": "3e"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_3e_0b_15_27_2240.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/3B.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [15, 15, 15, 15, 15, 15, 56, 4, 4, 57, 15, 15, 15, 15, 15, 15, 47, 48, 48, 79, 15, 15, 15, 15, 15, 15, 58, 59, 59, 60, 15, 44, 45, 45, 46, 15, 15, 15, 15, 15, 15, 56, 10, 4, 57, 15, 203, 201, 15, 15, 15, 52, 48, 48, 53, 15, 15, 15, 203, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 62, 73, 234, 234, 74, 48, 48, 48, 61], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 2, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2240"}, {"name": "palette", "type": "string", "value": "15"}, {"name": "tileset", "type": "string", "value": "3e"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_3e_0b_15_27_2240.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/3C.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [59, 59, 59, 59, 59, 56, 10, 4, 58, 59, 15, 15, 15, 15, 15, 56, 4, 4, 4, 4, 15, 44, 45, 45, 45, 50, 4, 10, 62, 48, 15, 56, 4, 4, 201, 4, 4, 62, 79, 59, 15, 56, 10, 4, 4, 4, 4, 57, 60, 15, 15, 47, 48, 48, 48, 48, 48, 79, 15, 15, 15, 58, 59, 59, 59, 59, 59, 60, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 203], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [{"height": 16, "id": 3, "name": "HONEYCOMB", "rotation": 0, "type": "entity", "visible": true, "width": 16, "x": 48, "y": 48}], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 4, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2240"}, {"name": "palette", "type": "string", "value": "15"}, {"name": "tileset", "type": "string", "value": "3e"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_3e_0b_15_27_2240.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/3F.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[28, 28, 28, 28, 28, 28, 27, 17, 56, 254, 7 | 17, 17, 26, 28, 44, 45, 7, 6, 47, 61, 8 | 21, 33, 22, 17, 56, 4, 4, 4, 58, 56, 9 | 19, 246, 250, 247, 52, 225, 61, 4, 4, 56, 10 | 46, 252, 256, 256, 250, 256, 56, 4, 4, 56, 11 | 57, 45, 7, 6, 8, 45, 50, 4, 4, 56, 12 | 57, 4, 4, 4, 4, 4, 4, 4, 44, 50, 13 | 51, 45, 46, 4, 4, 44, 45, 45, 50, 246], 14 | "height":8, 15 | "id":1, 16 | "name":"Tiles", 17 | "opacity":1, 18 | "type":"tilelayer", 19 | "visible":true, 20 | "width":10, 21 | "x":0, 22 | "y":0 23 | }, 24 | { 25 | "draworder":"topdown", 26 | "id":2, 27 | "name":"EntityLayer", 28 | "objects":[], 29 | "opacity":1, 30 | "type":"objectgroup", 31 | "visible":true, 32 | "x":0, 33 | "y":0 34 | }], 35 | "nextlayerid":1, 36 | "nextobjectid":3, 37 | "orientation":"orthogonal", 38 | "properties":[ 39 | { 40 | "name":"animationset", 41 | "type":"string", 42 | "value":"0b" 43 | }, 44 | { 45 | "name":"attribset", 46 | "type":"string", 47 | "value":"22:1800" 48 | }, 49 | { 50 | "name":"palette", 51 | "type":"string", 52 | "value":"06" 53 | }, 54 | { 55 | "name":"tileset", 56 | "type":"string", 57 | "value":"2e" 58 | }], 59 | "renderorder":"right-down", 60 | "tiledversion":"1.10.2", 61 | "tileheight":16, 62 | "tilesets":[ 63 | { 64 | "columns":16, 65 | "firstgid":1, 66 | "image":"tiles_2e_0b_06_22_1800.png", 67 | "imageheight":256, 68 | "imagewidth":256, 69 | "margin":0, 70 | "name":"main", 71 | "spacing":0, 72 | "tilecount":256, 73 | "tileheight":16, 74 | "tilewidth":16 75 | }], 76 | "tilewidth":16, 77 | "type":"map", 78 | "version":"1.10", 79 | "width":10 80 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/57.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[256, 249, 40, 41, 12, 40, 41, 5, 98, 11, 7 | 253, 33, 93, 93, 12, 93, 93, 93, 33, 69, 8 | 69, 33, 93, 93, 12, 93, 93, 93, 33, 11, 9 | 249, 98, 98, 98, 12, 98, 98, 98, 98, 11, 10 | 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11 | 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 12 | 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 13 | 15, 15, 15, 15, 15, 15, 15, 15, 15, 15], 14 | "height":8, 15 | "id":1, 16 | "name":"Tiles", 17 | "opacity":1, 18 | "type":"tilelayer", 19 | "visible":true, 20 | "width":10, 21 | "x":0, 22 | "y":0 23 | }, 24 | { 25 | "draworder":"topdown", 26 | "id":2, 27 | "name":"EntityLayer", 28 | "objects":[], 29 | "opacity":1, 30 | "type":"objectgroup", 31 | "visible":true, 32 | "x":0, 33 | "y":0 34 | }], 35 | "nextlayerid":1, 36 | "nextobjectid":3, 37 | "orientation":"orthogonal", 38 | "properties":[ 39 | { 40 | "name":"animationset", 41 | "type":"string", 42 | "value":"03" 43 | }, 44 | { 45 | "name":"attribset", 46 | "type":"string", 47 | "value":"25:2c00" 48 | }, 49 | { 50 | "name":"palette", 51 | "type":"string", 52 | "value":"07" 53 | }, 54 | { 55 | "name":"tileset", 56 | "type":"string", 57 | "value":"38" 58 | }], 59 | "renderorder":"right-down", 60 | "tiledversion":"1.10.2", 61 | "tileheight":16, 62 | "tilesets":[ 63 | { 64 | "columns":16, 65 | "firstgid":1, 66 | "image":"tiles_38_03_07_25_2c00.png", 67 | "imageheight":256, 68 | "imagewidth":256, 69 | "margin":0, 70 | "name":"main", 71 | "spacing":0, 72 | "tilecount":256, 73 | "tileheight":16, 74 | "tilewidth":16 75 | }], 76 | "tilewidth":16, 77 | "type":"map", 78 | "version":"1.10", 79 | "width":10 80 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/66.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [15, 15, 15, 15, 15, 155, 152, 165, 166, 167, 15, 44, 45, 45, 45, 155, 149, 168, 228, 169, 15, 56, 93, 38, 39, 155, 14, 14, 14, 14, 15, 56, 5, 40, 41, 155, 14, 14, 14, 14, 15, 56, 93, 33, 11, 155, 14, 14, 14, 14, 15, 56, 33, 11, 11, 155, 14, 14, 14, 14, 15, 56, 11, 11, 11, 155, 14, 156, 154, 154, 15, 56, 11, 11, 11, 155, 14, 155, 151, 151], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [{"height": 8, "id": 5, "name": "1:14:2d5:50:7c", "rotation": 0, "type": "warp", "visible": true, "width": 8, "x": 0, "y": 0}], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 6, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "03"}, {"name": "attribset", "type": "string", "value": "25:1400"}, {"name": "palette", "type": "string", "value": "06"}, {"name": "tileset", "type": "string", "value": "28"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_28_03_06_25_1400.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/6C.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[62, 48, 48, 48, 48, 48, 48, 48, 48, 48, 7 | 57, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8 | 57, 4, 62, 48, 48, 73, 75, 74, 48, 48, 9 | 57, 4, 57, 59, 59, 59, 59, 59, 59, 59, 10 | 57, 4, 57, 4, 186, 4, 186, 186, 4, 186, 11 | 57, 4, 243, 186, 62, 48, 48, 48, 48, 48, 12 | 57, 4, 244, 186, 57, 59, 59, 59, 59, 59, 13 | 57, 4, 245, 4, 57, 186, 185, 185, 185, 186], 14 | "height":8, 15 | "id":1, 16 | "name":"Tiles", 17 | "opacity":1, 18 | "type":"tilelayer", 19 | "visible":true, 20 | "width":10, 21 | "x":0, 22 | "y":0 23 | }, 24 | { 25 | "draworder":"topdown", 26 | "id":2, 27 | "name":"EntityLayer", 28 | "objects":[], 29 | "opacity":1, 30 | "type":"objectgroup", 31 | "visible":true, 32 | "x":0, 33 | "y":0 34 | }], 35 | "nextlayerid":1, 36 | "nextobjectid":3, 37 | "orientation":"orthogonal", 38 | "properties":[ 39 | { 40 | "name":"animationset", 41 | "type":"string", 42 | "value":"0a" 43 | }, 44 | { 45 | "name":"attribset", 46 | "type":"string", 47 | "value":"25:3c00" 48 | }, 49 | { 50 | "name":"palette", 51 | "type":"string", 52 | "value":"12" 53 | }, 54 | { 55 | "name":"tileset", 56 | "type":"string", 57 | "value":"2a" 58 | }], 59 | "renderorder":"right-down", 60 | "tiledversion":"1.11.2", 61 | "tileheight":16, 62 | "tilesets":[ 63 | { 64 | "columns":16, 65 | "firstgid":1, 66 | "image":"tiles_2a_0a_12_25_3c00.png", 67 | "imageheight":256, 68 | "imagewidth":256, 69 | "margin":0, 70 | "name":"main", 71 | "spacing":0, 72 | "tilecount":256, 73 | "tileheight":16, 74 | "tilewidth":16 75 | }], 76 | "tilewidth":16, 77 | "type":"map", 78 | "version":"1.10", 79 | "width":10 80 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/6E.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [5, 62, 48, 48, 47, 48, 48, 48, 48, 48, 48, 79, 59, 59, 63, 59, 59, 59, 59, 59, 59, 64, 59, 59, 63, 59, 59, 59, 71, 186, 59, 60, 4, 4, 63, 59, 59, 59, 56, 186, 4, 4, 186, 4, 241, 4, 4, 4, 56, 186, 186, 4, 44, 45, 45, 45, 6, 45, 50, 186, 4, 186, 56, 186, 186, 186, 186, 186, 186, 186, 4, 4, 47, 48, 73, 75, 74, 48, 61, 186], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 2, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0a"}, {"name": "attribset", "type": "string", "value": "25:3c00"}, {"name": "palette", "type": "string", "value": "12"}, {"name": "tileset", "type": "string", "value": "2a"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_2a_0a_12_25_3c00.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/71.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [13, 248, 58, 59, 59, 59, 59, 225, 225, 59, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 13, 111, 250, 111, 13, 13, 14, 14, 14, 14, 13, 252, 256, 69, 13, 13, 13, 13, 13, 13, 13, 111, 256, 111, 13, 13, 13, 13, 13, 13, 13, 252, 256, 253, 13, 13, 99, 13, 99, 99, 13, 111, 251, 111, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 7, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "10"}, {"name": "attribset", "type": "string", "value": "22:2800"}, {"name": "palette", "type": "string", "value": "0b"}, {"name": "tileset", "type": "string", "value": "26"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_26_10_0b_22_2800.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/7A.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[15, 56, 4, 4, 246, 249, 4, 4, 4, 11, 7 | 15, 47, 61, 4, 4, 4, 4, 247, 62, 48, 8 | 15, 58, 47, 48, 73, 225, 74, 48, 79, 59, 9 | 15, 111, 58, 59, 59, 225, 59, 59, 60, 15, 10 | 15, 15, 111, 15, 15, 15, 15, 15, 15, 15, 11 | 15, 111, 44, 45, 45, 45, 7, 6, 8, 45, 12 | 15, 44, 50, 252, 256, 249, 4, 4, 254, 251, 13 | 15, 56, 250, 256, 249, 4, 4, 4, 4, 4], 14 | "height":8, 15 | "id":1, 16 | "name":"Tiles", 17 | "opacity":1, 18 | "type":"tilelayer", 19 | "visible":true, 20 | "width":10, 21 | "x":0, 22 | "y":0 23 | }, 24 | { 25 | "draworder":"topdown", 26 | "id":2, 27 | "name":"EntityLayer", 28 | "objects":[], 29 | "opacity":1, 30 | "type":"objectgroup", 31 | "visible":true, 32 | "x":0, 33 | "y":0 34 | }], 35 | "nextlayerid":1, 36 | "nextobjectid":1, 37 | "orientation":"orthogonal", 38 | "properties":[ 39 | { 40 | "name":"animationset", 41 | "type":"string", 42 | "value":"03" 43 | }, 44 | { 45 | "name":"attribset", 46 | "type":"string", 47 | "value":"25:0c00" 48 | }, 49 | { 50 | "name":"palette", 51 | "type":"string", 52 | "value":"04" 53 | }, 54 | { 55 | "name":"tileset", 56 | "type":"string", 57 | "value":"0f" 58 | }], 59 | "renderorder":"right-down", 60 | "tiledversion":"1.10.2", 61 | "tileheight":16, 62 | "tilesets":[ 63 | { 64 | "columns":16, 65 | "firstgid":1, 66 | "image":"tiles_0f_03_04_25_0c00.png", 67 | "imageheight":256, 68 | "imagewidth":256, 69 | "margin":0, 70 | "name":"main", 71 | "spacing":0, 72 | "tilecount":256, 73 | "tileheight":16, 74 | "tilewidth":16 75 | }], 76 | "tilewidth":16, 77 | "type":"map", 78 | "version":"1.10", 79 | "width":10 80 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/7F.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [186, 58, 59, 59, 59, 225, 59, 59, 59, 63, 186, 186, 186, 186, 186, 186, 186, 186, 186, 63, 48, 48, 73, 225, 74, 48, 73, 225, 74, 63, 59, 59, 59, 225, 59, 59, 59, 225, 59, 56, 4, 4, 4, 4, 72, 59, 71, 4, 4, 56, 73, 75, 74, 48, 79, 59, 47, 73, 225, 56, 59, 59, 59, 59, 60, 4, 58, 59, 225, 47, 4, 4, 4, 4, 4, 4, 4, 4, 4, 63], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 5, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0a"}, {"name": "attribset", "type": "string", "value": "25:3c00"}, {"name": "palette", "type": "string", "value": "12"}, {"name": "tileset", "type": "string", "value": "2a"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_2a_0a_12_25_3c00.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/80.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[41, 13, 13, 13, 13, 13, 13, 13, 13, 13, 7 | 39, 13, 96, 97, 99, 255, 99, 97, 96, 13, 8 | 41, 13, 96, 93, 93, 12, 93, 93, 96, 13, 9 | 39, 13, 96, 93, 93, 12, 93, 93, 96, 13, 10 | 41, 13, 96, 93, 93, 12, 93, 93, 96, 13, 11 | 39, 13, 96, 93, 93, 12, 93, 93, 96, 13, 12 | 41, 13, 97, 97, 99, 255, 99, 97, 97, 13, 13 | 39, 13, 13, 13, 13, 13, 13, 13, 13, 13], 14 | "height":8, 15 | "id":1, 16 | "name":"Tiles", 17 | "opacity":1, 18 | "type":"tilelayer", 19 | "visible":true, 20 | "width":10, 21 | "x":0, 22 | "y":0 23 | }, 24 | { 25 | "draworder":"topdown", 26 | "id":2, 27 | "name":"EntityLayer", 28 | "objects":[], 29 | "opacity":1, 30 | "type":"objectgroup", 31 | "visible":true, 32 | "x":0, 33 | "y":0 34 | }], 35 | "nextlayerid":1, 36 | "nextobjectid":2, 37 | "orientation":"orthogonal", 38 | "properties":[ 39 | { 40 | "name":"animationset", 41 | "type":"string", 42 | "value":"03" 43 | }, 44 | { 45 | "name":"attribset", 46 | "type":"string", 47 | "value":"22:2800" 48 | }, 49 | { 50 | "name":"palette", 51 | "type":"string", 52 | "value":"0b" 53 | }, 54 | { 55 | "name":"tileset", 56 | "type":"string", 57 | "value":"26" 58 | }], 59 | "renderorder":"right-down", 60 | "tiledversion":"1.10.2", 61 | "tileheight":16, 62 | "tilesets":[ 63 | { 64 | "columns":16, 65 | "firstgid":1, 66 | "image":"tiles_26_03_0b_22_2800.png", 67 | "imageheight":256, 68 | "imagewidth":256, 69 | "margin":0, 70 | "name":"main", 71 | "spacing":0, 72 | "tilecount":256, 73 | "tileheight":16, 74 | "tilewidth":16 75 | }], 76 | "tilewidth":16, 77 | "type":"map", 78 | "version":"1.10", 79 | "width":10 80 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/8C.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [57, 59, 59, 59, 59, 59, 59, 59, 59, 59, 57, 4, 4, 4, 4, 4, 4, 4, 4, 4, 57, 4, 4, 185, 185, 186, 186, 185, 185, 186, 57, 4, 4, 186, 186, 4, 4, 186, 186, 4, 57, 4, 4, 186, 186, 4, 4, 186, 186, 4, 57, 4, 4, 185, 185, 186, 186, 185, 185, 186, 79, 4, 4, 4, 4, 4, 4, 4, 4, 4, 64, 75, 74, 73, 225, 74, 48, 48, 48, 48], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 1, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0a"}, {"name": "attribset", "type": "string", "value": "25:3c00"}, {"name": "palette", "type": "string", "value": "12"}, {"name": "tileset", "type": "string", "value": "2a"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_2a_0a_12_25_3c00.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/8D.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [59, 60, 186, 186, 47, 48, 48, 48, 79, 4, 4, 4, 186, 4, 63, 59, 59, 59, 64, 4, 186, 185, 185, 4, 72, 59, 59, 59, 71, 4, 4, 186, 186, 4, 243, 59, 59, 59, 56, 4, 4, 186, 186, 4, 244, 4, 4, 4, 56, 4, 186, 185, 185, 4, 245, 4, 186, 4, 56, 4, 4, 4, 4, 4, 57, 4, 186, 4, 56, 4, 73, 225, 74, 48, 79, 4, 186, 4, 47, 48], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 2, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0a"}, {"name": "attribset", "type": "string", "value": "25:3c00"}, {"name": "palette", "type": "string", "value": "12"}, {"name": "tileset", "type": "string", "value": "2a"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_2a_0a_12_25_3c00.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/8F.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [4, 4, 4, 4, 4, 4, 4, 4, 4, 63, 48, 73, 75, 74, 48, 48, 73, 225, 74, 63, 59, 59, 59, 59, 59, 59, 59, 225, 59, 56, 4, 4, 4, 72, 59, 71, 4, 186, 4, 56, 4, 4, 4, 57, 59, 56, 4, 186, 4, 56, 73, 75, 74, 79, 5, 235, 4, 186, 185, 56, 59, 59, 59, 60, 5, 241, 4, 186, 4, 56, 5, 10, 5, 5, 5, 242, 4, 186, 4, 56], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 3, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0a"}, {"name": "attribset", "type": "string", "value": "25:3c00"}, {"name": "palette", "type": "string", "value": "12"}, {"name": "tileset", "type": "string", "value": "2a"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_2a_0a_12_25_3c00.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/96.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [15, 58, 59, 59, 59, 59, 59, 59, 59, 59, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 38, 39, 5, 93, 93, 93, 248, 11, 11, 11, 43, 42, 39, 38, 39, 5, 93, 93, 93, 38, 42, 43, 42, 43, 42, 39, 69, 247, 38, 43], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 3, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "03"}, {"name": "attribset", "type": "string", "value": "25:0c00"}, {"name": "palette", "type": "string", "value": "04"}, {"name": "tileset", "type": "string", "value": "0f"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_0f_03_04_25_0c00.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/9C.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[64, 59, 59, 59, 225, 59, 59, 59, 59, 59, 64, 59, 59, 59, 225, 59, 59, 59, 71, 4, 57, 59, 59, 59, 225, 59, 59, 59, 56, 4, 57, 5, 5, 5, 33, 5, 5, 69, 56, 4, 57, 5, 183, 183, 5, 183, 183, 5, 47, 48, 57, 5, 184, 184, 5, 184, 184, 5, 58, 59, 51, 46, 5, 69, 5, 5, 5, 5, 5, 5, 5, 51, 46, 5, 5, 44, 45, 45, 45, 45], 7 | "height":8, 8 | "id":1, 9 | "name":"Tiles", 10 | "opacity":1, 11 | "type":"tilelayer", 12 | "visible":true, 13 | "width":10, 14 | "x":0, 15 | "y":0 16 | }, 17 | { 18 | "draworder":"topdown", 19 | "id":2, 20 | "name":"EntityLayer", 21 | "objects":[], 22 | "opacity":1, 23 | "type":"objectgroup", 24 | "visible":true, 25 | "x":0, 26 | "y":0 27 | }], 28 | "nextlayerid":1, 29 | "nextobjectid":3, 30 | "orientation":"orthogonal", 31 | "properties":[ 32 | { 33 | "name":"animationset", 34 | "type":"string", 35 | "value":"03" 36 | }, 37 | { 38 | "name":"attribset", 39 | "type":"string", 40 | "value":"22:2000" 41 | }, 42 | { 43 | "name":"palette", 44 | "type":"string", 45 | "value":"09" 46 | }, 47 | { 48 | "name":"tileset", 49 | "type":"string", 50 | "value":"2a" 51 | }], 52 | "renderorder":"right-down", 53 | "tiledversion":"1.5.0", 54 | "tileheight":16, 55 | "tilesets":[ 56 | { 57 | "columns":16, 58 | "firstgid":1, 59 | "image":"tiles_2a_03_09_22_2000.png", 60 | "imageheight":256, 61 | "imagewidth":256, 62 | "margin":0, 63 | "name":"main", 64 | "spacing":0, 65 | "tilecount":256, 66 | "tileheight":16, 67 | "tilewidth":16 68 | }], 69 | "tilewidth":16, 70 | "type":"map", 71 | "version":1.5, 72 | "width":10 73 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/9E.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [59, 59, 64, 59, 59, 59, 59, 60, 5, 5, 4, 72, 64, 5, 5, 5, 5, 5, 5, 5, 4, 57, 60, 5, 5, 5, 38, 39, 5, 5, 4, 57, 5, 5, 5, 5, 40, 42, 39, 5, 48, 79, 5, 38, 39, 5, 38, 43, 41, 5, 59, 60, 5, 40, 41, 5, 40, 41, 5, 5, 5, 5, 5, 5, 69, 5, 5, 5, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 3, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "03"}, {"name": "attribset", "type": "string", "value": "22:2000"}, {"name": "palette", "type": "string", "value": "09"}, {"name": "tileset", "type": "string", "value": "2a"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_2a_03_09_22_2000.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/9F.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [5, 5, 5, 5, 5, 56, 4, 186, 4, 56, 5, 44, 45, 6, 45, 50, 4, 186, 4, 56, 5, 56, 4, 4, 4, 4, 4, 4, 4, 47, 5, 47, 48, 48, 48, 73, 225, 74, 48, 63, 5, 58, 59, 59, 59, 59, 225, 59, 59, 56, 5, 5, 5, 10, 5, 5, 33, 5, 5, 56, 5, 5, 10, 5, 5, 5, 5, 5, 44, 50, 45, 45, 45, 45, 46, 5, 44, 45, 50, 4], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 3, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0a"}, {"name": "attribset", "type": "string", "value": "25:3c00"}, {"name": "palette", "type": "string", "value": "12"}, {"name": "tileset", "type": "string", "value": "2a"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_2a_0a_12_25_3c00.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/A1.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[41, 40, 41, 40, 41, 40, 41, 40, 41, 40, 7 | 5, 93, 93, 93, 93, 93, 5, 5, 5, 38, 8 | 99, 99, 99, 99, 99, 99, 93, 5, 38, 43, 9 | 247, 99, 93, 93, 5, 99, 99, 5, 40, 42, 10 | 253, 99, 93, 99, 5, 33, 5, 5, 93, 40, 11 | 253, 5, 93, 99, 5, 99, 99, 99, 93, 38, 12 | 253, 99, 5, 99, 99, 99, 93, 93, 93, 40, 13 | 253, 99, 246, 250, 247, 99, 5, 99, 99, 38], 14 | "height":8, 15 | "id":1, 16 | "name":"Tiles", 17 | "opacity":1, 18 | "type":"tilelayer", 19 | "visible":true, 20 | "width":10, 21 | "x":0, 22 | "y":0 23 | }, 24 | { 25 | "draworder":"topdown", 26 | "id":2, 27 | "name":"EntityLayer", 28 | "objects":[], 29 | "opacity":1, 30 | "type":"objectgroup", 31 | "visible":true, 32 | "x":0, 33 | "y":0 34 | }], 35 | "nextlayerid":1, 36 | "nextobjectid":7, 37 | "orientation":"orthogonal", 38 | "properties":[ 39 | { 40 | "name":"animationset", 41 | "type":"string", 42 | "value":"03" 43 | }, 44 | { 45 | "name":"attribset", 46 | "type":"string", 47 | "value":"22:2800" 48 | }, 49 | { 50 | "name":"palette", 51 | "type":"string", 52 | "value":"0b" 53 | }, 54 | { 55 | "name":"tileset", 56 | "type":"string", 57 | "value":"26" 58 | }], 59 | "renderorder":"right-down", 60 | "tiledversion":"1.10.2", 61 | "tileheight":16, 62 | "tilesets":[ 63 | { 64 | "columns":16, 65 | "firstgid":1, 66 | "image":"tiles_26_03_0b_22_2800.png", 67 | "imageheight":256, 68 | "imagewidth":256, 69 | "margin":0, 70 | "name":"main", 71 | "spacing":0, 72 | "tilecount":256, 73 | "tileheight":16, 74 | "tilewidth":16 75 | }], 76 | "tilewidth":16, 77 | "type":"map", 78 | "version":"1.10", 79 | "width":10 80 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/AE.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[4, 62, 48, 48, 48, 48, 48, 48, 61, 4, 7 | 62, 79, 59, 59, 59, 59, 59, 59, 47, 48, 8 | 57, 64, 59, 59, 59, 71, 4, 4, 58, 59, 9 | 57, 60, 11, 256, 256, 56, 4, 4, 4, 4, 10 | 57, 10, 252, 256, 251, 56, 4, 4, 4, 4, 11 | 57, 11, 256, 253, 10, 52, 61, 4, 4, 4, 12 | 57, 11, 256, 256, 250, 247, 52, 54, 4, 4, 13 | 57, 256, 256, 256, 256, 251, 247, 4, 4, 4], 14 | "height":8, 15 | "id":1, 16 | "name":"Tiles", 17 | "opacity":1, 18 | "type":"tilelayer", 19 | "visible":true, 20 | "width":10, 21 | "x":0, 22 | "y":0 23 | }, 24 | { 25 | "draworder":"topdown", 26 | "id":2, 27 | "name":"EntityLayer", 28 | "objects":[], 29 | "opacity":1, 30 | "type":"objectgroup", 31 | "visible":true, 32 | "x":0, 33 | "y":0 34 | }], 35 | "nextlayerid":1, 36 | "nextobjectid":6, 37 | "orientation":"orthogonal", 38 | "properties":[ 39 | { 40 | "name":"animationset", 41 | "type":"string", 42 | "value":"0b" 43 | }, 44 | { 45 | "name":"attribset", 46 | "type":"string", 47 | "value":"27:2640" 48 | }, 49 | { 50 | "name":"palette", 51 | "type":"string", 52 | "value":"06" 53 | }, 54 | { 55 | "name":"tileset", 56 | "type":"string", 57 | "value":"0f" 58 | }], 59 | "renderorder":"right-down", 60 | "tiledversion":"1.10.2", 61 | "tileheight":16, 62 | "tilesets":[ 63 | { 64 | "columns":16, 65 | "firstgid":1, 66 | "image":"tiles_0f_0b_06_27_2640.png", 67 | "imageheight":256, 68 | "imagewidth":256, 69 | "margin":0, 70 | "name":"main", 71 | "spacing":0, 72 | "tilecount":256, 73 | "tileheight":16, 74 | "tilewidth":16 75 | }], 76 | "tilewidth":16, 77 | "type":"map", 78 | "version":"1.10", 79 | "width":10 80 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/AF.json: -------------------------------------------------------------------------------- 1 | {"width": 10, "height": 8, "type": "map", "renderorder": "right-down", "tiledversion": "1.4.3", "version": 1.4, "tilewidth": 16, "tileheight": 16, "orientation": "orthogonal", "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_0f_0b_06_27_2640.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "layers": [{"data": [10, 4, 62, 48, 79, 5, 47, 61, 4, 10, 48, 48, 79, 59, 60, 5, 58, 56, 4, 4, 59, 59, 60, 4, 4, 4, 4, 56, 10, 4, 4, 4, 4, 4, 4, 4, 4, 56, 4, 10, 4, 4, 4, 4, 44, 45, 45, 50, 4, 4, 4, 4, 4, 4, 56, 4, 10, 4, 10, 4, 4, 4, 55, 48, 47, 48, 48, 48, 61, 4, 4, 4, 4, 4, 63, 59, 59, 59, 56, 10], "width": 10, "height": 8, "id": 1, "name": "Tiles", "type": "tilelayer", "visible": true, "opacity": 1, "x": 0, "y": 0}, {"id": 2, "name": "EntityLayer", "type": "objectgroup", "visible": true, "opacity": 1, "x": 0, "y": 0, "objects": []}], "properties": [{"name": "tileset", "type": "string", "value": "0f"}, {"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2640"}, {"name": "palette", "type": "string", "value": "06"}]} -------------------------------------------------------------------------------- /patches/overworld/alttp/Alt06.json: -------------------------------------------------------------------------------- 1 | {"width": 10, "height": 8, "type": "map", "renderorder": "right-down", "tiledversion": "1.4.3", "version": 1.4, "tilewidth": 16, "tileheight": 16, "orientation": "orthogonal", "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_3c_0b_13_27_1620.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "layers": [{"data": [1, 1, 1, 1, 6, 7, 8, 1, 1, 1, 125, 126, 1, 129, 100, 101, 102, 130, 125, 126, 240, 240, 240, 56, 114, 194, 128, 57, 240, 240, 230, 230, 30, 56, 170, 204, 192, 57, 94, 230, 230, 230, 56, 47, 73, 225, 74, 79, 57, 230, 230, 230, 56, 63, 59, 225, 59, 64, 57, 230, 230, 30, 47, 48, 73, 225, 74, 48, 79, 94, 230, 56, 63, 59, 59, 225, 59, 59, 60, 57], "width": 10, "height": 8, "id": 1, "name": "Tiles", "type": "tilelayer", "visible": true, "opacity": 1, "x": 0, "y": 0}, {"id": 2, "name": "EntityLayer", "type": "objectgroup", "visible": true, "opacity": 1, "x": 0, "y": 0, "objects": [{"width": 8, "height": 8, "x": 0, "y": 0, "name": "1:08:270:50:7c", "type": "warp"}]}], "properties": [{"name": "tileset", "type": "string", "value": "3C"}, {"name": "animationset", "type": "string", "value": "0B"}, {"name": "attribset", "type": "string", "value": "27:1620"}, {"name": "palette", "type": "string", "value": "13"}]} -------------------------------------------------------------------------------- /patches/overworld/alttp/Alt0E.json: -------------------------------------------------------------------------------- 1 | {"width": 10, "height": 8, "type": "map", "renderorder": "right-down", "tiledversion": "1.4.3", "version": 1.4, "tilewidth": 16, "tileheight": 16, "orientation": "orthogonal", "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_30_0b_16_27_1e40.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "layers": [{"data": [1, 1, 1, 115, 117, 117, 117, 116, 1, 1, 125, 127, 126, 115, 118, 215, 119, 116, 125, 126, 240, 240, 240, 115, 117, 226, 117, 116, 240, 240, 30, 81, 81, 115, 117, 120, 117, 116, 81, 81, 56, 85, 33, 183, 117, 120, 117, 184, 4, 4, 56, 33, 4, 4, 4, 4, 10, 4, 4, 10, 47, 61, 4, 10, 4, 4, 4, 4, 4, 4, 63, 47, 48, 48, 73, 75, 74, 73, 75, 74], "width": 10, "height": 8, "id": 1, "name": "Tiles", "type": "tilelayer", "visible": true, "opacity": 1, "x": 0, "y": 0}, {"id": 2, "name": "EntityLayer", "type": "objectgroup", "visible": true, "opacity": 1, "x": 0, "y": 0, "objects": [{"width": 8, "height": 8, "x": 0, "y": 0, "name": "1:06:20e:50:7c", "type": "warp"}]}], "properties": [{"name": "tileset", "type": "string", "value": "30"}, {"name": "animationset", "type": "string", "value": "0B"}, {"name": "attribset", "type": "string", "value": "27:1E40"}, {"name": "palette", "type": "string", "value": "16"}]} -------------------------------------------------------------------------------- /patches/overworld/alttp/Alt1B.json: -------------------------------------------------------------------------------- 1 | {"width": 10, "height": 8, "type": "map", "renderorder": "right-down", "tiledversion": "1.4.3", "version": 1.4, "tilewidth": 16, "tileheight": 16, "orientation": "orthogonal", "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_3e_0b_15_27_2240.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "layers": [{"data": [4, 4, 4, 4, 4, 4, 4, 57, 81, 81, 4, 62, 48, 61, 4, 4, 4, 57, 28, 28, 48, 79, 226, 47, 48, 48, 48, 79, 4, 28, 59, 64, 59, 63, 59, 59, 226, 64, 4, 4, 59, 60, 4, 58, 59, 59, 59, 60, 4, 4, 28, 4, 10, 4, 4, 10, 10, 4, 4, 28, 28, 62, 73, 75, 75, 75, 74, 61, 10, 4, 48, 79, 59, 59, 59, 59, 59, 47, 48, 48], "width": 10, "height": 8, "id": 1, "name": "Tiles", "type": "tilelayer", "visible": true, "opacity": 1, "x": 0, "y": 0}, {"id": 2, "name": "EntityLayer", "type": "objectgroup", "visible": true, "opacity": 1, "x": 0, "y": 0, "objects": []}], "properties": [{"name": "tileset", "type": "string", "value": "3E"}, {"name": "animationset", "type": "string", "value": "0B"}, {"name": "attribset", "type": "string", "value": "27:2240"}, {"name": "palette", "type": "string", "value": "15"}]} -------------------------------------------------------------------------------- /patches/overworld/alttp/Alt2B.json: -------------------------------------------------------------------------------- 1 | {"width": 10, "height": 8, "type": "map", "renderorder": "right-down", "tiledversion": "1.4.3", "version": 1.4, "tilewidth": 16, "tileheight": 16, "orientation": "orthogonal", "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_34_0b_17_27_2640.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "layers": [{"data": [59, 64, 59, 214, 215, 216, 59, 63, 59, 59, 59, 64, 59, 206, 226, 207, 59, 63, 59, 59, 59, 60, 4, 10, 4, 10, 199, 58, 59, 59, 15, 15, 28, 28, 4, 4, 10, 15, 15, 15, 15, 15, 15, 28, 28, 28, 28, 15, 15, 15, 45, 45, 45, 45, 85, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 45, 46, 44, 45, 46, 44, 45, 46, 44, 45], "width": 10, "height": 8, "id": 1, "name": "Tiles", "type": "tilelayer", "visible": true, "opacity": 1, "x": 0, "y": 0}, {"id": 2, "name": "EntityLayer", "type": "objectgroup", "visible": true, "opacity": 1, "x": 0, "y": 0, "objects": [{"width": 8, "height": 8, "x": 0, "y": 0, "name": "1:03:17a:50:7c", "type": "warp"}, {"width": 8, "height": 8, "x": 0, "y": 8, "name": "1:1f:1e9:28:20", "type": "warp"}]}], "properties": [{"name": "tileset", "type": "string", "value": "34"}, {"name": "animationset", "type": "string", "value": "0B"}, {"name": "attribset", "type": "string", "value": "27:2640"}, {"name": "palette", "type": "string", "value": "17"}]} -------------------------------------------------------------------------------- /patches/overworld/alttp/Alt79.json: -------------------------------------------------------------------------------- 1 | {"width": 10, "height": 8, "type": "map", "renderorder": "right-down", "tiledversion": "1.4.3", "version": 1.4, "tilewidth": 16, "tileheight": 16, "orientation": "orthogonal", "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_28_03_06_25_1400.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "layers": [{"data": [151, 151, 158, 159, 14, 13, 14, 158, 159, 151, 148, 148, 152, 153, 14, 13, 14, 152, 153, 148, 15, 15, 149, 150, 14, 13, 14, 149, 150, 15, 15, 15, 15, 160, 14, 13, 14, 160, 15, 15, 15, 15, 15, 155, 14, 13, 14, 155, 15, 15, 45, 45, 45, 164, 14, 13, 14, 164, 45, 45, 248, 251, 256, 250, 247, 13, 246, 250, 256, 251, 38, 39, 252, 256, 253, 13, 252, 256, 253, 38], "width": 10, "height": 8, "id": 1, "name": "Tiles", "type": "tilelayer", "visible": true, "opacity": 1, "x": 0, "y": 0}, {"id": 2, "name": "EntityLayer", "type": "objectgroup", "visible": true, "opacity": 1, "x": 0, "y": 0, "objects": []}], "properties": [{"name": "tileset", "type": "string", "value": "28"}, {"name": "animationset", "type": "string", "value": "03"}, {"name": "attribset", "type": "string", "value": "25:1400"}, {"name": "palette", "type": "string", "value": "06"}]} -------------------------------------------------------------------------------- /patches/overworld/alttp/Alt8C.json: -------------------------------------------------------------------------------- 1 | {"width": 10, "height": 8, "type": "map", "renderorder": "right-down", "tiledversion": "1.4.3", "version": 1.4, "tilewidth": 16, "tileheight": 16, "orientation": "orthogonal", "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_2a_03_1d_25_3c00.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "layers": [{"data": [57, 180, 180, 180, 180, 180, 59, 59, 59, 59, 57, 180, 180, 180, 180, 180, 72, 59, 59, 59, 57, 174, 178, 232, 174, 178, 57, 113, 72, 59, 57, 175, 179, 228, 175, 179, 243, 5, 57, 15, 57, 186, 185, 186, 185, 186, 244, 5, 243, 15, 57, 183, 186, 186, 186, 183, 245, 5, 244, 15, 57, 184, 186, 186, 186, 184, 57, 5, 245, 15, 57, 48, 73, 225, 74, 48, 79, 5, 57, 15], "width": 10, "height": 8, "id": 1, "name": "Tiles", "type": "tilelayer", "visible": true, "opacity": 1, "x": 0, "y": 0}, {"id": 2, "name": "EntityLayer", "type": "objectgroup", "visible": true, "opacity": 1, "x": 0, "y": 0, "objects": [{"width": 8, "height": 8, "x": 0, "y": 0, "name": "1:05:1d4:50:7c", "type": "warp"}]}], "properties": [{"name": "tileset", "type": "string", "value": "2A"}, {"name": "animationset", "type": "string", "value": "03"}, {"name": "attribset", "type": "string", "value": "25:3C00"}, {"name": "palette", "type": "string", "value": "1D"}]} -------------------------------------------------------------------------------- /patches/overworld/alttp/BB.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 7 | 15, 15, 15, 15, 15, 15, 15, 15, 28, 28, 8 | 15, 15, 15, 44, 45, 45, 46, 15, 15, 28, 9 | 45, 45, 45, 56, 4, 10, 51, 46, 15, 15, 10 | 11, 11, 11, 56, 10, 4, 4, 51, 45, 45, 11 | 256, 11, 11, 47, 61, 4, 10, 4, 4, 10, 12 | 11, 256, 256, 63, 47, 48, 48, 48, 61, 4, 13 | 256, 256, 256, 63, 63, 59, 59, 59, 47, 48], 14 | "height":8, 15 | "id":1, 16 | "name":"Tiles", 17 | "opacity":1, 18 | "type":"tilelayer", 19 | "visible":true, 20 | "width":10, 21 | "x":0, 22 | "y":0 23 | }, 24 | { 25 | "draworder":"topdown", 26 | "id":2, 27 | "name":"EntityLayer", 28 | "objects":[], 29 | "opacity":1, 30 | "type":"objectgroup", 31 | "visible":true, 32 | "x":0, 33 | "y":0 34 | }], 35 | "nextlayerid":1, 36 | "nextobjectid":3, 37 | "orientation":"orthogonal", 38 | "properties":[ 39 | { 40 | "name":"animationset", 41 | "type":"string", 42 | "value":"0b" 43 | }, 44 | { 45 | "name":"attribset", 46 | "type":"string", 47 | "value":"27:2640" 48 | }, 49 | { 50 | "name":"palette", 51 | "type":"string", 52 | "value":"06" 53 | }, 54 | { 55 | "name":"tileset", 56 | "type":"string", 57 | "value":"0f" 58 | }], 59 | "renderorder":"right-down", 60 | "tiledversion":"1.10.2", 61 | "tileheight":16, 62 | "tilesets":[ 63 | { 64 | "columns":16, 65 | "firstgid":1, 66 | "image":"tiles_0f_0b_06_27_2640.png", 67 | "imageheight":256, 68 | "imagewidth":256, 69 | "margin":0, 70 | "name":"main", 71 | "spacing":0, 72 | "tilecount":256, 73 | "tileheight":16, 74 | "tilewidth":16 75 | }], 76 | "tilewidth":16, 77 | "type":"map", 78 | "version":"1.10", 79 | "width":10 80 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/BC.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [15, 15, 15, 15, 58, 59, 59, 59, 59, 59, 28, 15, 15, 15, 15, 15, 15, 15, 15, 15, 28, 28, 15, 15, 44, 45, 45, 45, 45, 45, 15, 15, 15, 44, 50, 4, 4, 4, 10, 4, 45, 45, 45, 56, 4, 10, 4, 4, 4, 10, 4, 4, 4, 56, 4, 4, 4, 10, 4, 4, 4, 10, 4, 56, 4, 62, 48, 48, 61, 4, 48, 48, 48, 47, 48, 79, 59, 59, 47, 48], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 6, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2640"}, {"name": "palette", "type": "string", "value": "06"}, {"name": "tileset", "type": "string", "value": "0f"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_0f_0b_06_27_2640.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/BD.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[59, 59, 59, 59, 59, 59, 56, 249, 58, 56, 7 | 15, 15, 15, 15, 15, 15, 56, 10, 11, 56, 8 | 45, 45, 46, 15, 15, 15, 56, 11, 11, 56, 9 | 10, 4, 57, 15, 15, 15, 56, 11, 11, 56, 10 | 4, 62, 79, 15, 15, 15, 56, 11, 44, 45, 11 | 62, 79, 64, 15, 15, 15, 56, 256, 56, 4, 12 | 57, 64, 64, 15, 15, 15, 56, 256, 56, 10, 13 | 79, 64, 64, 15, 15, 15, 56, 256, 47, 48], 14 | "height":8, 15 | "id":1, 16 | "name":"Tiles", 17 | "opacity":1, 18 | "type":"tilelayer", 19 | "visible":true, 20 | "width":10, 21 | "x":0, 22 | "y":0 23 | }, 24 | { 25 | "draworder":"topdown", 26 | "id":2, 27 | "name":"EntityLayer", 28 | "objects":[], 29 | "opacity":1, 30 | "type":"objectgroup", 31 | "visible":true, 32 | "x":0, 33 | "y":0 34 | }], 35 | "nextlayerid":1, 36 | "nextobjectid":7, 37 | "orientation":"orthogonal", 38 | "properties":[ 39 | { 40 | "name":"animationset", 41 | "type":"string", 42 | "value":"0b" 43 | }, 44 | { 45 | "name":"attribset", 46 | "type":"string", 47 | "value":"27:2640" 48 | }, 49 | { 50 | "name":"palette", 51 | "type":"string", 52 | "value":"06" 53 | }, 54 | { 55 | "name":"tileset", 56 | "type":"string", 57 | "value":"0f" 58 | }], 59 | "renderorder":"right-down", 60 | "tiledversion":"1.10.2", 61 | "tileheight":16, 62 | "tilesets":[ 63 | { 64 | "columns":16, 65 | "firstgid":1, 66 | "image":"tiles_0f_0b_06_27_2640.png", 67 | "imageheight":256, 68 | "imagewidth":256, 69 | "margin":0, 70 | "name":"main", 71 | "spacing":0, 72 | "tilecount":256, 73 | "tileheight":16, 74 | "tilewidth":16 75 | }], 76 | "tilewidth":16, 77 | "type":"map", 78 | "version":"1.10", 79 | "width":10 80 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/C0.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [4, 62, 48, 48, 48, 48, 48, 48, 48, 48, 62, 79, 59, 59, 59, 59, 59, 59, 59, 59, 57, 60, 4, 4, 4, 4, 10, 4, 4, 4, 57, 4, 4, 44, 45, 45, 45, 46, 4, 4, 57, 4, 4, 56, 206, 95, 177, 57, 4, 10, 57, 10, 4, 56, 207, 228, 183, 57, 4, 4, 57, 4, 4, 52, 73, 225, 74, 53, 4, 4, 57, 4, 10, 4, 4, 4, 4, 4, 62, 48], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [{"height": 8, "id": 1, "name": "1:07:23a:58:10", "rotation": 0, "type": "warp", "visible": true, "width": 8, "x": 0, "y": 0}], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 2, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "03"}, {"name": "attribset", "type": "string", "value": "22:2c00"}, {"name": "palette", "type": "string", "value": "0c"}, {"name": "tileset", "type": "string", "value": "2c"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_2c_03_0c_22_2c00.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/C1.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 59, 59, 59, 59, 226, 59, 59, 59, 59, 59, 5, 5, 5, 33, 5, 33, 5, 5, 4, 4, 4, 5, 5, 5, 33, 5, 5, 4, 5, 4, 4, 4, 44, 45, 45, 45, 46, 4, 4, 4, 4, 5, 56, 206, 95, 177, 57, 4, 4, 4, 4, 4, 56, 207, 228, 183, 57, 4, 4, 4, 48, 48, 47, 73, 225, 74, 79, 73, 75, 74], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [{"height": 8, "id": 4, "name": "1:07:23d:58:10", "rotation": 0, "type": "warp", "visible": true, "width": 8, "x": 0, "y": 0}, {"height": 8, "id": 5, "name": "1:07:25d:50:7c", "rotation": 0, "type": "warp", "visible": true, "width": 8, "x": 0, "y": 16}], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 6, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "03"}, {"name": "attribset", "type": "string", "value": "22:2c00"}, {"name": "palette", "type": "string", "value": "0c"}, {"name": "tileset", "type": "string", "value": "2c"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_2c_03_0c_22_2c00.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/C2.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 4, 4, 10, 4, 4, 4, 4, 4, 72, 59, 4, 44, 45, 45, 45, 46, 4, 62, 79, 59, 4, 56, 206, 95, 177, 57, 4, 243, 60, 9, 10, 56, 207, 228, 183, 57, 4, 244, 9, 9, 4, 47, 73, 75, 74, 79, 4, 245, 9, 9, 48, 63, 59, 59, 59, 64, 48, 79, 9, 9], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 4, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "03"}, {"name": "attribset", "type": "string", "value": "22:2c00"}, {"name": "palette", "type": "string", "value": "0c"}, {"name": "tileset", "type": "string", "value": "2c"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_2c_03_0c_22_2c00.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/C3.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [48, 48, 48, 48, 48, 48, 48, 61, 10, 4, 59, 59, 59, 59, 59, 59, 59, 47, 61, 4, 59, 71, 4, 4, 5, 5, 5, 58, 56, 10, 59, 47, 61, 4, 4, 33, 5, 4, 56, 4, 9, 58, 47, 61, 4, 4, 4, 5, 56, 4, 9, 9, 58, 235, 4, 44, 45, 45, 50, 4, 9, 106, 9, 241, 4, 56, 4, 10, 4, 4, 9, 9, 9, 242, 4, 56, 10, 4, 4, 10], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 4, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "03"}, {"name": "attribset", "type": "string", "value": "22:2c00"}, {"name": "palette", "type": "string", "value": "0c"}, {"name": "tileset", "type": "string", "value": "2c"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_2c_03_0c_22_2c00.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/CC.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [59, 59, 59, 63, 59, 64, 59, 59, 63, 59, 59, 59, 59, 63, 59, 64, 59, 59, 63, 59, 59, 59, 59, 63, 59, 64, 59, 59, 63, 59, 59, 59, 59, 63, 59, 64, 59, 59, 63, 59, 59, 59, 59, 63, 59, 64, 59, 59, 63, 59, 15, 15, 15, 58, 59, 60, 15, 15, 58, 59, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 28, 15, 44, 45, 45, 45, 45, 45, 46, 15], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 7, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2640"}, {"name": "palette", "type": "string", "value": "06"}, {"name": "tileset", "type": "string", "value": "0f"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_0f_0b_06_27_2640.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/D0.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [57, 4, 4, 4, 4, 4, 10, 4, 57, 59, 57, 9, 4, 4, 10, 4, 4, 62, 79, 9, 57, 4, 9, 4, 4, 62, 48, 79, 60, 9, 51, 46, 9, 9, 4, 243, 59, 60, 9, 9, 4, 51, 46, 9, 4, 244, 9, 9, 9, 9, 10, 4, 57, 4, 4, 245, 9, 9, 9, 9, 4, 10, 57, 9, 4, 57, 9, 9, 9, 9, 4, 62, 79, 9, 4, 57, 9, 9, 9, 9], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 2, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "03"}, {"name": "attribset", "type": "string", "value": "22:2c00"}, {"name": "palette", "type": "string", "value": "0c"}, {"name": "tileset", "type": "string", "value": "2c"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_2c_03_0c_22_2c00.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/D2.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [59, 63, 59, 59, 59, 64, 59, 60, 9, 9, 9, 58, 59, 59, 59, 60, 9, 9, 106, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 62, 73, 75, 74, 54, 9, 9, 9, 9, 62, 53, 9, 9, 9, 9, 9, 9, 9, 9, 57, 9, 9, 9, 9, 9, 9, 201, 9, 9, 57, 9, 9, 9, 201, 9, 9, 9, 9, 48, 53, 9, 9, 9, 9, 9, 9, 9, 9], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 3, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "03"}, {"name": "attribset", "type": "string", "value": "22:2c00"}, {"name": "palette", "type": "string", "value": "0c"}, {"name": "tileset", "type": "string", "value": "2c"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_2c_03_0c_22_2c00.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/DD.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [15, 15, 15, 15, 58, 59, 225, 59, 63, 56, 15, 15, 15, 15, 15, 15, 15, 15, 58, 56, 15, 15, 15, 15, 15, 15, 15, 15, 15, 56, 15, 15, 15, 15, 15, 15, 15, 15, 15, 56, 15, 15, 15, 15, 15, 15, 15, 15, 15, 56, 15, 15, 15, 15, 15, 15, 15, 15, 44, 50, 15, 15, 15, 15, 15, 15, 15, 15, 56, 4, 15, 15, 15, 15, 15, 15, 15, 15, 56, 10], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 6, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2640"}, {"name": "palette", "type": "string", "value": "06"}, {"name": "tileset", "type": "string", "value": "0f"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_0f_0b_06_27_2640.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/DE.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [57, 64, 15, 15, 15, 15, 15, 15, 15, 15, 57, 60, 15, 15, 15, 44, 45, 45, 46, 15, 57, 15, 15, 15, 15, 56, 4, 4, 243, 15, 57, 15, 15, 15, 15, 56, 4, 4, 244, 15, 57, 15, 15, 15, 15, 47, 61, 4, 245, 15, 51, 46, 15, 15, 111, 58, 235, 4, 57, 15, 10, 57, 15, 15, 15, 15, 241, 4, 51, 45, 4, 57, 111, 15, 15, 111, 242, 4, 4, 4], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 4, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2640"}, {"name": "palette", "type": "string", "value": "06"}, {"name": "tileset", "type": "string", "value": "0f"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_0f_0b_06_27_2640.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/DF.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [15, 56, 4, 4, 4, 4, 4, 58, 59, 56, 15, 47, 48, 48, 61, 4, 4, 4, 4, 56, 15, 58, 59, 59, 47, 61, 10, 4, 44, 50, 15, 15, 15, 15, 58, 235, 4, 4, 56, 4, 15, 15, 15, 15, 15, 241, 4, 4, 47, 61, 15, 15, 15, 15, 15, 242, 4, 4, 58, 56, 45, 45, 45, 45, 45, 50, 4, 10, 4, 56, 4, 4, 4, 4, 10, 4, 4, 4, 4, 56], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 6, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2640"}, {"name": "palette", "type": "string", "value": "06"}, {"name": "tileset", "type": "string", "value": "0f"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_0f_0b_06_27_2640.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/E6.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[4, 10, 4, 10, 4, 57, 11, 11, 11, 11, 7 | 4, 10, 10, 4, 4, 57, 11, 12, 11, 11, 8 | 10, 4, 4, 62, 48, 79, 11, 12, 12, 11, 9 | 4, 4, 62, 79, 59, 64, 11, 11, 12, 11, 10 | 4, 10, 57, 64, 59, 60, 11, 93, 12, 11, 11 | 4, 4, 57, 60, 11, 11, 11, 12, 12, 11, 12 | 48, 48, 79, 247, 93, 11, 12, 12, 11, 11, 13 | 59, 59, 64, 11, 250, 253, 12, 252, 11, 11], 14 | "height":8, 15 | "id":1, 16 | "name":"Tiles", 17 | "opacity":1, 18 | "type":"tilelayer", 19 | "visible":true, 20 | "width":10, 21 | "x":0, 22 | "y":0 23 | }, 24 | { 25 | "draworder":"topdown", 26 | "id":2, 27 | "name":"EntityLayer", 28 | "objects":[], 29 | "opacity":1, 30 | "type":"objectgroup", 31 | "visible":true, 32 | "x":0, 33 | "y":0 34 | }], 35 | "nextlayerid":1, 36 | "nextobjectid":2, 37 | "orientation":"orthogonal", 38 | "properties":[ 39 | { 40 | "name":"animationset", 41 | "type":"string", 42 | "value":"03" 43 | }, 44 | { 45 | "name":"attribset", 46 | "type":"string", 47 | "value":"25:0c00" 48 | }, 49 | { 50 | "name":"palette", 51 | "type":"string", 52 | "value":"04" 53 | }, 54 | { 55 | "name":"tileset", 56 | "type":"string", 57 | "value":"0f" 58 | }], 59 | "renderorder":"right-down", 60 | "tiledversion":"1.10.2", 61 | "tileheight":16, 62 | "tilesets":[ 63 | { 64 | "columns":16, 65 | "firstgid":1, 66 | "image":"tiles_0f_03_04_25_0c00.png", 67 | "imageheight":256, 68 | "imagewidth":256, 69 | "margin":0, 70 | "name":"main", 71 | "spacing":0, 72 | "tilecount":256, 73 | "tileheight":16, 74 | "tilewidth":16 75 | }], 76 | "tilewidth":16, 77 | "type":"map", 78 | "version":"1.10", 79 | "width":10 80 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/E9.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[11, 256, 11, 11, 11, 251, 11, 11, 56, 4, 7 | 11, 11, 11, 11, 253, 33, 11, 44, 50, 10, 8 | 11, 11, 33, 33, 11, 11, 11, 56, 4, 4, 9 | 11, 11, 11, 254, 256, 11, 44, 50, 10, 4, 10 | 11, 11, 253, 62, 73, 75, 56, 4, 4, 10, 11 | 73, 75, 74, 79, 59, 59, 56, 4, 4, 4, 12 | 59, 59, 59, 60, 10, 4, 47, 61, 10, 4, 13 | 4, 4, 10, 4, 4, 4, 63, 47, 61, 4], 14 | "height":8, 15 | "id":1, 16 | "name":"Tiles", 17 | "opacity":1, 18 | "type":"tilelayer", 19 | "visible":true, 20 | "width":10, 21 | "x":0, 22 | "y":0 23 | }, 24 | { 25 | "draworder":"topdown", 26 | "id":2, 27 | "name":"EntityLayer", 28 | "objects":[], 29 | "opacity":1, 30 | "type":"objectgroup", 31 | "visible":true, 32 | "x":0, 33 | "y":0 34 | }], 35 | "nextlayerid":1, 36 | "nextobjectid":4, 37 | "orientation":"orthogonal", 38 | "properties":[ 39 | { 40 | "name":"animationset", 41 | "type":"string", 42 | "value":"03" 43 | }, 44 | { 45 | "name":"attribset", 46 | "type":"string", 47 | "value":"22:1800" 48 | }, 49 | { 50 | "name":"palette", 51 | "type":"string", 52 | "value":"04" 53 | }, 54 | { 55 | "name":"tileset", 56 | "type":"string", 57 | "value":"2e" 58 | }], 59 | "renderorder":"right-down", 60 | "tiledversion":"1.10.2", 61 | "tileheight":16, 62 | "tilesets":[ 63 | { 64 | "columns":16, 65 | "firstgid":1, 66 | "image":"tiles_2e_03_04_22_1800.png", 67 | "imageheight":256, 68 | "imagewidth":256, 69 | "margin":0, 70 | "name":"main", 71 | "spacing":0, 72 | "tilecount":256, 73 | "tileheight":16, 74 | "tilewidth":16 75 | }], 76 | "tilewidth":16, 77 | "type":"map", 78 | "version":"1.10", 79 | "width":10 80 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/EB.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [15, 15, 28, 15, 15, 15, 15, 15, 15, 15, 15, 28, 28, 15, 28, 15, 15, 15, 15, 15, 15, 28, 28, 28, 15, 15, 15, 15, 15, 15, 15, 15, 28, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 28, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 28, 28, 15, 15, 15, 15, 15, 15, 15, 15, 15, 28, 28, 15, 15, 45, 46, 15, 15, 15, 15, 15, 15, 15, 15], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [{"height": 16, "id": 2, "name": "ZORA", "rotation": 0, "type": "entity", "visible": true, "width": 16, "x": 80, "y": 48}], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 4, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2640"}, {"name": "palette", "type": "string", "value": "06"}, {"name": "tileset", "type": "string", "value": "0f"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_0f_0b_06_27_2640.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/ED.json: -------------------------------------------------------------------------------- 1 | {"width": 10, "height": 8, "type": "map", "renderorder": "right-down", "tiledversion": "1.4.3", "version": 1.4, "tilewidth": 16, "tileheight": 16, "orientation": "orthogonal", "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_0f_0b_06_27_2640.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "layers": [{"data": [15, 15, 15, 15, 15, 15, 15, 15, 47, 61, 15, 15, 15, 15, 15, 15, 44, 45, 63, 56, 15, 15, 15, 15, 15, 44, 50, 10, 63, 47, 15, 15, 15, 15, 15, 56, 4, 4, 58, 63, 15, 15, 15, 15, 15, 47, 61, 10, 10, 63, 15, 15, 15, 15, 15, 58, 47, 61, 4, 58, 15, 15, 15, 15, 15, 15, 58, 56, 10, 4, 15, 15, 15, 15, 15, 15, 15, 47, 48, 48], "width": 10, "height": 8, "id": 1, "name": "Tiles", "type": "tilelayer", "visible": true, "opacity": 1, "x": 0, "y": 0}, {"id": 2, "name": "EntityLayer", "type": "objectgroup", "visible": true, "opacity": 1, "x": 0, "y": 0, "objects": []}], "properties": [{"name": "tileset", "type": "string", "value": "0f"}, {"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2640"}, {"name": "palette", "type": "string", "value": "06"}]} -------------------------------------------------------------------------------- /patches/overworld/alttp/EE.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [4, 57, 111, 15, 15, 111, 56, 4, 10, 4, 10, 57, 15, 15, 15, 15, 56, 4, 4, 4, 48, 79, 234, 234, 234, 234, 47, 61, 4, 10, 59, 64, 234, 234, 234, 234, 63, 47, 48, 48, 59, 64, 15, 15, 15, 15, 63, 63, 59, 59, 59, 64, 15, 15, 15, 15, 58, 63, 59, 59, 4, 57, 15, 15, 15, 15, 15, 58, 59, 59, 48, 79, 15, 15, 15, 15, 15, 15, 15, 15], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [{"height": 16, "id": 1, "name": "ZORA", "rotation": 0, "type": "entity", "visible": true, "width": 16, "x": 48, "y": 96}], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 2, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2640"}, {"name": "palette", "type": "string", "value": "06"}, {"name": "tileset", "type": "string", "value": "0f"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_0f_0b_06_27_2640.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/F0.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [57, 9, 9, 9, 9, 9, 9, 9, 9, 9, 57, 9, 9, 9, 9, 9, 106, 9, 9, 9, 57, 45, 46, 9, 9, 9, 9, 9, 9, 9, 57, 5, 51, 7, 6, 8, 45, 46, 9, 9, 57, 5, 5, 5, 5, 5, 5, 51, 46, 9, 57, 5, 5, 5, 5, 5, 5, 5, 243, 9, 51, 46, 5, 5, 5, 5, 5, 5, 244, 9, 4, 51, 45, 45, 45, 45, 45, 45, 45, 45], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [{"height": 16, "id": 1, "name": "HONEYCOMB", "rotation": 0, "type": "entity", "visible": true, "width": 16, "x": 48, "y": 80}, {"height": 16, "id": 2, "name": "HONEYCOMB", "rotation": 0, "type": "entity", "visible": true, "width": 16, "x": 80, "y": 80}], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 4, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "03"}, {"name": "attribset", "type": "string", "value": "22:2c00"}, {"name": "palette", "type": "string", "value": "0c"}, {"name": "tileset", "type": "string", "value": "2c"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_2c_03_0c_22_2c00.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/F3.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [9, 9, 9, 63, 63, 59, 59, 59, 59, 59, 9, 9, 9, 58, 63, 59, 59, 59, 59, 59, 9, 106, 9, 9, 58, 59, 59, 59, 59, 59, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 106, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45, 50, 4, 10, 4, 4, 10, 10, 4], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 3, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "03"}, {"name": "attribset", "type": "string", "value": "22:2c00"}, {"name": "palette", "type": "string", "value": "0c"}, {"name": "tileset", "type": "string", "value": "2c"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_2c_03_0c_22_2c00.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/F4.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [59, 59, 59, 59, 64, 64, 4, 4, 56, 4, 59, 59, 59, 59, 64, 60, 9, 4, 56, 4, 59, 59, 59, 59, 60, 4, 9, 9, 56, 10, 9, 9, 9, 9, 9, 9, 9, 9, 56, 4, 9, 9, 9, 9, 9, 9, 4, 44, 50, 4, 9, 9, 9, 9, 4, 4, 44, 50, 10, 4, 45, 45, 45, 45, 45, 45, 50, 4, 4, 10, 4, 10, 4, 4, 10, 4, 10, 10, 4, 4], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 5, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "03"}, {"name": "attribset", "type": "string", "value": "22:2c00"}, {"name": "palette", "type": "string", "value": "0c"}, {"name": "tileset", "type": "string", "value": "2c"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_2c_03_0c_22_2c00.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/F8.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "height":8, 3 | "infinite":false, 4 | "layers":[ 5 | { 6 | "data":[11, 11, 11, 256, 256, 11, 11, 11, 57, 4, 7 | 11, 11, 256, 256, 253, 55, 61, 11, 57, 4, 8 | 11, 62, 54, 252, 256, 250, 47, 48, 79, 4, 9 | 11, 243, 250, 251, 251, 253, 58, 59, 60, 4, 10 | 11, 244, 249, 4, 4, 248, 254, 4, 4, 4, 11 | 11, 245, 4, 4, 5, 4, 4, 4, 4, 10, 12 | 45, 45, 46, 4, 4, 4, 4, 10, 4, 4, 13 | 10, 4, 51, 45, 45, 45, 45, 45, 45, 45], 14 | "height":8, 15 | "id":1, 16 | "name":"Tiles", 17 | "opacity":1, 18 | "type":"tilelayer", 19 | "visible":true, 20 | "width":10, 21 | "x":0, 22 | "y":0 23 | }, 24 | { 25 | "draworder":"topdown", 26 | "id":2, 27 | "name":"EntityLayer", 28 | "objects":[], 29 | "opacity":1, 30 | "type":"objectgroup", 31 | "visible":true, 32 | "x":0, 33 | "y":0 34 | }], 35 | "nextlayerid":1, 36 | "nextobjectid":3, 37 | "orientation":"orthogonal", 38 | "properties":[ 39 | { 40 | "name":"animationset", 41 | "type":"string", 42 | "value":"03" 43 | }, 44 | { 45 | "name":"attribset", 46 | "type":"string", 47 | "value":"22:1800" 48 | }, 49 | { 50 | "name":"palette", 51 | "type":"string", 52 | "value":"04" 53 | }, 54 | { 55 | "name":"tileset", 56 | "type":"string", 57 | "value":"2e" 58 | }], 59 | "renderorder":"right-down", 60 | "tiledversion":"1.10.2", 61 | "tileheight":16, 62 | "tilesets":[ 63 | { 64 | "columns":16, 65 | "firstgid":1, 66 | "image":"tiles_2e_03_04_22_1800.png", 67 | "imageheight":256, 68 | "imagewidth":256, 69 | "margin":0, 70 | "name":"main", 71 | "spacing":0, 72 | "tilecount":256, 73 | "tileheight":16, 74 | "tilewidth":16 75 | }], 76 | "tilewidth":16, 77 | "type":"map", 78 | "version":"1.10", 79 | "width":10 80 | } -------------------------------------------------------------------------------- /patches/overworld/alttp/F9.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [4, 4, 4, 4, 4, 4, 63, 63, 47, 48, 10, 4, 4, 4, 4, 4, 58, 63, 63, 59, 4, 4, 4, 4, 4, 10, 4, 58, 63, 59, 4, 4, 4, 4, 4, 4, 4, 4, 58, 59, 4, 4, 4, 4, 10, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 44, 45, 45, 45, 46, 4, 10, 4, 45, 45, 50, 10, 4, 10, 51, 45, 45, 45], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 2, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "03"}, {"name": "attribset", "type": "string", "value": "22:1800"}, {"name": "palette", "type": "string", "value": "04"}, {"name": "tileset", "type": "string", "value": "2e"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_2e_03_04_22_1800.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/FB.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [4, 57, 15, 15, 15, 15, 15, 15, 15, 15, 48, 79, 15, 15, 28, 28, 15, 15, 15, 15, 59, 64, 15, 28, 15, 15, 15, 15, 15, 15, 4, 57, 15, 15, 15, 44, 45, 45, 46, 15, 4, 51, 7, 6, 8, 50, 10, 4, 51, 45, 4, 4, 4, 4, 4, 4, 4, 4, 10, 4, 10, 4, 44, 45, 45, 45, 46, 4, 4, 4, 45, 45, 50, 4, 10, 10, 51, 45, 45, 45], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 3, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2640"}, {"name": "palette", "type": "string", "value": "06"}, {"name": "tileset", "type": "string", "value": "0f"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_0f_0b_06_27_2640.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/FF.json: -------------------------------------------------------------------------------- 1 | {"compressionlevel": -1, "height": 8, "infinite": false, "layers": [{"data": [15, 15, 15, 56, 4, 4, 4, 4, 56, 4, 7, 6, 8, 50, 4, 4, 10, 4, 56, 4, 4, 4, 4, 4, 4, 4, 4, 44, 50, 10, 4, 4, 10, 4, 93, 4, 44, 50, 4, 10, 4, 93, 4, 4, 4, 4, 56, 4, 4, 4, 4, 4, 4, 93, 4, 4, 56, 4, 10, 4, 4, 10, 4, 4, 4, 44, 50, 4, 4, 10, 45, 45, 45, 45, 45, 50, 4, 10, 4, 4], "height": 8, "id": 1, "name": "Tiles", "opacity": 1, "type": "tilelayer", "visible": true, "width": 10, "x": 0, "y": 0}, {"draworder": "topdown", "id": 2, "name": "EntityLayer", "objects": [], "opacity": 1, "type": "objectgroup", "visible": true, "x": 0, "y": 0}], "nextlayerid": 1, "nextobjectid": 4, "orientation": "orthogonal", "properties": [{"name": "animationset", "type": "string", "value": "0b"}, {"name": "attribset", "type": "string", "value": "27:2640"}, {"name": "palette", "type": "string", "value": "06"}, {"name": "tileset", "type": "string", "value": "0f"}], "renderorder": "right-down", "tiledversion": "1.5.0", "tileheight": 16, "tilesets": [{"columns": 16, "firstgid": 1, "image": "tiles_0f_0b_06_27_2640.png", "imageheight": 256, "imagewidth": 256, "margin": 0, "name": "main", "spacing": 0, "tilecount": 256, "tileheight": 16, "tilewidth": 16}], "tilewidth": 16, "type": "map", "version": 1.5, "width": 10} -------------------------------------------------------------------------------- /patches/overworld/alttp/desert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/overworld/alttp/desert.png -------------------------------------------------------------------------------- /patches/overworld/alttp/hammer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/overworld/alttp/hammer.png -------------------------------------------------------------------------------- /patches/overworld/alttp/walrus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daid/LADXR/2c0d59245c1a4c02d9c41e18a77c7e7fc1be1ab6/patches/overworld/alttp/walrus.png -------------------------------------------------------------------------------- /patches/overworld/dive/72.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "editorsettings": 3 | { 4 | "export": 5 | { 6 | "target":"." 7 | } 8 | }, 9 | "height":8, 10 | "infinite":false, 11 | "layers":[ 12 | { 13 | "data":[48, 54, 58, 59, 59, 225, 59, 59, 60, 46, 4, 4, 4, 4, 4, 4, 4, 4, 4, 57, 4, 4, 4, 4, 4, 93, 93, 93, 4, 77, 4, 4, 12, 12, 4, 93, 93, 93, 93, 4, 4, 4, 12, 4, 4, 4, 93, 93, 4, 4, 4, 4, 12, 4, 4, 4, 4, 4, 4, 4, 48, 73, 225, 74, 48, 73, 75, 74, 48, 48, 59, 59, 225, 59, 59, 59, 59, 59, 59, 59], 14 | "height":8, 15 | "id":1, 16 | "name":"Tiles", 17 | "opacity":1, 18 | "type":"tilelayer", 19 | "visible":true, 20 | "width":10, 21 | "x":0, 22 | "y":0 23 | }, 24 | { 25 | "draworder":"topdown", 26 | "id":2, 27 | "name":"EntityLayer", 28 | "objects":[], 29 | "opacity":1, 30 | "type":"objectgroup", 31 | "visible":true, 32 | "x":0, 33 | "y":0 34 | }], 35 | "nextlayerid":1, 36 | "nextobjectid":1, 37 | "orientation":"orthogonal", 38 | "properties":[ 39 | { 40 | "name":"animationset", 41 | "type":"string", 42 | "value":"00" 43 | }, 44 | { 45 | "name":"attribset", 46 | "type":"string", 47 | "value":"22:0000" 48 | }, 49 | { 50 | "name":"palette", 51 | "type":"string", 52 | "value":"16" 53 | }, 54 | { 55 | "name":"tileset", 56 | "type":"string", 57 | "value":"0F" 58 | }], 59 | "renderorder":"right-down", 60 | "tiledversion":"1.4.3", 61 | "tileheight":16, 62 | "tilesets":[ 63 | { 64 | "columns":16, 65 | "firstgid":1, 66 | "image":"tiles_0f_00_16_22_0000.png", 67 | "imageheight":256, 68 | "imagewidth":256, 69 | "margin":0, 70 | "name":"main", 71 | "spacing":0, 72 | "tilecount":256, 73 | "tileheight":16, 74 | "tilewidth":16 75 | }], 76 | "tilewidth":16, 77 | "type":"map", 78 | "version":1.4, 79 | "width":10 80 | } -------------------------------------------------------------------------------- /patches/overworld/dive/B0.json: -------------------------------------------------------------------------------- 1 | { "compressionlevel":-1, 2 | "editorsettings": 3 | { 4 | "export": 5 | { 6 | "target":"." 7 | } 8 | }, 9 | "height":8, 10 | "infinite":false, 11 | "layers":[ 12 | { 13 | "data":[56, 4, 4, 4, 4, 4, 4, 4, 4, 57, 56, 183, 184, 4, 4, 4, 4, 62, 48, 53, 56, 206, 207, 4, 4, 4, 4, 57, 183, 184, 56, 161, 93, 4, 4, 4, 4, 57, 206, 207, 56, 93, 93, 62, 73, 75, 74, 79, 183, 184, 56, 93, 4, 57, 59, 59, 59, 60, 206, 207, 47, 48, 48, 79, 31, 31, 31, 31, 31, 31, 58, 59, 59, 60, 32, 32, 32, 32, 32, 32], 14 | "height":8, 15 | "id":1, 16 | "name":"Tiles", 17 | "opacity":1, 18 | "type":"tilelayer", 19 | "visible":true, 20 | "width":10, 21 | "x":0, 22 | "y":0 23 | }, 24 | { 25 | "draworder":"topdown", 26 | "id":2, 27 | "name":"EntityLayer", 28 | "objects":[], 29 | "opacity":1, 30 | "type":"objectgroup", 31 | "visible":true, 32 | "x":0, 33 | "y":0 34 | }], 35 | "nextlayerid":1, 36 | "nextobjectid":1, 37 | "orientation":"orthogonal", 38 | "properties":[ 39 | { 40 | "name":"animationset", 41 | "type":"string", 42 | "value":"02" 43 | }, 44 | { 45 | "name":"attribset", 46 | "type":"string", 47 | "value":"22:1000" 48 | }, 49 | { 50 | "name":"palette", 51 | "type":"string", 52 | "value":"01" 53 | }, 54 | { 55 | "name":"tileset", 56 | "type":"string", 57 | "value":"22" 58 | }], 59 | "renderorder":"right-down", 60 | "tiledversion":"1.4.3", 61 | "tileheight":16, 62 | "tilesets":[ 63 | { 64 | "columns":16, 65 | "firstgid":1, 66 | "image":"tiles_22_02_01_22_1000.png", 67 | "imageheight":256, 68 | "imagewidth":256, 69 | "margin":0, 70 | "name":"main", 71 | "spacing":0, 72 | "tilecount":256, 73 | "tileheight":16, 74 | "tilewidth":16 75 | }], 76 | "tilewidth":16, 77 | "type":"map", 78 | "version":1.4, 79 | "width":10 80 | } -------------------------------------------------------------------------------- /patches/phone.py: -------------------------------------------------------------------------------- 1 | from assembler import ASM 2 | 3 | 4 | def patchPhone(rom): 5 | rom.texts[0x141] = b"" 6 | rom.texts[0x142] = b"" 7 | rom.texts[0x143] = b"" 8 | rom.texts[0x144] = b"" 9 | rom.texts[0x145] = b"" 10 | rom.texts[0x146] = b"" 11 | rom.texts[0x147] = b"" 12 | rom.texts[0x148] = b"" 13 | rom.texts[0x149] = b"" 14 | rom.texts[0x14A] = b"" 15 | rom.texts[0x14B] = b"" 16 | rom.texts[0x14C] = b"" 17 | rom.texts[0x14D] = b"" 18 | rom.texts[0x14E] = b"" 19 | rom.texts[0x14F] = b"" 20 | rom.texts[0x16E] = b"" 21 | rom.texts[0x1FD] = b"" 22 | rom.texts[0x228] = b"" 23 | rom.texts[0x229] = b"" 24 | rom.texts[0x22A] = b"" 25 | rom.texts[0x240] = b"" 26 | rom.texts[0x241] = b"" 27 | rom.texts[0x242] = b"" 28 | rom.texts[0x243] = b"" 29 | rom.texts[0x244] = b"" 30 | rom.texts[0x245] = b"" 31 | rom.texts[0x247] = b"" 32 | rom.texts[0x248] = b"" 33 | rom.patch(0x06, 0x2A7C, 0x2BBC, ASM(""" 34 | ld a, [wTunicType] 35 | call SetEntitySpriteVariant 36 | 37 | ldh a, [hActiveEntityVisualPosY] 38 | sub $05 39 | ldh [hActiveEntityVisualPosY], a 40 | ld de, TelephoneSpriteVariants 41 | call RenderActiveEntitySpritesPair 42 | call ReturnIfNonInteractive_06 43 | call CheckLinkInteractionWithEntity_06 44 | ret nc 45 | 46 | ; We use $DB6D to store which tunics we have. This is normally the Dungeon9 instrument, which does not exist. 47 | ld a, [wTunicType] 48 | ld hl, wCollectedTunics 49 | inc a 50 | 51 | cp $01 52 | jr nz, notTunic1 53 | bit 0, [HL] 54 | jr nz, notTunic1 55 | inc a 56 | notTunic1: 57 | 58 | cp $02 59 | jr nz, notTunic2 60 | bit 1, [HL] 61 | jr nz, notTunic2 62 | inc a 63 | notTunic2: 64 | 65 | cp $03 66 | jr nz, noWrap 67 | xor a 68 | noWrap: 69 | 70 | ld [wTunicType], a 71 | ret 72 | TelephoneSpriteVariants: 73 | db $50, $00, $52, $00 74 | db $50, $02, $52, $02 75 | db $50, $03, $52, $03 76 | """, 0x6A7C), fill_nop=True) 77 | -------------------------------------------------------------------------------- /patches/photographer.py: -------------------------------------------------------------------------------- 1 | from assembler import ASM 2 | 3 | 4 | def fixPhotographer(rom): 5 | # Allow richard photo without slime key 6 | rom.patch(0x36, 0x3234, ASM("jr nz, $52"), "", fill_nop=True) 7 | rom.patch(0x36, 0x3240, ASM("jr z, $46"), "", fill_nop=True) 8 | # Allow richard photo when castle is opened 9 | rom.patch(0x36, 0x31FF, ASM("jp nz, $7288"), "", fill_nop=True) 10 | # Allow photographer with bowwow saved 11 | rom.patch(0x36, 0x0398, ASM("or [hl]"), "", fill_nop=True) 12 | rom.patch(0x36, 0x3183, ASM("ret nz"), "", fill_nop=True) 13 | rom.patch(0x36, 0x31CB, ASM("jp nz, $7288"), "", fill_nop=True) 14 | rom.patch(0x36, 0x03DC, ASM("and $7F"), ASM("and $00")) 15 | # Allow bowwow photo with follower 16 | rom.patch(0x36, 0x31DA, ASM("jp nz, $7288"), "", fill_nop=True) 17 | # Allow bridge photo with follower 18 | rom.patch(0x36, 0x004D, ASM("call nz, UnloadEntity"), "", fill_nop=True) 19 | rom.patch(0x36, 0x006D, ASM("ret nz"), "", fill_nop=True) # Checks if any entity is alive 20 | # Allow Marin photos after she sang for the walrus 21 | rom.patch(0x36, 0x3101, ASM("ld a, [wIsMarinFollowingLink]"), ASM("call $7F10")) 22 | rom.patch(0x36, 0x312D, ASM("ld a, [wIsMarinFollowingLink]"), ASM("call $7F10")) 23 | rom.patch(0x36, 0x01F4, ASM("ld a, [wIsMarinFollowingLink]"), ASM("call $7F10")) 24 | rom.patch(0x36, 0x3F10, "00" * 16, ASM(""" 25 | ld a, [wIsMarinFollowingLink] 26 | and a 27 | ret nz 28 | ld a, [$D8FD] 29 | and $20 ; check if walrus is gone 30 | ret 31 | """), fill_nop=True) 32 | # Well photo is taken as soon as Link lands if Marin isn't there 33 | rom.patch(0x36, 0x0236, ASM("ldh a, [hLinkAnimationState] \n cp $6A"), ASM("call $7F20"), fill_nop=True) 34 | rom.patch(0x36, 0x3F20, "00" * 32, ASM(""" 35 | ld a, [wIsMarinFollowingLink] 36 | and a 37 | jr z, noMarinFollower 38 | ldh a, [hLinkAnimationState] 39 | cp $6A 40 | ret 41 | noMarinFollower: 42 | ldh a, [hLinkPositionZ] 43 | and a ; check if Link landed on the ground 44 | ret 45 | """), fill_nop=True) 46 | -------------------------------------------------------------------------------- /patches/reduceRNG.py: -------------------------------------------------------------------------------- 1 | from assembler import ASM 2 | 3 | 4 | def slowdownThreeOfAKind(rom): 5 | rom.patch(0x06, 0x096B, ASM("ldh a, [hFrameCounter]\nand $0F"), ASM("ldh a, [hFrameCounter]\nand $3F")) 6 | 7 | 8 | def fixHorseHeads(rom): 9 | rom.patch(0x07, 0x3653, "00010400", "00010000") 10 | -------------------------------------------------------------------------------- /patches/rooster.py: -------------------------------------------------------------------------------- 1 | from assembler import ASM 2 | from utils import formatText 3 | 4 | 5 | def patchRooster(rom): 6 | # Do not give the rooster 7 | rom.patch(0x19, 0x0E9D, ASM("ld [$DB7B], a"), "", fill_nop=True) 8 | 9 | # Do not load the rooster sprites 10 | rom.patch(0x00, 0x2EC7, ASM("jr nz, $08"), "", fill_nop=True) 11 | 12 | # Draw the found item 13 | rom.patch(0x19, 0x0E4A, ASM("ld hl, $4E37\nld c, $03\ncall RenderActiveEntitySpritesRect"), ASM("ld a, $0C\nrst $08"), fill_nop=True) 14 | rom.patch(0x19, 0x0E7B, ASM("ld hl, $4E37\nld c, $03\ncall RenderActiveEntitySpritesRect"), ASM("ld a, $0C\nrst $08"), fill_nop=True) 15 | # Give the item and message 16 | rom.patch(0x19, 0x0E69, ASM("ld a, $6D\ncall $2373"), ASM("ld a, $0E\nrst $08"), fill_nop=True) 17 | 18 | # Reuse unused evil eagle text slot for rooster message 19 | rom.texts[0x0B8] = formatText("Got the {ROOSTER}!") 20 | 21 | # Allow rooster pickup with special rooster item 22 | rom.patch(0x19, 0x1ABC, ASM("cp $03"), ASM("cp $0F")) 23 | rom.patch(0x19, 0x1AAE, ASM("cp $03"), ASM("cp $0F")) 24 | 25 | # Ignore the has-rooster flag in the rooster entity (do not despawn) 26 | rom.patch(0x19, 0x19E0, ASM("jp z, $7E61"), "", fill_nop=True) 27 | 28 | # If we are spawning the rooster, and the rooster is already existing, do not do anything, instead of despawning the rooster. 29 | rom.patch(0x01, 0x1FEF, ASM("ld [hl], d"), ASM("ret")) 30 | # Allow rooster to unload when changing rooms 31 | rom.patch(0x19, 0x19E9, ASM("ld [hl], a"), "", fill_nop=True) 32 | 33 | # Do not take away the rooster after D7 34 | rom.patch(0x03, 0x1E25, ASM("ld [$DB7B], a"), "", fill_nop=True) 35 | 36 | # Patch the color dungeon entrance not to check for rooster 37 | rom.patch(0x02, 0x3409, ASM("ld hl, $DB7B\nor [hl]"), "", fill_nop=True) 38 | 39 | # Spawn marin at taltal even with rooster 40 | rom.patch(0x18, 0x1EE3, ASM("jp nz, ClearEntityStatus_18"), "", fill_nop=True) 41 | -------------------------------------------------------------------------------- /patches/save.py: -------------------------------------------------------------------------------- 1 | from assembler import ASM 2 | from backgroundEditor import BackgroundEditor 3 | 4 | 5 | def singleSaveSlot(rom): 6 | # Do not validate/erase slots 2 and 3 at rom start 7 | rom.patch(0x01, 0x06B3, ASM("call $4794"), "", fill_nop=True) 8 | rom.patch(0x01, 0x06B9, ASM("call $4794"), "", fill_nop=True) 9 | 10 | # Patch the code that checks if files have proper filenames to skip file 2/3 11 | rom.patch(0x01, 0x1DD9, ASM("ld b, $02"), ASM("ret"), fill_nop=True) 12 | 13 | # Remove the part that writes death counters for save2/3 on the file select screen 14 | rom.patch(0x01, 0x0821, 0x084B, "", fill_nop=True) 15 | # Remove the call that updates the hearts for save2 16 | rom.patch(0x01, 0x0800, ASM("call $4DBE"), "", fill_nop=True) 17 | # Remove the call that updates the hearts for save3 18 | rom.patch(0x01, 0x0806, ASM("call $4DD6"), "", fill_nop=True) 19 | 20 | # Remove the call that updates the names for save2 and save3 21 | rom.patch(0x01, 0x0D70, ASM("call $4D94\ncall $4D9D"), "", fill_nop=True) 22 | 23 | # Remove the 2/3 slots from the screen and remove the copy text 24 | be = BackgroundEditor(rom, 0x03) 25 | del be.tiles[0x9924] 26 | del be.tiles[0x9984] 27 | be.store(rom) 28 | be = BackgroundEditor(rom, 0x04) 29 | del be.tiles[0x9924] 30 | del be.tiles[0x9984] 31 | for n in range(0x99ED, 0x99F1): 32 | del be.tiles[n] 33 | be.store(rom) 34 | 35 | # Do not do left/right for erase/copy selection. 36 | rom.patch(0x01, 0x092B, ASM("jr z, $0B"), ASM("jr $0B")) 37 | # Only switch between players 38 | rom.patch(0x01, 0x08FA, 0x091D, ASM(""" 39 | ld a, [$DBA7] 40 | and a 41 | ld a, [$DBA6] 42 | jr z, skip 43 | xor $03 44 | skip: 45 | """), fill_nop=True) 46 | 47 | # On the erase screen, only switch between save 1 and return 48 | rom.patch(0x01, 0x0E12, ASM("inc a\nand $03"), ASM("xor $03"), fill_nop=True) 49 | rom.patch(0x01, 0x0E21, ASM("dec a\ncp $ff\njr nz, $02\nld a,$03"), ASM("xor $03"), fill_nop=True) 50 | 51 | be = BackgroundEditor(rom, 0x06) 52 | del be.tiles[0x9924] 53 | del be.tiles[0x9984] 54 | be.store(rom) 55 | -------------------------------------------------------------------------------- /patches/tarin.py: -------------------------------------------------------------------------------- 1 | from assembler import ASM 2 | from utils import formatText 3 | 4 | 5 | def updateTarin(rom): 6 | # Do not give the shield. 7 | rom.patch(0x05, 0x0CD0, ASM(""" 8 | ld d, $04 9 | call $5321 10 | ld a, $01 11 | ld [wShieldLevel], a 12 | """), "", fill_nop=True) 13 | 14 | # Instead of showing the usual "your shield back" message, give the proper message and give the item. 15 | rom.patch(0x05, 0x0CDE, ASM(""" 16 | ld a, $91 17 | call $2385 18 | """), ASM(""" 19 | ld a, $0B ; GiveItemAndMessageForRoom 20 | rst 8 21 | """), fill_nop=True) 22 | 23 | rom.patch(0x05, 0x0CF0, ASM(""" 24 | xor a 25 | ldh [hActiveEntitySpriteVariant], a 26 | ld de, $4CC6 27 | call $3C77 28 | """), ASM(""" 29 | ld a, $0C ; RenderItemForRoom 30 | rst 8 31 | xor a 32 | ldh [hActiveEntitySpriteVariant], a 33 | """), fill_nop=True) 34 | 35 | # Set the room status to finished. (replaces a GBC check) 36 | rom.patch(0x05, 0x0CAB, 0x0CB0, ASM(""" 37 | ld a, $20 38 | call $36C4 39 | """), fill_nop=True) 40 | 41 | # Instead of checking for the shield level to put you in the bed, check the room flag. 42 | rom.patch(0x05, 0x1202, ASM("ld a, [wShieldLevel]\nand a"), ASM("ldh a, [hRoomStatus]\nand $20")) 43 | rom.patch(0x05, 0x0C6D, ASM("ld a, [wShieldLevel]\nand a"), ASM("ldh a, [hRoomStatus]\nand $20")) 44 | 45 | # If the starting item is picked up, load the right palette when entering the room 46 | rom.patch(0x21, 0x0176, ASM("ld a, [wTarinFlag]\ncp $01"), ASM("ld a, [$DAA3]\ncp $A1"), fill_nop=True) 47 | rom.patch(0x05, 0x0C94, "FF473152C5280000", "FD2ED911CE100000") 48 | rom.patch(0x05, 0x0CB0, ASM("ld hl, $DC88"), ASM("ld hl, $DC80")) 49 | 50 | # Patch the text that Tarin uses to give your shield back. 51 | rom.texts[0x54] = formatText("#####, it is dangerous to go alone!\nTake this!") 52 | -------------------------------------------------------------------------------- /patches/trendy.py: -------------------------------------------------------------------------------- 1 | from assembler import ASM 2 | 3 | def fixTrendy(rom): 4 | rom.patch(0x04, 0x2F29, "04", "02") # Patch the trendy game shield to be a rupee 5 | 6 | # Check the room flag to figure out how many items are available in total 7 | # This ensures we can keep playing until no items remain, and that we can no longer play when a restock is needed 8 | rom.patch(0x04, 0x2FAA, ASM("ld a, [$DB40]"), ASM("call $7FFA")) 9 | rom.patch(0x04, 0x3FFA, "00" * 6, ASM(""" 10 | ld a, [$DAA0] 11 | and $20 12 | ret 13 | """)) 14 | -------------------------------------------------------------------------------- /patches/tunicFairy.py: -------------------------------------------------------------------------------- 1 | from utils import formatText 2 | from assembler import ASM 3 | 4 | 5 | def upgradeTunicFairy(rom): 6 | rom.texts[0x268] = formatText("Welcome, #####. I admire you for coming this far.") 7 | rom.texts[0x0CC] = formatText("Got the {RED_TUNIC}! You can change Tunics at the phone booths.") 8 | rom.texts[0x0CD] = formatText("Got the {BLUE_TUNIC}! You can change Tunics at the phone booths.") 9 | 10 | rom.patch(0x36, 0x111C, 0x1133, ASM(""" 11 | call IncrementEntityState 12 | ld a, [$DDE1] 13 | and $10 14 | jr z, giveItems 15 | ld [hl], $09 16 | ret 17 | 18 | giveItems: 19 | ld a, [$DDE1] 20 | or $10 21 | ld [$DDE1], a 22 | """), fill_nop=True) 23 | rom.patch(0x36, 0x1139, 0x1144, ASM(""" 24 | ld a, [$51BF] 25 | ldh [hActiveEntitySpriteVariant], a 26 | ld a, $02 27 | rst 8 28 | ld a, $03 29 | rst 8 30 | """), fill_nop=True) 31 | 32 | rom.patch(0x36, 0x1162, 0x1192, ASM(""" 33 | ld a, [$51C0] 34 | ldh [hActiveEntitySpriteVariant], a 35 | ld a, $02 36 | rst 8 37 | ld a, $03 38 | rst 8 39 | call IncrementEntityState 40 | ret 41 | """), fill_nop=True) 42 | 43 | rom.patch(0x36, 0x119D, 0x11A2, "", fill_nop=True) 44 | rom.patch(0x36, 0x11B5, 0x11BE, ASM(""" 45 | ; Skip to the end ignoring all the tunic giving animation. 46 | call IncrementEntityState 47 | ld [hl], $09 48 | """), fill_nop=True) 49 | 50 | rom.banks[0x36][0x11BF] = 0x87 51 | rom.banks[0x36][0x11C0] = 0x88 52 | -------------------------------------------------------------------------------- /patches/witch.py: -------------------------------------------------------------------------------- 1 | from assembler import ASM 2 | from roomEditor import RoomEditor 3 | 4 | 5 | def updateWitch(rom): 6 | # Add a heartpiece at the toadstool, the item patches turn this into a 1 time toadstool item 7 | # Or depending on flags, in something else. 8 | re = RoomEditor(rom, 0x050) 9 | re.addEntity(2, 3, 0x35) 10 | re.store(rom) 11 | 12 | # Change what happens when you trade the toadstool with the witch 13 | # Note that the 2nd byte of this code gets patched with the item to give from the witch. 14 | rom.patch(0x05, 0x08D4, 0x08F0, ASM(""" 15 | ld e, $09 ; load the item to give the first time 16 | 17 | ; Get the room flags and mark the witch as done. 18 | ld hl, $DAA2 19 | ld a, [hl] 20 | and $30 21 | set 4, [hl] 22 | set 5, [hl] 23 | jr z, skip 24 | ld e, $09 ; give powder every time after the first time. 25 | skip: 26 | ld a, e 27 | ldh [hActiveEntitySpriteVariant], a 28 | ld a, $02 29 | rst 8 30 | ld a, $03 31 | rst 8 32 | """), fill_nop=True) 33 | 34 | # Patch the toadstool to unload when you haven't delivered something to the witch yet. 35 | rom.patch(0x03, 0x1D4B, ASM(""" 36 | ld hl, wHasToadstool 37 | ld a, [wMagicPowderCount] 38 | or [hl] 39 | jp nz, UnloadEntity 40 | """), ASM(""" 41 | ld a, [$DAA2] 42 | and $20 43 | jp z, UnloadEntity 44 | """), fill_nop=True) 45 | 46 | # Patch what happens when we pickup the toadstool, call our chest code to give a toadstool. 47 | rom.patch(0x03, 0x1D6F, 0x1D7D, ASM(""" 48 | ld a, $50 49 | ldh [hActiveEntitySpriteVariant], a 50 | ld a, $02 ; give item 51 | rst 8 52 | 53 | ld hl, $DAA2 54 | res 5, [hl] 55 | """), fill_nop=True) 56 | 57 | def witchIsPatched(rom): 58 | return sum(rom.banks[0x05][0x08D4:0x08F0]) != 0x0DC2 59 | -------------------------------------------------------------------------------- /plan.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Helper class to read and store planomizer data 4 | class Plan: 5 | def __init__(self, filename): 6 | self.forced_items = {} 7 | self.item_pool = {} 8 | item_group = {} 9 | 10 | for line in open(filename, "rt"): 11 | line = line.strip() 12 | if ";" in line: 13 | line = line[:line.find(";")] 14 | if "#" in line: 15 | line = line[:line.find("#")] 16 | if ":" not in line: 17 | continue 18 | entry_type, params = map(str.strip, line.upper().split(":", 1)) 19 | 20 | if entry_type == "LOCATION" and ":" in params: 21 | location, item = map(str.strip, params.split(":", 1)) 22 | if item == "": 23 | continue 24 | if item.startswith("[") and item.endswith("]"): 25 | item = item_group[item[1:-1]] 26 | if "," in item: 27 | item = list(map(str.strip, item.split(","))) 28 | self.forced_items[location] = item 29 | elif entry_type == "POOL" and ":" in params: 30 | item, count = map(str.strip, params.split(":", 1)) 31 | self.item_pool[item] = self.item_pool.get(item, 0) + int(count) 32 | elif entry_type == "GROUP" and ":" in params: 33 | name, item = map(str.strip, params.split(":", 1)) 34 | if item == "": 35 | continue 36 | if "," in item: 37 | item = list(map(str.strip, item.split(","))) 38 | item_group[name] = item 39 | -------------------------------------------------------------------------------- /www/style.css: -------------------------------------------------------------------------------- 1 | .container { 2 | max-width: 1100px; 3 | background: #FFF; 4 | border: solid 1px #666; 5 | border-radius: 10px; 6 | margin-top: 20px; 7 | padding-bottom: 20px; 8 | margin-bottom: 200px; 9 | } 10 | .inputcontainer { 11 | display: flex; 12 | box-sizing: border-box; 13 | align-items: center; 14 | border: solid 1px #CCC; 15 | border-radius: 5px; 16 | width: 100%; 17 | height: 100%; 18 | } 19 | .inputcontainer * { 20 | margin: 0px; 21 | box-sizing: border-box; 22 | } 23 | .inputcontainer > :last-child { 24 | flex: 1 1 auto; 25 | background: #DDD; 26 | border: solid 1px #AAA; 27 | } 28 | .inputcontainerparent { 29 | padding: 1px 5px; 30 | } 31 | .tooltip::after { 32 | white-space: pre-wrap; 33 | width: 90%; 34 | pointer-events: none; 35 | } 36 | label { 37 | padding-right: 20px; 38 | } 39 | h1 { 40 | margin-bottom: 0px; 41 | } 42 | form { 43 | background: initial; 44 | border: initial; 45 | color: initial; 46 | margin: initial; 47 | padding: initial; 48 | } 49 | .selectromwarning { 50 | box-shadow: inset 0 0 0 2px red; 51 | } 52 | header .logo { 53 | left: 0; 54 | right: 0; 55 | text-align: center; 56 | display: block; 57 | } 58 | select option { 59 | font-weight: normal; 60 | } 61 | --------------------------------------------------------------------------------