phst-randomizer / ph-randomizer Goto Github PK
View Code? Open in Web Editor NEWRandomizer for The Legend of Zelda: Phantom Hourglass
License: GNU General Public License v3.0
Randomizer for The Legend of Zelda: Phantom Hourglass
License: GNU General Public License v3.0
We're running low on free space to put new code (see base/src/main.asm
). We need to try and find some more free space, ideally in arm9.bin.
I wonder, could the D-pad patch described here be integrated as a randomizer quality-of-life option?
I vaguely remember reading somewhere that it already was, but I don't see that in the README, so maybe I'm remembering wrong.
In the Wind Waker and Majora's Mask randomizers, there's now an option to make chests' appearance reflect whether they contain progression items, junk, or dungeon keys. This is a really nice feature, I'd like to see it planned for the PH randomizer.
With #7, this is now mostly done.
Left to do:
_additional_tree_items.asm
could be rewritten in C to be more readable
At the very least we should make it so the bomb upgrade is randomizable, not sure yet if it would make sense to do the other rewards as I think they are just random ship parts/treasures (?).
They don't appear to be located in BMG instructions as other "NPC event" items are.
When placing certain items (such as the boomerang) in locations they aren't found in in the original game, the "Got item" text when picking up the item doesn't appear. Instead, Link holds the item up as usual, but it lasts less than a second and skips the text box entirely.
The mechanics around the spawning of the ghost ship dungeon need to be reworked.
The oceans at the bottom of the ocean should be randomized like every other chest. There is a possibility that they work exactly like normal chests, in that case, comment and close this.
The sprits that are collected at the end of the first three dungeons should be randomizable
The following files have lose
edge descriptors that need to be reworked as node descriptors (retrieved by grep'ing for lose
in the logic directory) -
This would just be a basic, rough version of the shuffler that would at least enable us to test the full randomizing workflow end-to-end. Probably just using random fill for the seed generation, as that would be simpler for the time being
Spirit upgrades
As of #39, the Oshus Sword (id 0x3) is progressive, i.e. if the player picks up an Oshus Sword when they already have one, they will receive the Phantom Sword instead. However, the "Got Item" text when you pick up the item still says its the Oshus Sword.
The three beetle coupons (freebie card, compliment card, and complimentary card) don't get saved to the players inventory if they are 1) purchased in the shop, 2) dug up, or 3) found in a salvage chest. I haven't tested it with regular chests yet.
More specifically, the "Got item" animation plays with the correct model and everything, but the item doesn't appear in your inventory after that, and the appropriate flags in memory are not set.
Once this issue is fixed, this commit should be reverted.
The shuffler currently uses the Random Fill algorithm to generate seeds. This technically works, but is very inefficient. As more logic is written, the time to generate a seed is going to grow significantly. So, the shuffler code needs to be rewritten to use the Assumed Fill algorithm instead.
Good resource for the commonly used randomization algorithms: https://github.com/cjohnson57/RandomizerAlgorithms/blob/master/Paper/Paper.pdf
An optional randomizer setting that adds a visual cue on the spots to dig that aren't obvious (like on Maze Island)
#117 only adds support for item
s, flag
s should also be supported.
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
These updates are awaiting their schedule. Click on a checkbox to get an update now.
These updates are currently rate-limited. Click on a checkbox below to force their creation now.
These updates have all been created already. Click a checkbox below to force a retry/rebase of any.
These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.
base/Dockerfile
python 3.12
python 3.12
python 3.12
python 3.12
.github/workflows/build-test-release.yml
actions/checkout v4
actions/setup-python v4
actions/cache v3
actions/checkout v4
actions/setup-python v4
actions/checkout v4
actions/setup-python v4
actions/checkout v4
actions/setup-python v4
actions/checkout v4
actions/setup-python v4
actions/upload-artifact v3
actions/checkout v4
actions/setup-python v4
actions/checkout v4
actions/setup-python v4
docker/setup-buildx-action v3
docker/build-push-action v5
actions/upload-artifact v3
actions/checkout v4
dorny/paths-filter v2
actions/setup-python v4
actions/checkout v4
actions/setup-python v4
actions/download-artifact v3
actions/upload-artifact v3
actions/checkout v4
actions/setup-python v4
actions/download-artifact v3
actions/upload-artifact v3
actions/checkout v4
actions/setup-python v4
actions/download-artifact v3
actions/checkout v4
actions/download-artifact v3
softprops/action-gh-release v1
.github/workflows/clear-cache.yml
easimon/wipe-cache v2
.github/workflows/logic-graph-viz.yml
actions/checkout v4
actions/setup-python v4
actions/upload-artifact v3
.github/workflows/pre-commit-autoupdate.yml
actions/checkout v4
actions/setup-python v4
peter-evans/create-pull-request v5
pyproject.toml
PySide6 ==6.6.1
click ==8.1.3
inflection ==0.5.1
ndspy ==4.1.0
ordered-set ==4.1.0
pydantic ==2.4.2
pyparsing ==3.1.1
vidua ==0.4.5
test/PyYAML ==6.0.1
test/numpy ~=1.26.1
test/opencv-python ~=4.7.0.68
test/py-desmume ==0.0.6
test/pytest ~=7.4.2
test/pytest-repeat ~=0.9.1
test/pytest-xdist ~=3.5.0
test/tqdm ~=4.66.1
types/mypy ==1.8.0
types/types-Pillow ~=10.1.0.0
types/types-PyYAML ~=6.0.12.8
types/types-setuptools ~=69.0.0.0
types/types-tqdm ~=4.66.0.1
pyinstaller/pyinstaller ==6.3.0
setuptools >68
base/requirements.txt
click ==8.1.3
ndspy ==4.1.0
Pillow ==10.0.1
zed 5ee969236bf3c3d0707da963e5edc818ddf246d3
.python-version
python 3.12
There is an error with this repository's Renovate configuration that needs to be fixed. As a precaution, Renovate will stop PRs until it is resolved.
Error type: Cannot find preset's package (schedule:earlyFridays)
fixy9.exe
is a closed-source windows utility for updating the y9.bin manifest after making changes to overlay files. Since our docker image for running the toolchain is based on debian, running this tiny utility requires downloading and installing Wine, which adds several minutes to the build time.
CUE's compression tools are a set of C programs for decompressing/compressing various GBA/NDS compression formats. We use it to (de)compress the arm9.bin and overlay executables which are in BLZ format. Unfortunately, the original code is written using some windows-exclusive library functions, so I forked it and changed those function calls to more standardized libc calls so we can use it in our Debian-based docker image. Ideally we stop relying on these tools and just delete that repo.
As far as a solution, ndspy has support for extracting/inserting arm9.bin and overlay files from roms, and handles any (de)compression and y9.bin updates automatically. So, I think the best thing to do would be write a Python script that effectively does what the arm9.bin overlay
Makefile target does, except using ndspy
's code API
The edge_is_traversable()
function is currently not implemented correctly.
The shuffler needs to be able to dynamically evaluate logical expressions found in the .logic
files such as
flag BridgeRepaired & (item Hammer | (item Bombs & item Bombchus) | (item Sword | (item Bow & item GrapplingHook)))
That expression is completely made up, but the idea is these expressions can be nested any number of times.
The items in shops on Mercay, Molida, and Goron Islands should be randomizable to any other item in the game.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.