Skip to content

Commit 219dec9

Browse files
authored
Merge pull request #1329 from garrettjoecox/shopsanity
Shopsanity
2 parents 08f9b06 + 7abb8b3 commit 219dec9

File tree

20 files changed

+936
-74
lines changed

20 files changed

+936
-74
lines changed

soh/include/macros.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,7 @@ extern GraphicsContext* __gfxCtx;
261261
#define SEG_ADDR(seg, addr) (addr | (seg << 24) | 1)
262262

263263
#define NUM_TRIALS 6
264+
#define NUM_SHOP_ITEMS 64
264265
#define NUM_SCRUBS 35
265266

266267
#endif

soh/include/z64save.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ typedef struct {
183183
char ganonHintText[150];
184184
char ganonText[250];
185185
u8 seedIcons[5];
186-
u16 randomizerInf[4];
186+
u16 randomizerInf[8];
187187
u8 temporaryWeapon;
188188
u16 adultTradeItems;
189189
} SaveContext; // size = 0x1428

soh/soh/Enhancements/custom-message/CustomMessageTypes.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ typedef enum {
1818
TEXT_RED_RUPEE = 0xF0,
1919
TEXT_PURPLE_RUPEE = 0xF1,
2020
TEXT_HUGE_RUPEE = 0xF2,
21-
TEXT_BEAN_SALESMAN = 0x405E
21+
TEXT_BEAN_SALESMAN = 0x405E,
22+
TEXT_SCRUB_RANDOM = 0x9000,
23+
TEXT_SHOP_ITEM_RANDOM = 0x9100,
2224
} TextIDs;
2325

2426
#ifdef __cplusplus

soh/soh/Enhancements/debugger/debugSaveEditor.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1125,11 +1125,19 @@ void DrawEquipmentTab() {
11251125
DrawUpgradeIcon("Strength", UPG_STRENGTH, strengthValues);
11261126

11271127
// There is no icon for child wallet, so default to a text list
1128-
const std::vector<std::string> walletNames = {
1128+
// this was const, but I needed to append to it depending in rando settings.
1129+
std::vector<std::string> walletNamesImpl = {
11291130
"Child (99)",
11301131
"Adult (200)",
11311132
"Giant (500)",
11321133
};
1134+
// only display Tycoon wallet if you're in a save file that would allow it.
1135+
if (gSaveContext.n64ddFlag && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHOPSANITY) > 1) {
1136+
const std::string walletName = "Tycoon (999)";
1137+
walletNamesImpl.push_back(walletName);
1138+
}
1139+
// copy it to const value for display in ImGui.
1140+
const std::vector<std::string> walletNames = walletNamesImpl;
11331141
DrawUpgrade("Wallet", UPG_WALLET, walletNames);
11341142

11351143
const std::vector<std::string> stickNames = {

soh/soh/Enhancements/randomizer/3drando/settings.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ namespace Settings {
157157
Option ShuffleRewards = Option::U8 ("Shuffle Dungeon Rewards",{"End of dungeons", "Any dungeon", "Overworld", "Anywhere"}, {shuffleRewardsEndOfDungeon, shuffleRewardsAnyDungeon, shuffleRewardsOverworld, shuffleRewardsAnywhere});
158158
Option LinksPocketItem = Option::U8 ("Link's Pocket", {"Dungeon Reward", "Advancement", "Anything", "Nothing"}, {linksPocketDungeonReward, linksPocketAdvancement, linksPocketAnything, linksPocketNothing});
159159
Option ShuffleSongs = Option::U8 ("Shuffle Songs", {"Song locations", "Dungeon rewards", "Anywhere"}, {songsSongLocations, songsDungeonRewards, songsAllLocations});
160-
Option Shopsanity = Option::U8 ("Shopsanity", {MultiVecOpts({{"Off"}, NumOpts(0, 4), {"Random"}})}, {shopsOff, shopsZero, shopsOne, shopsTwo, shopsThree, shopsFour, shopsRandom});
160+
Option Shopsanity = Option::U8 ("Shopsanity", {"Off","0 Items","1 Item","2 Items","3 Items","4 Items","Random"}, {shopsOff, shopsZero, shopsOne, shopsTwo, shopsThree, shopsFour, shopsRandom});
161161
Option Tokensanity = Option::U8 ("Tokensanity", {"Off", "Dungeons", "Overworld", "All Tokens"}, {tokensOff, tokensDungeon, tokensOverworld, tokensAllTokens});
162162
Option Scrubsanity = Option::U8 ("Scrub Shuffle", {"Off", "Affordable", "Expensive", "Random Prices"}, {scrubsOff, scrubsAffordable, scrubsExpensive, scrubsRandomPrices});
163163
Option ShuffleCows = Option::Bool("Shuffle Cows", {"Off", "On"}, {shuffleCowsDesc});
@@ -2537,6 +2537,7 @@ namespace Settings {
25372537
ShuffleRewards.SetSelectedIndex(cvarSettings[RSK_SHUFFLE_DUNGEON_REWARDS]);
25382538
ShuffleSongs.SetSelectedIndex(cvarSettings[RSK_SHUFFLE_SONGS]);
25392539
Tokensanity.SetSelectedIndex(cvarSettings[RSK_SHUFFLE_TOKENS]);
2540+
Shopsanity.SetSelectedIndex(cvarSettings[RSK_SHOPSANITY]);
25402541
Scrubsanity.SetSelectedIndex(cvarSettings[RSK_SHUFFLE_SCRUBS]);
25412542
ShuffleCows.SetSelectedIndex(cvarSettings[RSK_SHUFFLE_COWS]);
25422543
ShuffleKokiriSword.SetSelectedIndex(cvarSettings[RSK_SHUFFLE_KOKIRI_SWORD]);

soh/soh/Enhancements/randomizer/randomizer.cpp

Lines changed: 600 additions & 45 deletions
Large diffs are not rendered by default.

soh/soh/Enhancements/randomizer/randomizer.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,9 @@ class Randomizer {
4646
bool SpoilerFileExists(const char* spoilerFileName);
4747
void LoadRandomizerSettings(const char* spoilerFileName);
4848
void LoadHintLocations(const char* spoilerFileName);
49+
void LoadMerchantMessages(const char* spoilerFileName);
50+
void LoadItemLocations(const char* spoilerFileName, bool silent);
4951
void LoadRequiredTrials(const char* spoilerFileName);
50-
void LoadItemLocations(const char* spoilerFileName,bool silent);
5152
bool IsTrialRequired(RandomizerInf trial);
5253
u8 GetRandoSettingValue(RandomizerSettingKey randoSettingKey);
5354
RandomizerCheck GetCheckFromActor(s16 actorId, s16 sceneNum, s16 actorParams);
@@ -58,6 +59,7 @@ class Randomizer {
5859
std::string GetGanonText() const;
5960
std::string GetGanonHintText() const;
6061
ScrubIdentity IdentifyScrub(s32 sceneNum, s32 actorParams, s32 respawnData);
62+
ShopItemIdentity IdentifyShopItem(s32 sceneNum, u8 slotIndex);
6163
GetItemID GetItemIdFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogItemId);
6264
GetItemID GetItemIdFromActor(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogItemId);
6365
GetItemID GetItemIdFromRandomizerGet(RandomizerGet randoGet, GetItemID ogItemId);

soh/soh/Enhancements/randomizer/randomizerTypes.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -961,6 +961,7 @@ typedef enum {
961961
RG_BUY_RED_POTION_50,
962962
RG_TRIFORCE,
963963
RG_HINT,
964+
RG_TYCOON_WALLET,
964965
RG_MAX
965966
} RandomizerGet;
966967

@@ -989,6 +990,7 @@ typedef enum {
989990
RSK_SHUFFLE_DUNGEON_REWARDS,
990991
RSK_SHUFFLE_SONGS,
991992
RSK_SHUFFLE_TOKENS,
993+
RSK_SHOPSANITY,
992994
RSK_SHUFFLE_SCRUBS,
993995
RSK_SHUFFLE_COWS,
994996
RSK_SHUFFLE_WEIRD_EGG,
@@ -1041,3 +1043,11 @@ typedef struct ScrubIdentity {
10411043
int32_t itemPrice;
10421044
bool isShuffled;
10431045
} ScrubIdentity;
1046+
1047+
typedef struct ShopItemIdentity {
1048+
RandomizerInf randomizerInf;
1049+
RandomizerCheck randomizerCheck;
1050+
GetItemID ogItemId;
1051+
int32_t enGirlAShopItem;
1052+
int32_t itemPrice;
1053+
} ShopItemIdentity;

soh/soh/Enhancements/randomizer/randomizer_inf.h

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,71 @@ typedef enum {
6666
RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_BRIDGE,
6767
RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB,
6868

69+
RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_1,
70+
RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_2,
71+
RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_3,
72+
RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_4,
73+
RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_5,
74+
RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_6,
75+
RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_7,
76+
RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_8,
77+
RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_1,
78+
RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_2,
79+
RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_3,
80+
RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_4,
81+
RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_5,
82+
RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_6,
83+
RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_7,
84+
RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_8,
85+
RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_1,
86+
RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_2,
87+
RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_3,
88+
RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_4,
89+
RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_5,
90+
RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_6,
91+
RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_7,
92+
RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_8,
93+
RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_1,
94+
RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_2,
95+
RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_3,
96+
RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_4,
97+
RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_5,
98+
RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_6,
99+
RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_7,
100+
RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_8,
101+
RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_1,
102+
RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_2,
103+
RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_3,
104+
RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_4,
105+
RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_5,
106+
RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_6,
107+
RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_7,
108+
RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_8,
109+
RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_1,
110+
RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_2,
111+
RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_3,
112+
RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_4,
113+
RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_5,
114+
RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_6,
115+
RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_7,
116+
RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_8,
117+
RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_1,
118+
RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_2,
119+
RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_3,
120+
RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_4,
121+
RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_5,
122+
RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_6,
123+
RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_7,
124+
RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_8,
125+
RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_1,
126+
RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_2,
127+
RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_3,
128+
RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_4,
129+
RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_5,
130+
RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_6,
131+
RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_7,
132+
RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_8,
133+
69134
// If you add anything to this list, you need to update the size of randomizerInf in z64save.h to be ceil(RAND_INF_MAX / 16)
70135

71136
RAND_INF_MAX,

soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "randomizer_item_tracker.h"
22
#include "../../util.h"
3+
#include "../../OTRGlobals.h"
34
#include <libultraship/ImGuiImpl.h>
45
#include "../../UIWidgets.hpp"
56

@@ -278,7 +279,7 @@ ItemTrackerNumbers GetItemCurrentAndMax(ItemTrackerItem item) {
278279
case ITEM_WALLET_ADULT:
279280
case ITEM_WALLET_GIANT:
280281
result.currentCapacity = CUR_CAPACITY(UPG_WALLET);
281-
result.maxCapacity = 500;
282+
result.maxCapacity = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHOPSANITY) > 1 ? 999 : 500;
282283
result.currentAmmo = gSaveContext.rupees;
283284
break;
284285
case ITEM_BOMBCHU:

0 commit comments

Comments
 (0)