Skip to content

Conversation

@Crain-32
Copy link

What is this fixing or adding?

If a single player owns multiple Wind Waker Worlds in the World Pool, they end up having to juggle the save data in multiple ways. The most ergonomic way for users to avoid potential issues is to edit the GameID (main.dol, hex editor + GCFT). This allows you to isolate the Game Data in a more natural way.

However! The original hard coded check prevents that QoL adjustment from the Save Data side to work cleanly with the Client. You can bypass the check using Dolphin's Debug Mode and some implementation knowledge, but that isn't really a suitable long term option.

To create a better long term option this PR allows two new Game IDs GZLJ99 and GLZP99. They are not official Game IDs, so an accidental collision with official games is not possible. Actually changing the Game ID on the ROM is still left to the Player/Randomizer.

How was this tested?

Tested using Python's REPL and a running instance of Dolphin. Since it currently requires advanced knowledge to edit a Game ID extensive testing is redundant. If @tanjo3 were to work around this functionality (for example some type of hook in the Randomization side), than automated tests could be warranted. For now a simple check and log message should suffice.
image

We can see the logic also mirrors the original with game_id = b'GZLE99'
image

@github-actions github-actions bot added the waiting-on: peer-review Issue/PR has not been reviewed by enough people yet. label Jul 12, 2025
@Exempt-Medic
Copy link
Contributor

@tanjo3

@Exempt-Medic Exempt-Medic added is: enhancement Issues requesting new features or pull requests implementing new features. waiting-on: world-maintainer Issue/PR is waiting for feedback or approval by the maintainer of a world. labels Jul 12, 2025
@SomeJakeGuy
Copy link

SomeJakeGuy commented Jul 13, 2025

@tanjo3 Just going to throw this idea out there, we were able to change the Game ID to be entirely based on the seed itself in Luigi's Mansion, see the relevant lines here: https://github.com/BootsinSoots/Archipelago/blob/V0.4.10/worlds/luigismansion/LMGenerator.py#L56

(just make sure there is space to update that game ID to be that long and sure there is at least one null character, \x00, after.)

Feel free to tag me here or on discord if you need some assistance changing and testing.

@tanjo3
Copy link
Contributor

tanjo3 commented Jul 14, 2025

I prefer something like how Luigi's Mansion does it, since just adding Game IDs but leaving it up to the user feels incomplete to me. My concern, however, is that by having a unique Game ID per seed, the Dolphin save folder will become bloated with old save files (though to be fair, the files aren't that big). There is also another minor concern that a user's game-specific Dolphin settings would have to be redone for each seed. I don't know what the best approach would be.

@SomeJakeGuy
Copy link

I think it's a matter of setting expectations at that point. Our users don't really seem bothered by the fact that settings need to be changed per game, because the core settings like controller settings stay the same. But it did seem that users were more frustrated having to maintain different saves, remember what each save was for, etc. So we went with fill seed for Game ID. I do suppose there is some value in maintaining a smaller known list to not have to change as much settings, but if you're really unsure, you can always do a poll in discord and see what the community likes more

@Crain-32
Copy link
Author

@tanjo3

I prefer something like how Luigi's Mansion does it, since just adding Game IDs but leaving it up to the user feels incomplete to me.
Game ID would have to be done by the patcher, so from an AP world perspective this change is all that is required. So it is an "incomplete" change, in that the Patcher will also have to be adjusted.

If we think of the GameID check in the World as simply a means of verifying "is this user playing TWWR?" we can also just put a magic number in the ROM using the patcher that is checked for instead. That would let people playing multiple of the same world at the same time adjust their GameID, while maintaining the verification check.

@Exempt-Medic
Copy link
Contributor

So what's happening with this PR?

@tanjo3
Copy link
Contributor

tanjo3 commented Jul 29, 2025

I think modifying it so that the save files are different per seed is a good change, but I'd like to see an accompanying PR in the patcher. I'd like to see how it'd be implemented with the three game IDs before giving my approval to this PR.

I think the best approach would be to either use a unique game ID per world, as LM does, or to patch a seed-specific value into the ROM as a secondary check before connecting.

@Exempt-Medic Exempt-Medic removed the waiting-on: world-maintainer Issue/PR is waiting for feedback or approval by the maintainer of a world. label Aug 1, 2025
@duckboycool duckboycool added the waiting-on: author Issue/PR is waiting for feedback or changes from its author. label Jan 1, 2026
@duckboycool
Copy link
Collaborator

@Crain-32 Any info about tanjo's comments?

@tanjo3
Copy link
Contributor

tanjo3 commented Jan 5, 2026

On this topic, I think that, along with #5819, modifying the game ID based on the slot name would be a good compromise. This limits the creation of unique .gci files from one per seed to one per slot name. It also gives the user some control over the behavior of the save files. If they want to have a fresh set of save files, they should use a different slot name. And with #5819, if they reuse their slot name, they won't be able to connect to invalid save files. I also think it'd be easy for users to connect that slot name == whether their save files carry over. What are people's thoughts on this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

is: enhancement Issues requesting new features or pull requests implementing new features. waiting-on: author Issue/PR is waiting for feedback or changes from its author. waiting-on: peer-review Issue/PR has not been reviewed by enough people yet.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants