Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Option to allow progressive items to give all the upgrades at once #2108

Open
wants to merge 46 commits into
base: Dev
Choose a base branch
from

Conversation

AngheloAlf
Copy link

This new option allows to choose which progressive items will grant the player both the item and all of its upgrades. I named this feature "upgradeful items", but we can rename it if anybody can think on a better name.

For example, if the Bow is selected to be an upgradeful item, then picking up a bow will give the player a bow and the biggest quiver at the same time.

Which items will be upgradeful items and which ones aren't can be selected in the gui by using the corresponding checkboxes:

image

Codewise the changes are kinda simple. The UPGRADEFUL_ITEM_FLAGS flag variable controls which items will be considered upgradeful.
Most upgradeable items can just give the last upgrade and the game will just work as expected, with the exceptions of the bomb bag, the bow and the slingshot. I had to introduce 3 new items in the item_table to handle them properly. I also added custom text for those 3 items too. I made the logic to handle those 3 items based on how OoT handles it on Item_Give

The only progressive item that does not implement upgradeful logic is the bombchu because bombchus doesn't seem to be upgradeable.

This PR does not touch randomizer logic like the item pools, meaning that playing with a Balanced item pool and an upgradeful bow will place 3 bows in the world, of which all of them will give all the upgrades to the player, which can be a bit confusing to the Player. Any suggestions about this are welcome.

Example videos

2023-10-06_15-18-33.mp4
2023-10-06_15-10-34.mp4

Final words

I tested this a bit but I may have overlook something, so more testing would be appreciated

Feel free to ping me on discord, I'm angiealf

@fenhl fenhl added Type: Enhancement New feature or request Component: ASM/C Changes some internals of the ASM/C libraries Component: Randomizer Core Generally the core functions of the python Component: Setting specific to setting(s) labels Oct 6, 2023
Patches.py Outdated Show resolved Hide resolved
data/settings_mapping.json Outdated Show resolved Hide resolved
ASM/c/z64.h Outdated Show resolved Hide resolved
@cjohnson57 cjohnson57 added Status: Needs Review Someone should be looking at it Status: Under Consideration Developers are considering whether to accept or decline the feature described Status: Waiting for Release This PR is ready for merge, but we're holding off on it until after the next release and removed Status: Waiting for Release This PR is ready for merge, but we're holding off on it until after the next release labels Nov 11, 2023
Copy link
Collaborator

@cjohnson57 cjohnson57 left a comment

Choose a reason for hiding this comment

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

This is a cool feature, but I'm unsure if there's any demand for it. It's possible there was positive reception to it on the Discord that I missed

Comment on lines +528 to +540
'Max Upgrade Hookshot': (["Water Tenple's keepsake", "the largest Grapple Beam", "the BOINGEST! chain"], "a Max Upgrade Hookshot", 'item'),
'Max Upgrade Strength': (["power gloves", "metal mittens", "the heavy lifty"], "a Max Upgrade Strength", 'item'),
'Max Upgrade Bomb Bag': (["biggest explosive container", "a huge blast bag"], "a Max Upgrade Bomb Bag", 'item'),
'Max Upgrade Bow': (["a fully archery enabler", "a very danger dart launcher"], "a Max Upgrade Bow", 'item'),
'Max Upgrade Slingshot': (["a seed shooter", "a rubberband", "a child's catapult"], "a Max Upgrade Slingshot", 'item'),
'Max Upgrade Wallet': (["the biggest mo' money holder", "a big gem purse", "a huge portable bank"], "a Max Upgrade Wallet", 'item'),
'Max Upgrade Scale': (["the deepest dive", "a piece of Zora"], "a Max Upgrade Zora Scale", 'item'),
'Max Upgrade Nut': (["even more nuts", "the largest flashbang storage"], "Max Upgrade Deku Nut Capacity", 'item'),
'Max Upgrade Stick': (["tons of lumber rack", "even more flammable twigs"], "Max Upgrade Deku Stick Capacity", 'item'),
'Max Upgrade Bombchu': (["tons of mice bombs", "tons of proximity mice", "tons of wall crawlers", "tons of trail blazers"], "Max Upgrade Bombchus", 'item'),
'Max Upgrade Magic': (["ultimate mystic training", "lots of pixie dust", "the largest green rectangle"], "a Max Upgrade Magic Meter", 'item'),
'Max Upgrade Ocarina': (["a time flute"], "a Max Upgrade Ocarina", 'item'),

Copy link
Collaborator

Choose a reason for hiding this comment

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

I'm not sure if the max upgrade items should have separate hints from the normal ones. I guess if you're on random settings, it's a good way to tell what items are set to max upgrade, though. I could see it being either way

Copy link
Author

Choose a reason for hiding this comment

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

iirc it was suggested to me over discord to add individual hints for those items. I tried to look up the convo about it but I suck at using Discord's search feature, sorry.
Either way, I'm indifferent to having specific hints for those or not

Copy link
Collaborator

Choose a reason for hiding this comment

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

Note to self: Take a closer look at the cryptic hints at some point.

@fenhl fenhl added the Changes Item Table Adds/removes items from the item table. Allows coordination of multiple PRs which add to the table. label Dec 5, 2023
ASM/c/item_table.c Outdated Show resolved Hide resolved
[0x0121] = ITEM_ROW(0x53, GILDED_CHEST, 0x54, -1, 0x00CE, 0x00DB, 0x2B, no_upgrade, no_effect, -1, -1, NULL), // Max Upgrade Scale
[0x0122] = ITEM_ROW(0x53, BROWN_CHEST, 0x9B, -1, 0x00A8, 0x00BB, 0x12, no_upgrade, no_effect, -1, -1, NULL), // Max Upgrade Nut
[0x0123] = ITEM_ROW(0x53, BROWN_CHEST, 0x99, -1, 0x0091, 0x00C7, 0x1B, no_upgrade, no_effect, -1, -1, NULL), // Max Upgrade Stick
[0x0124] = ITEM_ROW(0x53, GILDED_CHEST, 0x41, -1, 0x9019, 0x0197, 0x7E, no_upgrade, give_bombchus, 20, -1, NULL), // Max Upgrade Bombchu
Copy link
Collaborator

Choose a reason for hiding this comment

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

Does this need to be a separate item? It seems to be identical in behavior to a pack of 20 chus. It also seems to be missing the upgrade to a chu bag.

Copy link
Author

Choose a reason for hiding this comment

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

iirc I added this one for completeness sake and as a placeholder in case the bombchu pack logic changed in the future.
I can remove it if prefered.

Comment on lines +528 to +540
'Max Upgrade Hookshot': (["Water Tenple's keepsake", "the largest Grapple Beam", "the BOINGEST! chain"], "a Max Upgrade Hookshot", 'item'),
'Max Upgrade Strength': (["power gloves", "metal mittens", "the heavy lifty"], "a Max Upgrade Strength", 'item'),
'Max Upgrade Bomb Bag': (["biggest explosive container", "a huge blast bag"], "a Max Upgrade Bomb Bag", 'item'),
'Max Upgrade Bow': (["a fully archery enabler", "a very danger dart launcher"], "a Max Upgrade Bow", 'item'),
'Max Upgrade Slingshot': (["a seed shooter", "a rubberband", "a child's catapult"], "a Max Upgrade Slingshot", 'item'),
'Max Upgrade Wallet': (["the biggest mo' money holder", "a big gem purse", "a huge portable bank"], "a Max Upgrade Wallet", 'item'),
'Max Upgrade Scale': (["the deepest dive", "a piece of Zora"], "a Max Upgrade Zora Scale", 'item'),
'Max Upgrade Nut': (["even more nuts", "the largest flashbang storage"], "Max Upgrade Deku Nut Capacity", 'item'),
'Max Upgrade Stick': (["tons of lumber rack", "even more flammable twigs"], "Max Upgrade Deku Stick Capacity", 'item'),
'Max Upgrade Bombchu': (["tons of mice bombs", "tons of proximity mice", "tons of wall crawlers", "tons of trail blazers"], "Max Upgrade Bombchus", 'item'),
'Max Upgrade Magic': (["ultimate mystic training", "lots of pixie dust", "the largest green rectangle"], "a Max Upgrade Magic Meter", 'item'),
'Max Upgrade Ocarina': (["a time flute"], "a Max Upgrade Ocarina", 'item'),

Copy link
Collaborator

Choose a reason for hiding this comment

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

Note to self: Take a closer look at the cryptic hints at some point.

Patches.py Outdated Show resolved Hide resolved
SettingsList.py Outdated Show resolved Hide resolved
@Prelle
Copy link

Prelle commented Jun 2, 2024

Someone above commented wondering about demand for this, so i just want to add my vote. The feature would be great if for no other reason than i like running scarce items but hate only ever having half a magic bar for the late game.

@r0bd0g
Copy link

r0bd0g commented Jun 3, 2024

Honestly IMO scarce ought to still have 2 magics.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Changes Item Table Adds/removes items from the item table. Allows coordination of multiple PRs which add to the table. Component: ASM/C Changes some internals of the ASM/C libraries Component: Randomizer Core Generally the core functions of the python Component: Setting specific to setting(s) Status: Needs Review Someone should be looking at it Status: Under Consideration Developers are considering whether to accept or decline the feature described Type: Enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants