Skip to content

Super Mario 64: Universal Tracker support - #6259

Open
Alchav wants to merge 6 commits into
ArchipelagoMW:mainfrom
Alchav:sm64-ut-support
Open

Super Mario 64: Universal Tracker support#6259
Alchav wants to merge 6 commits into
ArchipelagoMW:mainfrom
Alchav:sm64-ut-support

Conversation

@Alchav

@Alchav Alchav commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

What is this fixing or adding?

Adds Universal Tracker support to Super Mario 64

How was this tested?

Comparing spoiler log to observed locations. Unit tests.
image

@github-actions github-actions Bot added the waiting-on: peer-review Issue/PR has not been reviewed by enough people yet. label Jun 13, 2026
@duckboycool duckboycool 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 Jun 18, 2026
@duckboycool
duckboycool requested a review from N00byKing June 18, 2026 16:55

@N00byKing N00byKing left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I previously mentioned in discord that I am not a fan of adding tracker-specific info in slot data.
But tbh I've since mellowed out a lot, so I don't really mind anymore.

However, the slot_option_names list especially is a bit annoying.
For future updates this can really cause issues, and I feel it should be somehow automatic from the option definitions.

Comment thread worlds/sm64ex/__init__.py Outdated
Comment on lines +125 to +130
for cost_name in ("FirstBowserDoorCost", "BasementDoorCost", "SecondFloorDoorCost",
"MIPS1Cost", "MIPS2Cost", "StarsToFinish"):
if cost_name in slot_data:
self.star_costs[cost_name] = slot_data[cost_name]
if "MoveRandoVec" in slot_data:
self.move_rando_bitvec = slot_data["MoveRandoVec"]

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you move this to the top if slot_data block and early return there instead?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shifted code into the if block, added return, added a return for UT gen pass on create_items to prevent crashes when checking uninitialized world properties.

Comment thread worlds/sm64ex/__init__.py Outdated
Comment on lines +55 to +76
slot_option_names = (
"area_rando",
"buddy_checks",
"exclamation_boxes",
"progressive_keys",
"enable_coin_stars",
"enable_locked_paintings",
"enable_move_rando",
"move_rando_actions",
"strict_cap_requirements",
"strict_cannon_requirements",
"strict_move_requirements",
"amount_of_stars",
"first_bowser_star_door_cost",
"basement_star_door_cost",
"second_floor_star_door_cost",
"mips1_cost",
"mips2_cost",
"stars_to_finish",
"death_link",
"completion_type",
)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this somehow be generated from the definitions in options.py?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this somehow be generated from the definitions in options.py?

Could you be more specific about what you mean?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So this list is just a list of all the options right?
I really dont want to hardcode this list, it should be somehow inferred, maybe from the dataclass or the options object

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Problem is you DON'T want all options in slot data. Only ones that change logic generation. Archipelago already handles starting items for example. So adding all yaml options would just be bloat. You could automate a list tho, and blacklist unwanted ones. Just need to update the blacklist if AP adds new global options to yamls instead of updating a whitelist when adding new options.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Flags are now added to option classes and the list is generated from these flags.

Comment thread worlds/sm64ex/Options.py Outdated


class SM64DeathLink(DeathLink):
include_in_slot_data = True

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does deathlink have to be in as well?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mistake. DeathLink is covered by a separate key in slot data. It has been fixed.

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: peer-review Issue/PR has not been reviewed by enough people yet. waiting-on: world-maintainer Issue/PR is waiting for feedback or approval by the maintainer of a world.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants