mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-24 13:01:48 +00:00
This commit is contained in:
commit
a61f76dc89
7 changed files with 38 additions and 15 deletions
|
@ -91,6 +91,8 @@ conversation // Starts a dialog.
|
|||
panel = <string>; // Name of lump to render as the background.
|
||||
voice = <string>; // Narration sound lump.
|
||||
dialog = <string>; // Dialog of the page.
|
||||
goodbye = <string>; // Custom goodbye message. If omitted then the
|
||||
// generic goodbyes will be displayed instead.
|
||||
drop = <integer>; // mobj for the object to drop if the actor is
|
||||
// killed.
|
||||
link = <integer>; // Page to jump to if all ifitem conditions are
|
||||
|
|
|
@ -584,6 +584,7 @@ xx(Dialog)
|
|||
xx(Ifitem)
|
||||
xx(Choice)
|
||||
xx(Link)
|
||||
xx(Goodbye)
|
||||
|
||||
// Special menus
|
||||
xx(Mainmenu)
|
||||
|
|
|
@ -556,6 +556,7 @@ FStrifeDialogueNode::~FStrifeDialogueNode ()
|
|||
{
|
||||
if (SpeakerName != NULL) delete[] SpeakerName;
|
||||
if (Dialogue != NULL) delete[] Dialogue;
|
||||
if (Goodbye != nullptr) delete[] Goodbye;
|
||||
FStrifeDialogueReply *tokill = Children;
|
||||
while (tokill != NULL)
|
||||
{
|
||||
|
@ -743,10 +744,25 @@ public:
|
|||
++i;
|
||||
V_FreeBrokenLines (ReplyLines);
|
||||
}
|
||||
const char *goodbyestr = CurNode->Goodbye;
|
||||
if (goodbyestr == nullptr)
|
||||
{
|
||||
char goodbye[25];
|
||||
mysnprintf(goodbye, countof(goodbye), "TXT_RANDOMGOODBYE_%d", 1+(pr_randomspeech() % NUM_RANDOM_GOODBYES));
|
||||
const char *goodbyestr = GStrings[goodbye];
|
||||
if (goodbyestr == NULL) goodbyestr = "Bye.";
|
||||
mysnprintf(goodbye, countof(goodbye), "TXT_RANDOMGOODBYE_%d", 1 + (pr_randomspeech() % NUM_RANDOM_GOODBYES));
|
||||
goodbyestr = GStrings[goodbye];
|
||||
}
|
||||
else if (strncmp(goodbyestr, "RANDOM_", 7) == 0)
|
||||
{
|
||||
FString byetext;
|
||||
|
||||
byetext.Format("TXT_%s_%02d", goodbyestr, 1 + (pr_randomspeech() % NUM_RANDOM_LINES));
|
||||
goodbyestr = GStrings[byetext];
|
||||
}
|
||||
else if (goodbyestr[0] == '$')
|
||||
{
|
||||
goodbyestr = GStrings(goodbyestr + 1);
|
||||
}
|
||||
if (goodbyestr == nullptr) goodbyestr = "Bye.";
|
||||
mResponses.Push(mResponseLines.Size());
|
||||
mResponseLines.Push(FString(goodbyestr));
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ struct FStrifeDialogueNode
|
|||
FSoundID SpeakerVoice;
|
||||
FTextureID Backdrop;
|
||||
char *Dialogue;
|
||||
char *Goodbye = nullptr; // must init to null for binary scripts to work as intended
|
||||
|
||||
FStrifeDialogueReply *Children;
|
||||
};
|
||||
|
|
|
@ -286,6 +286,7 @@ class USDFParser : public UDMFParserBase
|
|||
|
||||
FString SpeakerName;
|
||||
FString Dialogue;
|
||||
FString Goodbye;
|
||||
|
||||
while (!sc.CheckToken('}'))
|
||||
{
|
||||
|
@ -331,7 +332,9 @@ class USDFParser : public UDMFParserBase
|
|||
node->ItemCheckNode = CheckInt(key);
|
||||
break;
|
||||
|
||||
|
||||
case NAME_Goodbye:
|
||||
Goodbye = CheckString(key);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -354,6 +357,7 @@ class USDFParser : public UDMFParserBase
|
|||
}
|
||||
node->SpeakerName = ncopystring(SpeakerName);
|
||||
node->Dialogue = ncopystring(Dialogue);
|
||||
node->Goodbye = ncopystring(Goodbye);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -265,7 +265,6 @@ void DMovePoly::Serialize(FSerializer &arc)
|
|||
{
|
||||
Super::Serialize (arc);
|
||||
arc("angle", m_Angle)
|
||||
("speed", m_Speed);
|
||||
("speedv", m_Speedv);
|
||||
}
|
||||
|
||||
|
|
|
@ -442,7 +442,7 @@ IMPLEMENT_CLASS (DSeqPolyNode)
|
|||
void DSeqPolyNode::Serialize(FSerializer &arc)
|
||||
{
|
||||
Super::Serialize (arc);
|
||||
//arc << m_Poly;
|
||||
arc("poly", m_Poly);
|
||||
}
|
||||
|
||||
IMPLEMENT_CLASS (DSeqSectorNode)
|
||||
|
|
Loading…
Reference in a new issue