mirror of
https://github.com/ZDoom/gzdoom.git
synced 2025-02-27 22:31:02 +00:00
Only replace Strife dialogue content if the default strings from zd_extra.pk3 are present.
If not, use the dialogue file's content directly.
This commit is contained in:
parent
3a440a5fa7
commit
6d19374ae8
3 changed files with 36 additions and 4 deletions
|
@ -208,6 +208,32 @@ size_t FStringTable::ProcessEscapes (char *iptr)
|
||||||
return optr - sptr;
|
return optr - sptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FStringTable::exists(const char *name)
|
||||||
|
{
|
||||||
|
// Checks if the given key exists in any one of the default string tables that are valid for all languages.
|
||||||
|
// To replace IWAD content this condition must be true.
|
||||||
|
if (name == nullptr || *name == 0)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
FName nm(name, true);
|
||||||
|
if (nm != NAME_None)
|
||||||
|
{
|
||||||
|
uint32_t defaultStrings[] = { MAKE_ID('*', '*', '*', 0), MAKE_ID('*', 0, 0, 0), MAKE_ID('*', '*', 0, 0) };
|
||||||
|
|
||||||
|
for (auto mapid : defaultStrings)
|
||||||
|
{
|
||||||
|
auto map = allStrings.CheckKey(mapid);
|
||||||
|
if (map)
|
||||||
|
{
|
||||||
|
auto item = map->CheckKey(nm);
|
||||||
|
if (item) return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Finds a string by name and returns its value
|
// Finds a string by name and returns its value
|
||||||
const char *FStringTable::operator[] (const char *name) const
|
const char *FStringTable::operator[] (const char *name) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -71,6 +71,7 @@ public:
|
||||||
|
|
||||||
const char *operator() (const char *name) const; // Never returns NULL
|
const char *operator() (const char *name) const; // Never returns NULL
|
||||||
const char *operator[] (const char *name) const; // Can return NULL
|
const char *operator[] (const char *name) const; // Can return NULL
|
||||||
|
bool exists(const char *name);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
|
@ -352,7 +352,7 @@ static FStrifeDialogueNode *ReadRetailNode (FLevelLocals *Level, const char *nam
|
||||||
if (name)
|
if (name)
|
||||||
{
|
{
|
||||||
FStringf label("$TXT_DLG_%s_d%d_%s", name, int(pos), TokenFromString(speech.Dialogue).GetChars());
|
FStringf label("$TXT_DLG_%s_d%d_%s", name, int(pos), TokenFromString(speech.Dialogue).GetChars());
|
||||||
node->Dialogue = label;
|
node->Dialogue = GStrings.exists(label)? label : FString(speech.Dialogue);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -376,6 +376,8 @@ static FStrifeDialogueNode *ReadRetailNode (FLevelLocals *Level, const char *nam
|
||||||
label.ReplaceChars(' ', '_');
|
label.ReplaceChars(' ', '_');
|
||||||
label.ReplaceChars('\'', '_');
|
label.ReplaceChars('\'', '_');
|
||||||
node->SpeakerName.Format("$TXT_SPEAKER_%s", label.GetChars());
|
node->SpeakerName.Format("$TXT_SPEAKER_%s", label.GetChars());
|
||||||
|
if (!GStrings.exists(node->SpeakerName)) node->SpeakerName = speech.Name;
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -446,7 +448,7 @@ static FStrifeDialogueNode *ReadTeaserNode (FLevelLocals *Level, const char *nam
|
||||||
if (name)
|
if (name)
|
||||||
{
|
{
|
||||||
FStringf label("$TXT_DLG_%s_d%d_%s", name, pos, TokenFromString(speech.Dialogue).GetChars());
|
FStringf label("$TXT_DLG_%s_d%d_%s", name, pos, TokenFromString(speech.Dialogue).GetChars());
|
||||||
node->Dialogue = label;
|
node->Dialogue = GStrings.exists(label)? label : FString(speech.Dialogue);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -475,6 +477,7 @@ static FStrifeDialogueNode *ReadTeaserNode (FLevelLocals *Level, const char *nam
|
||||||
label.ReplaceChars(' ', '_');
|
label.ReplaceChars(' ', '_');
|
||||||
label.ReplaceChars('\'', '_');
|
label.ReplaceChars('\'', '_');
|
||||||
node->SpeakerName.Format("$TXT_SPEAKER_%s", label.GetChars());
|
node->SpeakerName.Format("$TXT_SPEAKER_%s", label.GetChars());
|
||||||
|
if (!GStrings.exists(node->SpeakerName)) node->SpeakerName = speech.Name;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -566,6 +569,8 @@ static void ParseReplies (const char *name, int pos, FStrifeDialogueReply **repl
|
||||||
if (name)
|
if (name)
|
||||||
{
|
{
|
||||||
FStringf label("$TXT_RPLY%d_%s_d%d_%s", j, name, pos, TokenFromString(rsp->Reply).GetChars());
|
FStringf label("$TXT_RPLY%d_%s_d%d_%s", j, name, pos, TokenFromString(rsp->Reply).GetChars());
|
||||||
|
reply->Reply = GStrings.exists(label)? label : FString(rsp->Reply);
|
||||||
|
|
||||||
reply->Reply = label;
|
reply->Reply = label;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -590,7 +595,7 @@ static void ParseReplies (const char *name, int pos, FStrifeDialogueReply **repl
|
||||||
if (name)
|
if (name)
|
||||||
{
|
{
|
||||||
FStringf label("$TXT_RYES%d_%s_d%d_%s", j, name, pos, TokenFromString(rsp->Yes).GetChars());
|
FStringf label("$TXT_RYES%d_%s_d%d_%s", j, name, pos, TokenFromString(rsp->Yes).GetChars());
|
||||||
reply->QuickYes = label;
|
reply->QuickYes = GStrings.exists(label)? label : FString(rsp->Yes);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -600,7 +605,7 @@ static void ParseReplies (const char *name, int pos, FStrifeDialogueReply **repl
|
||||||
if (reply->ItemCheck[0].Item != 0)
|
if (reply->ItemCheck[0].Item != 0)
|
||||||
{
|
{
|
||||||
FStringf label("$TXT_RNO%d_%s_d%d_%s", j, name, pos, TokenFromString(rsp->No).GetChars());
|
FStringf label("$TXT_RNO%d_%s_d%d_%s", j, name, pos, TokenFromString(rsp->No).GetChars());
|
||||||
reply->QuickNo = label;
|
reply->QuickNo = GStrings.exists(label)? label : FString(rsp->No);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue