mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-04-28 21:27:58 +03:00
Compare commits
9 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
fbbfc07ff1 | ||
![]() |
52a3058926 | ||
![]() |
14907a24b0 | ||
![]() |
824c203b97 | ||
![]() |
7e78694aee | ||
![]() |
f37c3aa228 | ||
![]() |
2deea6e105 | ||
![]() |
ef8fa17e7c | ||
![]() |
1e51f1e162 |
28 changed files with 1874 additions and 1776 deletions
|
@ -37,12 +37,13 @@ if (-not (Test-Path $clangFormatFilePath) -or ($currentVersion -ne $requiredVers
|
||||||
$basePath = (Resolve-Path .).Path
|
$basePath = (Resolve-Path .).Path
|
||||||
$files = Get-ChildItem -Path $basePath\soh -Recurse -File `
|
$files = Get-ChildItem -Path $basePath\soh -Recurse -File `
|
||||||
| Where-Object { ($_.Extension -eq '.c' -or $_.Extension -eq '.cpp' -or `
|
| Where-Object { ($_.Extension -eq '.c' -or $_.Extension -eq '.cpp' -or `
|
||||||
($_.Extension -eq '.h' -and `
|
(($_.Extension -eq '.h' -or $_.Extension -eq '.hpp') -and `
|
||||||
(-not ($_.FullName -like "*\soh\src\*" -or $_.FullName -like "*\soh\include\*")))) -and `
|
(-not ($_.FullName -like "*\soh\src\*" -or $_.FullName -like "*\soh\include\*")))) -and `
|
||||||
(-not ($_.FullName -like "*\soh\assets\*")) }
|
(-not ($_.FullName -like "*\soh\assets\*")) }
|
||||||
|
|
||||||
foreach ($file in $files) {
|
for ($i = 0; $i -lt $files.Length; $i++) {
|
||||||
|
$file = $files[$i]
|
||||||
$relativePath = $file.FullName.Substring($basePath.Length + 1)
|
$relativePath = $file.FullName.Substring($basePath.Length + 1)
|
||||||
Write-Host "Formatting $relativePath"
|
Write-Host "Formatting [$($i+1)/$($files.Length)] $relativePath"
|
||||||
.\clang-format.exe -i $file.FullName
|
.\clang-format.exe -i $file.FullName
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,20 +10,20 @@
|
||||||
# -name "*.c" -o -name "*.cpp"
|
# -name "*.c" -o -name "*.cpp"
|
||||||
# find all .c and .cpp files
|
# find all .c and .cpp files
|
||||||
#
|
#
|
||||||
# -name "*.h" ! -path "soh/src/**.h" ! -path "soh/include/**.h"
|
# ( -name "*.h" -o -name "*.hpp" ) ! -path "soh/src/**.h" ! -path "soh/include/**.h"
|
||||||
# find all .h files that aren't in soh/src or soh/include
|
# find all .h and .hpp files that aren't in soh/src or soh/include
|
||||||
# this is because zret decomp only runs clang-format on c files
|
# this is because zret decomp only runs clang-format on c files
|
||||||
# https://github.com/zeldaret/mm/blob/b7e5468ca16315a7e322055eff3d97fe980bbc25/format.py#L182
|
# https://github.com/zeldaret/mm/blob/b7e5468ca16315a7e322055eff3d97fe980bbc25/format.py#L182
|
||||||
#
|
#
|
||||||
# ! -path "soh/assets/*"
|
# ! -path "soh/assets/*"
|
||||||
# asset headers are autogenerated, don't fight them
|
# asset headers are autogenerated, don't fight them
|
||||||
#
|
#
|
||||||
# | sed 's| |\\ |g'
|
# -print0
|
||||||
# pipe the result of find into sed to
|
# separate paths with NUL bytes, avoiding issues with spaces in paths
|
||||||
# ensure all the paths returned by find have spaces escaped
|
|
||||||
#
|
#
|
||||||
# | xargs clang-format-14 -i
|
# | xargs -0 clang-format-14 -i -verbose
|
||||||
# use xargs to take each path we've found
|
# use xargs to take each path we've found
|
||||||
# and pass it as an argument to clang-format
|
# and pass it as an argument to clang-format
|
||||||
|
# verbose to print files being formatted and X out of Y status
|
||||||
|
|
||||||
find soh -type f \( -name "*.c" -o -name "*.cpp" -o \( -name "*.h" ! -path "soh/src/**.h" ! -path "soh/include/**.h" \) \) ! -path "soh/assets/*" | sed 's| |\\ |g' | xargs clang-format-14 -i
|
find soh -type f \( -name "*.c" -o -name "*.cpp" -o \( \( -name "*.h" -o -name "*.hpp" \) ! -path "soh/src/*" ! -path "soh/include/*" \) \) ! -path "soh/assets/*" -print0 | xargs -0 clang-format-14 -i --verbose
|
||||||
|
|
|
@ -119,7 +119,7 @@ AudioCollection::AudioCollection() {
|
||||||
SEQUENCE_MAP_ENTRY(NA_BGM_STAFF_2, "End Credits II", "NA_BGM_STAFF_2", SEQ_BGM_EVENT, false, false), // Previously SEQ_UNUSED, so not shown anywhere?
|
SEQUENCE_MAP_ENTRY(NA_BGM_STAFF_2, "End Credits II", "NA_BGM_STAFF_2", SEQ_BGM_EVENT, false, false), // Previously SEQ_UNUSED, so not shown anywhere?
|
||||||
SEQUENCE_MAP_ENTRY(NA_BGM_STAFF_3, "End Credits III", "NA_BGM_STAFF_3", SEQ_BGM_EVENT, false, false), // Previously SEQ_UNUSED, so not shown anywhere?
|
SEQUENCE_MAP_ENTRY(NA_BGM_STAFF_3, "End Credits III", "NA_BGM_STAFF_3", SEQ_BGM_EVENT, false, false), // Previously SEQ_UNUSED, so not shown anywhere?
|
||||||
SEQUENCE_MAP_ENTRY(NA_BGM_STAFF_4, "End Credits IV", "NA_BGM_STAFF_4", SEQ_BGM_EVENT, false, false), // Previously SEQ_UNUSED, so not shown anywhere?
|
SEQUENCE_MAP_ENTRY(NA_BGM_STAFF_4, "End Credits IV", "NA_BGM_STAFF_4", SEQ_BGM_EVENT, false, false), // Previously SEQ_UNUSED, so not shown anywhere?
|
||||||
|
|
||||||
// SEQ_INSTRUMENT
|
// SEQ_INSTRUMENT
|
||||||
SEQUENCE_MAP_ENTRY(INSTRUMENT_OFFSET + 1, "Ocarina", "OCARINA_INSTRUMENT_DEFAULT", SEQ_INSTRUMENT, true, true),
|
SEQUENCE_MAP_ENTRY(INSTRUMENT_OFFSET + 1, "Ocarina", "OCARINA_INSTRUMENT_DEFAULT", SEQ_INSTRUMENT, true, true),
|
||||||
SEQUENCE_MAP_ENTRY(INSTRUMENT_OFFSET + 2, "Malon", "OCARINA_INSTRUMENT_MALON", SEQ_INSTRUMENT, true, true),
|
SEQUENCE_MAP_ENTRY(INSTRUMENT_OFFSET + 2, "Malon", "OCARINA_INSTRUMENT_MALON", SEQ_INSTRUMENT, true, true),
|
||||||
|
@ -304,7 +304,7 @@ AudioCollection::AudioCollection() {
|
||||||
//SEQUENCE_MAP_ENTRY("Adult Link - Unused Sound 1?","NA_SE_VO_LI_ELECTRIC_SHOCK_LV", "NA_SE_VO_LI_ELECTRIC_SHOCK_LV", SEQ_VOICE, true, false),
|
//SEQUENCE_MAP_ENTRY("Adult Link - Unused Sound 1?","NA_SE_VO_LI_ELECTRIC_SHOCK_LV", "NA_SE_VO_LI_ELECTRIC_SHOCK_LV", SEQ_VOICE, true, false),
|
||||||
//SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_GROAN_KID, "Child Link - Groan (Unused)", "NA_SE_VO_LI_GROAN_KID", SEQ_VOICE, true, false),
|
//SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_GROAN_KID, "Child Link - Groan (Unused)", "NA_SE_VO_LI_GROAN_KID", SEQ_VOICE, true, false),
|
||||||
//SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_ELECTRIC_SHOCK_LV_KID, "Child Link - Unused Sound 1?", "NA_SE_VO_LI_ELECTRIC_SHOCK_LV_KID", SEQ_VOICE, true, false),
|
//SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_ELECTRIC_SHOCK_LV_KID, "Child Link - Unused Sound 1?", "NA_SE_VO_LI_ELECTRIC_SHOCK_LV_KID", SEQ_VOICE, true, false),
|
||||||
|
|
||||||
// Following group of Dummies are all duplicate entries for Navi saying Look/Hey/Watchout
|
// Following group of Dummies are all duplicate entries for Navi saying Look/Hey/Watchout
|
||||||
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x45, "NA_SE_VO_DUMMY_0x45", "NA_SE_VO_DUMMY_0x45", SEQ_VOICE, true, false),
|
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x45, "NA_SE_VO_DUMMY_0x45", "NA_SE_VO_DUMMY_0x45", SEQ_VOICE, true, false),
|
||||||
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x46, "NA_SE_VO_DUMMY_0x46", "NA_SE_VO_DUMMY_0x46", SEQ_VOICE, true, false),
|
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x46, "NA_SE_VO_DUMMY_0x46", "NA_SE_VO_DUMMY_0x46", SEQ_VOICE, true, false),
|
||||||
|
|
|
@ -469,6 +469,27 @@ size_t CustomMessage::FindNEWLINE(std::string& str, size_t lastNewline) const {
|
||||||
return newLine;
|
return newLine;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CustomMessage::AddBreakString(std::string& str, size_t pos, std::string breakString) const {
|
||||||
|
if (str[pos] == ' ' || str[pos] == '&') {
|
||||||
|
str.replace(pos, 1, breakString);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
if (pos <= str.size() - 1) {
|
||||||
|
// If the next char is a new textbox, it has priority, ignore whatever we are replacing it with
|
||||||
|
if (str[pos + 1] == '^') {
|
||||||
|
return false;
|
||||||
|
// otherwise, if it is a line break or space, replace it
|
||||||
|
} else if (str[pos + 1] == ' ' || str[pos + 1] == '&') {
|
||||||
|
str.replace(pos + 1, 1, breakString);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// otherwise insert after it
|
||||||
|
str.insert(pos + 1, breakString);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CustomMessage::AutoFormatString(std::string& str) const {
|
void CustomMessage::AutoFormatString(std::string& str) const {
|
||||||
ReplaceAltarIcons(str);
|
ReplaceAltarIcons(str);
|
||||||
ReplaceColors(str);
|
ReplaceColors(str);
|
||||||
|
@ -481,7 +502,6 @@ void CustomMessage::AutoFormatString(std::string& str) const {
|
||||||
while (lastNewline + lineLength < str.length() || yesNo != std::string::npos) {
|
while (lastNewline + lineLength < str.length() || yesNo != std::string::npos) {
|
||||||
const size_t carrot = str.find('^', lastNewline);
|
const size_t carrot = str.find('^', lastNewline);
|
||||||
const size_t ampersand = str.find('&', lastNewline);
|
const size_t ampersand = str.find('&', lastNewline);
|
||||||
const size_t lastSpace = str.rfind(' ', lastNewline + lineLength);
|
|
||||||
size_t waitForInput = str.find(WAIT_FOR_INPUT()[0], lastNewline);
|
size_t waitForInput = str.find(WAIT_FOR_INPUT()[0], lastNewline);
|
||||||
size_t newLine = FindNEWLINE(str, lastNewline);
|
size_t newLine = FindNEWLINE(str, lastNewline);
|
||||||
if (carrot < waitForInput) {
|
if (carrot < waitForInput) {
|
||||||
|
@ -513,13 +533,25 @@ void CustomMessage::AutoFormatString(std::string& str) const {
|
||||||
lastNewline = waitForInput + 1;
|
lastNewline = waitForInput + 1;
|
||||||
lineCount = 0;
|
lineCount = 0;
|
||||||
// some lines need to be split but don't have spaces, look for periods instead
|
// some lines need to be split but don't have spaces, look for periods instead
|
||||||
} else if (lastSpace == std::string::npos) {
|
|
||||||
const size_t lastPeriod = str.rfind('.', lastNewline + lineLength);
|
|
||||||
str.replace(lastPeriod, 1, ".&");
|
|
||||||
lastNewline = lastPeriod + 2;
|
|
||||||
} else {
|
} else {
|
||||||
str.replace(lastSpace, 1, "&");
|
const size_t lastBreak =
|
||||||
lastNewline = lastSpace + 1;
|
str.find_last_of(static_cast<std::string>(".,!?- "), lastNewline + lineLength);
|
||||||
|
// if none exist or we go backwards, we look forward for a something and allow the overflow
|
||||||
|
if (lastBreak == std::string::npos || lastBreak < lastNewline) {
|
||||||
|
const size_t nextBreak = str.find_first_of(static_cast<std::string>(".,!?- &^"), lastNewline);
|
||||||
|
if (str[nextBreak] == '^') {
|
||||||
|
lastNewline = nextBreak + 1;
|
||||||
|
lineCount = 0; // increments to 1 at the end
|
||||||
|
} else if (str[nextBreak] == '&') {
|
||||||
|
lastNewline = nextBreak + 1;
|
||||||
|
} else {
|
||||||
|
bool isAdded = AddBreakString(str, nextBreak, "&");
|
||||||
|
lastNewline = nextBreak + 1 + isAdded;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
bool isAdded = AddBreakString(str, lastBreak, "&");
|
||||||
|
lastNewline = lastBreak + 1 + isAdded;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
lineCount += 1;
|
lineCount += 1;
|
||||||
} else {
|
} else {
|
||||||
|
@ -536,14 +568,23 @@ void CustomMessage::AutoFormatString(std::string& str) const {
|
||||||
// or move the lastNewline cursor to the next line if a '^' is encountered.
|
// or move the lastNewline cursor to the next line if a '^' is encountered.
|
||||||
} else if (carrot < lastNewline + lineLength) {
|
} else if (carrot < lastNewline + lineLength) {
|
||||||
lastNewline = carrot + 1;
|
lastNewline = carrot + 1;
|
||||||
// some lines need to be split but don't have spaces, look for periods instead
|
// some lines need to be split but don't have spaces, look for punctuation instead
|
||||||
} else if (lastSpace == std::string::npos) {
|
|
||||||
const size_t lastPeriod = str.rfind('.', lastNewline + lineLength);
|
|
||||||
str.replace(lastPeriod, 1, ".^" + colorText);
|
|
||||||
lastNewline = lastPeriod + 2;
|
|
||||||
} else {
|
} else {
|
||||||
str.replace(lastSpace, 1, "^" + colorText);
|
const size_t lastBreak =
|
||||||
lastNewline = lastSpace + 1;
|
str.find_last_of(static_cast<std::string>(".,!?- &"), lastNewline + lineLength);
|
||||||
|
// if none exist or we go backwards, we look forward for a something and allow the overflow
|
||||||
|
if (lastBreak == std::string::npos || lastBreak < lastNewline) {
|
||||||
|
const size_t nextBreak = str.find_first_of(static_cast<std::string>(".,!?- &^"), lastNewline);
|
||||||
|
if (str[nextBreak] == '^') {
|
||||||
|
lastNewline = nextBreak + 1;
|
||||||
|
} else {
|
||||||
|
bool isAdded = AddBreakString(str, nextBreak, "^" + colorText);
|
||||||
|
lastNewline = nextBreak + 1 + isAdded;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
bool isAdded = AddBreakString(str, lastBreak, "^" + colorText);
|
||||||
|
lastNewline = lastBreak + 1 + isAdded;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
lineCount = 1;
|
lineCount = 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -190,6 +190,17 @@ class CustomMessage {
|
||||||
*/
|
*/
|
||||||
size_t FindNEWLINE(std::string& str, size_t lastNewline) const;
|
size_t FindNEWLINE(std::string& str, size_t lastNewline) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Inserts a string into another string, following the rules
|
||||||
|
* of auto-format inserting new lines: spaces and & are replaced while
|
||||||
|
* other chars are appended to.
|
||||||
|
*
|
||||||
|
* @param str the string we are inserting into
|
||||||
|
* @param pos the position in the string to insert
|
||||||
|
* @param breakString the string we are inserting
|
||||||
|
*/
|
||||||
|
bool AddBreakString(std::string& str, size_t pos, std::string breakString) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief formats the string specifically to fit in OoT's
|
* @brief formats the string specifically to fit in OoT's
|
||||||
* textboxes, and use it's formatting.
|
* textboxes, and use it's formatting.
|
||||||
|
|
|
@ -6,28 +6,28 @@
|
||||||
#include "text.hpp"
|
#include "text.hpp"
|
||||||
|
|
||||||
namespace CustomMessages {
|
namespace CustomMessages {
|
||||||
std::string MESSAGE_END();
|
std::string MESSAGE_END();
|
||||||
std::string WAIT_FOR_INPUT();
|
std::string WAIT_FOR_INPUT();
|
||||||
std::string HORIZONTAL_SPACE(uint8_t x);
|
std::string HORIZONTAL_SPACE(uint8_t x);
|
||||||
std::string GO_TO(uint16_t x);
|
std::string GO_TO(uint16_t x);
|
||||||
std::string INSTANT_TEXT_ON();
|
std::string INSTANT_TEXT_ON();
|
||||||
std::string INSTANT_TEXT_OFF();
|
std::string INSTANT_TEXT_OFF();
|
||||||
std::string SHOP_MESSAGE_BOX();
|
std::string SHOP_MESSAGE_BOX();
|
||||||
std::string EVENT_TRIGGER();
|
std::string EVENT_TRIGGER();
|
||||||
std::string DELAY_FRAMES(uint8_t x);
|
std::string DELAY_FRAMES(uint8_t x);
|
||||||
std::string CLOSE_AFTER(uint8_t x);
|
std::string CLOSE_AFTER(uint8_t x);
|
||||||
std::string PLAYER_NAME();
|
std::string PLAYER_NAME();
|
||||||
std::string PLAY_OCARINA();
|
std::string PLAY_OCARINA();
|
||||||
std::string ITEM_OBTAINED(uint8_t x);
|
std::string ITEM_OBTAINED(uint8_t x);
|
||||||
std::string SET_SPEED(uint8_t x);
|
std::string SET_SPEED(uint8_t x);
|
||||||
std::string SKULLTULAS_DESTROYED();
|
std::string SKULLTULAS_DESTROYED();
|
||||||
std::string CURRENT_TIME();
|
std::string CURRENT_TIME();
|
||||||
std::string UNSKIPPABLE();
|
std::string UNSKIPPABLE();
|
||||||
std::string TWO_WAY_CHOICE();
|
std::string TWO_WAY_CHOICE();
|
||||||
std::string NEWLINE();
|
std::string NEWLINE();
|
||||||
std::string COLOR(std::string x);
|
std::string COLOR(std::string x);
|
||||||
std::string CENTER_TEXT();
|
std::string CENTER_TEXT();
|
||||||
std::string IF_NOT_MQ();
|
std::string IF_NOT_MQ();
|
||||||
std::string MQ_ELSE();
|
std::string MQ_ELSE();
|
||||||
std::string MQ_END();
|
std::string MQ_END();
|
||||||
}
|
} // namespace CustomMessages
|
||||||
|
|
|
@ -7,52 +7,52 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
//RANDOTODO merge into Logic once Logic is a class passed to logic funtions
|
// RANDOTODO merge into Logic once Logic is a class passed to logic funtions
|
||||||
struct GetAccessibleLocationsStruct {
|
struct GetAccessibleLocationsStruct {
|
||||||
std::vector<RandomizerCheck> accessibleLocations;
|
std::vector<RandomizerCheck> accessibleLocations;
|
||||||
std::vector<RandomizerRegion> regionPool;
|
std::vector<RandomizerRegion> regionPool;
|
||||||
//Variables for playthrough
|
// Variables for playthrough
|
||||||
int gsCount;
|
int gsCount;
|
||||||
int maxGsCount;
|
int maxGsCount;
|
||||||
std::vector<LogicVal> buyIgnores;
|
std::vector<LogicVal> buyIgnores;
|
||||||
|
|
||||||
//Variables for search
|
// Variables for search
|
||||||
std::vector<Rando::ItemLocation*> newItemLocations;
|
std::vector<Rando::ItemLocation*> newItemLocations;
|
||||||
bool logicUpdated;
|
bool logicUpdated;
|
||||||
bool resetSphere;
|
bool resetSphere;
|
||||||
|
|
||||||
//Variables For Validating Entrences
|
// Variables For Validating Entrences
|
||||||
bool haveTimeAccess;
|
bool haveTimeAccess;
|
||||||
bool foundTempleOfTime;
|
bool foundTempleOfTime;
|
||||||
bool validatedStartingRegion;
|
bool validatedStartingRegion;
|
||||||
bool sphereZeroComplete;
|
bool sphereZeroComplete;
|
||||||
bool timePassChildDay;
|
bool timePassChildDay;
|
||||||
bool timePassChildNight;
|
bool timePassChildNight;
|
||||||
bool timePassAdultDay;
|
bool timePassAdultDay;
|
||||||
bool timePassAdultNight;
|
bool timePassAdultNight;
|
||||||
|
|
||||||
std::vector<RandomizerCheck> itemSphere;
|
std::vector<RandomizerCheck> itemSphere;
|
||||||
std::list<Rando::Entrance*> entranceSphere;
|
std::list<Rando::Entrance*> entranceSphere;
|
||||||
|
|
||||||
bool calculatingAvailableChecks = false;
|
bool calculatingAvailableChecks = false;
|
||||||
|
|
||||||
GetAccessibleLocationsStruct(int _maxGsCount){
|
GetAccessibleLocationsStruct(int _maxGsCount) {
|
||||||
regionPool = {RR_ROOT};
|
regionPool = { RR_ROOT };
|
||||||
gsCount = 0;
|
gsCount = 0;
|
||||||
maxGsCount = _maxGsCount;
|
maxGsCount = _maxGsCount;
|
||||||
logicUpdated = false;
|
logicUpdated = false;
|
||||||
resetSphere = false;
|
resetSphere = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitLoop(){
|
void InitLoop() {
|
||||||
logicUpdated = false;
|
logicUpdated = false;
|
||||||
for (Rando::ItemLocation* location : newItemLocations) {
|
for (Rando::ItemLocation* location : newItemLocations) {
|
||||||
location->ApplyPlacedItemEffect();
|
location->ApplyPlacedItemEffect();
|
||||||
|
}
|
||||||
|
newItemLocations.clear();
|
||||||
|
itemSphere.clear();
|
||||||
|
entranceSphere.clear();
|
||||||
}
|
}
|
||||||
newItemLocations.clear();
|
|
||||||
itemSphere.clear();
|
|
||||||
entranceSphere.clear();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void ClearProgress();
|
void ClearProgress();
|
||||||
|
@ -61,13 +61,15 @@ int Fill();
|
||||||
|
|
||||||
std::vector<RandomizerCheck> GetEmptyLocations(std::vector<RandomizerCheck> allowedLocations);
|
std::vector<RandomizerCheck> GetEmptyLocations(std::vector<RandomizerCheck> allowedLocations);
|
||||||
|
|
||||||
void ProcessRegion(Region* region, GetAccessibleLocationsStruct& gals, RandomizerGet ignore = RG_NONE,
|
void ProcessRegion(Region* region, GetAccessibleLocationsStruct& gals, RandomizerGet ignore = RG_NONE,
|
||||||
bool stopOnBeatable = false, bool addToPlaythrough = false);
|
bool stopOnBeatable = false, bool addToPlaythrough = false);
|
||||||
|
|
||||||
std::vector<RandomizerCheck> ReachabilitySearch(const std::vector<RandomizerCheck>& allowedLocations, RandomizerGet ignore=RG_NONE, bool calculatingAvailableChecks=false);
|
std::vector<RandomizerCheck> ReachabilitySearch(const std::vector<RandomizerCheck>& allowedLocations,
|
||||||
|
RandomizerGet ignore = RG_NONE,
|
||||||
|
bool calculatingAvailableChecks = false);
|
||||||
|
|
||||||
void GeneratePlaythrough();
|
void GeneratePlaythrough();
|
||||||
|
|
||||||
bool CheckBeatable(RandomizerGet ignore=RG_NONE);
|
bool CheckBeatable(RandomizerGet ignore = RG_NONE);
|
||||||
|
|
||||||
void ValidateEntrances(bool checkPoeCollectorAccess, bool checkOtherEntranceAccess);
|
void ValidateEntrances(bool checkPoeCollectorAccess, bool checkOtherEntranceAccess);
|
|
@ -953,7 +953,7 @@ void StaticData::HintTable_Init() {
|
||||||
/*german*/ "Verlorene Wälder",
|
/*german*/ "Verlorene Wälder",
|
||||||
/*french*/ "les Bois Perdus"));
|
/*french*/ "les Bois Perdus"));
|
||||||
// /*spanish*/el Bosque Perdido
|
// /*spanish*/el Bosque Perdido
|
||||||
|
|
||||||
hintTextTable[RHT_SACRED_FOREST_MEADOW] = HintText(CustomMessage("Sacred Forest Meadow",
|
hintTextTable[RHT_SACRED_FOREST_MEADOW] = HintText(CustomMessage("Sacred Forest Meadow",
|
||||||
/*german*/ "Heilige Lichtung",
|
/*german*/ "Heilige Lichtung",
|
||||||
/*french*/ "le Bosquet Sacré"));
|
/*french*/ "le Bosquet Sacré"));
|
||||||
|
@ -998,12 +998,12 @@ void StaticData::HintTable_Init() {
|
||||||
/*german*/ "Zitadelle der Zeit",
|
/*german*/ "Zitadelle der Zeit",
|
||||||
/*french*/ "le Temple du Temps"));
|
/*french*/ "le Temple du Temps"));
|
||||||
// /*spanish*/el Templo del Tiempo
|
// /*spanish*/el Templo del Tiempo
|
||||||
|
|
||||||
hintTextTable[RHT_CASTLE_GROUNDS] = HintText(CustomMessage("the Castle Grounds",
|
hintTextTable[RHT_CASTLE_GROUNDS] = HintText(CustomMessage("the Castle Grounds",
|
||||||
/*german*/ "Anlage von Schloß Hyrule",
|
/*german*/ "Anlage von Schloß Hyrule",
|
||||||
/*french*/ "le Château d'Hyrule"));
|
/*french*/ "le Château d'Hyrule"));
|
||||||
// /*spanish*/
|
// /*spanish*/
|
||||||
|
|
||||||
hintTextTable[RHT_HYRULE_CASTLE] = HintText(CustomMessage("Hyrule Castle",
|
hintTextTable[RHT_HYRULE_CASTLE] = HintText(CustomMessage("Hyrule Castle",
|
||||||
/*german*/ "Schloß Hyrule",
|
/*german*/ "Schloß Hyrule",
|
||||||
/*french*/ "le Château d'Hyrule"));
|
/*french*/ "le Château d'Hyrule"));
|
||||||
|
@ -1018,7 +1018,7 @@ void StaticData::HintTable_Init() {
|
||||||
/*german*/ "Anlage von Schloß Hyrule",
|
/*german*/ "Anlage von Schloß Hyrule",
|
||||||
/*french*/ "le Château d'Hyrule"));
|
/*french*/ "le Château d'Hyrule"));
|
||||||
// /*spanish*/
|
// /*spanish*/
|
||||||
|
|
||||||
hintTextTable[RHT_KAKARIKO_VILLAGE] = HintText(CustomMessage("Kakariko Village",
|
hintTextTable[RHT_KAKARIKO_VILLAGE] = HintText(CustomMessage("Kakariko Village",
|
||||||
/*german*/ "Kakariko",
|
/*german*/ "Kakariko",
|
||||||
/*french*/ "le Village Cocorico"));
|
/*french*/ "le Village Cocorico"));
|
||||||
|
@ -1058,7 +1058,7 @@ void StaticData::HintTable_Init() {
|
||||||
/*german*/ "Zoras Quelle",
|
/*german*/ "Zoras Quelle",
|
||||||
/*french*/ "la Fontaine Zora"));
|
/*french*/ "la Fontaine Zora"));
|
||||||
// /*spanish*/la Fuente Zora
|
// /*spanish*/la Fuente Zora
|
||||||
|
|
||||||
hintTextTable[RHT_LON_LON_RANCH] = HintText(CustomMessage("Lon Lon Ranch",
|
hintTextTable[RHT_LON_LON_RANCH] = HintText(CustomMessage("Lon Lon Ranch",
|
||||||
/*german*/ "Lon Lon-Farm",
|
/*german*/ "Lon Lon-Farm",
|
||||||
/*french*/ "le Ranch Lon Lon"));
|
/*french*/ "le Ranch Lon Lon"));
|
||||||
|
@ -1077,7 +1077,7 @@ void StaticData::HintTable_Init() {
|
||||||
/*german*/ "Midos Haus",
|
/*german*/ "Midos Haus",
|
||||||
/*french*/ "la Cabane du Grand Mido"));
|
/*french*/ "la Cabane du Grand Mido"));
|
||||||
// /*spanish*/la casa de Mido
|
// /*spanish*/la casa de Mido
|
||||||
|
|
||||||
hintTextTable[RHT_KF_SARIAS_HOUSE] = HintText(CustomMessage("Saria's House",
|
hintTextTable[RHT_KF_SARIAS_HOUSE] = HintText(CustomMessage("Saria's House",
|
||||||
/*german*/ "Salias Haus",
|
/*german*/ "Salias Haus",
|
||||||
/*french*/ "la Cabane de Saria"));
|
/*french*/ "la Cabane de Saria"));
|
||||||
|
@ -1097,7 +1097,7 @@ void StaticData::HintTable_Init() {
|
||||||
/*german*/ "der #Kokiri-Laden#",
|
/*german*/ "der #Kokiri-Laden#",
|
||||||
/*french*/ "le #Magasin Kokiri#"));
|
/*french*/ "le #Magasin Kokiri#"));
|
||||||
// /*spanish*/la tienda kokiri
|
// /*spanish*/la tienda kokiri
|
||||||
|
|
||||||
hintTextTable[RHT_LH_LAB] = HintText(CustomMessage("the #Lakeside Laboratory#",
|
hintTextTable[RHT_LH_LAB] = HintText(CustomMessage("the #Lakeside Laboratory#",
|
||||||
/*german*/ "das #Laboratorium des Sees#",
|
/*german*/ "das #Laboratorium des Sees#",
|
||||||
/*french*/ "le #Laboratoire du Lac#"));
|
/*french*/ "le #Laboratoire du Lac#"));
|
||||||
|
@ -1292,7 +1292,7 @@ void StaticData::HintTable_Init() {
|
||||||
/*german*/ "eine solitäre #Kuh#",
|
/*german*/ "eine solitäre #Kuh#",
|
||||||
/*french*/ "la #grotte avec une vache#"));
|
/*french*/ "la #grotte avec une vache#"));
|
||||||
// /*spanish*/una #vaca# solitaria
|
// /*spanish*/una #vaca# solitaria
|
||||||
|
|
||||||
hintTextTable[RHT_HC_STORMS_GROTTO] = HintText(CustomMessage("a sandy grotto with #fragile walls#",
|
hintTextTable[RHT_HC_STORMS_GROTTO] = HintText(CustomMessage("a sandy grotto with #fragile walls#",
|
||||||
/*german*/ "eine sandige Grotte mit #fragilen Wänden#",
|
/*german*/ "eine sandige Grotte mit #fragilen Wänden#",
|
||||||
/*french*/ "la #grotte avec des murs fragiles#"));
|
/*french*/ "la #grotte avec des murs fragiles#"));
|
||||||
|
@ -1337,7 +1337,7 @@ void StaticData::HintTable_Init() {
|
||||||
/*german*/ "eine #generische Grotte#",
|
/*german*/ "eine #generische Grotte#",
|
||||||
/*french*/ "une #grotte avec un trésor#"));
|
/*french*/ "une #grotte avec un trésor#"));
|
||||||
// /*spanish*/una #cueva genérica#
|
// /*spanish*/una #cueva genérica#
|
||||||
|
|
||||||
hintTextTable[RHT_DMC_UPPER_GROTTO] = HintText(CustomMessage("a #generic grotto#",
|
hintTextTable[RHT_DMC_UPPER_GROTTO] = HintText(CustomMessage("a #generic grotto#",
|
||||||
/*german*/ "eine #generische Grotte#",
|
/*german*/ "eine #generische Grotte#",
|
||||||
/*french*/ "une #grotte avec un trésor#"));
|
/*french*/ "une #grotte avec un trésor#"));
|
||||||
|
@ -1362,7 +1362,7 @@ void StaticData::HintTable_Init() {
|
||||||
/*german*/ "eine #generische Grotte#",
|
/*german*/ "eine #generische Grotte#",
|
||||||
/*french*/ "une #grotte avec un trésor#"));
|
/*french*/ "une #grotte avec un trésor#"));
|
||||||
// /*spanish*/una #cueva genérica#
|
// /*spanish*/una #cueva genérica#
|
||||||
|
|
||||||
hintTextTable[RHT_HF_SOUTHEAST_GROTTO] = HintText(CustomMessage("a #generic grotto#",
|
hintTextTable[RHT_HF_SOUTHEAST_GROTTO] = HintText(CustomMessage("a #generic grotto#",
|
||||||
/*german*/ "eine #generische Grotte#",
|
/*german*/ "eine #generische Grotte#",
|
||||||
/*french*/ "une #grotte avec un trésor#"));
|
/*french*/ "une #grotte avec un trésor#"));
|
||||||
|
@ -1458,257 +1458,258 @@ void StaticData::HintTable_Init() {
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK01] = HintText(CustomMessage("They say you must read the names of \"Special Deal\" shop items carefully.",
|
hintTextTable[RHT_JUNK01] = HintText(CustomMessage("They say you must read the names of \"Special Deal\" shop items carefully.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass man die \"Sonderangebote\" im Laden sorgfältig lesen sollte!",
|
||||||
/*french*/ "Selon moi, les \"Offres spéciales\" sont parfois trompeuses... Lisez les attentivement!"));
|
/*french*/ "Selon moi, les \"Offres spéciales\" sont parfois trompeuses... Lisez les attentivement!"));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK02] = HintText(CustomMessage("They say that Zelda is a poor leader.",
|
hintTextTable[RHT_JUNK02] = HintText(CustomMessage("They say that Zelda is a poor leader.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass Zelda eine schlechte Anführerin ist.",
|
||||||
/*french*/ "Selon moi, Zelda ne ferait pas un bon monarque."));
|
/*french*/ "Selon moi, Zelda ne ferait pas un bon monarque."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK03] = HintText(CustomMessage("These hints can be quite useful. This is an exception.",
|
hintTextTable[RHT_JUNK03] = HintText(CustomMessage("These hints can be quite useful. This is an exception.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Die Hinweise können sehr nützlich sein. Dies ist eine Ausnahme.",
|
||||||
/*french*/ "Ces indices sont très utiles, à l'exception de celui-ci."));
|
/*french*/ "Ces indices sont très utiles, à l'exception de celui-ci."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK04] = HintText(CustomMessage("They say that the Lizalfos in Dodongo's Cavern like to play in lava.",
|
hintTextTable[RHT_JUNK04] = HintText(CustomMessage("They say that the Lizalfos in Dodongo's Cavern like to play in lava.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass die Echsalfos in Dodongo's Cavern gerne in der Lava spielen.",
|
||||||
/*french*/ "Selon moi, les Lézalfos de la Caverne Dodongo aiment patauger dans la lave."));
|
/*french*/ "Selon moi, les Lézalfos de la Caverne Dodongo aiment patauger dans la lave."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK05] = HintText(CustomMessage("They say that all the Zora drowned in Wind Waker.",
|
hintTextTable[RHT_JUNK05] = HintText(CustomMessage("They say that all the Zora drowned in Wind Waker.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass alle Zoras in Wind Waker ertrunken sind.",
|
||||||
/*french*/ "Selon moi, les Zoras se sont noyés dans Wind Waker."));
|
/*french*/ "Selon moi, les Zoras se sont noyés dans Wind Waker."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK06] = HintText(CustomMessage("If Gorons eat rocks, does that mean I'm in danger?",
|
hintTextTable[RHT_JUNK06] = HintText(CustomMessage("If Gorons eat rocks, does that mean I'm in danger?",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Goronen essen doch Steine… heißt das, ich sollte mir Sorgen machen?",
|
||||||
/*french*/ "Ne dis pas au Gorons que je suis ici. Ils mangent des roches, tu sais!"));
|
/*french*/ "Ne dis pas au Gorons que je suis ici. Ils mangent des roches, tu sais!"));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK07] = HintText(CustomMessage("'Member when Ganon was a blue pig?^I 'member.",
|
hintTextTable[RHT_JUNK07] = HintText(CustomMessage("'Member when Ganon was a blue pig?^I 'member.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Erinnert ihr euch noch, als Ganon ein blauer Schwein war?^Ich erinnere mich!“",
|
||||||
/*french*/ "Dans mon temps, Ganon était un cochon bleu...^Pff! Les jeunes de nos jours, et leur Ganondorf!"));
|
/*french*/ "Dans mon temps, Ganon était un cochon bleu...^Pff! Les jeunes de nos jours, et leur Ganondorf!"));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK08] = HintText(CustomMessage("One who does not have Triforce can't go in.",
|
hintTextTable[RHT_JUNK08] = HintText(CustomMessage("One who does not have Triforce can't go in.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Jemand, der nicht im Besitz der Triforce ist, kann nicht eintreten!",
|
||||||
/*french*/ "Ceux sans Triforce doivent rebrousser chemin."));
|
/*french*/ "Ceux sans Triforce doivent rebrousser chemin."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK09] = HintText(CustomMessage("Save your future, end the Happy Mask Salesman.",
|
hintTextTable[RHT_JUNK09] = HintText(CustomMessage("Save your future, end the Happy Mask Salesman.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass der Maskenverkäufer aufgehalten werden muss, wenn man eine sichere Zukunft will.",
|
||||||
/*french*/ "Selon moi, tu t'éviteras des jours de malheur si tu vaincs le vendeur de masques..."));
|
/*french*/ "Selon moi, tu t'éviteras des jours de malheur si tu vaincs le vendeur de masques..."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK10] = HintText(CustomMessage("Glitches are a pathway to many abilities some consider to be... Unnatural.",
|
hintTextTable[RHT_JUNK10] = HintText(CustomMessage("Glitches are a pathway to many abilities some consider to be... Unnatural.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Glitches sind ein Weg zu vielen Fähigkeiten, die manche als... unnatürlich betrachten.",
|
||||||
/*french*/ "Les glitchs sont un moyen d'acquérir de nombreuses facultés considérées par certains comme... contraire "));
|
/*french*/ "Les glitchs sont un moyen d'acquérir de nombreuses facultés considérées par certains comme... contraire "));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK11] = HintText(CustomMessage("I'm stoned. Get it?",
|
hintTextTable[RHT_JUNK11] = HintText(CustomMessage("I'm stoned. Get it?",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Ich bin stoned. Verstehst du?",
|
||||||
/*french*/ "Allez, roche, papier, ciseau...&Roche."));
|
/*french*/ "J'ai été pétrifié.&Tu as compris?"));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK12] = HintText(CustomMessage("Hoot! Hoot! Would you like me to repeat that?",
|
hintTextTable[RHT_JUNK12] = HintText(CustomMessage("Hoot! Hoot! Would you like me to repeat that?",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Sei willkommen! Soll ich meine Worte wiederholen?",
|
||||||
/*french*/ "Hou hou! Veux-tu que je répète tout ça?"));
|
/*french*/ "Hou hou! Veux-tu que je répète tout ça?"));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK13] = HintText(CustomMessage("Gorons are stupid. They eat rocks.",
|
hintTextTable[RHT_JUNK13] = HintText(CustomMessage("Gorons are stupid. They eat rocks.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Goronen sind dumm. Sie essen Felsen.",
|
||||||
/*french*/ "Les Gorons sont des vraies têtes dures."));
|
/*french*/ "Les Gorons sont des vraies têtes dures."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK14] = HintText(CustomMessage("They say that Lon Lon Ranch prospered under Ingo.",
|
hintTextTable[RHT_JUNK14] = HintText(CustomMessage("They say that Lon Lon Ranch prospered under Ingo.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass Ingo der Lon-Lon-Farm zu neuem Glanz verholfen hat.",
|
||||||
/*french*/ "Selon moi, le Ranch Lon Lon était plus prospère sous Ingo."));
|
/*french*/ "Selon moi, le Ranch Lon Lon était plus prospère sous Ingo."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK15] = HintText(CustomMessage("They say without the Lens of Truth, the Treasure Chest Mini-Game is a 1 out of 32 chance.^Good luck!",
|
hintTextTable[RHT_JUNK15] = HintText(CustomMessage("They say without the Lens of Truth, the Treasure Chest Mini-Game is a 1 out of 32 chance.^Good luck!",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass du ohne das Auge der Wahrheit beim Schatzkisten-Minispiel nur eine 1-zu-32-Chance hast.^Na dann, viel Glück.",
|
||||||
/*french*/ "Gagner la Chasse-aux-Trésors est 1 chance sur 32.^Bonne chance!"));
|
/*french*/ "Selon moi, les chances de gagner la Chasse-aux-Trésors sans Monocle de Vérité est de 1 chance sur 32.^Bonne chance!"));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK16] = HintText(CustomMessage("Use bombs wisely.",
|
hintTextTable[RHT_JUNK16] = HintText(CustomMessage("Use bombs wisely.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Setze Bomben mit Bedacht ein.",
|
||||||
/*french*/ "Utilise les bombes avec précaution."));
|
/*french*/ "Utilise les bombes avec précaution."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK17] = HintText(CustomMessage("They say that players who select the \"ON\" option for \"MOTION CONTROL\" are the real \"Zelda players!\"",
|
hintTextTable[RHT_JUNK17] = HintText(CustomMessage("They say that players who select the \"ON\" option for \"MOTION CONTROL\" are the real \"Zelda players!\"",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass Spieler, die die Option ‚BEWEGUNGSSTEUERUNG‘ auf ‚EIN‘ stellen, die wahren ‚Zelda-Spieler‘ sind.",
|
||||||
/*french*/ "Selon moi, ceux qui utilisent les contrôles gyroscopiques sont les VRAIS joueurs."));
|
/*french*/ "Selon moi, ceux qui utilisent les contrôles gyroscopiques sont les VRAIS joueurs."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK18] = HintText(CustomMessage("L2P @.",
|
hintTextTable[RHT_JUNK18] = HintText(CustomMessage("L2P @.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Lern zu spielen, @.",
|
||||||
/*french*/ "Arrête de lire les indices et joue comme un grand, @."));
|
/*french*/ "Arrête de lire les indices et joue comme un grand, @."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK19] = HintText(CustomMessage("I bet you'd like to have more bombs.",
|
hintTextTable[RHT_JUNK19] = HintText(CustomMessage("I bet you'd like to have more bombs.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Ich wette, du würdest jetzt gerne mehr Bomben haben.",
|
||||||
/*french*/ "Je parie que tu veux plus de bombes."));
|
/*french*/ "Je parie que tu veux plus de bombes."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK20] = HintText(CustomMessage("When all else fails, use Fire.",
|
hintTextTable[RHT_JUNK20] = HintText(CustomMessage("When all else fails, use Fire.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Wenn alles andere scheitert, benutze Feuer.",
|
||||||
/*french*/ "Quand rien ne marche, utilise le feu."));
|
/*french*/ "Quand rien ne marche, utilise le feu."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK21] = HintText(CustomMessage("Here's a hint, @. Don't be bad.",
|
hintTextTable[RHT_JUNK21] = HintText(CustomMessage("Here's a hint, @. Don't be bad.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Hier ein Tipp, @: Sei nicht so schlecht.",
|
||||||
/*french*/ "Selon moi, la #Triforce# n'est pas dans le jeu... Duh!"));
|
/*french*/ "Selon moi, la #Triforce# n'est pas dans le jeu... Duh!"));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK22] = HintText(CustomMessage("Game Over. Return of Ganon.",
|
hintTextTable[RHT_JUNK22] = HintText(CustomMessage("Game Over. Return of Ganon.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Game Over. Die Rückkehr von Ganon.",
|
||||||
/*french*/ "Partie terminée. RETour de Ganon."));
|
/*french*/ "Partie terminée. RETour de Ganon."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK23] = HintText(CustomMessage("May the way of the Hero lead to the Triforce.",
|
hintTextTable[RHT_JUNK23] = HintText(CustomMessage("May the way of the Hero lead to the Triforce.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Möge der Weg des Helden zur Triforce führen.",
|
||||||
/*french*/ "Que le chemin du héros te mène à la Triforce."));
|
/*french*/ "Que le chemin du héros te mène à la Triforce."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK24] = HintText(CustomMessage("Can't find an item? Scan an Amiibo.",
|
hintTextTable[RHT_JUNK24] = HintText(CustomMessage("Can't find an item? Scan an Amiibo.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Du kannst einen Gegenstand nicht finden? Scanne einen Amiibo.",
|
||||||
/*french*/ "Tu cherches de quoi? Utilise un Amiibo!"));
|
/*french*/ "Tu cherches de quoi? Utilise un Amiibo!"));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK25] = HintText(CustomMessage("They say this game has just a few glitches.",
|
hintTextTable[RHT_JUNK25] = HintText(CustomMessage("They say this game has just a few glitches.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass dieses Spiel nur ein paar Glitches hat.",
|
||||||
/*french*/ "Selon moi, ce jeu est complètement exempt de glitchs."));
|
/*french*/ "Selon moi, ce jeu est complètement exempt de glitchs."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK26] = HintText(CustomMessage("BRRING BRRING This is Ulrira. Wrong number?",
|
hintTextTable[RHT_JUNK26] = HintText(CustomMessage("BRRING BRRING This is Ulrira. Wrong number?",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "BRRING BRRING, hier ist Ulrira. Falsche Nummer.",
|
||||||
/*french*/ "DRING DRING!! Pépé le Ramollo à l'appareil... Quoi? Faux numéro?"));
|
/*french*/ "DRING DRING!! Pépé le Ramollo à l'appareil... Quoi? Faux numéro?"));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK27] = HintText(CustomMessage("Tingle Tingle Kooloo Limpah!",
|
hintTextTable[RHT_JUNK27] = HintText(CustomMessage("Tingle Tingle Kooloo Limpah!",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Tingle Tingle Kuuluu-Limpah!",
|
||||||
/*french*/ "Tingle! Tingle! Kooloolin... Pah!"));
|
/*french*/ "Tingle! Tingle! Kooloolin... Pah!"));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK28] = HintText(CustomMessage("L is real 2401",
|
hintTextTable[RHT_JUNK28] = HintText(CustomMessage("L is real 2401",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "L is real 2401",
|
||||||
/*french*/ "L is real 2401"));
|
/*french*/ "L is real 2401"));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK29] = HintText(CustomMessage("They say that Ganondorf will appear in the next Mario Tennis.",
|
hintTextTable[RHT_JUNK29] = HintText(CustomMessage("They say that Ganondorf will appear in the next Mario Tennis.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass Ganondorf im nächsten Mario Tennis erscheinen wird.",
|
||||||
/*french*/ "Selon moi, Ganondorf sera la nouvelle recrue dans Mario Tennis."));
|
/*french*/ "Selon moi, Ganondorf sera la nouvelle recrue dans Mario Tennis."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK30] = HintText(CustomMessage("They say Medigoron sells the earliest Breath of the Wild demo.",
|
hintTextTable[RHT_JUNK30] = HintText(CustomMessage("They say Medigoron sells the earliest Breath of the Wild demo.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass Medigoron die früheste Breath of the Wild-Demo verkauft.",
|
||||||
/*french*/ "Selon moi, Medigoron vend une démo de #Breath of the Wild#."));
|
/*french*/ "Selon moi, Medigoron vend une démo de #Breath of the Wild#."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK31] = HintText(CustomMessage("Can you move me? I don't get great service here.",
|
hintTextTable[RHT_JUNK31] = HintText(CustomMessage("Can you move me? I don't get great service here.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Kannst du mich bewegen? Der Service hier ist nicht gerade gut.",
|
||||||
/*french*/ "Peux-tu me déplacer? J'ai pas une bonne réception ici."));
|
/*french*/ "Peux-tu me déplacer? J'ai pas une bonne réception ici."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK32] = HintText(CustomMessage("They say if you use Strength on the truck, you can find Mew.",
|
hintTextTable[RHT_JUNK32] = HintText(CustomMessage("They say if you use Strength on the truck, you can find Mew.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass man mit Stärke am Truck Mew finden kann.",
|
||||||
/*french*/ "Selon moi, #Mew# se trouve dessous le camion... Duh!"));
|
/*french*/ "Selon moi, #Mew# se trouve dessous le camion... Duh!"));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK33] = HintText(CustomMessage("I'm a helpful hint Gossip Stone!^See, I'm helping.",
|
hintTextTable[RHT_JUNK33] = HintText(CustomMessage("I'm a helpful hint Gossip Stone!^See, I'm helping.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Ich bin ein hilfreicher Stein!^Siehst du, ich helfe.",
|
||||||
/*french*/ "Salut! Je suis une pierre de bons conseils!^Tiens, tu vois? J'aide bien, hein?"));
|
/*french*/ "Salut! Je suis une pierre de bons conseils!^Tiens, tu vois? J'aide bien, hein?"));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK34] = HintText(CustomMessage("Dear @, please come to the castle. I've baked a cake for you.&Yours truly, Princess Zelda.",
|
hintTextTable[RHT_JUNK34] = HintText(CustomMessage("Dear @, please come to the castle. I've baked a cake for you.&Yours truly, Princess Zelda.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Lieber @, bitte komm ins Schloss. Ich habe einen Kuchen für dich gebacken. Mit freundlichen Grüßen,^Prinzessin Zelda.",
|
||||||
/*french*/ "Mon très cher @:&Viens vite au château, je t'ai préparé&un délicieux gâteau...^À bientôt, Princesse Zelda"));
|
/*french*/ "Mon très cher @:&Viens vite au château, je t'ai préparé&un délicieux gâteau...^À bientôt, Princesse Zelda"));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK35] = HintText(CustomMessage("They say all toasters toast toast.",
|
hintTextTable[RHT_JUNK35] = HintText(CustomMessage("They say all toasters toast toast.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass alle Toaster Toast toasten.",
|
||||||
/*french*/ "Selon moi, les grille-pains grillent du pain."));
|
/*french*/ "Selon moi, les grille-pains grillent du pain."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK36] = HintText(CustomMessage("You thought it would be a useful hint, but it was me, junk hint!",
|
hintTextTable[RHT_JUNK36] = HintText(CustomMessage("You thought it would be a useful hint, but it was me, junk hint!",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Du dachtest, es wäre ein nützlicher Hinweis, aber es war ich, der Müll-Hinweis.",
|
||||||
/*french*/ "Tu t'attendais à un bon indice... Mais c'était moi, un mauvais indice!"));
|
/*french*/ "Tu t'attendais à un bon indice... Mais c'était moi, un mauvais indice!"));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK37] = HintText(CustomMessage("They say that quest guidance can be found at a talking rock.",
|
hintTextTable[RHT_JUNK37] = HintText(CustomMessage("They say that quest guidance can be found at a talking rock.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass man Quest-Hinweise bei einem sprechenden Stein finden kann.",
|
||||||
/*french*/ "Selon moi, des #indices# se trouvent auprès d'une pierre parlante... Duh!"));
|
/*french*/ "Selon moi, des #indices# se trouvent auprès d'une pierre parlante... Duh!"));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK38] = HintText(CustomMessage("They say that the final item you're looking for can be found somewhere in Hyrule.",
|
hintTextTable[RHT_JUNK38] = HintText(CustomMessage("They say that the final item you're looking for can be found somewhere in Hyrule.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass das letzte Item, nach dem du suchst, irgendwo in Hyrule zu finden ist.",
|
||||||
/*french*/ "Selon moi, le #dernier objet# se trouve quelque part dans Hyrule... Duh!"));
|
/*french*/ "Selon moi, le #dernier objet# se trouve quelque part dans Hyrule... Duh!"));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK39] = HintText(CustomMessage("Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.",
|
hintTextTable[RHT_JUNK39] = HintText(CustomMessage("Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.",
|
||||||
/*french*/ "Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip."));
|
/*french*/ "Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip.^Mwip."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK40] = HintText(CustomMessage("They say that Barinade fears Deku Nuts.",
|
hintTextTable[RHT_JUNK40] = HintText(CustomMessage("They say that Barinade fears Deku Nuts.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass Barinade Angst vor Deku-Nüssen hat.",
|
||||||
/*french*/ "Selon moi, Barinade a la frousse des noix Mojo."));
|
/*french*/ "Selon moi, Barinade a la frousse des noix Mojo."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK41] = HintText(CustomMessage("They say that Flare Dancers do not fear Goron-crafted blades.",
|
hintTextTable[RHT_JUNK41] = HintText(CustomMessage("They say that Flare Dancers do not fear Goron-crafted blades.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass Flammenderwische keine Angst vor von Goronen geschmiedeten Klingen haben.",
|
||||||
/*french*/ "Selon moi, le danse-flamme n'a pas peur des armes de Goron."));
|
/*french*/ "Selon moi, le danse-flamme n'a pas peur des armes de Goron."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK42] = HintText(CustomMessage("They say that Morpha is easily trapped in a corner.",
|
hintTextTable[RHT_JUNK42] = HintText(CustomMessage("They say that Morpha is easily trapped in a corner.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass man Morpha ganz leicht in die Ecke drängen kann.",
|
||||||
/*french*/ "Selon moi, Morpha est facilement coincé."));
|
/*french*/ "Selon moi, Morpha est facilement coincé."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK43] = HintText(CustomMessage("They say that Bongo Bongo really hates the cold.",
|
hintTextTable[RHT_JUNK43] = HintText(CustomMessage("They say that Bongo Bongo really hates the cold.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass Bongo Bongo die Kälte wirklich hasst.",
|
||||||
/*french*/ "Selon moi, Bongo Bongo a facilement froid aux doigts."));
|
/*french*/ "Selon moi, Bongo Bongo a facilement froid aux doigts."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK44] = HintText(CustomMessage("They say that your sword is most powerful when you put it away.",
|
hintTextTable[RHT_JUNK44] = HintText(CustomMessage("They say that your sword is most powerful when you put it away.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass dein Schwert am mächtigsten ist, wenn du es wegsteckst.",
|
||||||
/*french*/ "Selon moi, ton épée est à pleine puissance quand tu la rengaines."));
|
/*french*/ "Selon moi, ton épée est à pleine puissance quand tu la rengaines."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK45] = HintText(CustomMessage("They say that bombing the hole Volvagia last flew into can be rewarding.",
|
hintTextTable[RHT_JUNK45] = HintText(CustomMessage("They say that bombing the hole Volvagia last flew into can be rewarding.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass es sich lohnt, das Loch zu bombardieren, in das Volvagia zuletzt geflogen ist.",
|
||||||
/*french*/ "Selon moi, le trou où se creuse Volvagia est vulnérable aux bombes."));
|
/*french*/ "Selon moi, le trou où se creuse Volvagia est vulnérable aux bombes."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK46] = HintText(CustomMessage("They say that invisible ghosts can be exposed with Deku Nuts.",
|
hintTextTable[RHT_JUNK46] = HintText(CustomMessage("They say that invisible ghosts can be exposed with Deku Nuts.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass unsichtbare Geister mit Deku-Nüssen sichtbar gemacht werden können.",
|
||||||
/*french*/ "Selon moi, des fantômes invisibles apparaissent avec des noix Mojo."));
|
/*french*/ "Selon moi, des fantômes invisibles apparaissent avec des noix Mojo."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK47] = HintText(CustomMessage("They say that the real Phantom Ganon is bright and loud.",
|
hintTextTable[RHT_JUNK47] = HintText(CustomMessage("They say that the real Phantom Ganon is bright and loud.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass der wahre Phantom-Ganon durch Helligkeit und Lärm auffällt.",
|
||||||
/*french*/ "Selon moi, le vrai spectre de Ganon est clair et bruyant."));
|
/*french*/ "Selon moi, le vrai spectre de Ganon est clair et bruyant."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK48] = HintText(CustomMessage("They say that walking backwards is very fast.",
|
hintTextTable[RHT_JUNK48] = HintText(CustomMessage("They say that walking backwards is very fast.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass rückwärts laufen sehr schnell ist.",
|
||||||
/*french*/ "Selon moi, tu fais marche arrière très rapidement pour un héros."));
|
/*french*/ "Selon moi, tu fais marche arrière très rapidement pour un héros."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK49] = HintText(CustomMessage("They say Ingo is not very good at planning ahead.",
|
hintTextTable[RHT_JUNK49] = HintText(CustomMessage("They say Ingo is not very good at planning ahead.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass Ingo nicht besonders gut darin ist, vorauszuplanen.",
|
||||||
/*french*/ "Selon moi, Ingo ne fait pas un très bon geôlier."));
|
/*french*/ "Selon moi, Ingo ne fait pas un très bon geôlier."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK50] = HintText(CustomMessage("You found a spiritual Stone! By which I mean, I worship Nayru.",
|
hintTextTable[RHT_JUNK50] = HintText(CustomMessage("You found a spiritual Stone! By which I mean, I worship Nayru.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Du hast einen heiligen Stein gefunden! Also... eigentlich heißt das nur, dass ich Nayru verehre.",
|
||||||
/*french*/ "Vous avez trouvé une Pierre Ancestrale! En effet, je vénère la déesse Hylia."));
|
/*french*/ "Vous avez trouvé une Pierre Ancestrale! En effet, je vénère la déesse Hylia."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK51] = HintText(CustomMessage("Open your eyes.^Open your eyes.^Wake up, @.",
|
hintTextTable[RHT_JUNK51] = HintText(CustomMessage("Open your eyes.^Open your eyes.^Wake up, @.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Öffne deine Augen.^Öffne deine Augen.^Wach auf, @.",
|
||||||
/*french*/ "Réveille-toi...^Réveille-toi.^Ouvre les yeux, @."));
|
/*french*/ "Réveille-toi...^Réveille-toi.^Ouvre les yeux, @."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK52] = HintText(CustomMessage("They say that the Nocturne of Shadow can bring you very close to Ganon.",
|
hintTextTable[RHT_JUNK52] = HintText(CustomMessage("They say that the Nocturne of Shadow can bring you very close to Ganon.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass das Nocturne des Schattens dich Ganon sehr nahe bringen kann.",
|
||||||
/*french*/ "Selon moi, le Nocturne de l'Ombre peut t'amener très près de Ganon."));
|
/*french*/ "Selon moi, le Nocturne de l'Ombre peut t'amener très près de Ganon."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK53] = HintText(CustomMessage("They say that Twinrova always casts the same spell the first three times.",
|
hintTextTable[RHT_JUNK53] = HintText(CustomMessage("They say that Twinrova always casts the same spell the first three times.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass Twinrova die ersten drei Male immer denselben Zauber benutzt.",
|
||||||
/*french*/ "Selon moi, le Duo Maléfique lance toujours les mêmes trois premiers sorts."));
|
/*french*/ "Selon moi, le Duo Maléfique lance toujours les mêmes trois premiers sorts."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK54] = HintText(CustomMessage("They say that the nightly builds may be unstable.",
|
hintTextTable[RHT_JUNK54] = HintText(CustomMessage("They say that the nightly builds may be unstable.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass die \"nightly builds\" instabil sein könnten.",
|
||||||
/*french*/ "Selon moi, les \"nightly builds\" peuvent être instables."));
|
/*french*/ "Selon moi, les \"nightly builds\" peuvent être instables."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK55] = HintText(CustomMessage("You're playing a Randomizer. I'm randomized!^Here's a random number: #4#.&Enjoy your Randomizer!",
|
hintTextTable[RHT_JUNK55] = HintText(CustomMessage("You're playing a Randomizer. I'm randomized!^Here's a random number: #4#.&Enjoy your Randomizer!",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Du spielst einen Randomizer. Ich bin randomisiert!^Hier ist eine zufällige Zahl: #4#.&Viel Spaß mit dem Randomizer!",
|
||||||
/*french*/ "Tu joues à un randomizer. Je suis aléatoire!^Voici un nombre aléatoire: #4#.&Bonne partie!"));
|
/*french*/ "Tu joues à un randomizer. Je suis aléatoire!^Voici un nombre aléatoire: #4#.&Bonne partie!"));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK56] = HintText(CustomMessage("They say Ganondorf's bolts can be reflected with glass or steel.",
|
hintTextTable[RHT_JUNK56] = HintText(CustomMessage("They say Ganondorf's bolts can be reflected with glass or steel.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass man Ganondorfs Blitze mit Glas oder Stahl reflektieren kann.",
|
||||||
/*french*/ "Selon moi, les éclairs de Ganon se reflètent sur l'acier et le verre."));
|
/*french*/ "Selon moi, les éclairs de Ganon se reflètent sur l'acier et le verre."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK57] = HintText(CustomMessage("They say Ganon's tail is vulnerable to nuts, arrows, swords, explosives, hammers...^...sticks, seeds, "
|
hintTextTable[RHT_JUNK57] = HintText(CustomMessage("They say Ganon's tail is vulnerable to nuts, arrows, swords, explosives, hammers...^...sticks, seeds, "
|
||||||
"boomerangs...^...rods, shovels, iron balls, angry bees...",
|
"boomerangs...^...rods, shovels, iron balls, angry bees...",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass Ganons Schwanz verwundbar ist durch Nüsse, Pfeile, Schwerter...^...Sprengstoffe, Hämmer, "
|
||||||
|
"Stöcke...^...Kerne, Bumerangs, Schaufeln, Eisenkugeln, wütende Bienen...",
|
||||||
/*french*/ "Selon moi, la queue de Ganon est vulnérable aux noix, flèches, épées, bombes, marteaux...^...bâtons, "
|
/*french*/ "Selon moi, la queue de Ganon est vulnérable aux noix, flèches, épées, bombes, marteaux...^...bâtons, "
|
||||||
"graines, boomerangs...^...baguettes, pelles, boulets de fer, abeilles enragées..."));
|
"graines, boomerangs...^...baguettes, pelles, boulets de fer, abeilles enragées..."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK58] = HintText(CustomMessage("They say that you're wasting time reading this hint, but I disagree. Talk to me again!",
|
hintTextTable[RHT_JUNK58] = HintText(CustomMessage("They say that you're wasting time reading this hint, but I disagree. Talk to me again!",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass du deine Zeit mit dem Lesen dieses Hinweises verschwendest, aber ich bin anderer Meinung. Sprich noch einmal mit mir.",
|
||||||
/*french*/ "Selon moi... tu sais quoi? Parle-moi encore, et je te le dirai!"));
|
/*french*/ "Selon moi... tu sais quoi? Parle-moi encore, et je te le dirai!"));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK59] = HintText(CustomMessage("They say Ganondorf knows where to find the instrument of his doom.",
|
hintTextTable[RHT_JUNK59] = HintText(CustomMessage("They say Ganondorf knows where to find the instrument of his doom.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass Ganondorf weiß, wo er das Instrument seines Untergangs finden kann.",
|
||||||
/*french*/ "Selon moi, Ganondorf sait où il a caché son point faible."));
|
/*french*/ "Selon moi, Ganondorf sait où il a caché son point faible."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK60] = HintText(CustomMessage("I heard @ is pretty good at Zelda.",
|
hintTextTable[RHT_JUNK60] = HintText(CustomMessage("I heard @ is pretty good at Zelda.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Ich habe gehört, dass @ ziemlich gut in Zelda ist.",
|
||||||
/*french*/ "Apparemment, @ est super bon à Zelda."));
|
/*french*/ "Apparemment, @ est super bon à Zelda."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK61] = HintText(CustomMessage("Hi @, we've been trying to reach you about your car's extended warranty. ",
|
hintTextTable[RHT_JUNK61] = HintText(CustomMessage("Hi @, we've been trying to reach you about your car's extended warranty. ",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Hallo @, wir haben versucht, dich wegen der erweiterten Garantie für dein Auto zu erreichen.",
|
||||||
/*french*/ "Bonjour, @. Vous avez une voiture? Vous savez, nous offrons des assurances abordables..."));
|
/*french*/ "Bonjour, @. Vous avez une voiture? Vous savez, nous offrons des assurances abordables..."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK62] = HintText(CustomMessage("They say that it's actually possible to beat the running man.",
|
hintTextTable[RHT_JUNK62] = HintText(CustomMessage("They say that it's actually possible to beat the running man.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass es tatsächlich möglich ist, den Laufenden Mann zu besiegen.",
|
||||||
/*french*/ "Selon moi, il est possible de battre le coureur.&Donc, tu prends ton arc, et..."));
|
/*french*/ "Selon moi, il est possible de battre le coureur.&Donc, tu prends ton arc, et..."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK63] = HintText(CustomMessage("They say this hint makes more sense in other languages.",
|
hintTextTable[RHT_JUNK63] = HintText(CustomMessage("They say this hint makes more sense in other languages.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass diese Hinweise besser übersetzt werden könnten… na ja, wer hätte das gedacht.",
|
||||||
/*french*/ "Selon moi, ces indices auraient pu être mieux traduits... Duh!"));
|
/*french*/ "Selon moi, ces indices auraient pu être mieux traduits... Duh!"));
|
||||||
|
|
||||||
// ^ Junk hints above are from 3drando
|
// ^ Junk hints above are from 3drando
|
||||||
|
@ -1717,46 +1718,43 @@ void StaticData::HintTable_Init() {
|
||||||
// Please keep hints to stuff related to ship directly, or to Nintendo/Zelda related stuff.
|
// Please keep hints to stuff related to ship directly, or to Nintendo/Zelda related stuff.
|
||||||
// And nothing that's super obscure that no one's going to understand.
|
// And nothing that's super obscure that no one's going to understand.
|
||||||
|
|
||||||
#define HINT_TEXT_NEEDS_TRANSLATION_FR \
|
|
||||||
"Erreur 0x69a504:&Traduction manquante^C'est de la faute à Purple Hato!&J'vous jure!"
|
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK64] = HintText(CustomMessage("They say Greg is special.",
|
hintTextTable[RHT_JUNK64] = HintText(CustomMessage("They say Greg is special.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass Greg etwas Besonderes ist.",
|
||||||
/*french*/ "Selon moi, Greg est spécial."));
|
/*french*/ "Selon moi, Greg est spécial."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK65] = HintText(CustomMessage("They say the longer the Goron's neck, the wiser they are.",
|
hintTextTable[RHT_JUNK65] = HintText(CustomMessage("They say the longer the Goron's neck, the wiser they are.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass ein Gorone umso weiser wird, je länger sein Hals ist.",
|
||||||
/*french*/ "Selon moi, plus le cou des Gorons est long, plus ils sont sage." ));
|
/*french*/ "Selon moi, plus le cou des Gorons est long, plus ils sont sage." ));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK66] = HintText(CustomMessage("They say this ship is what all true gamers strive for.",
|
hintTextTable[RHT_JUNK66] = HintText(CustomMessage("They say this ship is what all true gamers strive for.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass dieses \"ship\" das ist, wonach alle echten Gamer streben.",
|
||||||
/*french*/ "Selon moi, cette version du port est ce pour quoi luttent tous les vrais gamers."));
|
/*french*/ "Selon moi, cette version du port est ce pour quoi luttent tous les vrais gamers."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK67] = HintText(CustomMessage("They say that Glowsticks can be found in the Raveyard.",
|
hintTextTable[RHT_JUNK67] = HintText(CustomMessage("They say that Glowsticks can be found in the Raveyard.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass Leuchtstäbe auf dem Partyfriedhof zu finden sind.",
|
||||||
/*french*/ "Selon moi, on peut trouver des Bâtons Lumineux sur le dancefloor du cimetière."));
|
/*french*/ "Selon moi, on peut trouver des Bâtons Lumineux sur le dancefloor du cimetière."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK68] = HintText(CustomMessage("They say @'s uncle works for Nintendo.",
|
hintTextTable[RHT_JUNK68] = HintText(CustomMessage("They say @'s uncle works for Nintendo.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass @'s Onkel bei Nintendo arbeitet.",
|
||||||
/*french*/ "Selon moi, l'oncle de @ travaille chez Nintendo."));
|
/*french*/ "Selon moi, l'oncle de @ travaille chez Nintendo."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK69] = HintText(CustomMessage("They say pulling all gravestones in the graveyard leads to something magical.",
|
hintTextTable[RHT_JUNK69] = HintText(CustomMessage("They say pulling all gravestones in the graveyard leads to something magical.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass das Ziehen aller Grabsteine auf dem Friedhof zu etwas Magischem führt.",
|
||||||
/*french*/ "Selon moi, tirer toutes les tombes du Cimetière déclanche un truc magique."));
|
/*french*/ "Selon moi, tirer toutes les tombes du Cimetière déclanche un truc magique."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK70] = HintText(CustomMessage("They say holding L while pausing makes you win the game.",
|
hintTextTable[RHT_JUNK70] = HintText(CustomMessage("They say holding L while pausing makes you win the game.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich, dass man das Spiel gewinnt, wenn man L gedrückt hält, während man pausiert.",
|
||||||
/*french*/ "Selon moi, maintenir L pendant que vous appuyez sur START vous permet de terminer le jeu."));
|
/*french*/ "Selon moi, maintenir L pendant que vous appuyez sur START vous permet de terminer le jeu."));
|
||||||
|
|
||||||
hintTextTable[RHT_JUNK71] = HintText(CustomMessage("They say @'s body is ready.",
|
hintTextTable[RHT_JUNK71] = HintText(CustomMessage("They say @'s body is ready.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Man erzählt sich... nein weisst du was, ich hab keine lust mehr.",
|
||||||
/*french*/ "Selon moi, ce junk hint ne se traduirait pas bien en français."));
|
/*french*/ "Selon moi, ce junk hint ne se traduirait pas bien en français."));
|
||||||
|
|
||||||
/*--------------------------
|
/*--------------------------
|
||||||
| DUNGEON HINT TEXT |
|
| DUNGEON HINT TEXT |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
|
|
||||||
|
|
||||||
hintTextTable[RHT_DEKU_TREE] = HintText(CustomMessage("Deku Tree",
|
hintTextTable[RHT_DEKU_TREE] = HintText(CustomMessage("Deku Tree",
|
||||||
/*german*/ "Deku-Baum",
|
/*german*/ "Deku-Baum",
|
||||||
/*french*/ "l'Arbre Mojo"),
|
/*french*/ "l'Arbre Mojo"),
|
||||||
|
@ -2000,13 +1998,13 @@ void StaticData::HintTable_Init() {
|
||||||
// /*spanish*/$8Los sabios aguardarán a que el héroe&obtenga #[[d]] |medallón|medallones|#.^
|
// /*spanish*/$8Los sabios aguardarán a que el héroe&obtenga #[[d]] |medallón|medallones|#.^
|
||||||
|
|
||||||
hintTextTable[RHT_BRIDGE_REWARDS_HINT] = HintText(CustomMessage("$CThe awakened ones will await for the Hero to collect #[[d]]# |#Spiritual Stone# or #Medallion#|"
|
hintTextTable[RHT_BRIDGE_REWARDS_HINT] = HintText(CustomMessage("$CThe awakened ones will await for the Hero to collect #[[d]]# |#Spiritual Stone# or #Medallion#|"
|
||||||
"#Spiritual Stones# and #Medallions#|.^",
|
"#Spiritual Stones# and #Medallions#|.^",
|
||||||
/*german*/ "$CDie Weisen werden darauf warten, daß der Held #[[d]]# |#Heiligen Stein# oder #Amulett#|"
|
/*german*/ "$CDie Weisen werden darauf warten, daß der Held #[[d]]# |#Heiligen Stein# oder #Amulett#|"
|
||||||
"#Heilige Steine# oder #Amulette#| sammelt.^",
|
"#Heilige Steine# oder #Amulette#| sammelt.^",
|
||||||
/*french*/ "$CLes êtres de sagesse attendront le héros muni de #[[d]]# |#Pierre Ancestrale# ou #Médaillon#"
|
/*french*/ "$CLes êtres de sagesse attendront le héros muni de #[[d]]# |#Pierre Ancestrale# ou #Médaillon#"
|
||||||
"|#Pierres Ancestrales# ou #Médaillons#|.^",
|
"|#Pierres Ancestrales# ou #Médaillons#|.^",
|
||||||
{QM_YELLOW, QM_BLUE, QM_RED}));
|
{QM_YELLOW, QM_BLUE, QM_RED}));
|
||||||
// /*spanish*/$CLos sabios aguardarán a que el héroe obtenga #[[d]]# |#piedra espiritual# o #medallón#|
|
// /*spanish*/$CLos sabios aguardarán a que el héroe obtenga #[[d]]# |#piedra espiritual# o #medallón#|
|
||||||
//#piedras espirtuales# y #medallones#|.^
|
//#piedras espirtuales# y #medallones#|.^
|
||||||
|
|
||||||
hintTextTable[RHT_BRIDGE_DUNGEONS_HINT] = HintText(CustomMessage("$mThe awakened ones will await for the Hero to conquer #[[d]] Dungeon||s|#.^",
|
hintTextTable[RHT_BRIDGE_DUNGEONS_HINT] = HintText(CustomMessage("$mThe awakened ones will await for the Hero to conquer #[[d]] Dungeon||s|#.^",
|
||||||
|
@ -2022,6 +2020,8 @@ void StaticData::HintTable_Init() {
|
||||||
// /*spanish*/$sLos sabios aguardarán a que el héroe obtenga #[[d]] símbolo||s| de skulltula dorada#.^
|
// /*spanish*/$sLos sabios aguardarán a que el héroe obtenga #[[d]] símbolo||s| de skulltula dorada#.^
|
||||||
|
|
||||||
hintTextTable[RHT_BRIDGE_GREG_HINT] = HintText(CustomMessage("$gThe awakened ones will await for the Hero to find #Greg#.^",
|
hintTextTable[RHT_BRIDGE_GREG_HINT] = HintText(CustomMessage("$gThe awakened ones will await for the Hero to find #Greg#.^",
|
||||||
|
/*german*/ "$gDie Erwachten werden darauf warten, dass der Held #Greg# findet.^",
|
||||||
|
/*french*/ "$gLes êtres de sagesse attendront le héros muni de #Greg#.^",
|
||||||
{QM_GREEN}));
|
{QM_GREEN}));
|
||||||
|
|
||||||
|
|
||||||
|
@ -2188,7 +2188,7 @@ void StaticData::HintTable_Init() {
|
||||||
/*german*/ "$cJener auf dem Weg des Helden...&Nehme er seine Okarina zur Hand und&spiele hier die Hymne der Zeit.",
|
/*german*/ "$cJener auf dem Weg des Helden...&Nehme er seine Okarina zur Hand und&spiele hier die Hymne der Zeit.",
|
||||||
/*french*/ "$cÀ celui qui a quête de devenir&héros...&Portez l'Ocarina et jouez&le chant du temps."));
|
/*french*/ "$cÀ celui qui a quête de devenir&héros...&Portez l'Ocarina et jouez&le chant du temps."));
|
||||||
// /*spanish*/$cPara aquel que se convierta en el héroe...&Tome la ocarina y&entone la Canción del Tiempo.
|
// /*spanish*/$cPara aquel que se convierta en el héroe...&Tome la ocarina y&entone la Canción del Tiempo.
|
||||||
|
|
||||||
hintTextTable[RHT_CHILD_ALTAR_TEXT_END_DOTCLOSED] = HintText(CustomMessage("$iYe who may become a Hero...&Offer the spiritual stones and&play the Song of Time.",
|
hintTextTable[RHT_CHILD_ALTAR_TEXT_END_DOTCLOSED] = HintText(CustomMessage("$iYe who may become a Hero...&Offer the spiritual stones and&play the Song of Time.",
|
||||||
/*german*/ "$iJener mit den drei Heiligen Steinen&nehme seine Okarina zur Hand und&spiele hier die Hymne der Zeit.",
|
/*german*/ "$iJener mit den drei Heiligen Steinen&nehme seine Okarina zur Hand und&spiele hier die Hymne der Zeit.",
|
||||||
/*french*/ "$iÀ celui qui a quête de devenir&héros... Présentez les Pierres&Ancestrales et jouez&le chant du temps."));
|
/*french*/ "$iÀ celui qui a quête de devenir&héros... Présentez les Pierres&Ancestrales et jouez&le chant du temps."));
|
||||||
|
@ -2214,19 +2214,20 @@ void StaticData::HintTable_Init() {
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
|
|
||||||
hintTextTable[RHT_GANONDORF_HINT_LA_ONLY] = HintText(CustomMessage("Ha ha ha... You'll never beat me by reflecting my lightning bolts and unleashing the arrows from #[[1]]#!",
|
hintTextTable[RHT_GANONDORF_HINT_LA_ONLY] = HintText(CustomMessage("Ha ha ha... You'll never beat me by reflecting my lightning bolts and unleashing the arrows from #[[1]]#!",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Ha ha ha... Du wirst mich nie besiegen, indem du meine Blitze zurückschlägst und die Pfeile aus #[[1]]# entfesselts!",
|
||||||
/*french*/ "Ha ha ha... Pauvre fou! Tu ne pourras jamais me vaincre sans les flèches que j'ai cachées dans #[[1]]#!",
|
/*french*/ "Ha ha ha... Pauvre fou! Tu ne pourras jamais me vaincre sans les flèches que j'ai cachées dans #[[1]]#!",
|
||||||
{QM_RED}));
|
{QM_RED}));
|
||||||
// /*spanish*/Ja, ja, ja... Nunca me derrotarás reflejando mis esferas de energía y desplegando la flecha de luz de #[[1]]#!
|
// /*spanish*/Ja, ja, ja... Nunca me derrotarás reflejando mis esferas de energía y desplegando la flecha de luz de #[[1]]#!
|
||||||
|
|
||||||
hintTextTable[RHT_GANONDORF_HINT_MS_ONLY] = HintText(CustomMessage("Ha ha ha... You'll never defeat me, drop a castle on me and finish me off with the sacred blade from #[[2]]#!",
|
hintTextTable[RHT_GANONDORF_HINT_MS_ONLY] = HintText(CustomMessage("Ha ha ha... You'll never defeat me, drop a castle on me and finish me off with the sacred blade from #[[2]]#!",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Ha ha ha... Du wirst mich nie besiegen, wirf ein Schloss auf mich und beende mich mit dem heiligen Schwert von #[[2]]#!",
|
||||||
/*french*/ "Ha ha ha... Pauvre fou! Tu ne pourras jamais me vaincre sans l'Épée de Légende cachée dans #[[2]]#!",
|
/*french*/ "Ha ha ha... Pauvre fou! Tu ne pourras jamais me vaincre sans l'Épée de Légende cachée dans #[[2]]#!",
|
||||||
{QM_RED}));
|
{QM_RED}));
|
||||||
|
|
||||||
hintTextTable[RHT_GANONDORF_HINT_LA_AND_MS] = HintText(CustomMessage("Ha ha ha... You'll never beat me by reflecting my lightning bolts and unleashing the arrows from #[[1]]#!"
|
hintTextTable[RHT_GANONDORF_HINT_LA_AND_MS] = HintText(CustomMessage("Ha ha ha... You'll never beat me by reflecting my lightning bolts and unleashing the arrows from #[[1]]#!"
|
||||||
"^And even if you do, you'll never find the legendary blade hidden in #[[2]]#!",
|
"^And even if you do, you'll never find the legendary blade hidden in #[[2]]#!",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Ha ha ha... Du wirst mich nie besiegen, indem du meine Blitze zurückschlägst und die Pfeile aus #[[1]]# entfesselts!"
|
||||||
|
"^Und selbst wenn du es tust, wirst du nie das legendäre Schwert finden, das in #[[2]]# versteckt ist!",
|
||||||
/*french*/ "Ha ha ha... Pauvre fou! Tu ne pourras jamais me vaincre sans les flèches que j'ai cachées dans #[[1]]#!"
|
/*french*/ "Ha ha ha... Pauvre fou! Tu ne pourras jamais me vaincre sans les flèches que j'ai cachées dans #[[1]]#!"
|
||||||
"^Et même si tu les trouves, tu ne touveras jamais l'Épée de Légende cachée dans #[[2]]#!",
|
"^Et même si tu les trouves, tu ne touveras jamais l'Épée de Légende cachée dans #[[2]]#!",
|
||||||
{QM_RED, QM_RED}));
|
{QM_RED, QM_RED}));
|
||||||
|
@ -2234,34 +2235,38 @@ void StaticData::HintTable_Init() {
|
||||||
// ^E incluso si lo haces, nunca encontrarás la espada legendaria escondida en #[[2]]#!
|
// ^E incluso si lo haces, nunca encontrarás la espada legendaria escondida en #[[2]]#!
|
||||||
|
|
||||||
hintTextTable[RHT_SHEIK_HINT_LA_ONLY] = HintText(CustomMessage("I overheard Ganondorf say that he misplaced the #Light Arrows# in #[[1]]#.",
|
hintTextTable[RHT_SHEIK_HINT_LA_ONLY] = HintText(CustomMessage("I overheard Ganondorf say that he misplaced the #Light Arrows# in #[[1]]#.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Ich habe Ganondorf sagen hören, dass er die #Lichtpfeile# in #[[1]]# verlegt hat.",
|
||||||
/*french*/ "J'ai entendu dire que Ganondorf aurait caché les #Flèches de Lumière# dans #[[1]]#.",
|
/*french*/ "J'ai entendu dire que Ganondorf aurait caché les #Flèches de Lumière# dans #[[1]]#.",
|
||||||
{QM_YELLOW, QM_RED}));
|
{QM_YELLOW, QM_RED}));
|
||||||
|
|
||||||
hintTextTable[RHT_DAMPE_DIARY] = HintText(CustomMessage("Whoever reads this, please enter #[[1]]#. I will let you have my #stretching, shrinking keepsake#.^I'm waiting for you.&--Dampé",
|
hintTextTable[RHT_DAMPE_DIARY] = HintText(CustomMessage("Whoever reads this, please enter #[[1]]#. I will let you have my #stretching, shrinking keepsake#.^I'm waiting for you.&--Dampé",
|
||||||
/*german*/ "Wer immer dies liest, der möge folgenden Ort aufsuchen: #[[1]]#. Ihm gebe ich meinen #dehnenden, schrumpfenden Schatz#.^Ich warte!&Boris", //RANDOTODO color in whatever refers to the hookshot
|
/*german*/ "Wer immer dies liest, der möge folgenden Ort aufsuchen: #[[1]]#. Ihm gebe ich meinen #dehnenden, schrumpfenden Schatz#.^Ich warte!&Boris",
|
||||||
/*french*/ "Toi qui lit ce journal, rends-toi dans #[[1]]#. Et peut-être auras-tu droit à mon précieux #trésor#.^Je t'attends...&--Igor",
|
/*french*/ "Toi qui lit ce journal, rends-toi dans #[[1]]#. Et peut-être auras-tu droit à mon précieux #trésor#.^Je t'attends...&--Igor",
|
||||||
{QM_RED, QM_RED}));
|
{QM_RED, QM_RED}));
|
||||||
|
|
||||||
hintTextTable[RHT_GREG_HINT] = HintText(CustomMessage("By the way, if you're interested, I saw the shiniest #Green Rupee# somewhere in #[[1]]#.^It's said to have #mysterious powers#...^But then, it could just be another regular rupee.&Oh well.",
|
hintTextTable[RHT_GREG_HINT] = HintText(CustomMessage("By the way, if you're interested, I saw the shiniest #Green Rupee# somewhere in #[[1]]#.^It's said to have #mysterious powers#...^But then, it could just be another regular rupee.&Oh well.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Übrigens, falls es dich interessiert, ich habe irgendwo in #[[1]]# den glänzendsten #Grünen Rubinen# gesehen.^Es soll #mysteriöse Kräfte# haben...^Aber na ja, es könnte auch einfach nur ein normaler Rubin sein. Tja",
|
||||||
/*french*/ "Au fait, si ça t'intéresse, j'ai aperçu le plus éclatant des #Rubis Verts# quelque part à #[[1]]#. On dit qu'il possède des pouvoirs mystérieux... Mais bon, ça pourrait juste être un autre rubis ordinaire.",//RANDOTODO color in mysterious powers
|
/*french*/ "Au fait, si ça t'intéresse, j'ai aperçu le plus éclatant des #Rubis Verts# quelque part à #[[1]]#.^On dit qu'il possède des #pouvoirs mystérieux#...^Mais bon, ça pourrait juste être un autre rubis ordinaire.",
|
||||||
{QM_GREEN, QM_RED, QM_RED}));
|
{QM_GREEN, QM_RED, QM_RED}));
|
||||||
|
|
||||||
hintTextTable[RHT_SARIA_TALK_HINT] = HintText(CustomMessage("Did you feel the #surge of magic# recently? A mysterious bird told me it came from #[[1]]#.^You should check that place out, @!",
|
hintTextTable[RHT_SARIA_TALK_HINT] = HintText(CustomMessage("Did you feel the #surge of magic# recently? A mysterious bird told me it came from #[[1]]#.^You should check that place out, @!",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Hast du kürzlich den #Magieschub# gespürt? Ein geheimnisvoller Vogel hat mir erzählt, dass er aus #[[1]]# kam.^Du solltest dir diesen Ort mal ansehen, @!",
|
||||||
/*french*/ "As-tu récemment ressenti une vague de #puissance magique#? Un mystérieux hibou m'a dit qu'elle provenait du #[[1]]#. Tu devrais aller y jeter un coup d'oeil, @!",
|
/*french*/ "As-tu récemment ressenti une vague de #puissance magique#? Un mystérieux hibou m'a dit qu'elle provenait du #[[1]]#.^Tu devrais aller y jeter un coup d'oeil, @!",
|
||||||
{QM_GREEN, QM_RED}));
|
{QM_GREEN, QM_RED}));
|
||||||
|
|
||||||
hintTextTable[RHT_SARIA_SONG_HINT] = HintText(CustomMessage("Did you feel the #surge of magic# recently? A mysterious bird told me it came from #[[1]]#.^You should check that place out, @!\x0B",
|
hintTextTable[RHT_SARIA_SONG_HINT] = HintText(CustomMessage("Did you feel the #surge of magic# recently? A mysterious bird told me it came from #[[1]]#.^You should check that place out, @!\x0B",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Hast du kürzlich den #Magieschub# gespürt? Ein geheimnisvoller Vogel hat mir erzählt, dass er aus #[[1]]# kam.^Du solltest dir diesen Ort mal ansehen, @!\x0B",
|
||||||
/*french*/ "As-tu récemment ressenti une vague de #puissance magique#? Un mystérieux hibou m'a dit qu'elle provenait du #[[1]]#. Tu devrais aller y jeter un coup d'oeil, @!\x0B",
|
/*french*/ "As-tu récemment ressenti une vague de #puissance magique#? Un mystérieux hibou m'a dit qu'elle provenait du #[[1]]#.^Tu devrais aller y jeter un coup d'oeil, @!\x0B",
|
||||||
{QM_GREEN, QM_RED}, {}, TEXTBOX_TYPE_BLUE));
|
{QM_GREEN, QM_RED}, {}, TEXTBOX_TYPE_BLUE));
|
||||||
|
|
||||||
hintTextTable[RHT_LOACH_HINT] = HintText(CustomMessage("What?^You wanna know about the&%rHyrule Loach%w?^It's a big fish, but it's so rare that I'll give my %g[[1]]%w to anyone who catches it. Seriously!",
|
hintTextTable[RHT_LOACH_HINT] = HintText(CustomMessage("What?^You wanna know about the&%rHyrule Loach%w?^It's a big fish, but it's so rare that I'll give my %g[[1]]%w to anyone who catches it. Seriously!",
|
||||||
{QM_RED}));
|
/*german*/ "Was?^Du willst was über den&%rHyrule-Schleicher%w wissen?^Das ist ein riesiger Fisch, aber&so selten, dass ich jedem mein&%g[[1]]%w gebe, der ihn fängt.&Im Ernst."
|
||||||
|
/*french*/ "Quoi?&Tu veux en savoir plus sur le&%rBrochet d'Hyrule%w?^C'est un gros poisson, mais il&est si rare que je donne&%g[[1]]%w&à celui qui l'attrape.^Ouais, j'suis sérieux!",
|
||||||
|
{QM_RED}));
|
||||||
|
|
||||||
hintTextTable[RHT_FISHING_POLE_HINT] = HintText(CustomMessage("^If I remember correctly, I lost it somewhere in #[[1]]#...&Let me know if you find it!",
|
hintTextTable[RHT_FISHING_POLE_HINT] = HintText(CustomMessage("^If I remember correctly, I lost it somewhere in #[[1]]#...&Let me know if you find it!",
|
||||||
|
/*german*/ "Wenn ich mich recht erinnere,&hab ich es irgendwo in #[[1]]#&verloren...&Sag mir Bescheid, wenn du es findest."
|
||||||
|
/*french*/ "Si je me souviens bien, il me&semble que je l'ai perdue&quelque part dans&#[[1]]#...^Fais-moi signe si jamais&tu la trouves!",
|
||||||
{QM_RED}));
|
{QM_RED}));
|
||||||
|
|
||||||
/*--------------------------
|
/*--------------------------
|
||||||
|
@ -2272,49 +2277,89 @@ void StaticData::HintTable_Init() {
|
||||||
/*german*/ "Zu&#[[1]]#?&" + TWO_WAY_CHOICE() + "#OK&No#",
|
/*german*/ "Zu&#[[1]]#?&" + TWO_WAY_CHOICE() + "#OK&No#",
|
||||||
/*french*/ "Se téléporter vers&#[[1]]#?&" + TWO_WAY_CHOICE() + "#OK!&Non#",
|
/*french*/ "Se téléporter vers&#[[1]]#?&" + TWO_WAY_CHOICE() + "#OK!&Non#",
|
||||||
{QM_RED, QM_GREEN}));
|
{QM_RED, QM_GREEN}));
|
||||||
|
|
||||||
/*--------------------------
|
/*--------------------------
|
||||||
| STATIC LOCATION HINTS |
|
| STATIC LOCATION HINTS |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
|
|
||||||
|
/*--------------------------
|
||||||
|
| STATIC LOCATION HINTS |
|
||||||
|
---------------------------*/
|
||||||
|
|
||||||
hintTextTable[RHT_HBA_HINT_SIGN] = HintText(CustomMessage("#Horseback Archery# Range Prizes:&1000: #[[1]]#&1500: #[[2]]#^@'s Record: #" + CustomMessage::POINTS(HS_HORSE_ARCHERY) + "#",
|
hintTextTable[RHT_HBA_HINT_SIGN] = HintText(CustomMessage("#Horseback Archery# Range Prizes:&1000: #[[1]]#&1500: #[[2]]#^@'s Record: #" + CustomMessage::POINTS(HS_HORSE_ARCHERY) + "#",
|
||||||
|
/*german*/ "#Bogenschießen zu Pferde#&Schießstandpreise:&1000: #[[1]]#&1500: #[[2]]#^@'s Record: #" + CustomMessage::POINTS(HS_HORSE_ARCHERY) + "#",
|
||||||
|
/*french*/ "Récompenses de l'#Archerie Montée#:&1000: #[[1]]#&1500: #[[2]]#^Record de @: #" + CustomMessage::POINTS(HS_HORSE_ARCHERY) + "#",
|
||||||
{QM_RED, QM_GREEN, QM_GREEN, QM_GREEN}, {}, TEXTBOX_TYPE_WOODEN));
|
{QM_RED, QM_GREEN, QM_GREEN, QM_GREEN}, {}, TEXTBOX_TYPE_WOODEN));
|
||||||
|
|
||||||
hintTextTable[RHT_HBA_HINT_NOT_ON_HORSE] = HintText(CustomMessage("Hey, rookie!&Come back on your #horse# and take on then #Horseback Archery# challenge!^"
|
hintTextTable[RHT_HBA_HINT_NOT_ON_HORSE] = HintText(CustomMessage("Hey, rookie!&Come back on your #horse# and take on the #Horseback Archery# challenge!^"
|
||||||
"Impress me with a high score of 1000 to win a #[[1]]# or score 1500 for #[[2]]#!",
|
"Impress me with a high score of 1000 to win a #[[1]]# or score 1500 for #[[2]]#!",
|
||||||
|
/*german*/ "Hey, Neuling!&Komm mit deinem #Pferd# zurück und stell dich der #Pferdebogenschießen#-Herausforderung!^"
|
||||||
|
"Beeindruck mich mit 1000 Punkten und gewinne #[[1]]#! Oder hol dir 1500 Punkte für #[[2]]#!",
|
||||||
|
/*french*/ "Hé, l'nouveau!&Reviens avec ton #cheval# et essaie notre #Terrain d'Archerie Montée#^"
|
||||||
|
"Impressionne-moi avec un score de 1000 pour gagner #[[1]]# ou atteins 1500 pour #[[2]]#!",
|
||||||
{QM_RED, QM_RED, QM_GREEN, QM_GREEN}));
|
{QM_RED, QM_RED, QM_GREEN, QM_GREEN}));
|
||||||
|
|
||||||
hintTextTable[RHT_HBA_HINT_INITIAL] = HintText(CustomMessage("Hey, rookie!&Want to take on the #Horseback Archery# challenge?^"
|
hintTextTable[RHT_HBA_HINT_INITIAL] = HintText(CustomMessage("Hey, rookie!&Want to take on the #Horseback Archery# challenge?^"
|
||||||
"Impress me with a high score of 1000 to win a #[[1]]# or score 1500 for #[[2]]#!\x0B",
|
"Impress me with a high score of 1000 to win a #[[1]]# or score 1500 for #[[2]]#!\x0B",
|
||||||
|
/*german*/ "Hey, Neuling!&Willst du dich der #Pferdebogenschießen#-Herausforderung stellen?^"
|
||||||
|
"Zeig, was du drauf hast - hol 1000 Punkte für #[[1]]#! Oder knack die 1500 und kassier #[[2]]#!\x0B",
|
||||||
|
/*french*/ "Hé, l'nouveau!&Tu veux essayer notre #Terrain d'Archerie Montée#^"
|
||||||
|
"Impressionne-moi avec un score de 1000 pour gagner #[[1]]# ou atteins 1500 pour #[[2]]#!\x0B",
|
||||||
{QM_RED, QM_GREEN, QM_GREEN}));
|
{QM_RED, QM_GREEN, QM_GREEN}));
|
||||||
|
|
||||||
hintTextTable[RHT_HBA_HINT_HAVE_1000] = HintText(CustomMessage("Hey, newcomer!&Want to take on the #Horseback Archery# challenge?^"
|
hintTextTable[RHT_HBA_HINT_HAVE_1000] = HintText(CustomMessage("Hey, newcomer!&Want to take on the #Horseback Archery# challenge?^"
|
||||||
"Prove yourself to be a horsemaster by scoring 1500 points to win #[[2]]#!\x0B",
|
"Prove yourself to be a horsemaster by scoring 1500 points to win #[[2]]#!\x0B",
|
||||||
|
/*german*/ "Hey, Neuling!&Willst du dich der #Pferdebogenschießen#-Herausforderung stellen?^"
|
||||||
|
"Beweise dein Können als Reitmeister - hol 1500 Punkte und gewinne #[[2]]#!\x0B",
|
||||||
|
/*french*/ "Hé, l'nouveau!&Tu veux essayer notre #Terrain d'Archerie Montée#^"
|
||||||
|
"Prouve que tu es un véritable cavalier en obtenant 1500 points pour gagner #[[2]]#!\x0B",
|
||||||
{QM_RED, QM_GREEN}));
|
{QM_RED, QM_GREEN}));
|
||||||
|
|
||||||
hintTextTable[RHT_MALON_HINT_HOW_IS_EPONA] = HintText(CustomMessage("@! You should come back with Epona and try to beat my time on the #Obstacle Course#!^"
|
hintTextTable[RHT_MALON_HINT_HOW_IS_EPONA] = HintText(CustomMessage("@! You should come back with Epona and try to beat my time on the #Obstacle Course#!^"
|
||||||
"If you beat my time, I'll give you my favourite #cow# Elsie and her toy #[[1]]#!",
|
"If you beat my time, I'll give you my favourite #cow# Elsie and her toy #[[1]]#!",
|
||||||
|
/*german*/ "@! Du solltest mit Epona zurückkommen und versuchen, meine Zeit im #Hindernisparcours# zu schlagen!^"
|
||||||
|
"Wenn du meine Zeit schlägst, gebe ich dir meine #Lieblingskuh# Elsie und ihr Spielzeug #[[1]]#!",
|
||||||
|
/*french*/ "@! Tu devrais revenir avec Epona et essayer de battre mon temps sur le #Parcours d'Obstacles#!^"
|
||||||
|
"Si tu bats mon temps, je te donnerai ma vache préférée, Elsie, ainsi que son jouet #[[1]]#!",
|
||||||
{QM_RED, QM_BLUE, QM_GREEN}));
|
{QM_RED, QM_BLUE, QM_GREEN}));
|
||||||
|
|
||||||
hintTextTable[RHT_MALON_HINT_OBSTICLE_COURSE] = HintText(CustomMessage("How about trying the #Obstacle Course?# If you beat my time I'll let you keep my favourite #cow# Elsie and her toy #[[1]]#!^"
|
hintTextTable[RHT_MALON_HINT_OBSTICLE_COURSE] = HintText(CustomMessage("How about trying the #Obstacle Course?# If you beat my time I'll let you keep my favourite #cow# Elsie and her toy #[[1]]#!^"
|
||||||
"Challenge the #Obstacle Course?#&\x1B&#Let's go&No thanks#",
|
"Challenge the #Obstacle Course?#&\x1B&#Let's go&No thanks#",
|
||||||
|
/*german*/ "Wie wärs mit dem #Hindernisparcours#? Wenn du meine Zeit schlägst, lasse ich dir meine #LieblingsKuh# Elsie und ihr Spielzeug #[[1]]#!^"
|
||||||
|
"Herausforderung: #Hindernisparcours?#&\x1B&#Los geht's!&nein, danke#",
|
||||||
|
/*french*/ "Que dirais-tu d'essayer le #Parcours d'Obstacles#? Si tu bats mon temps, je te donnerai ma vache préférée, Elsie, et son jouet #[[1]]#!^"
|
||||||
|
"Tenter le #Parcours d'Obstacles#?&\x1B&#Allons-y&Non merci#",
|
||||||
{QM_RED, QM_BLUE, QM_GREEN, QM_RED, QM_GREEN}));
|
{QM_RED, QM_BLUE, QM_GREEN, QM_RED, QM_GREEN}));
|
||||||
|
|
||||||
hintTextTable[RHT_MALON_HINT_TURNING_EVIL] = HintText(CustomMessage("@? Is that you? ^If I ran the ranch, I'd build an #Obstacle Course#, and whoever gets the best time would win a #cow#!^"
|
hintTextTable[RHT_MALON_HINT_TURNING_EVIL] = HintText(CustomMessage("@? Is that you? ^If I ran the ranch, I'd build an #Obstacle Course#, and whoever gets the best time would win a #cow#!^"
|
||||||
"Elsie loves sharing her #[[1]]# with new people, It'll be fun!^...But Ingo won't let me...",
|
"Elsie loves sharing her #[[1]]# with new people, It'll be fun!^...But Ingo won't let me...",
|
||||||
|
/*german*/ "@? Bist du das? ^Wenn ich die Ranch leiten würde, würde ich einen #Hindernisparcours# bauen, und wer die beste Zeit schafft, gewinnt eine #Kuh#!^"
|
||||||
|
"Elsie liebt es, ihr #[[1]]# mit neuen Leuten zu teilen. Es wird Spaß machen^...Aber Ingo lässt mich nicht",
|
||||||
|
/*french*/ "@? C'est toi?^Si je dirigeais le ranch, je construirais un #Parcours d'Obstacles#, et celui qui obtiendrait le meilleur temps gagnerait une #vache#!^"
|
||||||
|
"Elsie adore partager son #[[1]]# avec de nouvelles personnes, ce serait amusant!^... Mais Ingo ne me laisse pas faire...",
|
||||||
{QM_RED, QM_BLUE, QM_GREEN}));
|
{QM_RED, QM_BLUE, QM_GREEN}));
|
||||||
|
|
||||||
hintTextTable[RHT_MALON_HINT_INGO_TEMPTED] = HintText(CustomMessage("@! You should come back in the morning and try to beat my time on the #Obstacle Course#!^"
|
hintTextTable[RHT_MALON_HINT_INGO_TEMPTED] = HintText(CustomMessage("@! You should come back in the morning and try to beat my time on the #Obstacle Course#!^"
|
||||||
"If you beat my time, I'll give you my favourite #cow# Elsie and her toy #[[1]]#!",
|
"If you beat my time, I'll give you my favourite #cow# Elsie and her toy #[[1]]#!",
|
||||||
|
/*german*/ "@! Du solltest morgens zurückkommen und versuchen, meine Zeit im #Hindernisparcours# zu schlagen!^"
|
||||||
|
"Wenn du meine Zeit schlägst, gebe ich dir meine #Lieblingskuh# Elsie und ihr Spielzeug #[[1]]#!",
|
||||||
|
/*french*/ "@! Tu devrais revenir le matin et essayer de battre mon temps sur le #Parcours d'Obstacles#!^"
|
||||||
|
"Si tu bats mon temps, je te donnerai ma vache préférée, Elsie, ainsi que son jouet #[[1]]#!",
|
||||||
{QM_RED, QM_BLUE, QM_GREEN}));
|
{QM_RED, QM_BLUE, QM_GREEN}));
|
||||||
|
|
||||||
hintTextTable[RHT_CHICKENS_HINT] = HintText(CustomMessage("You! Please!&Bring my Cucco's back to my pen!&I'll give you my #[[1]]#!",
|
hintTextTable[RHT_CHICKENS_HINT] = HintText(CustomMessage("You! Please!&Bring my Cucco's back to my pen!&I'll give you my #[[1]]#!",
|
||||||
|
/*german*/ "Du! Bitte!&Bring meine Hühner zurück in ihren&Stall! Ich gebe dir meine #[[1]]#!",
|
||||||
|
/*french*/ "Mes Cocottes sont perdues!&Dépose toutes les cocottes dans cet enclos!&Je te donnerai #[[1]]#!",
|
||||||
{QM_GREEN}));
|
{QM_GREEN}));
|
||||||
|
|
||||||
hintTextTable[RHT_BIG_POES_HINT] = HintText(CustomMessage("You have #\x1E\x01 Poe Points#! Reach 1000 and you'll get a #[[1]]#!",
|
hintTextTable[RHT_BIG_POES_HINT] = HintText(CustomMessage("You have #\x1E\x01 Poe Points#! Reach 1000 and you'll get a #[[1]]#!",
|
||||||
|
/*german*/ "Du hast #\x1E\x01 Nachtschwärmer-Punkte#! Erreiche 1000 und du bekommst ein #[[1]]#!",
|
||||||
|
/*french*/ "Tu as #\x1E\x01 Points d'Âme#! Atteins 1000 et tu recevras #[[1]]#!",
|
||||||
{QM_YELLOW, QM_GREEN}));
|
{QM_YELLOW, QM_GREEN}));
|
||||||
|
|
||||||
hintTextTable[RHT_BIGGORON_HINT] = HintText(CustomMessage("Arrrrrre you here to claim my finest #[[1]]#? Shoooooow me your #Claim Check#.",
|
hintTextTable[RHT_BIGGORON_HINT] = HintText(CustomMessage("Arrrrrre you here to claim my finest #[[1]]#? Shoooooow me your #Claim Check#.",
|
||||||
|
/*german*/ "Arrrrr, bist du hier, um mein feinsten #[[1]]# zu beanspruchen? Zeig mir deinen #Zertifikat#!"
|
||||||
|
/*french*/ "Eeeeeees-tu ici pour réclaaaaaamer mon plus beau #[[1]]#? Moooooontre-moi ton #Certificat#.",
|
||||||
{QM_GREEN, QM_RED}));
|
{QM_GREEN, QM_RED}));
|
||||||
|
|
||||||
hintTextTable[RHT_FROGS_HINT] = HintText(CustomMessage("Some frogs holding #[[1]]# are looking at you from underwater...",
|
hintTextTable[RHT_FROGS_HINT] = HintText(CustomMessage("Some frogs holding #[[1]]# are looking at you from underwater...",
|
||||||
|
@ -2323,6 +2368,8 @@ void StaticData::HintTable_Init() {
|
||||||
{QM_GREEN}));
|
{QM_GREEN}));
|
||||||
|
|
||||||
hintTextTable[RHT_OOT_HINT] = HintText(CustomMessage("Bring the #Spiritual Stones# to the past so you can receive #[[1]]# from Zelda and learn #[[2]]#!",
|
hintTextTable[RHT_OOT_HINT] = HintText(CustomMessage("Bring the #Spiritual Stones# to the past so you can receive #[[1]]# from Zelda and learn #[[2]]#!",
|
||||||
|
/*german*/ "Bringe die #Spirituellen Steine# in die Vergangenheit, damit du #[[1]]# von Zelda erhältst und #[[2]]#! lernst",
|
||||||
|
/*french*/ "Amène les #Pierres Spirituelles# dans le passé et Zelda te donnera #[[1]]# et t'apprendra #[[2]]# !",
|
||||||
{QM_BLUE, QM_GREEN, QM_GREEN}));
|
{QM_BLUE, QM_GREEN, QM_GREEN}));
|
||||||
|
|
||||||
hintTextTable[RHT_SKULLS_HINT] = HintText(CustomMessage("Yeaaarrgh! I'm cursed!!^Please save me by destroying #[[d]] Spiders of the Curse# and I will give you my #[[1]]#!",
|
hintTextTable[RHT_SKULLS_HINT] = HintText(CustomMessage("Yeaaarrgh! I'm cursed!!^Please save me by destroying #[[d]] Spiders of the Curse# and I will give you my #[[1]]#!",
|
||||||
|
@ -2332,6 +2379,10 @@ void StaticData::HintTable_Init() {
|
||||||
|
|
||||||
hintTextTable[RHT_MASK_SHOP_HINT] = HintText(CustomMessage("Some young scrubs in the #Deku Theatre# love seeing Masks!^"
|
hintTextTable[RHT_MASK_SHOP_HINT] = HintText(CustomMessage("Some young scrubs in the #Deku Theatre# love seeing Masks!^"
|
||||||
"They'll give you #[[1]]# if you show them the #Skull Mask#, and #[[2]]# if you show them the #Mask of Truth#!",
|
"They'll give you #[[1]]# if you show them the #Skull Mask#, and #[[2]]# if you show them the #Mask of Truth#!",
|
||||||
|
/*german*/ "Ein paar junge Gören in der #Waldbühne# lieben es, Masken zu sehen!^"
|
||||||
|
"Sie geben dir #[[1]]#, wenn du ihnen die #Schädel-Maske# zeigst, und #[[2]]#, wenn du ihnen die #Maske des Wissens# zeigst!",
|
||||||
|
/*french*/ "De jeunes Pestes Mojo qui se trouvent dans le #Théâtre Mojo# adorent voir des masques !^"
|
||||||
|
"Elles te donneront #[[1]]# si tu leur montres le #Masque de Mort#, et #[[2]]# si tu leur montres le #Masque de Vérité#.",
|
||||||
{QM_GREEN, QM_GREEN, QM_RED, QM_GREEN, QM_RED}));
|
{QM_GREEN, QM_GREEN, QM_RED, QM_GREEN, QM_RED}));
|
||||||
|
|
||||||
/*--------------------------
|
/*--------------------------
|
||||||
|
@ -2339,33 +2390,34 @@ void StaticData::HintTable_Init() {
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
|
|
||||||
hintTextTable[RHT_GANON_JOKE01] = HintText(CustomMessage("Oh! It's @.&I was expecting someone called Sheik.&Do you know what happened to them?",
|
hintTextTable[RHT_GANON_JOKE01] = HintText(CustomMessage("Oh! It's @.&I was expecting someone called Sheik.&Do you know what happened to them?",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Oh! Da ist @.&Ich hatte eigentlich jemanden namens&Sheik erwartet. Weißt du, was mit&ihnen passiert ist?",
|
||||||
/*french*/ "Ah, c'est @.&J'attendais un certain Sheik.&Tu sais ce qui lui est arrivé?"));
|
/*french*/ "Ah, c'est @.&J'attendais un certain Sheik.&Tu sais ce qui lui est arrivé?"));
|
||||||
// /*spanish*/¡Oh! Pero si es @.&Estaba esperando a alguien llamado Sheik. ¿Sabes qué puede haberle pasado?
|
// /*spanish*/¡Oh! Pero si es @.&Estaba esperando a alguien llamado Sheik. ¿Sabes qué puede haberle pasado?
|
||||||
|
|
||||||
hintTextTable[RHT_GANON_JOKE02] = HintText(CustomMessage("I knew I shouldn't have put the key on the other side of my door.",
|
hintTextTable[RHT_GANON_JOKE02] = HintText(CustomMessage("I knew I shouldn't have put the key on the other side of my door.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Ich wusste, dass ich den Schlüssel nicht auf der anderen Seite meiner Tür legen sollte.",
|
||||||
/*french*/ "J'aurais dû garder la clé ici. Hélas..."));
|
/*french*/ "J'aurais dû garder la clé ici. Hélas..."));
|
||||||
// /*spanish*/Sabía que no tendría que haber dejado la llave al otro lado de la puerta.
|
// /*spanish*/Sabía que no tendría que haber dejado la llave al otro lado de la puerta.
|
||||||
|
|
||||||
hintTextTable[RHT_GANON_JOKE03] = HintText(CustomMessage("Looks like it's time for a round of tennis.",
|
hintTextTable[RHT_GANON_JOKE03] = HintText(CustomMessage("Looks like it's time for a round of tennis.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Sieht so aus, als wäre es Zeit für eine Runde Tennis.",
|
||||||
/*french*/ "C'est l'heure de jouer au tennis."));
|
/*french*/ "C'est l'heure de jouer au tennis."));
|
||||||
// /*spanish*/Parece que es hora de una pachanga de tenis.
|
// /*spanish*/Parece que es hora de una pachanga de tenis.
|
||||||
|
|
||||||
hintTextTable[RHT_GANON_JOKE04] = HintText(CustomMessage("You'll never deflect my bolts of energy with your sword, then shoot me with those Light Arrows you happen to have.",
|
hintTextTable[RHT_GANON_JOKE04] = HintText(CustomMessage("You'll never deflect my bolts of energy with your sword, then shoot me with those Light Arrows you happen to have.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Du wirst meine Energiestrahlen nie mit deinem Schwert abwehren und mich dann mit den Lichtpfeilen beschießen, die du zufällig hast.",
|
||||||
/*french*/ "Ne perds pas ton temps à frapper mes éclairs d'énergie avec ton épée et me tirer avec tes flèches de Lumière!"));
|
/*french*/ "Ne perds pas ton temps à frapper mes éclairs d'énergie avec ton épée et me tirer avec tes flèches de Lumière!"));
|
||||||
// /*spanish*/Nunca reflejarás mis esferas de energía con tu espada, para después dispararme con las flechas de luz que tendrás.
|
// /*spanish*/Nunca reflejarás mis esferas de energía con tu espada, para después dispararme con las flechas de luz que tendrás.
|
||||||
|
|
||||||
hintTextTable[RHT_GANON_JOKE05] = HintText(CustomMessage("Why did I leave my trident back in the desert?",
|
hintTextTable[RHT_GANON_JOKE05] = HintText(CustomMessage("Why did I leave my trident back in the desert?",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Warum habe ich meinen Dreizack wieder in der Wüste gelassen?",
|
||||||
/*french*/ "Sale bêtise... Et j'ai oublié mon trident dans le désert!"));
|
/*french*/ "Sale bêtise... Et j'ai oublié mon trident dans le désert!"));
|
||||||
// /*spanish*/Santa Hylia... ¿Por qué me habré dejado el tridente en el desierto?
|
// /*spanish*/Santa Hylia... ¿Por qué me habré dejado el tridente en el desierto?
|
||||||
|
|
||||||
hintTextTable[RHT_GANON_JOKE06] = HintText(CustomMessage("Zelda is probably going to do something stupid, like send you back to your own timeline.^So this is "
|
hintTextTable[RHT_GANON_JOKE06] = HintText(CustomMessage("Zelda is probably going to do something stupid, like send you back to your own timeline.^So this is "
|
||||||
"quite meaningless. Do you really want to save this moron?",
|
"quite meaningless. Do you really want to save this moron?",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Zelda wird wahrscheinlich wieder etwas Dummes tun, wie dich zurück in deine eigene Timeline schicken "
|
||||||
|
"^Das ist also ziemlich bedeutungslos. Willst du wirklich diese Idiotin retten?",
|
||||||
/*french*/ "Même si je suis vaincu... Zelda te renverra dans ton ère, et je reviendrai conquérir!^Telle est la "
|
/*french*/ "Même si je suis vaincu... Zelda te renverra dans ton ère, et je reviendrai conquérir!^Telle est la "
|
||||||
"prophécie d'Hyrule Historia!"));
|
"prophécie d'Hyrule Historia!"));
|
||||||
// /*spanish*/Seguro que Zelda trata de hacer alguna tontería, como enviarte de vuelta a tu línea temporal.^No tiene
|
// /*spanish*/Seguro que Zelda trata de hacer alguna tontería, como enviarte de vuelta a tu línea temporal.^No tiene
|
||||||
|
@ -2373,30 +2425,31 @@ void StaticData::HintTable_Init() {
|
||||||
|
|
||||||
hintTextTable[RHT_GANON_JOKE07] = HintText(CustomMessage("What about Zelda makes you think&she'd be a better ruler than I?^I saved Lon Lon Ranch,&fed the "
|
hintTextTable[RHT_GANON_JOKE07] = HintText(CustomMessage("What about Zelda makes you think&she'd be a better ruler than I?^I saved Lon Lon Ranch,&fed the "
|
||||||
"hungry,&and my castle floats.",
|
"hungry,&and my castle floats.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Was an Zelda lässt dich glauben&sie wäre eine bessere&Herrscherin als ich?^Ich rettete die Lon Lon Ranch,&fütterte die Hungrigen"
|
||||||
|
"&und mein Schloss schwebt.",
|
||||||
/*french*/ "Zelda ne sera jamais un meilleur monarque que moi!^J'ai un château volant, mes sujets sont des belles "
|
/*french*/ "Zelda ne sera jamais un meilleur monarque que moi!^J'ai un château volant, mes sujets sont des belles "
|
||||||
"amazones... et mes Moblins sont clairement plus puissants que jamais!"));
|
"amazones... et mes Moblins sont clairement plus puissants que jamais!"));
|
||||||
// /*spanish*/¿Qué te hace pensar que Zelda gobierna mejor que yo?^Yo he salvado el Rancho Lon Lon,&he alimentado a
|
// /*spanish*/¿Qué te hace pensar que Zelda gobierna mejor que yo?^Yo he salvado el Rancho Lon Lon,&he alimentado a
|
||||||
// los hambrientos&y hasta hago que mi castillo flote.
|
// los hambrientos&y hasta hago que mi castillo flote.
|
||||||
|
|
||||||
hintTextTable[RHT_GANON_JOKE08] = HintText(CustomMessage("I've learned this spell,&it's really neat,&I'll keep it later&for your treat!",
|
hintTextTable[RHT_GANON_JOKE08] = HintText(CustomMessage("I've learned this spell,&it's really neat,&I'll keep it later&for your treat!",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Ich hab' diesen Zauber gelernt,&er ist wirklich ziemlich fein,&ich heb' ihn auf für später,&und dann soll er dein Geschenk sein!",
|
||||||
/*french*/ "Gamin, ton destin achève,&sous mon sort tu périras!&Cette partie ne fut pas brève,&et cette mort, tu subiras!"));
|
/*french*/ "Gamin, ton destin achève,&sous mon sort tu périras!&Cette partie ne fut pas brève,&et cette mort, tu subiras!"));
|
||||||
// /*spanish*/Veamos ahora que harás,&la batalla ha de comenzar,&te enviaré de una vez al más allá,&¿listo para
|
// /*spanish*/Veamos ahora que harás,&la batalla ha de comenzar,&te enviaré de una vez al más allá,&¿listo para
|
||||||
// afrontar la verdad?
|
// afrontar la verdad?
|
||||||
|
|
||||||
hintTextTable[RHT_GANON_JOKE09] = HintText(CustomMessage("Many tricks are up my sleeve,&to save yourself&you'd better leave!",
|
hintTextTable[RHT_GANON_JOKE09] = HintText(CustomMessage("Many tricks are up my sleeve,&to save yourself&you'd better leave!",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Viele Tricks hab' ich im Gepäck,&und um dich zu retten,&solltest du lieber weg.",
|
||||||
/*french*/ "Sale petit garnement,&tu fais erreur!&C'est maintenant que marque&ta dernière heure!"));
|
/*french*/ "Sale petit garnement,&tu fais erreur!&C'est maintenant que marque&ta dernière heure!"));
|
||||||
// /*spanish*/¿No osarás a mí enfrentarte?&Rimas aparte,&¡voy a matarte!
|
// /*spanish*/¿No osarás a mí enfrentarte?&Rimas aparte,&¡voy a matarte!
|
||||||
|
|
||||||
hintTextTable[RHT_GANON_JOKE10] = HintText(CustomMessage("After what you did to Koholint Island, how can you call me the bad guy?",
|
hintTextTable[RHT_GANON_JOKE10] = HintText(CustomMessage("After what you did to Koholint Island, how can you call me the bad guy?",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Nach dem, was du auf Insel Cocolint getan hast, wie kannst du mich da den Bösewicht nennen?",
|
||||||
/*french*/ "J'admire ce que tu as fait à l'Île Koholint... Toi et moi, nous devrions faire équipe!"));
|
/*french*/ "J'admire ce que tu as fait à l'Île Koholint... Toi et moi, nous devrions faire équipe!"));
|
||||||
// /*spanish*/Después de lo que le hiciste a la Isla Koholint, ¿cómo te atreves a llamarme malvado?
|
// /*spanish*/Después de lo que le hiciste a la Isla Koholint, ¿cómo te atreves a llamarme malvado?
|
||||||
|
|
||||||
hintTextTable[RHT_GANON_JOKE11] = HintText(CustomMessage("Today, let's begin down&'The Hero is Defeated' timeline.",
|
hintTextTable[RHT_GANON_JOKE11] = HintText(CustomMessage("Today, let's begin down&'The Hero is Defeated' timeline.",
|
||||||
/*german*/ TODO_TRANSLATE,
|
/*german*/ "Heute beginnen wir in der&‚Der Held ist besiegt‘-Timeline",
|
||||||
/*french*/ "Si tu me vaincs, Hyrule sera englouti... mais si tu meurs, on aura A Link to the Past, le meilleur opus "
|
/*french*/ "Si tu me vaincs, Hyrule sera englouti... mais si tu meurs, on aura A Link to the Past, le meilleur opus "
|
||||||
"de la série!"));
|
"de la série!"));
|
||||||
// /*spanish*/Hoy daremos lugar a la línea temporal del Héroe Derrotado.&¡Prepárate para el culmen de esta saga!
|
// /*spanish*/Hoy daremos lugar a la línea temporal del Héroe Derrotado.&¡Prepárate para el culmen de esta saga!
|
||||||
|
@ -2404,13 +2457,15 @@ void StaticData::HintTable_Init() {
|
||||||
/*--------------------------
|
/*--------------------------
|
||||||
| Misc utilities |
|
| Misc utilities |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
|
|
||||||
hintTextTable[RHT_YOUR_POCKET] = HintText(CustomMessage("your pocket",
|
hintTextTable[RHT_YOUR_POCKET] = HintText(CustomMessage("your pocket",
|
||||||
/*german*/ "deine Tasche",
|
/*german*/ "deine Tasche",
|
||||||
/*french*/ "tes poches"));
|
/*french*/ "tes poches"));
|
||||||
// /*spanish*/tu bolsillo
|
// /*spanish*/tu bolsillo
|
||||||
|
|
||||||
hintTextTable[RHT_ISOLATED_PLACE] = HintText(CustomMessage("an Isolated Place"));
|
hintTextTable[RHT_ISOLATED_PLACE] = HintText(CustomMessage("an Isolated Place",
|
||||||
|
/*german*/ "ein abgelegener Ort",
|
||||||
|
/*french*/ "un lieu isolé"));
|
||||||
|
|
||||||
hintTextTable[RHT_DUNGEON_ORDINARY] = HintText(CustomMessage(" It's ordinary.",
|
hintTextTable[RHT_DUNGEON_ORDINARY] = HintText(CustomMessage(" It's ordinary.",
|
||||||
/*german*/ "&Sieht aus wie immer.",
|
/*german*/ "&Sieht aus wie immer.",
|
||||||
|
|
|
@ -126,7 +126,7 @@ void StaticData::HintTable_Init_Exclude_Dungeon() {
|
||||||
hintTextTable[RHT_DEKU_TREE_GRASS] = HintText(CustomMessage("They say that some #grass in the Deku Tree# hides #[[1]]#.",
|
hintTextTable[RHT_DEKU_TREE_GRASS] = HintText(CustomMessage("They say that some #grass in the Deku Tree# hides #[[1]]#.",
|
||||||
/*german*/ "Man erzählt sich, daß etwas #Gras im Deku-Baum# #[[1]]# verstecke.",
|
/*german*/ "Man erzählt sich, daß etwas #Gras im Deku-Baum# #[[1]]# verstecke.",
|
||||||
/*french*/ "Selon moi, de l'#herbe dans l'Arbre Mojo# cache #[[1]]#.", {QM_RED, QM_GREEN}));
|
/*french*/ "Selon moi, de l'#herbe dans l'Arbre Mojo# cache #[[1]]#.", {QM_RED, QM_GREEN}));
|
||||||
|
|
||||||
hintTextTable[RHT_CRATE_DEKU_TREE] = HintText(CustomMessage("They say that a #crate in the Deku Tree# contains #[[1]]#.",
|
hintTextTable[RHT_CRATE_DEKU_TREE] = HintText(CustomMessage("They say that a #crate in the Deku Tree# contains #[[1]]#.",
|
||||||
/*german*/ "Man erzählt sich, daß eine #Kiste im Deku-Baum# #[[1]]# enthielte.",
|
/*german*/ "Man erzählt sich, daß eine #Kiste im Deku-Baum# #[[1]]# enthielte.",
|
||||||
/*french*/ "Selon moi, une #caisse dans l'Arbre Mojo# contient #[[1]]#.", {QM_RED, QM_GREEN}));
|
/*french*/ "Selon moi, une #caisse dans l'Arbre Mojo# contient #[[1]]#.", {QM_RED, QM_GREEN}));
|
||||||
|
@ -475,7 +475,7 @@ void StaticData::HintTable_Init_Exclude_Dungeon() {
|
||||||
hintTextTable[RHT_JABU_JABUS_BELLY_GRASS] = HintText(CustomMessage("They say that some #grass in Jabu Jabu's Belly# hides #[[1]]#.",
|
hintTextTable[RHT_JABU_JABUS_BELLY_GRASS] = HintText(CustomMessage("They say that some #grass in Jabu Jabu's Belly# hides #[[1]]#.",
|
||||||
/*german*/ "Man erzählt sich, daß etwas #Gras in Jabu-Jabus Bauch# #[[1]]# verstecke.",
|
/*german*/ "Man erzählt sich, daß etwas #Gras in Jabu-Jabus Bauch# #[[1]]# verstecke.",
|
||||||
/*french*/ "Selon moi, de l'#herbe dans le Ventre de Jabu-Jabu# cache #[[1]]#.", {QM_RED, QM_GREEN}));
|
/*french*/ "Selon moi, de l'#herbe dans le Ventre de Jabu-Jabu# cache #[[1]]#.", {QM_RED, QM_GREEN}));
|
||||||
|
|
||||||
hintTextTable[RHT_CRATE_JABU_JABU] = HintText(CustomMessage("They say that a #crate in Jabu Jabu's Belly# contains #[[1]]#.",
|
hintTextTable[RHT_CRATE_JABU_JABU] = HintText(CustomMessage("They say that a #crate in Jabu Jabu's Belly# contains #[[1]]#.",
|
||||||
/*german*/ "Man erzählt sich, daß eine #Kiste in Jabu-Jabus Bauch# #[[1]]# enthielte.",
|
/*german*/ "Man erzählt sich, daß eine #Kiste in Jabu-Jabus Bauch# #[[1]]# enthielte.",
|
||||||
/*french*/ "Selon moi, une #caisse dans le Ventre de Jabu-Jabu# contient #[[1]]#.", {QM_RED, QM_GREEN}));
|
/*french*/ "Selon moi, une #caisse dans le Ventre de Jabu-Jabu# contient #[[1]]#.", {QM_RED, QM_GREEN}));
|
||||||
|
|
|
@ -319,7 +319,7 @@ void StaticData::HintTable_Init_Exclude_Overworld() {
|
||||||
/*french*/ "Selon moi, #[[1]]#.", {QM_RED, QM_GREEN}));
|
/*french*/ "Selon moi, #[[1]]#.", {QM_RED, QM_GREEN}));
|
||||||
// /*spanish*/ Según dicen, #[[1]]#.
|
// /*spanish*/ Según dicen, #[[1]]#.
|
||||||
|
|
||||||
|
|
||||||
hintTextTable[RHT_GC_ROLLING_GORON_AS_ADULT] = HintText(CustomMessage("They say that #reassuring a young Goron# is rewarded with #[[1]]#.",
|
hintTextTable[RHT_GC_ROLLING_GORON_AS_ADULT] = HintText(CustomMessage("They say that #reassuring a young Goron# is rewarded with #[[1]]#.",
|
||||||
/*german*/ "Man erzählt sich, daß das #Beruhigen eines jungen Goronen# mit #[[1]]# belohnt würde.",
|
/*german*/ "Man erzählt sich, daß das #Beruhigen eines jungen Goronen# mit #[[1]]# belohnt würde.",
|
||||||
/*french*/ "Selon moi, #rassurer un jeune Goron# donne #[[1]]#.", {QM_RED, QM_GREEN}),
|
/*french*/ "Selon moi, #rassurer un jeune Goron# donne #[[1]]#.", {QM_RED, QM_GREEN}),
|
||||||
|
@ -1936,7 +1936,7 @@ void StaticData::HintTable_Init_Exclude_Overworld() {
|
||||||
hintTextTable[RHT_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone within the side of a crater# reveals #[[1]]#.",
|
hintTextTable[RHT_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone within the side of a crater# reveals #[[1]]#.",
|
||||||
/*german*/ "Man erzählt sich, daß das #Spielen einer stürmischen Melodie für einen seltsamen Stein innerhalb der Seite eines Kraters# #[[1]]# enthülle.",
|
/*german*/ "Man erzählt sich, daß das #Spielen einer stürmischen Melodie für einen seltsamen Stein innerhalb der Seite eines Kraters# #[[1]]# enthülle.",
|
||||||
/*french*/ "Selon moi, #jouer une mélodie orageuse pour une pierre étrange dans le côté d'un cratère# révèle [[1]].", {QM_RED, QM_GREEN}));
|
/*french*/ "Selon moi, #jouer une mélodie orageuse pour une pierre étrange dans le côté d'un cratère# révèle [[1]].", {QM_RED, QM_GREEN}));
|
||||||
|
|
||||||
hintTextTable[RHT_LH_ISLAND_SUN_FAIRY] = HintText(CustomMessage("They say that #summoning the sun on the lake's island# calls #[[1]]#.",
|
hintTextTable[RHT_LH_ISLAND_SUN_FAIRY] = HintText(CustomMessage("They say that #summoning the sun on the lake's island# calls #[[1]]#.",
|
||||||
/*german*/ "Man erzählt sich, daß das #Beschwören der Sonne auf der Insel eines Sees# #[[1]]# anrufe.",
|
/*german*/ "Man erzählt sich, daß das #Beschwören der Sonne auf der Insel eines Sees# #[[1]]# anrufe.",
|
||||||
/*french*/ "Selon moi, #appeler le soleil sur l'île du lac # révèle #[[1]]#.", {QM_RED, QM_GREEN}));
|
/*french*/ "Selon moi, #appeler le soleil sur l'île du lac # révèle #[[1]]#.", {QM_RED, QM_GREEN}));
|
||||||
|
@ -2012,7 +2012,7 @@ void StaticData::HintTable_Init_Exclude_Overworld() {
|
||||||
hintTextTable[RHT_GROTTO_GRASS] = HintText(CustomMessage("They say that #cutting some grass in a grotto# reveals #[[1]]#.",
|
hintTextTable[RHT_GROTTO_GRASS] = HintText(CustomMessage("They say that #cutting some grass in a grotto# reveals #[[1]]#.",
|
||||||
/*german*/ "Man erzählt sich, daß das #Schneiden einiger Gräser in einer Grotte# #[[1]]# enthülle.",
|
/*german*/ "Man erzählt sich, daß das #Schneiden einiger Gräser in einer Grotte# #[[1]]# enthülle.",
|
||||||
/*french*/ "Selon moi, de l'#herbe# cache #[[1]]#.", {QM_RED, QM_GREEN}));
|
/*french*/ "Selon moi, de l'#herbe# cache #[[1]]#.", {QM_RED, QM_GREEN}));
|
||||||
|
|
||||||
hintTextTable[RHT_CRATE_GERUDO_VALLEY] = HintText(CustomMessage("They say that a #crate in Gerudo Valley# contains #[[1]]#.",
|
hintTextTable[RHT_CRATE_GERUDO_VALLEY] = HintText(CustomMessage("They say that a #crate in Gerudo Valley# contains #[[1]]#.",
|
||||||
/*german*/ "Man erzählt sich, daß eine #Kiste im Gerudotal# #[[1]]# enthielte.",
|
/*german*/ "Man erzählt sich, daß eine #Kiste im Gerudotal# #[[1]]# enthielte.",
|
||||||
/*french*/ "Selon moi, une #caisse dans une vallée# a #[[1]]#.", {QM_RED, QM_GREEN}));
|
/*french*/ "Selon moi, une #caisse dans une vallée# a #[[1]]#.", {QM_RED, QM_GREEN}));
|
||||||
|
|
|
@ -2097,7 +2097,7 @@ void StaticData::HintTable_Init_Item() {
|
||||||
},
|
},
|
||||||
{ CustomMessage("a master unlocker", /*german*/ "ein Meisterentsperrer", /*french*/ "un Kit de Déverrouillage") });
|
{ CustomMessage("a master unlocker", /*german*/ "ein Meisterentsperrer", /*french*/ "un Kit de Déverrouillage") });
|
||||||
// /*spanish*/un desbloqueador maestro
|
// /*spanish*/un desbloqueador maestro
|
||||||
|
|
||||||
//RANDOTODO if these are ever used for anything other than name, they want abscure and ambiguous hints
|
//RANDOTODO if these are ever used for anything other than name, they want abscure and ambiguous hints
|
||||||
hintTextTable[RHT_QUIVER_INF] = HintText(CustomMessage("an infinite Quiver", /*german*/"ein unendlicher Köcher", /*french*/"un Carquois Infini"));
|
hintTextTable[RHT_QUIVER_INF] = HintText(CustomMessage("an infinite Quiver", /*german*/"ein unendlicher Köcher", /*french*/"un Carquois Infini"));
|
||||||
|
|
||||||
|
@ -2136,7 +2136,7 @@ void StaticData::HintTable_Init_Item() {
|
||||||
|
|
||||||
hintTextTable[RHT_MYSTERIOUS_ITEM] = HintText(CustomMessage("mysterious item", /*german*/"mysteriöser Gegenstand", /*french*/"objet mystérieux"));
|
hintTextTable[RHT_MYSTERIOUS_ITEM] = HintText(CustomMessage("mysterious item", /*german*/"mysteriöser Gegenstand", /*french*/"objet mystérieux"));
|
||||||
// /*spanish*/algo misterioso
|
// /*spanish*/algo misterioso
|
||||||
|
|
||||||
hintTextTable[RHT_MYSTERIOUS_ITEM_CAPITAL] = HintText(CustomMessage("Mysterious Item", /*german*/"Mysteriöser Gegenstand", /*french*/"Objet Mystérieux"));
|
hintTextTable[RHT_MYSTERIOUS_ITEM_CAPITAL] = HintText(CustomMessage("Mysterious Item", /*german*/"Mysteriöser Gegenstand", /*french*/"Objet Mystérieux"));
|
||||||
// /*spanish*/Algo Misterioso
|
// /*spanish*/Algo Misterioso
|
||||||
|
|
||||||
|
|
|
@ -11,29 +11,30 @@
|
||||||
#include "../../custom-message/CustomMessageManager.h"
|
#include "../../custom-message/CustomMessageManager.h"
|
||||||
|
|
||||||
struct HintDistributionSetting {
|
struct HintDistributionSetting {
|
||||||
std::string name;
|
std::string name;
|
||||||
HintType type;
|
HintType type;
|
||||||
uint32_t weight;
|
uint32_t weight;
|
||||||
uint8_t fixed;
|
uint8_t fixed;
|
||||||
uint8_t copies;
|
uint8_t copies;
|
||||||
std::function<bool(RandomizerCheck)> filter;
|
std::function<bool(RandomizerCheck)> filter;
|
||||||
uint8_t dungeonLimit;
|
uint8_t dungeonLimit;
|
||||||
|
|
||||||
HintDistributionSetting(std::string _name, HintType _type, uint32_t _weight, uint8_t _fixed, uint8_t _copies,
|
HintDistributionSetting(std::string _name, HintType _type, uint32_t _weight, uint8_t _fixed, uint8_t _copies,
|
||||||
std::function<bool(RandomizerCheck)> _filter, uint8_t _dungeonLimit = 40);
|
std::function<bool(RandomizerCheck)> _filter, uint8_t _dungeonLimit = 40);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct HintSetting {
|
struct HintSetting {
|
||||||
uint8_t alwaysCopies;
|
uint8_t alwaysCopies;
|
||||||
uint8_t trialCopies;
|
uint8_t trialCopies;
|
||||||
uint8_t junkWeight;
|
uint8_t junkWeight;
|
||||||
std::vector<HintDistributionSetting> distTable;
|
std::vector<HintDistributionSetting> distTable;
|
||||||
};
|
};
|
||||||
|
|
||||||
class HintText {
|
class HintText {
|
||||||
public:
|
public:
|
||||||
HintText() = default;
|
HintText() = default;
|
||||||
HintText(CustomMessage clearText_, std::vector<CustomMessage> ambiguousText_ = {}, std::vector<CustomMessage> obscureText_ = {});
|
HintText(CustomMessage clearText_, std::vector<CustomMessage> ambiguousText_ = {},
|
||||||
|
std::vector<CustomMessage> obscureText_ = {});
|
||||||
const CustomMessage& GetClear() const;
|
const CustomMessage& GetClear() const;
|
||||||
const CustomMessage& GetObscure() const;
|
const CustomMessage& GetObscure() const;
|
||||||
const CustomMessage& GetObscure(uint8_t selection) const;
|
const CustomMessage& GetObscure(uint8_t selection) const;
|
||||||
|
@ -46,27 +47,28 @@ public:
|
||||||
bool operator==(const HintText& right) const;
|
bool operator==(const HintText& right) const;
|
||||||
bool operator!=(const HintText& right) const;
|
bool operator!=(const HintText& right) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CustomMessage clearText;
|
CustomMessage clearText;
|
||||||
std::vector<CustomMessage> ambiguousText = {};
|
std::vector<CustomMessage> ambiguousText = {};
|
||||||
std::vector<CustomMessage> obscureText = {};
|
std::vector<CustomMessage> obscureText = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
struct StaticHintInfo{
|
struct StaticHintInfo {
|
||||||
HintType type;
|
HintType type;
|
||||||
std::vector<RandomizerHintTextKey> hintKeys;
|
std::vector<RandomizerHintTextKey> hintKeys;
|
||||||
RandomizerSettingKey setting;
|
RandomizerSettingKey setting;
|
||||||
std::variant<bool, uint8_t> condition;
|
std::variant<bool, uint8_t> condition;
|
||||||
std::vector<RandomizerCheck> targetChecks;
|
std::vector<RandomizerCheck> targetChecks;
|
||||||
std::vector<RandomizerGet> targetItems;
|
std::vector<RandomizerGet> targetItems;
|
||||||
std::vector<RandomizerCheck> hintChecks;
|
std::vector<RandomizerCheck> hintChecks;
|
||||||
bool yourPocket;
|
bool yourPocket;
|
||||||
int num;
|
int num;
|
||||||
|
|
||||||
StaticHintInfo() = default;
|
StaticHintInfo() = default;
|
||||||
StaticHintInfo(HintType _type, std::vector<RandomizerHintTextKey> _hintKeys, RandomizerSettingKey _setting, std::variant<bool, uint8_t> _condition,
|
StaticHintInfo(HintType _type, std::vector<RandomizerHintTextKey> _hintKeys, RandomizerSettingKey _setting,
|
||||||
std::vector<RandomizerCheck> _targetChecks, std::vector<RandomizerGet> _targetItems = {},
|
std::variant<bool, uint8_t> _condition, std::vector<RandomizerCheck> _targetChecks,
|
||||||
std::vector<RandomizerCheck> _hintChecks = {}, bool _yourPocket = false, int _num = 0);
|
std::vector<RandomizerGet> _targetItems = {}, std::vector<RandomizerCheck> _hintChecks = {},
|
||||||
|
bool _yourPocket = false, int _num = 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
RandomizerHintTextKey GetRandomJunkHint();
|
RandomizerHintTextKey GetRandomJunkHint();
|
||||||
|
|
|
@ -13,4 +13,5 @@
|
||||||
#define DELETE_PRESET 6
|
#define DELETE_PRESET 6
|
||||||
#define RESET_TO_DEFAULTS 8
|
#define RESET_TO_DEFAULTS 8
|
||||||
|
|
||||||
bool GenerateRandomizer(std::set<RandomizerCheck> excludedLocations, std::set<RandomizerTrick> enabledTricks, std::string seedInput);
|
bool GenerateRandomizer(std::set<RandomizerCheck> excludedLocations, std::set<RandomizerTrick> enabledTricks,
|
||||||
|
std::string seedInput);
|
|
@ -4,6 +4,8 @@
|
||||||
#include "../context.h"
|
#include "../context.h"
|
||||||
|
|
||||||
namespace Playthrough {
|
namespace Playthrough {
|
||||||
int Playthrough_Init(uint32_t seed, std::set<RandomizerCheck> excludedLocations, std::set<RandomizerTrick> enabledTricks);
|
int Playthrough_Init(uint32_t seed, std::set<RandomizerCheck> excludedLocations,
|
||||||
int Playthrough_Repeat(std::set<RandomizerCheck> excludedLocations, std::set<RandomizerTrick> enabledTricks, int count = 1);
|
std::set<RandomizerTrick> enabledTricks);
|
||||||
}
|
int Playthrough_Repeat(std::set<RandomizerCheck> excludedLocations, std::set<RandomizerTrick> enabledTricks,
|
||||||
|
int count = 1);
|
||||||
|
} // namespace Playthrough
|
||||||
|
|
|
@ -5,38 +5,35 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
|
||||||
template <typename T, typename Predicate>
|
template <typename T, typename Predicate> static void erase_if(std::vector<T>& vector, Predicate pred) {
|
||||||
static void erase_if(std::vector<T>& vector, Predicate pred) {
|
vector.erase(std::remove_if(begin(vector), end(vector), pred), end(vector));
|
||||||
vector.erase(std::remove_if(begin(vector), end(vector), pred), end(vector));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T, typename Predicate>
|
template <typename T, typename Predicate>
|
||||||
std::vector<T> FilterFromPool(std::vector<T>& vector, Predicate pred, bool eraseAfterFilter = false) {
|
std::vector<T> FilterFromPool(std::vector<T>& vector, Predicate pred, bool eraseAfterFilter = false) {
|
||||||
std::vector<T> filteredPool = {};
|
std::vector<T> filteredPool = {};
|
||||||
std::copy_if(vector.begin(), vector.end(), std::back_inserter(filteredPool), pred);
|
std::copy_if(vector.begin(), vector.end(), std::back_inserter(filteredPool), pred);
|
||||||
|
|
||||||
if (eraseAfterFilter) {
|
if (eraseAfterFilter) {
|
||||||
erase_if(vector, pred);
|
erase_if(vector, pred);
|
||||||
}
|
}
|
||||||
|
|
||||||
return filteredPool;
|
return filteredPool;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T, typename Predicate>
|
template <typename T, typename Predicate>
|
||||||
std::vector<T> FilterAndEraseFromPool(std::vector<T>& vector, Predicate pred) {
|
std::vector<T> FilterAndEraseFromPool(std::vector<T>& vector, Predicate pred) {
|
||||||
return FilterFromPool(vector, pred, true);
|
return FilterFromPool(vector, pred, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T, typename FromPool>
|
template <typename T, typename FromPool> void AddElementsToPool(std::vector<T>& toPool, const FromPool& fromPool) {
|
||||||
void AddElementsToPool(std::vector<T>& toPool, const FromPool& fromPool) {
|
toPool.insert(toPool.end(), std::cbegin(fromPool), std::cend(fromPool));
|
||||||
toPool.insert(toPool.end(), std::cbegin(fromPool), std::cend(fromPool));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T, typename Container>
|
template <typename T, typename Container> bool ElementInContainer(T& element, const Container& container) {
|
||||||
bool ElementInContainer(T& element, const Container& container) {
|
return std::find(container.begin(), container.end(), element) != container.end();
|
||||||
return std::find(container.begin(), container.end(), element) != container.end();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename First, typename... T> bool IsAnyOf(First&& first, T&&... t) {
|
template <typename First, typename... T> bool IsAnyOf(First&& first, T&&... t) {
|
||||||
return ((first == t) || ...);
|
return ((first == t) || ...);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,5 +3,6 @@
|
||||||
|
|
||||||
#include <set>
|
#include <set>
|
||||||
namespace RandoMain {
|
namespace RandoMain {
|
||||||
void GenerateRando(std::set<RandomizerCheck> excludedLocations, std::set<RandomizerTrick> enabledTricks, std::string seedInput);
|
void GenerateRando(std::set<RandomizerCheck> excludedLocations, std::set<RandomizerTrick> enabledTricks,
|
||||||
|
std::string seedInput);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,9 +11,8 @@ void Random_Init(uint32_t seed);
|
||||||
uint32_t Random(int min, int max);
|
uint32_t Random(int min, int max);
|
||||||
double RandomDouble();
|
double RandomDouble();
|
||||||
|
|
||||||
//Get a random element from a vector or array
|
// Get a random element from a vector or array
|
||||||
template <typename T>
|
template <typename T> T RandomElement(std::vector<T>& vector, bool erase) {
|
||||||
T RandomElement(std::vector<T>& vector, bool erase) {
|
|
||||||
const auto idx = Random(0, vector.size());
|
const auto idx = Random(0, vector.size());
|
||||||
const T selected = vector[idx];
|
const T selected = vector[idx];
|
||||||
if (erase) {
|
if (erase) {
|
||||||
|
@ -21,17 +20,14 @@ T RandomElement(std::vector<T>& vector, bool erase) {
|
||||||
}
|
}
|
||||||
return selected;
|
return selected;
|
||||||
}
|
}
|
||||||
template <typename Container>
|
template <typename Container> auto& RandomElement(Container& container) {
|
||||||
auto& RandomElement(Container& container) {
|
|
||||||
return container[Random(0, std::size(container))];
|
return container[Random(0, std::size(container))];
|
||||||
}
|
}
|
||||||
template <typename Container>
|
template <typename Container> const auto& RandomElement(const Container& container) {
|
||||||
const auto& RandomElement(const Container& container) {
|
|
||||||
return container[Random(0, std::size(container))];
|
return container[Random(0, std::size(container))];
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T> const T RandomElementFromSet(const std::set<T>& set) {
|
||||||
const T RandomElementFromSet(const std::set<T>& set) {
|
|
||||||
if (set.size() == 1) {
|
if (set.size() == 1) {
|
||||||
return *set.begin();
|
return *set.begin();
|
||||||
}
|
}
|
||||||
|
@ -44,19 +40,15 @@ const T RandomElementFromSet(const std::set<T>& set) {
|
||||||
return *it;
|
return *it;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Shuffle items within a vector or array
|
// Shuffle items within a vector or array
|
||||||
//RANDOTODO There's probably a more efficient way to do what this does.
|
// RANDOTODO There's probably a more efficient way to do what this does.
|
||||||
template <typename T>
|
template <typename T> void Shuffle(std::vector<T>& vector) {
|
||||||
void Shuffle(std::vector<T>& vector) {
|
for (std::size_t i = 0; i + 1 < vector.size(); i++) {
|
||||||
for (std::size_t i = 0; i + 1 < vector.size(); i++)
|
|
||||||
{
|
|
||||||
std::swap(vector[i], vector[Random(i, vector.size())]);
|
std::swap(vector[i], vector[Random(i, vector.size())]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
template <typename T, std::size_t size>
|
template <typename T, std::size_t size> void Shuffle(std::array<T, size>& arr) {
|
||||||
void Shuffle(std::array<T, size>& arr) {
|
for (std::size_t i = 0; i + 1 < arr.size(); i++) {
|
||||||
for (std::size_t i = 0; i + 1 < arr.size(); i++)
|
|
||||||
{
|
|
||||||
std::swap(arr[i], arr[Random(i, arr.size())]);
|
std::swap(arr[i], arr[Random(i, arr.size())]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,16 +16,10 @@ struct PriceSettingsStruct {
|
||||||
RandomizerSettingKey tycoonWallet;
|
RandomizerSettingKey tycoonWallet;
|
||||||
RandomizerSettingKey affordable;
|
RandomizerSettingKey affordable;
|
||||||
|
|
||||||
PriceSettingsStruct(RandomizerSettingKey _main,
|
PriceSettingsStruct(RandomizerSettingKey _main, RandomizerSettingKey _fixedPrice, RandomizerSettingKey _range1,
|
||||||
RandomizerSettingKey _fixedPrice,
|
RandomizerSettingKey _range2, RandomizerSettingKey _noWallet, RandomizerSettingKey _childWallet,
|
||||||
RandomizerSettingKey _range1,
|
RandomizerSettingKey _adultWallet, RandomizerSettingKey _giantWallet,
|
||||||
RandomizerSettingKey _range2,
|
RandomizerSettingKey _tycoonWallet, RandomizerSettingKey _affordable);
|
||||||
RandomizerSettingKey _noWallet,
|
|
||||||
RandomizerSettingKey _childWallet,
|
|
||||||
RandomizerSettingKey _adultWallet,
|
|
||||||
RandomizerSettingKey _giantWallet,
|
|
||||||
RandomizerSettingKey _tycoonWallet,
|
|
||||||
RandomizerSettingKey _affordable);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern void PlaceVanillaShopItems();
|
extern void PlaceVanillaShopItems();
|
||||||
|
@ -34,5 +28,3 @@ extern uint16_t GetRandomPrice(Rando::Location* loc, PriceSettingsStruct priceSe
|
||||||
extern uint16_t GetCheapBalancedPrice();
|
extern uint16_t GetCheapBalancedPrice();
|
||||||
extern int GetShopsanityReplaceAmount();
|
extern int GetShopsanityReplaceAmount();
|
||||||
extern Text GetIceTrapName(uint8_t id);
|
extern Text GetIceTrapName(uint8_t id);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -7,22 +7,20 @@
|
||||||
#define SINGULAR 1
|
#define SINGULAR 1
|
||||||
|
|
||||||
class Text {
|
class Text {
|
||||||
public:
|
public:
|
||||||
Text() = default;
|
Text() = default;
|
||||||
Text(std::string english_, std::string french_, std::string spanish_)
|
Text(std::string english_, std::string french_, std::string spanish_)
|
||||||
: english(std::move(english_)),
|
: english(std::move(english_)), french(std::move(french_)), spanish(std::move(spanish_)),
|
||||||
french(std::move(french_)),
|
german(std::move("")) {
|
||||||
spanish(std::move(spanish_)),
|
// german defaults to english text until a translation is provided.
|
||||||
german(std::move("")) {
|
german = english;
|
||||||
// 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_)), spanish(std::move(spanish_)),
|
||||||
french(std::move(french_)),
|
german(std::move(german_)) {
|
||||||
spanish(std::move(spanish_)),
|
}
|
||||||
german(std::move(german_)) {}
|
Text(std::string english_)
|
||||||
Text(std::string english_) : english(std::move(english_)), french(std::move("")), spanish(std::move("")), german(std::move("")) {
|
: english(std::move(english_)), french(std::move("")), spanish(std::move("")), german(std::move("")) {
|
||||||
// default unprovided languages to english text
|
// default unprovided languages to english text
|
||||||
french = spanish = german = english;
|
french = spanish = german = english;
|
||||||
}
|
}
|
||||||
|
@ -54,24 +52,24 @@ public:
|
||||||
|
|
||||||
const std::string& GetForLanguage(uint8_t language) const {
|
const std::string& GetForLanguage(uint8_t language) const {
|
||||||
switch (language) {
|
switch (language) {
|
||||||
case 0: //LANGUAGE_ENG: changed to resolve #include loops
|
case 0: // LANGUAGE_ENG: changed to resolve #include loops
|
||||||
return GetEnglish();
|
return GetEnglish();
|
||||||
case 2: //LANGUAGE_FRA:
|
case 2: // LANGUAGE_FRA:
|
||||||
return GetFrench();
|
return GetFrench();
|
||||||
case 1: //LANGUAGE_GER:
|
case 1: // LANGUAGE_GER:
|
||||||
return GetGerman();
|
return GetGerman();
|
||||||
default:
|
default:
|
||||||
return GetEnglish();
|
return GetEnglish();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Text operator+ (const Text& right) const {
|
Text operator+(const Text& right) const {
|
||||||
return Text{english + right.GetEnglish(), french + right.GetFrench(), spanish + right.GetSpanish(),
|
return Text{ english + right.GetEnglish(), french + right.GetFrench(), spanish + right.GetSpanish(),
|
||||||
german + right.GetGerman()};
|
german + right.GetGerman() };
|
||||||
}
|
}
|
||||||
|
|
||||||
Text operator+ (const std::string& right) const {
|
Text operator+(const std::string& right) const {
|
||||||
return Text{english + right, french + right, spanish + right, german + right};
|
return Text{ english + right, french + right, spanish + right, german + right };
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator==(const Text& right) const {
|
bool operator==(const Text& right) const {
|
||||||
|
@ -88,11 +86,11 @@ public:
|
||||||
|
|
||||||
void Replace(std::string oldStr, std::string newStr) {
|
void Replace(std::string oldStr, std::string newStr) {
|
||||||
|
|
||||||
for (std::string* str : {&english, &french, &spanish, &german}) {
|
for (std::string* str : { &english, &french, &spanish, &german }) {
|
||||||
size_t position = str->find(oldStr);
|
size_t position = str->find(oldStr);
|
||||||
while (position != std::string::npos) {
|
while (position != std::string::npos) {
|
||||||
str->replace(position, oldStr.length(), newStr);
|
str->replace(position, oldStr.length(), newStr);
|
||||||
position = str->find(oldStr);
|
position = str->find(oldStr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -123,15 +121,15 @@ public:
|
||||||
// Convert first char to upper case
|
// Convert first char to upper case
|
||||||
Text Capitalize(void) const {
|
Text Capitalize(void) const {
|
||||||
Text cap = *this + "";
|
Text cap = *this + "";
|
||||||
for (std::string* str : {&cap.english, &cap.french, &cap.spanish, &cap.german}) {
|
for (std::string* str : { &cap.english, &cap.french, &cap.spanish, &cap.german }) {
|
||||||
(*str)[0] = std::toupper((*str)[0]);
|
(*str)[0] = std::toupper((*str)[0]);
|
||||||
}
|
}
|
||||||
return cap;
|
return cap;
|
||||||
}
|
}
|
||||||
|
|
||||||
//find the appropriate bars that separate singular from plural
|
// find the appropriate bars that separate singular from plural
|
||||||
void SetForm(int form) {
|
void SetForm(int form) {
|
||||||
for (std::string* str : {&english, &french, &spanish, &german}) {
|
for (std::string* str : { &english, &french, &spanish, &german }) {
|
||||||
|
|
||||||
size_t firstBar = str->find('|');
|
size_t firstBar = str->find('|');
|
||||||
if (firstBar != std::string::npos) {
|
if (firstBar != std::string::npos) {
|
||||||
|
@ -151,7 +149,7 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//remove the remaining bar
|
// remove the remaining bar
|
||||||
this->Replace("|", "");
|
this->Replace("|", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -381,7 +381,7 @@ void Rando::StaticData::RegisterCrateLocations() {
|
||||||
locationTable[RC_GV_CRATE_BRIDGE_3] = Location::NLCrate(RC_GV_CRATE_BRIDGE_3, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -150), "Near Bridge Crate 3", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_3));
|
locationTable[RC_GV_CRATE_BRIDGE_3] = Location::NLCrate(RC_GV_CRATE_BRIDGE_3, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -150), "Near Bridge Crate 3", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_3));
|
||||||
locationTable[RC_GV_CRATE_BRIDGE_4] = Location::NLCrate(RC_GV_CRATE_BRIDGE_4, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -90), "Near Bridge Crate 4", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_4));
|
locationTable[RC_GV_CRATE_BRIDGE_4] = Location::NLCrate(RC_GV_CRATE_BRIDGE_4, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -90), "Near Bridge Crate 4", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_4));
|
||||||
locationTable[RC_GF_ARCHERY_LEFT_END_CHILD_CRATE] = Location::NLCrate(RC_GF_ARCHERY_LEFT_END_CHILD_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3443, -4876), "Archery Left End Child Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_LEFT_END_CHILD_CRATE));
|
locationTable[RC_GF_ARCHERY_LEFT_END_CHILD_CRATE] = Location::NLCrate(RC_GF_ARCHERY_LEFT_END_CHILD_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3443, -4876), "Archery Left End Child Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_LEFT_END_CHILD_CRATE));
|
||||||
|
|
||||||
// MQ Crates
|
// MQ Crates
|
||||||
// Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check
|
// Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check
|
||||||
locationTable[RC_DEKU_TREE_MQ_LOBBY_CRATE] = Location::Crate(RC_DEKU_TREE_MQ_LOBBY_CRATE, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(279, 333), "MQ Lobby Crate", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_CRATE));
|
locationTable[RC_DEKU_TREE_MQ_LOBBY_CRATE] = Location::Crate(RC_DEKU_TREE_MQ_LOBBY_CRATE, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(279, 333), "MQ Lobby Crate", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_CRATE));
|
||||||
|
@ -524,7 +524,7 @@ void Rando::StaticData::RegisterCrateLocations() {
|
||||||
locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-150, -1186), "MQ Big Mirror Crate 3", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3));
|
locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-150, -1186), "MQ Big Mirror Crate 3", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3));
|
||||||
locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(270, -1186), "MQ Big Mirror Crate 4", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4));
|
locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(270, -1186), "MQ Big Mirror Crate 4", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4));
|
||||||
locationTable[RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE] = Location::Crate(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-59, -1598), "MQ Maze Crate", RHT_CRATE_GERUDO_TRAINING_GROUND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE));
|
locationTable[RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE] = Location::Crate(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-59, -1598), "MQ Maze Crate", RHT_CRATE_GERUDO_TRAINING_GROUND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE));
|
||||||
|
|
||||||
// Small Crates
|
// Small Crates
|
||||||
// Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check
|
// Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check
|
||||||
locationTable[RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1] = Location::SmallCrate(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-141, -1945), "Platform Room Small Crate 1", RHT_CRATE_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1));
|
locationTable[RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1] = Location::SmallCrate(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-141, -1945), "Platform Room Small Crate 1", RHT_CRATE_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1));
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -354,7 +354,7 @@ void Rando::StaticData::InitItemTable() {
|
||||||
|
|
||||||
itemTable[RG_BOMBCHU_BAG] = Item(RG_BOMBCHU_BAG, Text{ "Bombchu Bag", "Sac de Missiles Teigneux", "Krabbelminentasche" }, ITEMTYPE_ITEM, RG_BOMBCHU_BAG, true, LOGIC_BOMBCHUS, RHT_BOMBCHU_BAG, RG_BOMBCHU_BAG, OBJECT_GI_BOMB_2, GID_BOMBCHU, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
|
itemTable[RG_BOMBCHU_BAG] = Item(RG_BOMBCHU_BAG, Text{ "Bombchu Bag", "Sac de Missiles Teigneux", "Krabbelminentasche" }, ITEMTYPE_ITEM, RG_BOMBCHU_BAG, true, LOGIC_BOMBCHUS, RHT_BOMBCHU_BAG, RG_BOMBCHU_BAG, OBJECT_GI_BOMB_2, GID_BOMBCHU, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
|
||||||
itemTable[RG_BOMBCHU_BAG].SetCustomDrawFunc(Randomizer_DrawBombchuBag);
|
itemTable[RG_BOMBCHU_BAG].SetCustomDrawFunc(Randomizer_DrawBombchuBag);
|
||||||
|
|
||||||
itemTable[RG_QUIVER_INF] = Item(RG_QUIVER_INF, Text{ "Infinite Quiver", "Carquois Infini", "Unendlicher Köcher" }, ITEMTYPE_ITEM, RG_QUIVER_INF, true, LOGIC_PROGRESSIVE_BOW, RHT_QUIVER_INF, RG_QUIVER_INF, OBJECT_GI_ARROWCASE, GID_QUIVER_50, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
|
itemTable[RG_QUIVER_INF] = Item(RG_QUIVER_INF, Text{ "Infinite Quiver", "Carquois Infini", "Unendlicher Köcher" }, ITEMTYPE_ITEM, RG_QUIVER_INF, true, LOGIC_PROGRESSIVE_BOW, RHT_QUIVER_INF, RG_QUIVER_INF, OBJECT_GI_ARROWCASE, GID_QUIVER_50, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
|
||||||
itemTable[RG_BOMB_BAG_INF] = Item(RG_BOMB_BAG_INF, Text{ "Infinite Bomb Bag", "Sac de Bombes Infini", "Unendliche Bombentasche" }, ITEMTYPE_ITEM, RG_BOMB_BAG_INF, true, LOGIC_PROGRESSIVE_BOMB_BAG, RHT_BOMB_BAG_INF, RG_BOMB_BAG_INF, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_40, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
|
itemTable[RG_BOMB_BAG_INF] = Item(RG_BOMB_BAG_INF, Text{ "Infinite Bomb Bag", "Sac de Bombes Infini", "Unendliche Bombentasche" }, ITEMTYPE_ITEM, RG_BOMB_BAG_INF, true, LOGIC_PROGRESSIVE_BOMB_BAG, RHT_BOMB_BAG_INF, RG_BOMB_BAG_INF, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_40, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
|
||||||
itemTable[RG_BULLET_BAG_INF] = Item(RG_BULLET_BAG_INF, Text{ "Infinite Bullet Bag", "Sac de Graines Infinis", "Unendliche Samentasche" }, ITEMTYPE_ITEM, RG_BULLET_BAG_INF, true, LOGIC_PROGRESSIVE_BULLET_BAG, RHT_BULLET_BAG_INF, RG_BULLET_BAG_INF, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
|
itemTable[RG_BULLET_BAG_INF] = Item(RG_BULLET_BAG_INF, Text{ "Infinite Bullet Bag", "Sac de Graines Infinis", "Unendliche Samentasche" }, ITEMTYPE_ITEM, RG_BULLET_BAG_INF, true, LOGIC_PROGRESSIVE_BULLET_BAG, RHT_BULLET_BAG_INF, RG_BULLET_BAG_INF, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
|
||||||
|
|
|
@ -773,7 +773,7 @@ void RegionTable_Init_WaterTemple() {
|
||||||
LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()),
|
LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()),
|
||||||
LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()),
|
LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()),
|
||||||
LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()),
|
LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()),
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
//Exits
|
//Exits
|
||||||
|
|
|
@ -215,7 +215,7 @@ void Settings::CreateOptions() {
|
||||||
OPT_BOOL(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD, "Shuffle Gerudo Membership Card", CVAR_RANDOMIZER_SETTING("ShuffleGerudoToken"), mOptionDescriptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD]);
|
OPT_BOOL(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD, "Shuffle Gerudo Membership Card", CVAR_RANDOMIZER_SETTING("ShuffleGerudoToken"), mOptionDescriptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD]);
|
||||||
OPT_U8(RSK_SHUFFLE_POTS, "Shuffle Pots", {"Off", "Dungeons", "Overworld", "All Pots"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShufflePots"), mOptionDescriptions[RSK_SHUFFLE_POTS], WidgetType::Combobox, RO_SHUFFLE_POTS_OFF);
|
OPT_U8(RSK_SHUFFLE_POTS, "Shuffle Pots", {"Off", "Dungeons", "Overworld", "All Pots"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShufflePots"), mOptionDescriptions[RSK_SHUFFLE_POTS], WidgetType::Combobox, RO_SHUFFLE_POTS_OFF);
|
||||||
OPT_U8(RSK_SHUFFLE_GRASS, "Shuffle Grass", {"Off", "Dungeons", "Overworld", "All Grass/Bushes"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleGrass"), mOptionDescriptions[RSK_SHUFFLE_GRASS], WidgetType::Combobox, RO_SHUFFLE_GRASS_OFF);
|
OPT_U8(RSK_SHUFFLE_GRASS, "Shuffle Grass", {"Off", "Dungeons", "Overworld", "All Grass/Bushes"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleGrass"), mOptionDescriptions[RSK_SHUFFLE_GRASS], WidgetType::Combobox, RO_SHUFFLE_GRASS_OFF);
|
||||||
OPT_U8(RSK_SHUFFLE_CRATES, "Shuffle Crates", {"Off", "Dungeons", "Overworld", "All Crates"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleCrates"), mOptionDescriptions[RSK_SHUFFLE_CRATES], WidgetType::Combobox, RO_SHUFFLE_CRATES_OFF);
|
OPT_U8(RSK_SHUFFLE_CRATES, "Shuffle Crates", {"Off", "Dungeons", "Overworld", "All Crates"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleCrates"), mOptionDescriptions[RSK_SHUFFLE_CRATES], WidgetType::Combobox, RO_SHUFFLE_CRATES_OFF);
|
||||||
OPT_BOOL(RSK_SHUFFLE_FISHING_POLE, "Shuffle Fishing Pole", CVAR_RANDOMIZER_SETTING("ShuffleFishingPole"), mOptionDescriptions[RSK_SHUFFLE_FISHING_POLE]);
|
OPT_BOOL(RSK_SHUFFLE_FISHING_POLE, "Shuffle Fishing Pole", CVAR_RANDOMIZER_SETTING("ShuffleFishingPole"), mOptionDescriptions[RSK_SHUFFLE_FISHING_POLE]);
|
||||||
OPT_U8(RSK_SHUFFLE_MERCHANTS, "Shuffle Merchants", {"Off", "Bean Merchant Only", "All But Beans", "All"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleMerchants"), mOptionDescriptions[RSK_SHUFFLE_MERCHANTS], WidgetType::Combobox, RO_SHUFFLE_MERCHANTS_OFF, IMFLAG_NONE);
|
OPT_U8(RSK_SHUFFLE_MERCHANTS, "Shuffle Merchants", {"Off", "Bean Merchant Only", "All But Beans", "All"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleMerchants"), mOptionDescriptions[RSK_SHUFFLE_MERCHANTS], WidgetType::Combobox, RO_SHUFFLE_MERCHANTS_OFF, IMFLAG_NONE);
|
||||||
OPT_U8(RSK_MERCHANT_PRICES, "Merchant Prices", {"Vanilla", "Cheap Balanced", "Balanced", "Fixed", "Range", "Set By Wallet"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("MerchantPrices"), mOptionDescriptions[RSK_MERCHANT_PRICES], WidgetType::Combobox, RO_PRICE_VANILLA, false, IMFLAG_NONE);
|
OPT_U8(RSK_MERCHANT_PRICES, "Merchant Prices", {"Vanilla", "Cheap Balanced", "Balanced", "Fixed", "Range", "Set By Wallet"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("MerchantPrices"), mOptionDescriptions[RSK_MERCHANT_PRICES], WidgetType::Combobox, RO_PRICE_VANILLA, false, IMFLAG_NONE);
|
||||||
|
|
|
@ -36,7 +36,7 @@ public class ShipOfHarkinian : SimpleTCPPack<SimpleTCPServerConnector>
|
||||||
new("Fire Keese", "spawn_fire_keese") { Category = "Spawn Enemies/Objects", Price = 15, Description = "Do not bring close to Deku Shields. Or do, we're not your parents." },
|
new("Fire Keese", "spawn_fire_keese") { Category = "Spawn Enemies/Objects", Price = 15, Description = "Do not bring close to Deku Shields. Or do, we're not your parents." },
|
||||||
new("Wolfos", "spawn_wolfos") { Category = "Spawn Enemies/Objects", Price = 15, Description = "Awooooooo" },
|
new("Wolfos", "spawn_wolfos") { Category = "Spawn Enemies/Objects", Price = 15, Description = "Awooooooo" },
|
||||||
new("Wallmaster", "spawn_wallmaster") { Category = "Spawn Enemies/Objects", Price = 30, Description = "Need a hand? Try it together with electrocuting Link." },
|
new("Wallmaster", "spawn_wallmaster") { Category = "Spawn Enemies/Objects", Price = 30, Description = "Need a hand? Try it together with electrocuting Link." },
|
||||||
|
|
||||||
// Link Modifiers
|
// Link Modifiers
|
||||||
new("Take Half Damage", "take_half_damage") { Category = "Link Modifiers", Duration = 30, Price = 20, Description = "Halves the damage Link takes. Won't save the streamer if they're bad at the game though." },
|
new("Take Half Damage", "take_half_damage") { Category = "Link Modifiers", Duration = 30, Price = 20, Description = "Halves the damage Link takes. Won't save the streamer if they're bad at the game though." },
|
||||||
new("Take Double Damage", "take_double_damage") { Category = "Link Modifiers", Duration = 30, Price = 30, Description = "Doubles the damage Link takes. Turns OoT into Dark Souls.. kinda." },
|
new("Take Double Damage", "take_double_damage") { Category = "Link Modifiers", Duration = 30, Price = 30, Description = "Doubles the damage Link takes. Turns OoT into Dark Souls.. kinda." },
|
||||||
|
@ -52,7 +52,7 @@ public class ShipOfHarkinian : SimpleTCPPack<SimpleTCPServerConnector>
|
||||||
new("Disable Ledge Grabs", "no_ledge_grabs") { Category = "Link Modifiers", Duration = 30, Price = 15, Description = "Jump! Pull up-- Oh, woops." },
|
new("Disable Ledge Grabs", "no_ledge_grabs") { Category = "Link Modifiers", Duration = 30, Price = 15, Description = "Jump! Pull up-- Oh, woops." },
|
||||||
new("Random Wind", "random_wind") { Category = "Link Modifiers", Duration = 30, Price = 30, Description = "A wind blows, which changes to a random direction every 5 seconds." },
|
new("Random Wind", "random_wind") { Category = "Link Modifiers", Duration = 30, Price = 30, Description = "A wind blows, which changes to a random direction every 5 seconds." },
|
||||||
new("Random Bonks When Rolling", "random_bonks") { Category = "Link Modifiers", Duration = 60, Price = 15, Description = "Why do I keep bonking while there's nothing here!?" },
|
new("Random Bonks When Rolling", "random_bonks") { Category = "Link Modifiers", Duration = 60, Price = 15, Description = "Why do I keep bonking while there's nothing here!?" },
|
||||||
|
|
||||||
// Hurt or Heal Link
|
// Hurt or Heal Link
|
||||||
new("Empty Heart", "empty_heart") { Category = "Hurt/Heal Link", Quantity = 20, Price = 10, Description = "Damage Link for however many hearts you choose." },
|
new("Empty Heart", "empty_heart") { Category = "Hurt/Heal Link", Quantity = 20, Price = 10, Description = "Damage Link for however many hearts you choose." },
|
||||||
new("Fill Heart", "fill_heart") { Category = "Hurt/Heal Link", Quantity = 20, Price = 5, Description = "Heal Link for however many hearts you choose." },
|
new("Fill Heart", "fill_heart") { Category = "Hurt/Heal Link", Quantity = 20, Price = 5, Description = "Heal Link for however many hearts you choose." },
|
||||||
|
@ -63,7 +63,7 @@ public class ShipOfHarkinian : SimpleTCPPack<SimpleTCPServerConnector>
|
||||||
new("Freeze Link", "freeze_link") { Category = "Hurt/Heal Link", Price = 20, Description = "FREEZE! Don't move!" },
|
new("Freeze Link", "freeze_link") { Category = "Hurt/Heal Link", Price = 20, Description = "FREEZE! Don't move!" },
|
||||||
new("Electrocute Link", "electrocute_link") { Category = "Hurt/Heal Link", Price = 20, Description = "Ganon used Thundershock!" },
|
new("Electrocute Link", "electrocute_link") { Category = "Hurt/Heal Link", Price = 20, Description = "Ganon used Thundershock!" },
|
||||||
new("Kill Link", "kill_link") { Category = "Hurt/Heal Link", Price = 150, Description = "Rest in RIP." },
|
new("Kill Link", "kill_link") { Category = "Hurt/Heal Link", Price = 150, Description = "Rest in RIP." },
|
||||||
|
|
||||||
// Give Items and Consumables
|
// Give Items and Consumables
|
||||||
new("Add Heart Container", "add_heart_container") { Category = "Give Items/Consumables", Price = 25, Description = "The limit is 20 heart containers." },
|
new("Add Heart Container", "add_heart_container") { Category = "Give Items/Consumables", Price = 25, Description = "The limit is 20 heart containers." },
|
||||||
new("Fill Magic", "fill_magic") { Category = "Give Items/Consumables", Price = 20, Description = "Fills the entire magic bar. Abra-kadabra." },
|
new("Fill Magic", "fill_magic") { Category = "Give Items/Consumables", Price = 20, Description = "Fills the entire magic bar. Abra-kadabra." },
|
||||||
|
@ -76,7 +76,7 @@ public class ShipOfHarkinian : SimpleTCPPack<SimpleTCPServerConnector>
|
||||||
new("Refill Slingshot Seeds", "refill_seeds") { Category = "Give Items/Consumables", Quantity = 30, Price = 1, Description = "Only works when the player already has a Slingshot." },
|
new("Refill Slingshot Seeds", "refill_seeds") { Category = "Give Items/Consumables", Quantity = 30, Price = 1, Description = "Only works when the player already has a Slingshot." },
|
||||||
new("Refill Arrows", "refill_arrows") { Category = "Give Items/Consumables", Price = 1, Description = "Only works when the player already has a bow." },
|
new("Refill Arrows", "refill_arrows") { Category = "Give Items/Consumables", Price = 1, Description = "Only works when the player already has a bow." },
|
||||||
new("Refill Bombchus", "refill_bombchus") { Category = "Give Items/Consumables", Quantity = 30, Price = 5, Description = "Only works when the player already had Bombchus before." },
|
new("Refill Bombchus", "refill_bombchus") { Category = "Give Items/Consumables", Quantity = 30, Price = 5, Description = "Only works when the player already had Bombchus before." },
|
||||||
|
|
||||||
// Take Items and Consumables
|
// Take Items and Consumables
|
||||||
new("Remove Heart Container", "remove_heart_container") { Category = "Take Items/Consumables", Price = 35, Description = "The limit is 1 heart. But you wouldn't go that far, would you?" },
|
new("Remove Heart Container", "remove_heart_container") { Category = "Take Items/Consumables", Price = 35, Description = "The limit is 1 heart. But you wouldn't go that far, would you?" },
|
||||||
new("Empty Magic", "empty_magic") { Category = "Take Items/Consumables", Price = 25, Description = "Empties the entire magic bar. They didn't need it anyway." },
|
new("Empty Magic", "empty_magic") { Category = "Take Items/Consumables", Price = 25, Description = "Empties the entire magic bar. They didn't need it anyway." },
|
||||||
|
@ -89,25 +89,25 @@ public class ShipOfHarkinian : SimpleTCPPack<SimpleTCPServerConnector>
|
||||||
new("Take Slingshot Seeds", "take_seeds") { Category = "Take Items/Consumables", Quantity = 30, Price = 2, Description = "Who even uses the Slingshot?" },
|
new("Take Slingshot Seeds", "take_seeds") { Category = "Take Items/Consumables", Quantity = 30, Price = 2, Description = "Who even uses the Slingshot?" },
|
||||||
new("Take Arrows", "take_arrows") { Category = "Take Items/Consumables", Quantity = 30, Price = 2, Description = "*ploink*" },
|
new("Take Arrows", "take_arrows") { Category = "Take Items/Consumables", Quantity = 30, Price = 2, Description = "*ploink*" },
|
||||||
new("Take Bombchus", "take_bombchus") { Category = "Take Items/Consumables", Quantity = 30, Price = 10, Description = "Hopefully they still have some regular bombs." },
|
new("Take Bombchus", "take_bombchus") { Category = "Take Items/Consumables", Quantity = 30, Price = 10, Description = "Hopefully they still have some regular bombs." },
|
||||||
|
|
||||||
// Link Size Modifiers
|
// Link Size Modifiers
|
||||||
new("Giant Lonk", "giant_link") { Category = "Change Link's Size", Duration = 30, Price = 20, Description = "Big Lonk equals big sword." },
|
new("Giant Lonk", "giant_link") { Category = "Change Link's Size", Duration = 30, Price = 20, Description = "Big Lonk equals big sword." },
|
||||||
new("Minish Link", "minish_link") { Category = "Change Link's Size", Duration = 30, Price = 20, Description = "They say size doesn't matter." },
|
new("Minish Link", "minish_link") { Category = "Change Link's Size", Duration = 30, Price = 20, Description = "They say size doesn't matter." },
|
||||||
new("Paper Link", "paper_link") { Category = "Change Link's Size", Duration = 30, Price = 20, Description = "We might not have a Zelda variant of Paper Mario, but this gets pretty close." },
|
new("Paper Link", "paper_link") { Category = "Change Link's Size", Duration = 30, Price = 20, Description = "We might not have a Zelda variant of Paper Mario, but this gets pretty close." },
|
||||||
new("Squished Link", "squished_link") { Category = "Change Link's Size", Duration = 30, Price = 20, Description = "Drop an anvil on Link, but the anvil is invisible." },
|
new("Squished Link", "squished_link") { Category = "Change Link's Size", Duration = 30, Price = 20, Description = "Drop an anvil on Link, but the anvil is invisible." },
|
||||||
new("Invisible Link", "invisible_link") { Category = "Change Link's Size", Duration = 30, Price = 20, Description = "Now you see me, now you don't." },
|
new("Invisible Link", "invisible_link") { Category = "Change Link's Size", Duration = 30, Price = 20, Description = "Now you see me, now you don't." },
|
||||||
|
|
||||||
// Generic Effects
|
// Generic Effects
|
||||||
new("Random Bomb Fuse Timer", "random_bomb_timer") { Category = "Generic Effects", Duration = 60, Price = 5, Description = "Sets the timer for new bombs to either super short, super long or something inbetween (does not work for bombchus)." },
|
new("Random Bomb Fuse Timer", "random_bomb_timer") { Category = "Generic Effects", Duration = 60, Price = 5, Description = "Sets the timer for new bombs to either super short, super long or something inbetween (does not work for bombchus)." },
|
||||||
new("Set Time to Dawn", "set_time_to_dawn") { Category = "Generic Effects", Price = 25, Description = "Sets the time to early day. Might require an area reload to take effect." },
|
new("Set Time to Dawn", "set_time_to_dawn") { Category = "Generic Effects", Price = 25, Description = "Sets the time to early day. Might require an area reload to take effect." },
|
||||||
new("Set Time to Dusk", "set_time_to_dusk") { Category = "Generic Effects", Price = 25, Description = "Sets the time to early night. Might require an area reload to take effect." },
|
new("Set Time to Dusk", "set_time_to_dusk") { Category = "Generic Effects", Price = 25, Description = "Sets the time to early night. Might require an area reload to take effect." },
|
||||||
|
|
||||||
// Visual Effects
|
// Visual Effects
|
||||||
new("No UI", "no_ui") { Category = "Visual Effects", Duration = 60, Price = 20, Description = "No need to see ammo counts. The cinematic experience." },
|
new("No UI", "no_ui") { Category = "Visual Effects", Duration = 60, Price = 20, Description = "No need to see ammo counts. The cinematic experience." },
|
||||||
new("Rainstorm", "rainstorm") { Category = "Visual Effects", Duration = 30, Price = 5, Description = "Summon a rainstorm for a sad moment." },
|
new("Rainstorm", "rainstorm") { Category = "Visual Effects", Duration = 30, Price = 5, Description = "Summon a rainstorm for a sad moment." },
|
||||||
new("Debug Mode", "debug_mode") { Category = "Visual Effects", Duration = 30, Price = 20, Description = "if (debug_mode) { ShowCollision(); }" },
|
new("Debug Mode", "debug_mode") { Category = "Visual Effects", Duration = 30, Price = 20, Description = "if (debug_mode) { ShowCollision(); }" },
|
||||||
new("Randomize Cosmetics", "random_cosmetics") { Category = "Visual Effects", Price = 30, Description = "Randomize most cosmetics options. Cosmetics changed by bidding wars are unaffected." },
|
new("Randomize Cosmetics", "random_cosmetics") { Category = "Visual Effects", Price = 30, Description = "Randomize most cosmetics options. Cosmetics changed by bidding wars are unaffected." },
|
||||||
|
|
||||||
// Controls
|
// Controls
|
||||||
new("No Z Button", "no_z_button") { Category = "Controls", Duration = 30, Price = 20, Description = "No sidehops, no backflips, no jump attacks, no camera adjustments." },
|
new("No Z Button", "no_z_button") { Category = "Controls", Duration = 30, Price = 20, Description = "No sidehops, no backflips, no jump attacks, no camera adjustments." },
|
||||||
new("Reverse Controls", "reverse_controls") { Category = "Controls", Duration = 60, Price = 25, Description = "Just hold the controller upside down." },
|
new("Reverse Controls", "reverse_controls") { Category = "Controls", Duration = 60, Price = 25, Description = "Just hold the controller upside down." },
|
||||||
|
@ -115,7 +115,7 @@ public class ShipOfHarkinian : SimpleTCPPack<SimpleTCPServerConnector>
|
||||||
new("Press Random Buttons", "press_random_buttons") { Category = "Controls", Duration = 30, Price = 25, Description = "Press random buttons on the controller for the duration. Maybe it'll help (spoiler: probably not)." },
|
new("Press Random Buttons", "press_random_buttons") { Category = "Controls", Duration = 30, Price = 25, Description = "Press random buttons on the controller for the duration. Maybe it'll help (spoiler: probably not)." },
|
||||||
new("Clear C-Buttons", "clear_cbuttons") { Category = "Controls", Price = 10, Description = "Clear the assigned items from the C-buttons." },
|
new("Clear C-Buttons", "clear_cbuttons") { Category = "Controls", Price = 10, Description = "Clear the assigned items from the C-buttons." },
|
||||||
new("Clear D-pad", "clear_dpad") { Category = "Controls", Price = 10, Description = "Clear the assigned items from the D-pad." },
|
new("Clear D-pad", "clear_dpad") { Category = "Controls", Price = 10, Description = "Clear the assigned items from the D-pad." },
|
||||||
|
|
||||||
// Teleport Player
|
// Teleport Player
|
||||||
new("Link's House", "tp_links_house") { Category = "Teleport Player", Price = 100, Description = "Teleport the player to Link's House. Welcome Home!" },
|
new("Link's House", "tp_links_house") { Category = "Teleport Player", Price = 100, Description = "Teleport the player to Link's House. Welcome Home!" },
|
||||||
new("Minuet Destination", "tp_minuet") { Category = "Teleport Player", Price = 100, Description = "Teleport the player to Sacred Forest Meadow." },
|
new("Minuet Destination", "tp_minuet") { Category = "Teleport Player", Price = 100, Description = "Teleport the player to Sacred Forest Meadow." },
|
||||||
|
@ -124,7 +124,7 @@ public class ShipOfHarkinian : SimpleTCPPack<SimpleTCPServerConnector>
|
||||||
new("Requiem Destination", "tp_requiem") { Category = "Teleport Player", Price = 100, Description = "Teleport the player to Desert Colossus." },
|
new("Requiem Destination", "tp_requiem") { Category = "Teleport Player", Price = 100, Description = "Teleport the player to Desert Colossus." },
|
||||||
new("Nocturne Destination", "tp_nocturne") { Category = "Teleport Player", Price = 100, Description = "Teleport the player to the Raveyard." },
|
new("Nocturne Destination", "tp_nocturne") { Category = "Teleport Player", Price = 100, Description = "Teleport the player to the Raveyard." },
|
||||||
new("Prelude Destination", "tp_prelude") { Category = "Teleport Player", Price = 100, Description = "Teleport the player to the Temple of Time." },
|
new("Prelude Destination", "tp_prelude") { Category = "Teleport Player", Price = 100, Description = "Teleport the player to the Temple of Time." },
|
||||||
|
|
||||||
// Tunic Color (Bidding War)
|
// Tunic Color (Bidding War)
|
||||||
new("Tunic Color", "tunic", ItemKind.BidWar)
|
new("Tunic Color", "tunic", ItemKind.BidWar)
|
||||||
{
|
{
|
||||||
|
@ -139,7 +139,7 @@ public class ShipOfHarkinian : SimpleTCPPack<SimpleTCPServerConnector>
|
||||||
new Parameter("Brown", "brown"),
|
new Parameter("Brown", "brown"),
|
||||||
new Parameter("Black", "black"))
|
new Parameter("Black", "black"))
|
||||||
},
|
},
|
||||||
|
|
||||||
// Navi Color (Bidding War)
|
// Navi Color (Bidding War)
|
||||||
new("Navi Color", "navi", ItemKind.BidWar)
|
new("Navi Color", "navi", ItemKind.BidWar)
|
||||||
{
|
{
|
||||||
|
@ -154,7 +154,7 @@ public class ShipOfHarkinian : SimpleTCPPack<SimpleTCPServerConnector>
|
||||||
new Parameter("Brown", "brown"),
|
new Parameter("Brown", "brown"),
|
||||||
new Parameter("Black", "black"))
|
new Parameter("Black", "black"))
|
||||||
},
|
},
|
||||||
|
|
||||||
// Link's Hair Color (Bidding War)
|
// Link's Hair Color (Bidding War)
|
||||||
new("Link's Hair Color", "hair", ItemKind.BidWar)
|
new("Link's Hair Color", "hair", ItemKind.BidWar)
|
||||||
{
|
{
|
||||||
|
|
|
@ -28,34 +28,34 @@ struct ShipInit {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Register a function to execute on boot and (optionally) in other situations
|
* @brief Register a function to execute on boot and (optionally) in other situations
|
||||||
*
|
*
|
||||||
* @param initFunc The function to execute
|
* @param initFunc The function to execute
|
||||||
* @param updatePaths Strings to specify additional situations in which to execute the function
|
* @param updatePaths Strings to specify additional situations in which to execute the function
|
||||||
*
|
*
|
||||||
* ### Examples:
|
* ### Examples:
|
||||||
*
|
*
|
||||||
* #### Execute function `bar` on boot
|
* #### Execute function `bar` on boot
|
||||||
*
|
*
|
||||||
* ```cpp
|
* ```cpp
|
||||||
* static RegisterShipInitFunc foo(bar);
|
* static RegisterShipInitFunc foo(bar);
|
||||||
* ```
|
* ```
|
||||||
*
|
*
|
||||||
* #### Execute function `bar` on boot and when the CVar `baz` might have changed
|
* #### Execute function `bar` on boot and when the CVar `baz` might have changed
|
||||||
*
|
*
|
||||||
* ```cpp
|
* ```cpp
|
||||||
* static RegisterShipInitFunc foo(bar, { "baz" });
|
* static RegisterShipInitFunc foo(bar, { "baz" });
|
||||||
* ```
|
* ```
|
||||||
*
|
*
|
||||||
* #### Execute function `bar` on boot and when `IS_RANDO` might have changed
|
* #### Execute function `bar` on boot and when `IS_RANDO` might have changed
|
||||||
*
|
*
|
||||||
* ```cpp
|
* ```cpp
|
||||||
* static RegisterShipInitFunc foo(bar, { "IS_RANDO" });
|
* static RegisterShipInitFunc foo(bar, { "IS_RANDO" });
|
||||||
* ```
|
* ```
|
||||||
*
|
*
|
||||||
* ### Additional Information:
|
* ### Additional Information:
|
||||||
*
|
*
|
||||||
* To get a better sense of when your function will be executed
|
* To get a better sense of when your function will be executed
|
||||||
* you can look for `ShipInit::Init` calls throughout the codebase
|
* you can look for `ShipInit::Init` calls throughout the codebase
|
||||||
*/
|
*/
|
||||||
struct RegisterShipInitFunc {
|
struct RegisterShipInitFunc {
|
||||||
RegisterShipInitFunc(std::function<void()> initFunc, const std::set<std::string>& updatePaths = {}) {
|
RegisterShipInitFunc(std::function<void()> initFunc, const std::set<std::string>& updatePaths = {}) {
|
||||||
|
|
|
@ -32,14 +32,15 @@
|
||||||
#include "SohModals.h"
|
#include "SohModals.h"
|
||||||
|
|
||||||
namespace SohGui {
|
namespace SohGui {
|
||||||
void SetupHooks();
|
void SetupHooks();
|
||||||
void SetupGuiElements();
|
void SetupGuiElements();
|
||||||
void Draw();
|
void Draw();
|
||||||
void Destroy();
|
void Destroy();
|
||||||
void RegisterPopup(std::string title, std::string message, std::string button1 = "OK", std::string button2 = "", std::function<void()> button1callback = nullptr, std::function<void()> button2callback = nullptr);
|
void RegisterPopup(std::string title, std::string message, std::string button1 = "OK", std::string button2 = "",
|
||||||
void ShowRandomizerSettingsMenu();
|
std::function<void()> button1callback = nullptr, std::function<void()> button2callback = nullptr);
|
||||||
UIWidgets::Colors GetMenuThemeColor();
|
void ShowRandomizerSettingsMenu();
|
||||||
}
|
UIWidgets::Colors GetMenuThemeColor();
|
||||||
|
} // namespace SohGui
|
||||||
|
|
||||||
#define THEME_COLOR SohGui::GetMenuThemeColor()
|
#define THEME_COLOR SohGui::GetMenuThemeColor()
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue