mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-04-28 13:17:58 +03:00
Merge 2e10900728
into fbbfc07ff1
This commit is contained in:
commit
372d2ff374
3 changed files with 163 additions and 9 deletions
|
@ -79,8 +79,38 @@ typedef enum {
|
||||||
TEXT_SARIAS_SONG_CHANNELING_POWER = 0x016D,
|
TEXT_SARIAS_SONG_CHANNELING_POWER = 0x016D,
|
||||||
TEXT_LAKE_HYLIA_WATER_SWITCH_NAVI = 0x01B3, // 0x1yy for Navi msg range
|
TEXT_LAKE_HYLIA_WATER_SWITCH_NAVI = 0x01B3, // 0x1yy for Navi msg range
|
||||||
TEXT_MASK_SHOP_SIGN = 0x0207,
|
TEXT_MASK_SHOP_SIGN = 0x0207,
|
||||||
|
TEXT_WATERFALL = 0x022D,
|
||||||
TEXT_FROGS_UNDERWATER = 0x022E,
|
TEXT_FROGS_UNDERWATER = 0x022E,
|
||||||
|
TEXT_OUTSIDE_FISHING_POND = 0x023A,
|
||||||
|
TEXT_HF_SIGN = 0x0301,
|
||||||
|
TEXT_HC_GF = 0x0304,
|
||||||
|
TEXT_KAK_SIGN = 0x0305,
|
||||||
|
TEXT_KAK_GY = 0x0306,
|
||||||
|
TEXT_KAK_WELL = 0x0307,
|
||||||
|
TEXT_KAK_DMT = 0x0308,
|
||||||
|
TEXT_DMT_DC = 0x030A,
|
||||||
|
TEXT_GC_SIGN = 0x030B,
|
||||||
|
TEXT_HF_ZR = 0x030C,
|
||||||
|
TEXT_ZD_SIGN = 0x030E,
|
||||||
|
TEXT_ZF_JABU_SIGN = 0x030F,
|
||||||
|
TEXT_KF_LW = 0x0314,
|
||||||
|
TEXT_HF_LON_LON = 0x0315,
|
||||||
|
TEXT_LA_SIGN = 0x0317,
|
||||||
|
TEXT_LA_LAB = 0x0318,
|
||||||
|
TEXT_GV_SIGN = 0x0319,
|
||||||
TEXT_GF_HBA_SIGN = 0x031A,
|
TEXT_GF_HBA_SIGN = 0x031A,
|
||||||
|
TEXT_KF_SHOP_SIGN = 0x031E,
|
||||||
|
TEXT_LINKS_HOUSE_SIGN = 0x031F,
|
||||||
|
TEXT_KOKIRI_EXIT_SIGN = 0x0320,
|
||||||
|
TEXT_DMT_DMC = 0x0323,
|
||||||
|
TEXT_ZD_SHOP_SIGN = 0x0333,
|
||||||
|
TEXT_OUTSIDE_KOKIRI_SIGN = 0x0339,
|
||||||
|
TEXT_OUTSIDE_MARKET_SIGN = 0x033A,
|
||||||
|
TEXT_MIDO_HOUSE_SIGN = 0x033C,
|
||||||
|
TEXT_KNOW_IT_ALL_HOUSE = 0x033D,
|
||||||
|
TEXT_TWINS_HOUSE_SIGN = 0x033E,
|
||||||
|
TEXT_SARIAS_HOUSE_SIGN = 0x033F,
|
||||||
|
TEXT_NO_DIVING_SIGN = 0x0342,
|
||||||
TEXT_LAKE_HYLIA_WATER_SWITCH_SIGN = 0x0346, // 0x3yy for cuttable sign range
|
TEXT_LAKE_HYLIA_WATER_SWITCH_SIGN = 0x0346, // 0x3yy for cuttable sign range
|
||||||
TEXT_WARP_MINUET_OF_FOREST = 0x088D,
|
TEXT_WARP_MINUET_OF_FOREST = 0x088D,
|
||||||
TEXT_WARP_BOLERO_OF_FIRE = 0x088E,
|
TEXT_WARP_BOLERO_OF_FIRE = 0x088E,
|
||||||
|
|
|
@ -26,6 +26,8 @@
|
||||||
#include "Enhancements/audio/AudioCollection.h"
|
#include "Enhancements/audio/AudioCollection.h"
|
||||||
#include "Enhancements/enhancementTypes.h"
|
#include "Enhancements/enhancementTypes.h"
|
||||||
#include "Enhancements/debugconsole.h"
|
#include "Enhancements/debugconsole.h"
|
||||||
|
#include "Enhancements/randomizer/entrance.h"
|
||||||
|
#include "Enhancements/randomizer/location_access.h"
|
||||||
#include "Enhancements/randomizer/randomizer.h"
|
#include "Enhancements/randomizer/randomizer.h"
|
||||||
#include "Enhancements/randomizer/randomizer_entrance_tracker.h"
|
#include "Enhancements/randomizer/randomizer_entrance_tracker.h"
|
||||||
#include "Enhancements/randomizer/randomizer_item_tracker.h"
|
#include "Enhancements/randomizer/randomizer_item_tracker.h"
|
||||||
|
@ -1746,7 +1748,7 @@ int CopyStringToCharBuffer(const std::string& inputStr, char* buffer, const int
|
||||||
// Prevent potential horrible overflow due to implicit conversion of maxBufferSize to an unsigned. Prevents
|
// Prevent potential horrible overflow due to implicit conversion of maxBufferSize to an unsigned. Prevents
|
||||||
// negatives.
|
// negatives.
|
||||||
memset(buffer, 0, std::max<int>(0, maxBufferSize));
|
memset(buffer, 0, std::max<int>(0, maxBufferSize));
|
||||||
// Gaurentee that this value will be greater than 0, regardless of passed variables.
|
// Guarantee that this value will be greater than 0, regardless of passed variables.
|
||||||
const int copiedCharLen = std::min<int>(std::max<int>(0, maxBufferSize - 1), inputStr.length());
|
const int copiedCharLen = std::min<int>(std::max<int>(0, maxBufferSize - 1), inputStr.length());
|
||||||
memcpy(buffer, inputStr.c_str(), copiedCharLen);
|
memcpy(buffer, inputStr.c_str(), copiedCharLen);
|
||||||
return copiedCharLen;
|
return copiedCharLen;
|
||||||
|
@ -2174,6 +2176,129 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) {
|
||||||
s16 actorParams = 0;
|
s16 actorParams = 0;
|
||||||
if (IS_RANDO) {
|
if (IS_RANDO) {
|
||||||
auto ctx = Rando::Context::GetInstance();
|
auto ctx = Rando::Context::GetInstance();
|
||||||
|
if (ctx->GetOption(RSK_SHUFFLE_OVERWORLD_ENTRANCES)) {
|
||||||
|
s16 entrance = -1;
|
||||||
|
switch (textId) {
|
||||||
|
case TEXT_WATERFALL:
|
||||||
|
entrance = ENTR_ZORAS_DOMAIN_ENTRANCE;
|
||||||
|
break;
|
||||||
|
case TEXT_OUTSIDE_FISHING_POND:
|
||||||
|
entrance = ENTR_FISHING_POND_0;
|
||||||
|
break;
|
||||||
|
case TEXT_HF_SIGN:
|
||||||
|
if (gPlayState->sceneNum == SCENE_KAKARIKO_VILLAGE) {
|
||||||
|
entrance = ENTR_HYRULE_FIELD_STAIRS_EXIT;
|
||||||
|
} else if (gPlayState->sceneNum == SCENE_GERUDO_VALLEY) {
|
||||||
|
entrance = ENTR_HYRULE_FIELD_ROCKY_PATH;
|
||||||
|
} else if (gPlayState->sceneNum == SCENE_LAKE_HYLIA) {
|
||||||
|
entrance = ENTR_HYRULE_FIELD_FENCE_EXIT;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TEXT_HC_GF:
|
||||||
|
entrance = ENTR_GREAT_FAIRYS_FOUNTAIN_SPELLS_DINS_HC;
|
||||||
|
break;
|
||||||
|
case TEXT_KAK_SIGN:
|
||||||
|
if (gPlayState->sceneNum == SCENE_HYRULE_FIELD) {
|
||||||
|
entrance = ENTR_KAKARIKO_VILLAGE_FRONT_GATE;
|
||||||
|
} else {
|
||||||
|
entrance = ENTR_KAKARIKO_VILLAGE_GUARD_GATE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TEXT_KAK_GY:
|
||||||
|
entrance = ENTR_GRAVEYARD_ENTRANCE;
|
||||||
|
break;
|
||||||
|
case TEXT_KAK_WELL:
|
||||||
|
entrance = ENTR_BOTTOM_OF_THE_WELL_ENTRANCE;
|
||||||
|
break;
|
||||||
|
case TEXT_KAK_DMT:
|
||||||
|
entrance = ENTR_DEATH_MOUNTAIN_TRAIL_BOTTOM_EXIT;
|
||||||
|
break;
|
||||||
|
case TEXT_DMT_DC:
|
||||||
|
entrance = ENTR_DEATH_MOUNTAIN_CRATER_UPPER_EXIT;
|
||||||
|
break;
|
||||||
|
case TEXT_GC_SIGN:
|
||||||
|
if (gPlayState->sceneNum == SCENE_DEATH_MOUNTAIN_TRAIL) {
|
||||||
|
entrance = ENTR_GORON_CITY_UPPER_EXIT;
|
||||||
|
} else {
|
||||||
|
entrance = ENTR_GORON_CITY_DARUNIA_ROOM_EXIT;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TEXT_HF_ZR:
|
||||||
|
entrance = ENTR_ZORAS_RIVER_WEST_EXIT;
|
||||||
|
break;
|
||||||
|
case TEXT_KF_SHOP_SIGN:
|
||||||
|
entrance = ENTR_KOKIRI_SHOP_0;
|
||||||
|
break;
|
||||||
|
case TEXT_LINKS_HOUSE_SIGN:
|
||||||
|
entrance = ENTR_LINKS_HOUSE_1;
|
||||||
|
break;
|
||||||
|
case TEXT_KOKIRI_EXIT_SIGN:
|
||||||
|
entrance = ENTR_LOST_WOODS_BRIDGE_WEST_EXIT;
|
||||||
|
break;
|
||||||
|
case TEXT_ZD_SIGN:
|
||||||
|
if (gPlayState->sceneNum == SCENE_ZORAS_DOMAIN) {
|
||||||
|
entrance = ENTR_ZORAS_RIVER_WATERFALL_EXIT;
|
||||||
|
} else {
|
||||||
|
entrance = ENTR_ZORAS_DOMAIN_KING_ZORA_EXIT;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TEXT_ZF_JABU_SIGN:
|
||||||
|
entrance = ENTR_JABU_JABU_ENTRANCE;
|
||||||
|
break;
|
||||||
|
case TEXT_KF_LW:
|
||||||
|
entrance = ENTR_LOST_WOODS_SOUTH_EXIT;
|
||||||
|
break;
|
||||||
|
case TEXT_HF_LON_LON:
|
||||||
|
entrance = ENTR_LON_LON_RANCH_ENTRANCE;
|
||||||
|
break;
|
||||||
|
case TEXT_LA_SIGN:
|
||||||
|
entrance = ENTR_LAKE_HYLIA_NORTH_EXIT;
|
||||||
|
break;
|
||||||
|
case TEXT_LA_LAB:
|
||||||
|
entrance = ENTR_LAKESIDE_LABORATORY_0;
|
||||||
|
break;
|
||||||
|
case TEXT_GV_SIGN:
|
||||||
|
if (gPlayState->sceneNum == SCENE_HYRULE_FIELD) {
|
||||||
|
entrance = ENTR_GERUDO_VALLEY_EAST_EXIT;
|
||||||
|
} else {
|
||||||
|
entrance = ENTR_GERUDO_VALLEY_WEST_EXIT;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TEXT_ZD_SHOP_SIGN:
|
||||||
|
entrance = ENTR_ZORA_SHOP_0;
|
||||||
|
break;
|
||||||
|
case TEXT_OUTSIDE_KOKIRI_SIGN:
|
||||||
|
entrance = ENTR_MARKET_ENTRANCE_OUTSIDE_GUARD_HOUSE;
|
||||||
|
break;
|
||||||
|
case TEXT_OUTSIDE_MARKET_SIGN:
|
||||||
|
entrance = ENTR_LON_LON_RANCH_ENTRANCE;
|
||||||
|
break;
|
||||||
|
case TEXT_MIDO_HOUSE_SIGN:
|
||||||
|
entrance = ENTR_MIDOS_HOUSE_0;
|
||||||
|
break;
|
||||||
|
case TEXT_KNOW_IT_ALL_HOUSE:
|
||||||
|
entrance = ENTR_KNOW_IT_ALL_BROS_HOUSE_0;
|
||||||
|
break;
|
||||||
|
case TEXT_TWINS_HOUSE_SIGN:
|
||||||
|
entrance = ENTR_TWINS_HOUSE_0;
|
||||||
|
break;
|
||||||
|
case TEXT_SARIAS_HOUSE_SIGN:
|
||||||
|
entrance = ENTR_SARIAS_HOUSE_0;
|
||||||
|
break;
|
||||||
|
case TEXT_NO_DIVING_SIGN:
|
||||||
|
entrance = ENTR_LAKE_HYLIA_RIVER_EXIT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (entrance != -1) {
|
||||||
|
auto data = GetEntranceData(Entrance_GetOverride(entrance));
|
||||||
|
if (data != nullptr) {
|
||||||
|
font->charTexBuf[0] = (TEXTBOX_TYPE_WOODEN << 4) | TEXTBOX_POS_BOTTOM;
|
||||||
|
return msgCtx->msgLength = font->msgLength = SohUtils::CopyStringToCharBuffer(
|
||||||
|
buffer, data->destination + CustomMessage::MESSAGE_END(), maxBufferSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool nonBeanMerchants = ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL_BUT_BEANS) ||
|
bool nonBeanMerchants = ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL_BUT_BEANS) ||
|
||||||
ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL);
|
ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL);
|
||||||
Player* player = GET_PLAYER(play);
|
Player* player = GET_PLAYER(play);
|
||||||
|
@ -2222,7 +2347,7 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) {
|
||||||
(Randomizer_GetSettingValue(RSK_GOSSIP_STONE_HINTS) == RO_GOSSIP_STONES_NEED_STONE &&
|
(Randomizer_GetSettingValue(RSK_GOSSIP_STONE_HINTS) == RO_GOSSIP_STONES_NEED_STONE &&
|
||||||
CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY)))) {
|
CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY)))) {
|
||||||
|
|
||||||
Actor* stone = GET_PLAYER(play)->talkActor;
|
Actor* stone = player->talkActor;
|
||||||
RandomizerHint stoneHint = RH_NONE;
|
RandomizerHint stoneHint = RH_NONE;
|
||||||
s16 hintParams = stone->params & 0xFF;
|
s16 hintParams = stone->params & 0xFF;
|
||||||
|
|
||||||
|
@ -2249,7 +2374,7 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) {
|
||||||
} else {
|
} else {
|
||||||
messageEntry = ctx->GetHint(stoneHint)->GetHintMessage(MF_AUTO_FORMAT);
|
messageEntry = ctx->GetHint(stoneHint)->GetHintMessage(MF_AUTO_FORMAT);
|
||||||
}
|
}
|
||||||
} else if ((textId == TEXT_ALTAR_CHILD || textId == TEXT_ALTAR_ADULT)) {
|
} else if (textId == TEXT_ALTAR_CHILD || textId == TEXT_ALTAR_ADULT) {
|
||||||
// rando hints at altar
|
// rando hints at altar
|
||||||
messageEntry = (LINK_IS_ADULT) ? ctx->GetHint(RH_ALTAR_ADULT)->GetHintMessage()
|
messageEntry = (LINK_IS_ADULT) ? ctx->GetHint(RH_ALTAR_ADULT)->GetHintMessage()
|
||||||
: ctx->GetHint(RH_ALTAR_CHILD)->GetHintMessage(MF_AUTO_FORMAT);
|
: ctx->GetHint(RH_ALTAR_CHILD)->GetHintMessage(MF_AUTO_FORMAT);
|
||||||
|
@ -2280,7 +2405,7 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) {
|
||||||
(RandomizerInf)((textId - TEXT_SHOP_ITEM_RANDOM_CONFIRM) + RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_1));
|
(RandomizerInf)((textId - TEXT_SHOP_ITEM_RANDOM_CONFIRM) + RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_1));
|
||||||
messageEntry = OTRGlobals::Instance->gRandomizer->GetMerchantMessage(rc, TEXT_SHOP_ITEM_RANDOM_CONFIRM);
|
messageEntry = OTRGlobals::Instance->gRandomizer->GetMerchantMessage(rc, TEXT_SHOP_ITEM_RANDOM_CONFIRM);
|
||||||
} else if (textId == TEXT_SCRUB_RANDOM) {
|
} else if (textId == TEXT_SCRUB_RANDOM) {
|
||||||
EnDns* enDns = (EnDns*)GET_PLAYER(play)->talkActor;
|
EnDns* enDns = (EnDns*)player->talkActor;
|
||||||
RandomizerCheck rc = OTRGlobals::Instance->gRandomizer->GetCheckFromRandomizerInf(
|
RandomizerCheck rc = OTRGlobals::Instance->gRandomizer->GetCheckFromRandomizerInf(
|
||||||
(RandomizerInf)enDns->sohScrubIdentity.randomizerInf);
|
(RandomizerInf)enDns->sohScrubIdentity.randomizerInf);
|
||||||
messageEntry = OTRGlobals::Instance->gRandomizer->GetMerchantMessage(
|
messageEntry = OTRGlobals::Instance->gRandomizer->GetMerchantMessage(
|
||||||
|
@ -2330,7 +2455,7 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) {
|
||||||
messageEntry = CustomMessageManager::Instance->RetrieveMessage(Randomizer::merchantMessageTableID, textId,
|
messageEntry = CustomMessageManager::Instance->RetrieveMessage(Randomizer::merchantMessageTableID, textId,
|
||||||
MF_AUTO_FORMAT);
|
MF_AUTO_FORMAT);
|
||||||
} else if (textId == TEXT_SKULLTULA_PEOPLE_IM_CURSED) {
|
} else if (textId == TEXT_SKULLTULA_PEOPLE_IM_CURSED) {
|
||||||
actorParams = GET_PLAYER(play)->talkActor->params;
|
actorParams = player->talkActor->params;
|
||||||
if (actorParams == 1 && ctx->GetOption(RSK_KAK_10_SKULLS_HINT)) {
|
if (actorParams == 1 && ctx->GetOption(RSK_KAK_10_SKULLS_HINT)) {
|
||||||
messageEntry = ctx->GetHint(RH_KAK_10_SKULLS_HINT)->GetHintMessage(MF_AUTO_FORMAT);
|
messageEntry = ctx->GetHint(RH_KAK_10_SKULLS_HINT)->GetHintMessage(MF_AUTO_FORMAT);
|
||||||
} else if (actorParams == 2 && ctx->GetOption(RSK_KAK_20_SKULLS_HINT)) {
|
} else if (actorParams == 2 && ctx->GetOption(RSK_KAK_20_SKULLS_HINT)) {
|
||||||
|
@ -2480,14 +2605,14 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) {
|
||||||
switch (gSaveContext.language) {
|
switch (gSaveContext.language) {
|
||||||
case LANGUAGE_FRA:
|
case LANGUAGE_FRA:
|
||||||
return msgCtx->msgLength = font->msgLength =
|
return msgCtx->msgLength = font->msgLength =
|
||||||
CopyStringToCharBuffer(messageEntry.GetFrench(MF_RAW), buffer, maxBufferSize);
|
SohUtils::CopyStringToCharBuffer(buffer, messageEntry.GetFrench(MF_RAW), maxBufferSize);
|
||||||
case LANGUAGE_GER:
|
case LANGUAGE_GER:
|
||||||
return msgCtx->msgLength = font->msgLength =
|
return msgCtx->msgLength = font->msgLength =
|
||||||
CopyStringToCharBuffer(messageEntry.GetGerman(MF_RAW), buffer, maxBufferSize);
|
SohUtils::CopyStringToCharBuffer(buffer, messageEntry.GetGerman(MF_RAW), maxBufferSize);
|
||||||
case LANGUAGE_ENG:
|
case LANGUAGE_ENG:
|
||||||
default:
|
default:
|
||||||
return msgCtx->msgLength = font->msgLength =
|
return msgCtx->msgLength = font->msgLength =
|
||||||
CopyStringToCharBuffer(messageEntry.GetEnglish(MF_RAW), buffer, maxBufferSize);
|
SohUtils::CopyStringToCharBuffer(buffer, messageEntry.GetEnglish(MF_RAW), maxBufferSize);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2782,7 +2782,6 @@ void Message_OpenText(PlayState* play, u16 textId) {
|
||||||
gSaveContext.eventInf[0] = gSaveContext.eventInf[1] = gSaveContext.eventInf[2] = gSaveContext.eventInf[3] = 0;
|
gSaveContext.eventInf[0] = gSaveContext.eventInf[1] = gSaveContext.eventInf[2] = gSaveContext.eventInf[3] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// RANDOTODO: Use this for ice trap messages
|
|
||||||
if (CustomMessage_RetrieveIfExists(play)) {
|
if (CustomMessage_RetrieveIfExists(play)) {
|
||||||
osSyncPrintf("Found custom message");
|
osSyncPrintf("Found custom message");
|
||||||
if (gSaveContext.language == LANGUAGE_JPN) {
|
if (gSaveContext.language == LANGUAGE_JPN) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue