Merge branch 'develop-rando' of garrettjoecox.github.com:HarbourMasters/Shipwright into develop-rando-changes

This commit is contained in:
Garrett Cox 2024-04-22 12:53:43 -05:00
commit 7e5854756e
6 changed files with 34 additions and 15 deletions

View File

@ -1466,40 +1466,44 @@ typedef struct {
//special respawns used when voided out without swim to prevent infinite loops //special respawns used when voided out without swim to prevent infinite loops
std::map<s32, SpecialRespawnInfo> swimSpecialRespawnInfo = { std::map<s32, SpecialRespawnInfo> swimSpecialRespawnInfo = {
{ {
0x1D9,//hf to zr in water ENTR_ZORAS_RIVER_3,//hf to zr in water
{ { -1455.443, -20, 1384.826 }, 28761 } { { -1455.443, -20, 1384.826 }, 28761 }
}, },
{ {
0x311,//zr to hf in water ENTR_HYRULE_FIELD_14,//zr to hf in water
{ { 5830.209, -92.16, 3925.911 }, -20025 } { { 5830.209, -92.16, 3925.911 }, -20025 }
}, },
{ {
0x4DA,//zr to lw ENTR_LOST_WOODS_7,//zr to lw
{ { 1978.718, -36.908, -855 }, -16384 } { { 1978.718, -36.908, -855 }, -16384 }
}, },
{ {
0x1DD,//lw to zr ENTR_ZORAS_RIVER_4,//lw to zr
{ { 4082.366, 860.442, -1018.949 }, -32768 } { { 4082.366, 860.442, -1018.949 }, -32768 }
}, },
{ {
0x219,//gv to lh ENTR_LAKE_HYLIA_1,//gv to lh
{ { -3276.416, -1033, 2908.421 }, 11228 } { { -3276.416, -1033, 2908.421 }, 11228 }
}, },
{ {
0x10,//lh to water temple ENTR_WATER_TEMPLE_0,//lh to water temple
{ { -182, 780, 759.5 }, -32768 } { { -182, 780, 759.5 }, -32768 }
}, },
{ {
0x21D,//water temple to lh ENTR_LAKE_HYLIA_2,//water temple to lh
{ { -955.028, -1306.9, 6768.954 }, -32768 } { { -955.028, -1306.9, 6768.954 }, -32768 }
}, },
{ {
0x328,//lh to zd ENTR_ZORAS_DOMAIN_4,//lh to zd
{ { -109.86, 11.396, -9.933 }, -29131 } { { -109.86, 11.396, -9.933 }, -29131 }
}, },
{ {
0x560,//zd to lh ENTR_LAKE_HYLIA_7,//zd to lh
{ { -912, -1326.967, 3391 }, 0 } { { -912, -1326.967, 3391 }, 0 }
},
{
ENTR_GERUDO_VALLEY_1,//caught by gerudos as child
{ { -424, -2051, -74 }, 16384 }
} }
}; };

View File

@ -287,7 +287,7 @@ Text AutoFormatHintText(const Text& unformattedHintText, const std::vector<std::
strings[i] = textStr; strings[i] = textStr;
} }
return {strings[0], strings[1], ""/*spanish*/, strings[2]}; return {strings[0], strings[2], ""/*spanish*/, strings[1]};
} }
std::array<DungeonHintInfo, 10> dungeonInfoData; std::array<DungeonHintInfo, 10> dungeonInfoData;
@ -615,6 +615,7 @@ void CreateGanonAndSheikText() {
} }
ctx->AddHint(RH_GANONDORF_HINT, AutoFormatHintText(ganonHintText), lightArrowLocation[0], HINT_TYPE_STATIC, "Static", lightArrowArea); ctx->AddHint(RH_GANONDORF_HINT, AutoFormatHintText(ganonHintText), lightArrowLocation[0], HINT_TYPE_STATIC, "Static", lightArrowArea);
ctx->AddHint(RH_GANONDORF_NOHINT, AutoFormatHintText(ganonText), lightArrowLocation[0], HINT_TYPE_STATIC, "Static", lightArrowArea);
if (!ctx->GetOption(RSK_TRIAL_COUNT).Is(0)) { if (!ctx->GetOption(RSK_TRIAL_COUNT).Is(0)) {
sheikText = ::Hint(RHT_SHEIK_LIGHT_ARROW_HINT).GetText() + LightArrowAreaText + "%w."; sheikText = ::Hint(RHT_SHEIK_LIGHT_ARROW_HINT).GetText() + LightArrowAreaText + "%w.";
@ -963,7 +964,7 @@ static void DistributeHints(std::vector<uint8_t>& selected, size_t stoneCount, s
for (uint8_t distribution = 0; distribution < distTable.size(); distribution++){ for (uint8_t distribution = 0; distribution < distTable.size(); distribution++){
currentWeight -= distTable[distribution].weight; currentWeight -= distTable[distribution].weight;
if (currentWeight <= 0){ if (currentWeight <= 0){
if (stoneCount >= distTable[distribution].copies){ if (stoneCount >= distTable[distribution].copies || distTable[distribution].copies == 0){
selected[distribution] += 1; selected[distribution] += 1;
stoneCount -= distTable[distribution].copies; stoneCount -= distTable[distribution].copies;
break; break;
@ -1074,8 +1075,9 @@ void CreateStoneHints() {
while(totalStones != 0){ while(totalStones != 0){
totalStones = PlaceHints(selectedHints, distTable); totalStones = PlaceHints(selectedHints, distTable);
if (totalStones != 0){ while (totalStones != 0){
DistributeHints(selectedHints, totalStones, distTable, hintSetting.junkWeight, false); DistributeHints(selectedHints, totalStones, distTable, hintSetting.junkWeight, false);
totalStones = PlaceHints(selectedHints, distTable);
} }
} }

View File

@ -13,13 +13,19 @@ public:
: english(std::move(english_)), : english(std::move(english_)),
french(std::move(french_)), french(std::move(french_)),
spanish(std::move(spanish_)), spanish(std::move(spanish_)),
german(std::move("")) {} german(std::move("")) {
// german defaults to english text until a translation is provided.
german = english;
}
Text(std::string english_, std::string french_, std::string spanish_, std::string german_) Text(std::string english_, std::string french_, std::string spanish_, std::string german_)
: english(std::move(english_)), : english(std::move(english_)),
french(std::move(french_)), french(std::move(french_)),
spanish(std::move(spanish_)), spanish(std::move(spanish_)),
german(std::move(german_)) {} german(std::move(german_)) {}
Text(std::string english_) : english(std::move(english_)), french(std::move("")), spanish(std::move("")), german(std::move("")) {} Text(std::string english_) : english(std::move(english_)), french(std::move("")), spanish(std::move("")), german(std::move("")) {
// default unprovided languages to english text
french = spanish = german = english;
}
const std::string& GetEnglish() const { const std::string& GetEnglish() const {
return english; return english;

View File

@ -47,6 +47,10 @@ const std::string& Hint::GetDistribution() {
void Hint::ResetVariables() { void Hint::ResetVariables() {
hintedLocation = RC_UNKNOWN_CHECK; hintedLocation = RC_UNKNOWN_CHECK;
text = Text{};
distribution = "";
hintedArea = RA_NONE;
hintType = HINT_TYPE_STATIC;
addedToPool = false; addedToPool = false;
} }
} }

View File

@ -256,7 +256,7 @@ void Randomizer::LoadHintMessages() {
CustomMessage(ctx->GetHint(RH_GANONDORF_HINT)->GetText())); CustomMessage(ctx->GetHint(RH_GANONDORF_HINT)->GetText()));
CustomMessageManager::Instance->CreateMessage( CustomMessageManager::Instance->CreateMessage(
Randomizer::hintMessageTableID, TEXT_GANONDORF_NOHINT, Randomizer::hintMessageTableID, TEXT_GANONDORF_NOHINT,
CustomMessage(ctx->GetHint(RH_SARIA)->GetText()));//RANDOTODO: Change to RH_BLANK or remove {{message}} replacment CustomMessage(ctx->GetHint(RH_GANONDORF_NOHINT)->GetText()));
CustomMessageManager::Instance->CreateMessage( CustomMessageManager::Instance->CreateMessage(
Randomizer::hintMessageTableID, TEXT_SHEIK_NEED_HOOK, Randomizer::hintMessageTableID, TEXT_SHEIK_NEED_HOOK,
CustomMessage("{{message}}", "{{message}}", "{{message}}")); CustomMessage("{{message}}", "{{message}}", "{{message}}"));

View File

@ -75,6 +75,9 @@ void func_8006D0EC(PlayState* play, Player* player) {
} else if ((play->sceneNum == gSaveContext.horseData.scene) && } else if ((play->sceneNum == gSaveContext.horseData.scene) &&
(((Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) != 0) && (!IS_RANDO || (((Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) != 0) && (!IS_RANDO ||
(IS_RANDO && CHECK_QUEST_ITEM(QUEST_SONG_EPONA) && (IS_RANDO && CHECK_QUEST_ITEM(QUEST_SONG_EPONA) &&
Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_UP) &&
Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_LEFT) &&
Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_RIGHT) &&
(INV_CONTENT(ITEM_OCARINA_FAIRY) != ITEM_NONE)))) || DREG(1) != 0)) { (INV_CONTENT(ITEM_OCARINA_FAIRY) != ITEM_NONE)))) || DREG(1) != 0)) {
// "Set by existence of horse %d %d %d" // "Set by existence of horse %d %d %d"
osSyncPrintf("馬存在によるセット %d %d %d\n", gSaveContext.horseData.scene, Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED), osSyncPrintf("馬存在によるセット %d %d %d\n", gSaveContext.horseData.scene, Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED),