Code Monkey home page Code Monkey logo

oracles-randomizer's Introduction

Zelda Oracles Randomizer

Summary of different randomizer versions and links to their web interfaces:

This program reads a Zelda: Oracle of Seasons or Oracle of Ages ROM (US versions only), shuffles the locations of (most) items and mystical seeds, and writes the modified ROM to a new file. In Seasons, the default seasons for each area are also randomized. Most arbitrary overworld checks for essences and other game flags are removed, so the dungeons and other checks can be done in any order that the randomized items facilitate. However, you do need to collect all 8 essences to get the Maku Seed and finish the game.

Usage

You probably want the web interface, contributed by cemulate.

Otherwise, there are three ways to use the randomizer:

  1. Place the randomizer in the same directory as your vanila ROM(s) (or vice versa), and run it. The randomizer will automatically find your vanilla ROM(s) and prompt for further options.
  2. In Windows, drag your vanilla ROM onto the executable. Same deal as above, except that the ROM and randomizer don't have to be in the same folder.
  3. Use the command line. Type ./oracles-randomizer -h to view the usage summary.

You may also be interested in Oracles Randomizer Extras.

Download

You can download executables for Windows, macOS, and Linux from the releases page. Don't use the "Download ZIP" link on the main page; that only contains the source code. The download also contains a rudimentary location checklist and item tracker. If you're looking for a more detailed item and map tracker, EmoTracker has a pack developed by Herreteman.

See contributing.md for instructions on building the randomizer from source.

Randomization notes

General details common to both games:

  • Items and chests are randomized, with these exceptions:
    • Renewable shop and business scrub items (bombs, shield, hearts, etc.)
    • Gasha seeds and pieces of heart outside of chests
    • NPCs that give non-progression items in the vanilla game
    • Gasha nut contents
    • Fixed drops (from bushes, pots, etc.)
    • Maple drops
    • Linked secrets
  • Mystical seed trees are randomized, with no more than two trees of each type. Items that use seeds for ammunition start with the type of seed that's on the Horon Village or Lynna City tree.
  • For items that have two levels, the first you obtain will be L-1, and the second will be L-2, regardless of the order in which you obtain them. The L-2 shield is an exception.
  • There is one flute in the game for a random animal companion, and it's identified and usable as soon as you get it. Only the 150-rupee item in the shop is randomized; the other two usual means of getting a strange flute don't give anything special. The animal companion regions (Natzu in Seasons and Nuun in Ages) match whatever flute is in the seed.
  • Rings are instantly appraised when you get them, and the ring list can be accessed from the inventory ring box icon. For convenience, the L-3 ring box is given at the start. The punch rings can be used with only one equip slot empty.
  • Select+right on the file select screen toggles music. Select+left on the file select screen toggles between GBC palettes (default) and lighter GBA palettes; this will only have an effect if you're playing on or emulating a GBA.
  • If tree warp is enabled, holding start while closing the map screen outdoors warps to the seed tree in Horon Village or Lynna City. Tree warp comes with no warranty and is not supported as a "feature", so think carefully before using it.
  • If hard difficulty is enabled, speedrun-level tricks may be required to complete the game. Use normal difficulty if you just want to do a casual playthrough!

For game-specific notes on randomization and logic, see seasons_notes.md and ages_notes.md.

See multiworld.md for information on multiworld seeds.

See plan.md for information on plando generation.

FAQ

Q: Is there a place to discuss the randomizer?

A: Yes, the Oracles Discord server. The server is mainly focused on speedrunning, but randomizer-specific channels exist as well.

Q: I found a problem. What do I do?

A: Open an issue about it on GitHub or bring it up in a randomizer channel in the Oracles discord. Provide your seed's log file either way.

Q: Will you make a cross-game randomizer that combines Ages and Seasons into one ROM?

A: no

Q: Can I at least do a linked game?

A: You can try, as long as you're not doing multiworld, but the consensus seems to be that it's not worthwhile. Linked content is unrandomized and sometimes inaccessible. Linked Ages seeds also have a chance to be uncompletable due to how Sea of Storms works.

Q: What emulator would you recommend for playing the randomizer?

A: If you want to play multiworld, you must use Bizhawk. BGB and mGBA are good choices otherwise. Avoid VisualBoyAdvance and its variants; they have serious emulation bugs that can cause crashes and other problems.

Thanks to:

  • Stewmath for oracles-disasm and additional code.
  • Herreteman, dragonc0, Phoenomenom714, and jaysee87 for help with logic, playtesting, design, and "customer support".
  • Everyone who helped playtest prerelease versions of the randomizer.

oracles-randomizer's People

Contributors

cemulate avatar f-raz0r avatar jangler avatar reggx avatar stewmath avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

oracles-randomizer's Issues

[Crash, forced Hardware Reset] Bombs from Ring Chest

the swap "d7 ring chest <- bombs, 10" played the ammo pickup sfx, did not bring up a text box nor item sprite, and did not unpause the game.

similarly, on Aug 19th, "d2 10-rupee chest <- compass" produced the crash but did draw the Compass. I forgot to report this when it happened.

Zeroes in seed counts replaced by stylish diamonds by update

screen_shot_2018-08-03_at_7 44 08_pm

A curiosity that happened to someone after updating their randomized ROM from 1.1.0 to 1.2.1. The seeds still work fine. I think they got a level 4 satchel after I hex edited one into their ROM to replace a Subrosian (meaning they could pick it up as many times as they wanted to, incrementing the level each time) because they had issue #15, and then the update shifted the capacity index up by one because of changes related to #9. This means that they can have a maximum of $F1 seeds, whatever the game thinks that means. In reality the ember and gale seed counts are >50.

As you'd expect, the season icons change with the seed counts.

-seed option

Right now the randomizer relies on ranging over maps for some operations, which is completely unpredictable w/r/t the order you will get. It would be good to wrap this in a type of iteration that would be consistent given the same random seed, and implement a command-line option to go along with it.

Account for strange flute disappearing from shop

The strange flute disappears from the Horon shop as soon as you enter the Natzu region (including the screen to the north of the north of Blaino's house), which could cause problems if the route the randomizer is working with requires you to have an animal and doesn't plan to give you Ricky's gloves.

The solution would either be to not consider the strange flute a valid way to get an animal, or to prevent the flute from disappearing.

"mystery cave chest" inaccessible?

I'm admittedly not too experienced with this game so I might just be missing something, but the completion log says that "mystery cave chest" has the Satchel and is accessible with Autumn, L2 Rang, and Magnets. I can't for the life of me find anything that would be a Mystery Cave with the tools given to me (including bombing multiple walls).

Randomize hard ore

Red ore and blue ore are already randomized; leave hard ore vanilla; remove shield check from smithy and give a random item instead of the iron shield, which goes in some other random slot.

Linked game issues

The randomizer was never intended to support linked games, but linked support has been requested and it might be satisfied by:

  • Keeping Hero's Cave as the unlinked version
  • Something about the Maku Tree doing a different script and not dropping an item
  • Looking at the jewel chests that are different

Smarter graph

It would be helpful if the graph were able to answer questions that the current routing and softlock-guarding logic can't. Currently its queries are limited to "can I reach node X?" and "what nodes can I reach from X?". Other questions that would be helpful to answer include:

  • "If I can reach node B from node A, can I necessarily reach node C from node B?" (see #15, and most other softlock conditions)
  • "If I can't necessarily reach node C from B from A right now, does there exist a future in which I can?" – For instance, after experiencing the problem in #15, if you were able to get ember seeds as D2's dungeon item, you'd be able to get back to Horon Village. But the ember seeds might not be slotted yet when the question is asked.

These questions can obviously be broken down into subproblems and generalized. I have notes on how to do these things but I haven't implemented them correctly yet. :~)

Seasons in chests / items from season sprits

This is pretty easy since the way the game gives you seasons by giving you the rod with a different sub-ID. Leaving the normal rod in the game if the rods are randomized like this doesn't make much sense, but that's fine since fool's ore is there to fill the missing slot.

H&S Softlocked

I was wondering how possible it was to remove the H&S cutscene. Given a pegasus + cape skip, it's very easy to get yourself softlocked, should you not get the shovel early on. While H&S is entirely avoidable on most seeds, it could still cause trouble for the careless. If it is possible, I don't expect any priority on it due to it being avoidable, but it would be a nice quality of life upgrade.

Have mystical seeds grow in all seasons

  1. Having types of seeds locked until you get the right season is an interesting game mechanic.

  2. Having to change the season to get seeds often necessitates some backtracking; minimizing backtracking is the heart of routing; routing is fun.

  3. Most players won't initially know what seasons seeds grow in, since the vanilla game's seed seasons and default area seasons match.

  4. Having earlier access to gale seeds and pegasus seeds cuts down on tedium.

  5. The distance between the scent tree and its corresponding stump is just way too long.

As suggested by Drenn in #16, chosen by the majority in a poll, and preferred by myself, seeds will grow in all seasons in 1.3.

Must not have pirate's bell when first talking to captain

When the player talks to the captain with the bell, the ship sails out of Subrosia / Samasa desert, meaning that the player can no longer talk to the ghost pirate, pick up his skull, or find the item that replaces the rusty bell (AFAIK).

Getting the same item from star-shaped ore spot twice

An example is digging up the floodgate key, using it (which removes it from your inventory), and being able to dig it up again. This doesn't matter mechanically and it seems like it would be a pain to fix, so I'm not fixing it. 😛

Make fists an item

Getting treasure $02 allows Link to throw punches as if he's wearing the fist ring. I need to test this a bit more, but I think the main problem will be that there are obviously no graphics, text, or equip screen information associated with the item, which would be confusing at the very least.

Randomize dungeon chests

This is a step on the path to #6, and will be the big feature in 1.4. Overworld items that are not already randomized will remain untouched, but chests in all dungeons will be shuffled (as well as slots like the satchel in D1 and the boss key in D5). However, dungeon-specific items that are created by interactions like "kill enemies in room -> drop small key" are probably not practical to randomize.

The same logic used for the existing item placement can probably be applied equally well to dungeon chests.

A command-line flag should be added to disable this behavior so that ~2-hour races with only key items randomized are still possible.

Preserve outside season when in dungeon

Phoe and I were testing this yesterday—normal group transitions don't reset the outside season, only dungeons and Subrosia do. If this is possible, it would obviate three softlock checks.

Poe skip room lit up by default

In the latest randomized ROM I played, the poe skip room in D7 was lit up without having to fight the first poe sister. I haven't checked whether it was still possible to fight the poe sister anyway.

Edit: This didn't happen in either full playthrough I did of previous versions.

L2 Boomerang Doesn't Wake Up The Maku Tree

oos-randomizer_log_2018-08-11_080720.txt

I'll go through my completed vanilla game tonight to see which items can and can't wake up the Maku tree. The L-2 Boomerang is not one of them (or I'm doing something wrong).

E: Bombs do work but the timing isn't obvious so players could theoretically waste their ten "free" bombs trying to wake up the Maku Tree. Also not all casuals would think to try them (as I didn't).

Further Edit: Actually, it looks like the only items that can't wake up the Maku Tree are the bracelet, feather/cape, shovel, and the boomerangs, so maybe add a note to the readme file about using bombs to wake up the Maku tree?

Yet another edit: It looks like the Bracelet's locked behind itself again anyway (it's in the Square Jewel Chest) - I need the bracelet to leave town from the north (Blaino's got the flippers, which you can loop around the Moblin's Fortress to get there if you've got your animal companion (NOTE: or the Cape and Pegasus seeds if you have Moosh as your companion, or the Flippers if Ricky is your companion), but you still need to access Spool Swamp to activate animal companions, and you'd still need to have ember seeds and a feather) or to enter Spool from Subrosia, and I need ember seeds from the Spool Swamp tree to exit town from the east, and I need a feather to get into Subrosia from town anyway (which the nearest feather is... behind the ember seeds, which are growing in Spool Swamp)

Mode to randomize all chests

At least a couple people expressed interest in having a mode for shuffling all chest/slots and items, and not just the key ones.

This could use the current key item sequencing implementation (but with more potential slots) and use the rest of the treasures (rupees, pieces of heart, gasha seeds) as the filler after the route is finished.

GUI

I don't know if or when I'm getting around to this, but some people just aren't familiar with command lines at all and ask for help in order to figure out how to run the randomizer. IIRC go-astilectron was relatively painless to use so I'd probaly use that again.

I'm leaving the readme as is until I have any concrete plans.

English language support

Many people I know are able to read, write, and speak English, and a growing market exists for English-language videogames.

This is sort of a "wishlist" feature for now, probably coming immediately before or after #6 unless it turns out to be stupid hard for some reason.

Minimum Length Option

An option like -maxlen, but instead, it requires a minimum number of slotted items to be included in the route.

Skip more cutscenes

Definitely the volcano cutscene, maybe parts of the Maku Seed / Onox / Twinrova cutscenes near the end of the game?

All the times when the Maku Tree contacts you could also be removed, since the dialogue isn't applicable to the randomizer anyway.

warping to start as a softlock safeguard

a solution I've seen to prevent softlocks (and to cut backtracking teduim) is to allow warping back to the starting screen (i.e. where Impa is)
link's awakening randomizer does this by adding extra cave entrances on some locations

but if it were possible, maybe some button combination (changing the soft reset to this? something in the map screen?) or some menu option could work better

this would allow logic to disregard needing to get out of places and open it up, and not need to adjust areas to let you escape them

Can softlock entering D7 without shovel or gale seeds

In a casual playthrough, the way to enter D7 is usually by changing the season to summer, meaning that you don't have to clear snow piles to enter. But if you exit D7 without either shovel or gale seeds, then you're stuck.

Reachable nodes vs routable nodes

It would be nice to have a mode that could require things like poe skip, HSS skip, D7 key without magnet glove, but only if there's also a mode that doesn't require tricks you have to spend a bunch of time practicing. IIRC the logic allows for those things right now but doesn't require any of them.

Some prenodes in the randomizer should be marked as "hard", meaning that the logic knows you can do them, but will never require you to do them. The former will be used for forbid nodes and softlock checks, and the latter will be used for item placement. Examples of "hard" nodes include poe skip, HSS skip, magnetless D7, and clearing Moosh pits with cape only.

Randomize default seasons

This would probably take place in a setup step before the slotting algorithm runs, since I'm not sure if slotting seasons makes sense.

For convenience, the seasons in areas with seed trees could be synced to the season that the seeds grow in, like they are in the vanilla game.

What to do about flutes

Flutes let you do weird, mutually exclusive things with animals, like swim before flippers with Dimitri, jump before feather with Ricky and Moosh, punch bombable walls open with Ricky, remove snow piles before shovel with… all of them? Or just Ricky and Moosh? Currently the randomizer knows you can do these things, but only ever "requires" you to get a flute for traversing Spool Swamp and Natzu.

The main problem is that if you buy a flute, you're locking yourself out of an animal companion until you can reach southern Spool Swamp in the right season (spring is an absolute mess). Practically speaking, this is admittedly unlikely to be an issue with the stairway between Eastern Suburbs and Sunken City and the general restrictions on item placement.

What would probably be nicest for logic purposes is if each seed only had one flute, and the Subrosian dance hall, the Horon Village shop, and Ricky all give the same one. Possibly identified from the start.

Natzu River/Prairie/Wasteland Navigation Notes

You must have Ricky to navigate through Natzu Prairie if you don't get any other companion's flute first, due to the cliffs (though you can access Moblin's Keep with Feather + Flippers from the Sunken City side). Ricky is the default companion, and you get his flute if you have no flute when he takes you to Spool Swamp.

You can navigate Natzu Wasteland without Moosh using the Roc's Cape (and can explore it in total with Cape and Pegasus Seeds), and can access Moblin's Keep with Cape + Flippers. Moosh's flute is obtainable from the Horon village shop for 150 Rupees, and is the suggested flute when the Cape appears early.

You can navigate Natzu River without Dimitri using the Flippers, but you won't be able to access Moblin's Keep without him (due to the current). Dimitri has the secondary advantage of providing access to the Subrosian Lava Lake without flippers, allowing for acquiring Autumn with just Feather and Bracelet (and a 2-pit jump to cross from Great Furnace area to the southern Village area). Dimitri's flute is the flute obtained from Subrosian Dancing, and is the suggested flute when the Flippers appear early.

Activating the Animal Companion requires either Spool Swamp access (for Dmitri and Moosh) or taking Ricky to Spool Swamp after retrieving his gloves, depending on which animal companion you want. Moosh (or rather, Natzu Wasteland) provides the most freedom in movement, while Dimitri allows for more access overall. Both Ricky and Moosh can get you around snow piles.

Natzu's form does not become locked until you obtain one of the three flutes (so it's plausible to have a seed where the Roc's Cape is stashed away in Moblin's Keep and you get the Bracelet from Blaino, later on down the line when heart piece locations are shuffled in)

softlock going down the sunken falls cave

Diving with the Flippers into the one-way cave in southern sunken city (the one that has the pyramid jewel in a linked game) takes you to the northeast of woods of winter.
without the ability to make it winter to navigate them nor gale seeds to warp, you can't get out of the area the waterfalls take you
dairando_000
ohno

Long runtime if routing routine paints itself into a corner

Sometimes the routing algorithm slots about 12 items that work, but it's possible that there's no way to reach the goal at that point and it will have to try something on the order of n^4 slots until it figures that out, where n is the number of remaining unslotted items.

An easy fix would just be to jump ship and retry from the beginning if no route is found after x iterations.

Master diver not giving item

As encountered by Herreteman, who had 6 essences and the plaque: https://www.twitch.tv/videos/292657933

The room checks essences to spawn the master diver, and the master diver checks essences and flippers to give his item. He spawned fine, and the flippers check ID is changed to the ID of whatever item he gives. In my testing I can't even reproduce the text he says in the video:

「ホントに ワシのでしに ならんか? ダメ? ぜったいに?」

So I really have no clue what's going on.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.