mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-11-17 23:15:11 -05:00
commit
5505d0d284
@ -5,6 +5,16 @@
|
|||||||
|
|
||||||
struct Player;
|
struct Player;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0x00 */ u8 itemId;
|
||||||
|
/* 0x01 */ u8 field; // various bit-packed data
|
||||||
|
/* 0x02 */ s8 gi; // defines the draw id and chest opening animation
|
||||||
|
/* 0x03 */ u8 textId;
|
||||||
|
/* 0x04 */ u16 objectId;
|
||||||
|
} GetItemEntry; // size = 0x06
|
||||||
|
|
||||||
|
extern GetItemEntry sGetItemTable[160];
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
/* 0 */ PLAYER_SWORD_NONE,
|
/* 0 */ PLAYER_SWORD_NONE,
|
||||||
/* 1 */ PLAYER_SWORD_KOKIRI,
|
/* 1 */ PLAYER_SWORD_KOKIRI,
|
||||||
@ -612,6 +622,7 @@ typedef struct Player {
|
|||||||
/* 0x0A86 */ s8 unk_A86;
|
/* 0x0A86 */ s8 unk_A86;
|
||||||
/* 0x0A87 */ u8 unk_A87;
|
/* 0x0A87 */ u8 unk_A87;
|
||||||
/* 0x0A88 */ Vec3f unk_A88; // previous body part 0 position
|
/* 0x0A88 */ Vec3f unk_A88; // previous body part 0 position
|
||||||
|
/* 0x0A89 */ bool pendingIceTrap;
|
||||||
} Player; // size = 0xA94
|
} Player; // size = 0xA94
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -52,12 +52,12 @@ namespace Settings {
|
|||||||
// Setting name, Options, Setting Descriptions (assigned in setting_descriptions.cpp) Category (default: Setting),Default index (default: 0), Default hidden (default: false)
|
// Setting name, Options, Setting Descriptions (assigned in setting_descriptions.cpp) Category (default: Setting),Default index (default: 0), Default hidden (default: false)
|
||||||
//Open Settings Any option index past the last description will use the last description
|
//Open Settings Any option index past the last description will use the last description
|
||||||
Option RandomizeOpen = Option::Bool("Randomize Settings", {"No","Yes"}, {openRandomize}, OptionCategory::Toggle);
|
Option RandomizeOpen = Option::Bool("Randomize Settings", {"No","Yes"}, {openRandomize}, OptionCategory::Toggle);
|
||||||
Option OpenForest = Option::U8 ("Forest", {"Closed", "Open", "Closed Deku"}, {forestClosed, forestOpen, forestClosedDeku}, OptionCategory::Setting, OPENFOREST_OPEN);
|
Option OpenForest = Option::U8 ("Forest", {"Closed", "Closed Deku", "Open"}, {forestClosed, forestClosedDeku, forestOpen}, OptionCategory::Setting, OPENFOREST_CLOSED);
|
||||||
Option OpenKakariko = Option::U8 ("Kakariko Gate", {"Closed", "Open"}, {kakGateClosed, kakGateOpen});
|
Option OpenKakariko = Option::U8 ("Kakariko Gate", {"Closed", "Open"}, {kakGateClosed, kakGateOpen});
|
||||||
Option OpenDoorOfTime = Option::U8 ("Door of Time", {"Open", "Closed", "Intended"}, {doorOfTimeOpen, doorOfTimeClosed, doorOfTimeIntended});
|
Option OpenDoorOfTime = Option::U8 ("Door of Time", {"Closed", "Song only", "Open"}, {doorOfTimeIntended, doorOfTimeClosed, doorOfTimeOpen});
|
||||||
Option ZorasFountain = Option::U8 ("Zora's Fountain", {"Normal", "Adult", "Open"}, {fountainNormal, fountainAdult, fountainOpen});
|
Option ZorasFountain = Option::U8 ("Zora's Fountain", {"Closed", "Closed as child", "Open"}, {fountainNormal, fountainAdult, fountainOpen});
|
||||||
Option GerudoFortress = Option::U8 ("Gerudo Fortress", {"Normal", "Fast", "Open"}, {gerudoNormal, gerudoFast, gerudoOpen});
|
Option GerudoFortress = Option::U8 ("Gerudo Fortress", {"Normal", "Fast", "Open"}, {gerudoNormal, gerudoFast, gerudoOpen});
|
||||||
Option Bridge = Option::U8 ("Rainbow Bridge", {"Open", "Vanilla", "Stones", "Medallions", "Rewards", "Dungeons", "Tokens"}, {bridgeOpen, bridgeVanilla, bridgeStones, bridgeMedallions, bridgeRewards, bridgeDungeons, bridgeTokens}, OptionCategory::Setting, RAINBOWBRIDGE_VANILLA);
|
Option Bridge = Option::U8 ("Rainbow Bridge", {"Vanilla", "Always open", "Stones", "Medallions", "Dungeon rewards", "Dungeons", "Tokens"}, {bridgeVanilla, bridgeOpen, bridgeStones, bridgeMedallions, bridgeRewards, bridgeDungeons, bridgeTokens}, OptionCategory::Setting, RAINBOWBRIDGE_VANILLA);
|
||||||
Option BridgeStoneCount = Option::U8 ("Stone Count", {NumOpts(0, 3)}, {bridgeStoneCountDesc}, OptionCategory::Setting, 1, true);
|
Option BridgeStoneCount = Option::U8 ("Stone Count", {NumOpts(0, 3)}, {bridgeStoneCountDesc}, OptionCategory::Setting, 1, true);
|
||||||
Option BridgeMedallionCount= Option::U8 ("Medallion Count", {NumOpts(0, 6)}, {bridgeMedallionCountDesc}, OptionCategory::Setting, 1, true);
|
Option BridgeMedallionCount= Option::U8 ("Medallion Count", {NumOpts(0, 6)}, {bridgeMedallionCountDesc}, OptionCategory::Setting, 1, true);
|
||||||
Option BridgeRewardCount = Option::U8 ("Reward Count", {NumOpts(0, 9)}, {bridgeRewardCountDesc}, OptionCategory::Setting, 1, true);
|
Option BridgeRewardCount = Option::U8 ("Reward Count", {NumOpts(0, 9)}, {bridgeRewardCountDesc}, OptionCategory::Setting, 1, true);
|
||||||
@ -153,9 +153,9 @@ namespace Settings {
|
|||||||
|
|
||||||
//Shuffle Settings
|
//Shuffle Settings
|
||||||
Option RandomizeShuffle = Option::Bool("Randomize Settings", {"No","Yes"}, {shuffleRandomize}, OptionCategory::Toggle);
|
Option RandomizeShuffle = Option::Bool("Randomize Settings", {"No","Yes"}, {shuffleRandomize}, OptionCategory::Toggle);
|
||||||
Option ShuffleRewards = Option::U8 ("Shuffle Dungeon Rewards",{"End of Dungeons", "Any Dungeon", "Overworld", "Anywhere"}, {shuffleRewardsEndOfDungeon, shuffleRewardsAnyDungeon, shuffleRewardsOverworld, shuffleRewardsAnywhere});
|
Option ShuffleRewards = Option::U8 ("Shuffle Dungeon Rewards",{"End of dungeons", "Any dungeon", "Overworld", "Anywhere"}, {shuffleRewardsEndOfDungeon, shuffleRewardsAnyDungeon, shuffleRewardsOverworld, shuffleRewardsAnywhere});
|
||||||
Option LinksPocketItem = Option::U8 ("Link's Pocket", {"Dungeon Reward", "Advancement", "Anything", "Nothing"}, {linksPocketDungeonReward, linksPocketAdvancement, linksPocketAnything, linksPocketNothing});
|
Option LinksPocketItem = Option::U8 ("Link's Pocket", {"Dungeon Reward", "Advancement", "Anything", "Nothing"}, {linksPocketDungeonReward, linksPocketAdvancement, linksPocketAnything, linksPocketNothing});
|
||||||
Option ShuffleSongs = Option::U8 ("Shuffle Songs", {"Song Locations", "Dungeon Rewards", "Anywhere"}, {songsSongLocations, songsDungeonRewards, songsAllLocations});
|
Option ShuffleSongs = Option::U8 ("Shuffle Songs", {"Song locations", "Dungeon rewards", "Anywhere"}, {songsSongLocations, songsDungeonRewards, songsAllLocations});
|
||||||
Option Shopsanity = Option::U8 ("Shopsanity", {MultiVecOpts({{"Off"}, NumOpts(0, 4), {"Random"}})}, {shopsOff, shopsZero, shopsOne, shopsTwo, shopsThree, shopsFour, shopsRandom});
|
Option Shopsanity = Option::U8 ("Shopsanity", {MultiVecOpts({{"Off"}, NumOpts(0, 4), {"Random"}})}, {shopsOff, shopsZero, shopsOne, shopsTwo, shopsThree, shopsFour, shopsRandom});
|
||||||
Option Tokensanity = Option::U8 ("Tokensanity", {"Off", "Dungeons", "Overworld", "All Tokens"}, {tokensOff, tokensDungeon, tokensOverworld, tokensAllTokens});
|
Option Tokensanity = Option::U8 ("Tokensanity", {"Off", "Dungeons", "Overworld", "All Tokens"}, {tokensOff, tokensDungeon, tokensOverworld, tokensAllTokens});
|
||||||
Option Scrubsanity = Option::U8 ("Scrub Shuffle", {"Off", "Affordable", "Expensive", "Random Prices"}, {scrubsOff, scrubsAffordable, scrubsExpensive, scrubsRandomPrices});
|
Option Scrubsanity = Option::U8 ("Scrub Shuffle", {"Off", "Affordable", "Expensive", "Random Prices"}, {scrubsOff, scrubsAffordable, scrubsExpensive, scrubsRandomPrices});
|
||||||
@ -163,7 +163,7 @@ namespace Settings {
|
|||||||
Option ShuffleKokiriSword = Option::Bool("Shuffle Kokiri Sword", {"Off", "On"}, {kokiriSwordDesc});
|
Option ShuffleKokiriSword = Option::Bool("Shuffle Kokiri Sword", {"Off", "On"}, {kokiriSwordDesc});
|
||||||
Option ShuffleOcarinas = Option::Bool("Shuffle Ocarinas", {"Off", "On"}, {ocarinasDesc});
|
Option ShuffleOcarinas = Option::Bool("Shuffle Ocarinas", {"Off", "On"}, {ocarinasDesc});
|
||||||
Option ShuffleWeirdEgg = Option::Bool("Shuffle Weird Egg", {"Off", "On"}, {weirdEggDesc});
|
Option ShuffleWeirdEgg = Option::Bool("Shuffle Weird Egg", {"Off", "On"}, {weirdEggDesc});
|
||||||
Option ShuffleGerudoToken = Option::Bool("Shuffle Gerudo Membership Card", {"Off", "On"}, {gerudoTokenDesc});
|
Option ShuffleGerudoToken = Option::Bool("Shuffle Gerudo Card", {"Off", "On"}, {gerudoTokenDesc});
|
||||||
Option ShuffleMagicBeans = Option::Bool("Shuffle Magic Beans", {"Off", "On"}, {magicBeansDesc});
|
Option ShuffleMagicBeans = Option::Bool("Shuffle Magic Beans", {"Off", "On"}, {magicBeansDesc});
|
||||||
Option ShuffleMerchants = Option::U8 ("Shuffle Merchants", {"Off", "On (No Hints)", "On (With Hints)"}, {merchantsDesc, merchantsHintsDesc});
|
Option ShuffleMerchants = Option::U8 ("Shuffle Merchants", {"Off", "On (No Hints)", "On (With Hints)"}, {merchantsDesc, merchantsHintsDesc});
|
||||||
Option ShuffleAdultTradeQuest = Option::Bool("Shuffle Adult Trade", {"Off", "On"}, {adultTradeDesc});
|
Option ShuffleAdultTradeQuest = Option::Bool("Shuffle Adult Trade", {"Off", "On"}, {adultTradeDesc});
|
||||||
@ -189,7 +189,7 @@ namespace Settings {
|
|||||||
|
|
||||||
//Shuffle Dungeon Items
|
//Shuffle Dungeon Items
|
||||||
Option RandomizeDungeon = Option::Bool("Randomize Settings", {"No","Yes"}, {dungeonRandomize}, OptionCategory::Toggle);
|
Option RandomizeDungeon = Option::Bool("Randomize Settings", {"No","Yes"}, {dungeonRandomize}, OptionCategory::Toggle);
|
||||||
Option MapsAndCompasses = Option::U8 ("Maps/Compasses", {"Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere"},
|
Option MapsAndCompasses = Option::U8 ("Start with Maps/Compasses", {"Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere"},
|
||||||
{mapCompassStartWith, mapCompassVanilla, mapCompassOwnDungeon, mapCompassAnyDungeon, mapCompassOverworld, mapCompassAnywhere}, OptionCategory::Setting, MAPSANDCOMPASSES_OWN_DUNGEON);
|
{mapCompassStartWith, mapCompassVanilla, mapCompassOwnDungeon, mapCompassAnyDungeon, mapCompassOverworld, mapCompassAnywhere}, OptionCategory::Setting, MAPSANDCOMPASSES_OWN_DUNGEON);
|
||||||
Option Keysanity = Option::U8 ("Small Keys", {"Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere"},
|
Option Keysanity = Option::U8 ("Small Keys", {"Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere"},
|
||||||
{smallKeyStartWith, smallKeyVanilla, smallKeyOwnDungeon, smallKeyAnyDungeon, smallKeyOverworld, smallKeyAnywhere}, OptionCategory::Setting, KEYSANITY_OWN_DUNGEON);
|
{smallKeyStartWith, smallKeyVanilla, smallKeyOwnDungeon, smallKeyAnyDungeon, smallKeyOverworld, smallKeyAnywhere}, OptionCategory::Setting, KEYSANITY_OWN_DUNGEON);
|
||||||
@ -197,8 +197,8 @@ namespace Settings {
|
|||||||
{gerudoKeysVanilla, gerudoKeysAnyDungeon, gerudoKeysOverworld, gerudoKeysAnywhere});
|
{gerudoKeysVanilla, gerudoKeysAnyDungeon, gerudoKeysOverworld, gerudoKeysAnywhere});
|
||||||
Option BossKeysanity = Option::U8 ("Boss Keys", {"Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere"},
|
Option BossKeysanity = Option::U8 ("Boss Keys", {"Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere"},
|
||||||
{bossKeyStartWith, bossKeyVanilla, bossKeyOwnDungeon, bossKeyAnyDungeon, bossKeyOverworld, bossKeyAnywhere}, OptionCategory::Setting, BOSSKEYSANITY_OWN_DUNGEON);
|
{bossKeyStartWith, bossKeyVanilla, bossKeyOwnDungeon, bossKeyAnyDungeon, bossKeyOverworld, bossKeyAnywhere}, OptionCategory::Setting, BOSSKEYSANITY_OWN_DUNGEON);
|
||||||
Option GanonsBossKey = Option::U8 ("Ganon's Boss Key", {"Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere", "LACS-Vanilla", "LACS-Medallions", "LACS-Stones", "LACS-Rewards", "LACS-Dungeons", "LACS-Tokens"},
|
Option GanonsBossKey = Option::U8 ("Ganon's Boss Key", {"Vanilla", "Own dungeon", "Start with", "Any Dungeon", "Overworld", "Anywhere", "LACS-Vanilla", "LACS-Medallions", "LACS-Stones", "LACS-Rewards", "LACS-Dungeons", "LACS-Tokens"},
|
||||||
{ganonKeyStartWith, ganonKeyVanilla, ganonKeyOwnDungeon, ganonKeyAnyDungeon, ganonKeyOverworld, ganonKeyAnywhere, ganonKeyLACS}, OptionCategory::Setting, GANONSBOSSKEY_OWN_DUNGEON);
|
{ganonKeyVanilla, ganonKeyOwnDungeon, ganonKeyStartWith, ganonKeyAnyDungeon, ganonKeyOverworld, ganonKeyAnywhere, ganonKeyLACS}, OptionCategory::Setting, GANONSBOSSKEY_VANILLA);
|
||||||
uint8_t LACSCondition = 0;
|
uint8_t LACSCondition = 0;
|
||||||
Option LACSMedallionCount = Option::U8 ("Medallion Count", {NumOpts(0, 6)}, {lacsMedallionCountDesc}, OptionCategory::Setting, 1, true);
|
Option LACSMedallionCount = Option::U8 ("Medallion Count", {NumOpts(0, 6)}, {lacsMedallionCountDesc}, OptionCategory::Setting, 1, true);
|
||||||
Option LACSStoneCount = Option::U8 ("Stone Count", {NumOpts(0, 3)}, {lacsStoneCountDesc}, OptionCategory::Setting, 1, true);
|
Option LACSStoneCount = Option::U8 ("Stone Count", {NumOpts(0, 3)}, {lacsStoneCountDesc}, OptionCategory::Setting, 1, true);
|
||||||
@ -430,7 +430,7 @@ namespace Settings {
|
|||||||
Option StartingStickCapacity = Option::U8 ("Deku Stick Capacity", {NumOpts(10, 30, 10, {}, " Deku Sticks")}, {""});
|
Option StartingStickCapacity = Option::U8 ("Deku Stick Capacity", {NumOpts(10, 30, 10, {}, " Deku Sticks")}, {""});
|
||||||
Option StartingNutCapacity = Option::U8 ("Deku Nut Capacity", {NumOpts(20, 40, 10, {}, " Deku Nuts")}, {""});
|
Option StartingNutCapacity = Option::U8 ("Deku Nut Capacity", {NumOpts(20, 40, 10, {}, " Deku Nuts")}, {""});
|
||||||
Option StartingSlingshot = Option::U8 ("Slingshot", {"Off", "Slingshot (30)", "Slingshot (40)", "Slingshot (50)"}, {""});
|
Option StartingSlingshot = Option::U8 ("Slingshot", {"Off", "Slingshot (30)", "Slingshot (40)", "Slingshot (50)"}, {""});
|
||||||
Option StartingOcarina = Option::U8 ("Ocarina", {"Off", "Fairy Ocarina", "Ocarina of Time"}, {""});
|
Option StartingOcarina = Option::U8 ("Start with Fairy Ocarina", {"Off", "Fairy Ocarina", "Ocarina of Time"}, {""});
|
||||||
Option StartingBombBag = Option::U8 ("Bombs", {"Off", "Bomb Bag (20)", "Bomb Bag (30)", "Bomb Bag (40)"}, {""});
|
Option StartingBombBag = Option::U8 ("Bombs", {"Off", "Bomb Bag (20)", "Bomb Bag (30)", "Bomb Bag (40)"}, {""});
|
||||||
Option StartingBombchus = Option::U8 ("Bombchus", {"Off", "20 Bombchus", "50 Bombchus"}, {""});
|
Option StartingBombchus = Option::U8 ("Bombchus", {"Off", "20 Bombchus", "50 Bombchus"}, {""});
|
||||||
Option StartingBoomerang = Option::U8 ("Boomerang", {"Off", "On"}, {""});
|
Option StartingBoomerang = Option::U8 ("Boomerang", {"Off", "On"}, {""});
|
||||||
@ -507,9 +507,9 @@ namespace Settings {
|
|||||||
&StartingPreludeOfLight,
|
&StartingPreludeOfLight,
|
||||||
};
|
};
|
||||||
|
|
||||||
Option StartingKokiriSword = Option::U8 ("Kokiri Sword", {"Off", "On"}, {""});
|
Option StartingKokiriSword = Option::U8 ("Start with Kokiri Sword", {"Off", "On"}, {""});
|
||||||
Option StartingBiggoronSword = Option::U8 ("Biggoron Sword", {"Off", "Giant's Knife", "Biggoron Sword"}, {""});
|
Option StartingBiggoronSword = Option::U8 ("Biggoron Sword", {"Off", "Giant's Knife", "Biggoron Sword"}, {""});
|
||||||
Option StartingDekuShield = Option::U8 ("Deku Shield", {"Off", "On"}, {""});
|
Option StartingDekuShield = Option::U8 ("Start with Deku Shield", {"Off", "On"}, {""});
|
||||||
Option StartingHylianShield = Option::U8 ("Hylian Shield", {"Off", "On"}, {""});
|
Option StartingHylianShield = Option::U8 ("Hylian Shield", {"Off", "On"}, {""});
|
||||||
Option StartingMirrorShield = Option::U8 ("Mirror Shield", {"Off", "On"}, {""});
|
Option StartingMirrorShield = Option::U8 ("Mirror Shield", {"Off", "On"}, {""});
|
||||||
Option StartingGoronTunic = Option::U8 ("Goron Tunic", {"Off", "On"}, {""});
|
Option StartingGoronTunic = Option::U8 ("Goron Tunic", {"Off", "On"}, {""});
|
||||||
@ -2488,6 +2488,7 @@ namespace Settings {
|
|||||||
|
|
||||||
ShuffleRewards.SetSelectedIndex(cvarSettings[RSK_SHUFFLE_DUNGEON_REWARDS]);
|
ShuffleRewards.SetSelectedIndex(cvarSettings[RSK_SHUFFLE_DUNGEON_REWARDS]);
|
||||||
ShuffleSongs.SetSelectedIndex(cvarSettings[RSK_SHUFFLE_SONGS]);
|
ShuffleSongs.SetSelectedIndex(cvarSettings[RSK_SHUFFLE_SONGS]);
|
||||||
|
Tokensanity.SetSelectedIndex(cvarSettings[RSK_SHUFFLE_TOKENS]);
|
||||||
ShuffleKokiriSword.SetSelectedIndex(cvarSettings[RSK_SHUFFLE_KOKIRI_SWORD]);
|
ShuffleKokiriSword.SetSelectedIndex(cvarSettings[RSK_SHUFFLE_KOKIRI_SWORD]);
|
||||||
ShuffleOcarinas.SetSelectedIndex(cvarSettings[RSK_SHUFFLE_OCARINA]);
|
ShuffleOcarinas.SetSelectedIndex(cvarSettings[RSK_SHUFFLE_OCARINA]);
|
||||||
|
|
||||||
@ -2539,6 +2540,8 @@ namespace Settings {
|
|||||||
|
|
||||||
SkipTowerEscape.SetSelectedIndex(cvarSettings[RSK_SKIP_TOWER_ESCAPE]);
|
SkipTowerEscape.SetSelectedIndex(cvarSettings[RSK_SKIP_TOWER_ESCAPE]);
|
||||||
|
|
||||||
|
NightGSExpectSuns.SetSelectedIndex(cvarSettings[RSK_SKULLS_SUNS_SONG]);
|
||||||
|
|
||||||
// RANDOTODO implement chest shuffle with keysanity
|
// RANDOTODO implement chest shuffle with keysanity
|
||||||
// ShuffleChestMinigame.SetSelectedIndex(cvarSettings[RSK_SHUFFLE_CHEST_MINIGAME]);
|
// ShuffleChestMinigame.SetSelectedIndex(cvarSettings[RSK_SHUFFLE_CHEST_MINIGAME]);
|
||||||
|
|
||||||
|
@ -34,8 +34,8 @@ typedef enum {
|
|||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
OPENFOREST_CLOSED,
|
OPENFOREST_CLOSED,
|
||||||
OPENFOREST_OPEN,
|
|
||||||
OPENFOREST_CLOSED_DEKU,
|
OPENFOREST_CLOSED_DEKU,
|
||||||
|
OPENFOREST_OPEN,
|
||||||
} OpenForestSetting;
|
} OpenForestSetting;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@ -44,9 +44,9 @@ typedef enum {
|
|||||||
} OpenKakarikoSetting;
|
} OpenKakarikoSetting;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
OPENDOOROFTIME_OPEN,
|
|
||||||
OPENDOOROFTIME_CLOSED,
|
|
||||||
OPENDOOROFTIME_INTENDED,
|
OPENDOOROFTIME_INTENDED,
|
||||||
|
OPENDOOROFTIME_CLOSED,
|
||||||
|
OPENDOOROFTIME_OPEN,
|
||||||
} OpenDoorOfTimeSetting;
|
} OpenDoorOfTimeSetting;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@ -62,8 +62,8 @@ typedef enum {
|
|||||||
} GerudoFortressSetting;
|
} GerudoFortressSetting;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
RAINBOWBRIDGE_OPEN,
|
|
||||||
RAINBOWBRIDGE_VANILLA,
|
RAINBOWBRIDGE_VANILLA,
|
||||||
|
RAINBOWBRIDGE_OPEN,
|
||||||
RAINBOWBRIDGE_STONES,
|
RAINBOWBRIDGE_STONES,
|
||||||
RAINBOWBRIDGE_MEDALLIONS,
|
RAINBOWBRIDGE_MEDALLIONS,
|
||||||
RAINBOWBRIDGE_REWARDS,
|
RAINBOWBRIDGE_REWARDS,
|
||||||
@ -212,9 +212,9 @@ typedef enum {
|
|||||||
} BossKeysanitySetting;
|
} BossKeysanitySetting;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
GANONSBOSSKEY_START_WITH,
|
|
||||||
GANONSBOSSKEY_VANILLA,
|
GANONSBOSSKEY_VANILLA,
|
||||||
GANONSBOSSKEY_OWN_DUNGEON,
|
GANONSBOSSKEY_OWN_DUNGEON,
|
||||||
|
GANONSBOSSKEY_START_WITH,
|
||||||
GANONSBOSSKEY_ANY_DUNGEON,
|
GANONSBOSSKEY_ANY_DUNGEON,
|
||||||
GANONSBOSSKEY_OVERWORLD,
|
GANONSBOSSKEY_OVERWORLD,
|
||||||
GANONSBOSSKEY_ANYWHERE,
|
GANONSBOSSKEY_ANYWHERE,
|
||||||
|
@ -426,11 +426,11 @@ static void WriteStartingInventory() {
|
|||||||
// doesn't work, and because it'd be bad to set every single possible starting
|
// doesn't work, and because it'd be bad to set every single possible starting
|
||||||
// inventory item as "false" in the json, we're just going to check
|
// inventory item as "false" in the json, we're just going to check
|
||||||
// to see if the name is one of the 3 we're using rn
|
// to see if the name is one of the 3 we're using rn
|
||||||
if(setting->GetName() == "Deku Shield" || setting->GetName() == "Kokiri Sword" || setting->GetName() == "Ocarina") {
|
if (setting->GetName() == "Start with Consumables" ||
|
||||||
jsonData["settings"]["Start With " + setting->GetName()] = setting->GetSelectedOptionText();
|
setting->GetName() == "Start with Max Rupees" ||
|
||||||
}
|
setting->GetName() == "Start with Fairy Ocarina" ||
|
||||||
|
setting->GetName() == "Start with Kokiri Sword" ||
|
||||||
if (setting->GetName() == "Start with Consumables" || setting->GetName() == "Start with Max Rupees") {
|
setting->GetName() == "Start with Deku Shield") {
|
||||||
jsonData["settings"][setting->GetName()] = setting->GetSelectedOptionText();
|
jsonData["settings"][setting->GetName()] = setting->GetSelectedOptionText();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -973,6 +973,7 @@ typedef enum {
|
|||||||
RSK_STARTING_MAPS_COMPASSES, //RANDOTODO more options for this, rn it's just start with or own dungeon
|
RSK_STARTING_MAPS_COMPASSES, //RANDOTODO more options for this, rn it's just start with or own dungeon
|
||||||
RSK_SHUFFLE_DUNGEON_REWARDS,
|
RSK_SHUFFLE_DUNGEON_REWARDS,
|
||||||
RSK_SHUFFLE_SONGS,
|
RSK_SHUFFLE_SONGS,
|
||||||
|
RSK_SHUFFLE_TOKENS,
|
||||||
RSK_SHUFFLE_WEIRD_EGG,
|
RSK_SHUFFLE_WEIRD_EGG,
|
||||||
RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD,
|
RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD,
|
||||||
RSK_ITEM_POOL,
|
RSK_ITEM_POOL,
|
||||||
@ -996,5 +997,6 @@ typedef enum {
|
|||||||
RSK_CUCCO_COUNT,
|
RSK_CUCCO_COUNT,
|
||||||
RSK_BIG_POE_COUNT,
|
RSK_BIG_POE_COUNT,
|
||||||
RSK_SKIP_EPONA_RACE,
|
RSK_SKIP_EPONA_RACE,
|
||||||
RSK_SKIP_TOWER_ESCAPE
|
RSK_SKIP_TOWER_ESCAPE,
|
||||||
|
RSK_SKULLS_SUNS_SONG
|
||||||
} RandomizerSettingKey;
|
} RandomizerSettingKey;
|
||||||
|
@ -1981,6 +1981,10 @@ s32 GiveItemWithoutActor(GlobalContext* globalCtx, s32 getItemId) {
|
|||||||
player->getItemId = getItemId;
|
player->getItemId = getItemId;
|
||||||
player->interactRangeActor = &player->actor;
|
player->interactRangeActor = &player->actor;
|
||||||
player->getItemDirection = player->actor.shape.rot.y;
|
player->getItemDirection = player->actor.shape.rot.y;
|
||||||
|
// Player state 26 = Player is frozen
|
||||||
|
if (player->stateFlags1 & (PLAYER_STATE1_26)) {
|
||||||
|
player->pendingIceTrap = false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1735,6 +1735,20 @@ void Message_OpenText(GlobalContext* globalCtx, u16 textId) {
|
|||||||
} else {
|
} else {
|
||||||
msgCtx->msgLength = font->msgLength = Randomizer_CopyGanonHintText(font->msgBuf, sizeof(font->msgBuf));
|
msgCtx->msgLength = font->msgLength = Randomizer_CopyGanonHintText(font->msgBuf, sizeof(font->msgBuf));
|
||||||
}
|
}
|
||||||
|
} else if (textId == 0xF8 && GET_PLAYER(globalCtx)->getItemId == GI_ICE_TRAP) {
|
||||||
|
switch (gSaveContext.language) {
|
||||||
|
case LANGUAGE_FRA:
|
||||||
|
strcpy(font->msgBuf, "\x08\x06\x50\x05\x43IDIOT\x0E\x20\x02");
|
||||||
|
break;
|
||||||
|
case LANGUAGE_GER:
|
||||||
|
strcpy(font->msgBuf, "\x08\x06\x15 Du bist ein\x05\x43 DUMMKOPF\x05\x40!\x0E\x20\x02");
|
||||||
|
break;
|
||||||
|
case LANGUAGE_ENG:
|
||||||
|
default:
|
||||||
|
strcpy(font->msgBuf, "\x08\x06\x30You are a\x05\x43 FOWL\x05\x40!\x0E\x20\x02");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
msgCtx->msgLength = font->msgLength = strlen(font->msgBuf);
|
||||||
} else {
|
} else {
|
||||||
msgCtx->msgLength = font->msgLength;
|
msgCtx->msgLength = font->msgLength;
|
||||||
char* src = (uintptr_t)font->msgOffset;
|
char* src = (uintptr_t)font->msgOffset;
|
||||||
|
@ -18,6 +18,10 @@ void func_80AFB768(EnSi* this, GlobalContext* globalCtx);
|
|||||||
void func_80AFB89C(EnSi* this, GlobalContext* globalCtx);
|
void func_80AFB89C(EnSi* this, GlobalContext* globalCtx);
|
||||||
void func_80AFB950(EnSi* this, GlobalContext* globalCtx);
|
void func_80AFB950(EnSi* this, GlobalContext* globalCtx);
|
||||||
|
|
||||||
|
s32 textId = 0xB4;
|
||||||
|
s32 giveItemId = ITEM_SKULL_TOKEN;
|
||||||
|
s32 getItemId;
|
||||||
|
|
||||||
static ColliderCylinderInit sCylinderInit = {
|
static ColliderCylinderInit sCylinderInit = {
|
||||||
{
|
{
|
||||||
COLTYPE_NONE,
|
COLTYPE_NONE,
|
||||||
@ -93,11 +97,24 @@ void func_80AFB768(EnSi* this, GlobalContext* globalCtx) {
|
|||||||
|
|
||||||
if (this->collider.base.ocFlags2 & OC2_HIT_PLAYER) {
|
if (this->collider.base.ocFlags2 & OC2_HIT_PLAYER) {
|
||||||
this->collider.base.ocFlags2 &= ~OC2_HIT_PLAYER;
|
this->collider.base.ocFlags2 &= ~OC2_HIT_PLAYER;
|
||||||
Item_Give(globalCtx, ITEM_SKULL_TOKEN);
|
if (gSaveContext.n64ddFlag) {
|
||||||
if (CVar_GetS32("gSkulltulaFreeze", 0) != 1) {
|
getItemId = Randomizer_GetRandomizedItemId(GI_SKULL_TOKEN, this->actor.id, this->actor.params, globalCtx->sceneNum);
|
||||||
|
if (getItemId == GI_ICE_TRAP) {
|
||||||
|
player->getItemId = GI_ICE_TRAP;
|
||||||
|
player->pendingIceTrap = true;
|
||||||
|
textId = 0xF8;
|
||||||
|
} else {
|
||||||
|
textId = sGetItemTable[getItemId - 1].textId;
|
||||||
|
giveItemId = sGetItemTable[getItemId - 1].itemId;
|
||||||
|
Item_Give(globalCtx, giveItemId);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Item_Give(globalCtx, giveItemId);
|
||||||
|
}
|
||||||
|
if ((CVar_GetS32("gSkulltulaFreeze", 0) != 1 || giveItemId != ITEM_SKULL_TOKEN) && getItemId != GI_ICE_TRAP) {
|
||||||
player->actor.freezeTimer = 20;
|
player->actor.freezeTimer = 20;
|
||||||
}
|
}
|
||||||
Message_StartTextbox(globalCtx, 0xB4, NULL);
|
Message_StartTextbox(globalCtx, textId, NULL);
|
||||||
Audio_PlayFanfare(NA_BGM_SMALL_ITEM_GET);
|
Audio_PlayFanfare(NA_BGM_SMALL_ITEM_GET);
|
||||||
this->actionFunc = func_80AFB950;
|
this->actionFunc = func_80AFB950;
|
||||||
} else {
|
} else {
|
||||||
@ -117,8 +134,21 @@ void func_80AFB89C(EnSi* this, GlobalContext* globalCtx) {
|
|||||||
this->actor.shape.rot.y += 0x400;
|
this->actor.shape.rot.y += 0x400;
|
||||||
|
|
||||||
if (!CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_13)) {
|
if (!CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_13)) {
|
||||||
Item_Give(globalCtx, ITEM_SKULL_TOKEN);
|
if (gSaveContext.n64ddFlag) {
|
||||||
Message_StartTextbox(globalCtx, 0xB4, NULL);
|
getItemId = Randomizer_GetRandomizedItemId(GI_SKULL_TOKEN, this->actor.id, this->actor.params, globalCtx->sceneNum);
|
||||||
|
if (getItemId == GI_ICE_TRAP) {
|
||||||
|
player->getItemId = GI_ICE_TRAP;
|
||||||
|
player->pendingIceTrap = true;
|
||||||
|
textId = 0xF8;
|
||||||
|
} else {
|
||||||
|
textId = sGetItemTable[getItemId - 1].textId;
|
||||||
|
giveItemId = sGetItemTable[getItemId - 1].itemId;
|
||||||
|
Item_Give(globalCtx, giveItemId);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Item_Give(globalCtx, giveItemId);
|
||||||
|
}
|
||||||
|
Message_StartTextbox(globalCtx, textId, NULL);
|
||||||
Audio_PlayFanfare(NA_BGM_SMALL_ITEM_GET);
|
Audio_PlayFanfare(NA_BGM_SMALL_ITEM_GET);
|
||||||
this->actionFunc = func_80AFB950;
|
this->actionFunc = func_80AFB950;
|
||||||
}
|
}
|
||||||
@ -127,7 +157,8 @@ void func_80AFB89C(EnSi* this, GlobalContext* globalCtx) {
|
|||||||
void func_80AFB950(EnSi* this, GlobalContext* globalCtx) {
|
void func_80AFB950(EnSi* this, GlobalContext* globalCtx) {
|
||||||
Player* player = GET_PLAYER(globalCtx);
|
Player* player = GET_PLAYER(globalCtx);
|
||||||
|
|
||||||
if (Message_GetState(&globalCtx->msgCtx) != TEXT_STATE_CLOSING && CVar_GetS32("gSkulltulaFreeze", 0) != 1) {
|
if (Message_GetState(&globalCtx->msgCtx) != TEXT_STATE_CLOSING &&
|
||||||
|
((CVar_GetS32("gSkulltulaFreeze", 0) != 1 || giveItemId != ITEM_SKULL_TOKEN) && getItemId != GI_ICE_TRAP)) {
|
||||||
player->actor.freezeTimer = 10;
|
player->actor.freezeTimer = 10;
|
||||||
} else {
|
} else {
|
||||||
SET_GS_FLAGS((this->actor.params & 0x1F00) >> 8, this->actor.params & 0xFF);
|
SET_GS_FLAGS((this->actor.params & 0x1F00) >> 8, this->actor.params & 0xFF);
|
||||||
@ -150,6 +181,19 @@ void EnSi_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
|||||||
if (this->actionFunc != func_80AFB950) {
|
if (this->actionFunc != func_80AFB950) {
|
||||||
func_8002ED80(&this->actor, globalCtx, 0);
|
func_8002ED80(&this->actor, globalCtx, 0);
|
||||||
func_8002EBCC(&this->actor, globalCtx, 0);
|
func_8002EBCC(&this->actor, globalCtx, 0);
|
||||||
|
if (!gSaveContext.n64ddFlag) {
|
||||||
GetItem_Draw(globalCtx, GID_SKULL_TOKEN_2);
|
GetItem_Draw(globalCtx, GID_SKULL_TOKEN_2);
|
||||||
|
} else {
|
||||||
|
getItemId = Randomizer_GetRandomizedItemId(GI_SKULL_TOKEN, this->actor.id, this->actor.params, globalCtx->sceneNum);
|
||||||
|
if (getItemId >= GI_MINUET_OF_FOREST && getItemId <= GI_DOUBLE_DEFENSE) {
|
||||||
|
EnItem00_CustomItemsParticles(&this->actor, globalCtx, getItemId);
|
||||||
|
}
|
||||||
|
if (getItemId != ITEM_SKULL_TOKEN) {
|
||||||
|
f32 mtxScale = 1.5f;
|
||||||
|
Matrix_Scale(mtxScale, mtxScale, mtxScale, MTXMODE_APPLY);
|
||||||
|
}
|
||||||
|
GetItem_Draw(globalCtx, Randomizer_GetItemModelFromId(getItemId));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -613,9 +613,9 @@ void func_80B0D878(EnSw* this, GlobalContext* globalCtx) {
|
|||||||
x = (this->unk_364.x * 10.0f);
|
x = (this->unk_364.x * 10.0f);
|
||||||
y = (this->unk_364.y * 10.0f);
|
y = (this->unk_364.y * 10.0f);
|
||||||
z = (this->unk_364.z * 10.0f);
|
z = (this->unk_364.z * 10.0f);
|
||||||
temp_v0 =
|
temp_v0 = Actor_SpawnAsChild(&globalCtx->actorCtx, &this->actor, globalCtx, ACTOR_EN_SI,
|
||||||
Actor_SpawnAsChild(&globalCtx->actorCtx, &this->actor, globalCtx, ACTOR_EN_SI, this->actor.world.pos.x + x,
|
this->actor.world.pos.x + x, this->actor.world.pos.y + y,
|
||||||
this->actor.world.pos.y + y, this->actor.world.pos.z + z, 0, 0, 0, this->actor.params);
|
this->actor.world.pos.z + z, 0, 0, 0, this->actor.params);
|
||||||
if (temp_v0 != NULL) {
|
if (temp_v0 != NULL) {
|
||||||
temp_v0->parent = NULL;
|
temp_v0->parent = NULL;
|
||||||
}
|
}
|
||||||
|
@ -21,14 +21,6 @@
|
|||||||
#include "objects/object_link_child/object_link_child.h"
|
#include "objects/object_link_child/object_link_child.h"
|
||||||
#include "textures/icon_item_24_static/icon_item_24_static.h"
|
#include "textures/icon_item_24_static/icon_item_24_static.h"
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
/* 0x00 */ u8 itemId;
|
|
||||||
/* 0x01 */ u8 field; // various bit-packed data
|
|
||||||
/* 0x02 */ s8 gi; // defines the draw id and chest opening animation
|
|
||||||
/* 0x03 */ u8 textId;
|
|
||||||
/* 0x04 */ u16 objectId;
|
|
||||||
} GetItemEntry; // size = 0x06
|
|
||||||
|
|
||||||
#define GET_ITEM(itemId, objectId, drawId, textId, field, chestAnim) \
|
#define GET_ITEM(itemId, objectId, drawId, textId, field, chestAnim) \
|
||||||
{ itemId, field, (chestAnim != CHEST_ANIM_SHORT ? 1 : -1) * (drawId + 1), textId, objectId }
|
{ itemId, field, (chestAnim != CHEST_ANIM_SHORT ? 1 : -1) * (drawId + 1), textId, objectId }
|
||||||
|
|
||||||
@ -496,7 +488,7 @@ static u16 D_8085361C[] = {
|
|||||||
NA_SE_VO_LI_FALL_L,
|
NA_SE_VO_LI_FALL_L,
|
||||||
};
|
};
|
||||||
|
|
||||||
static GetItemEntry sGetItemTable[] = {
|
GetItemEntry sGetItemTable[] = {
|
||||||
GET_ITEM(ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT),
|
GET_ITEM(ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT),
|
||||||
GET_ITEM(ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT),
|
GET_ITEM(ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT),
|
||||||
GET_ITEM(ITEM_BOMBCHU, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT),
|
GET_ITEM(ITEM_BOMBCHU, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT),
|
||||||
@ -11013,6 +11005,10 @@ void Player_UpdateCommon(Player* this, GlobalContext* globalCtx, Input* input) {
|
|||||||
|
|
||||||
Collider_ResetQuadAC(globalCtx, &this->shieldQuad.base);
|
Collider_ResetQuadAC(globalCtx, &this->shieldQuad.base);
|
||||||
Collider_ResetQuadAT(globalCtx, &this->shieldQuad.base);
|
Collider_ResetQuadAT(globalCtx, &this->shieldQuad.base);
|
||||||
|
|
||||||
|
if (this->pendingIceTrap) {
|
||||||
|
GiveItemWithoutActor(globalCtx, GI_ICE_TRAP);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static Vec3f D_80854838 = { 0.0f, 0.0f, -30.0f };
|
static Vec3f D_80854838 = { 0.0f, 0.0f, -30.0f };
|
||||||
|
Loading…
Reference in New Issue
Block a user