Factor out some code into C_AllocQuote() and C_InitQuotes().

In Lunatic-only build, also always allocate the first 128 quotes.

git-svn-id: https://svn.eduke32.com/eduke32@3356 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
helixhorned 2013-01-01 15:24:25 +00:00
parent 311967f425
commit a24ab8d4fa
4 changed files with 124 additions and 112 deletions

View file

@ -7994,10 +7994,10 @@ FAKE_F3:
{
KB_ClearKeyDown(sc_F5);
if (MapInfo[g_musicIndex].alt_musicfn != NULL)
Bstrcpy(ScriptQuotes[QUOTE_MUSIC],&MapInfo[g_musicIndex].alt_musicfn[0]);
Bstrcpy(ScriptQuotes[QUOTE_MUSIC],MapInfo[g_musicIndex].alt_musicfn);
else if (MapInfo[g_musicIndex].musicfn != NULL)
{
Bstrcpy(ScriptQuotes[QUOTE_MUSIC],&MapInfo[g_musicIndex].musicfn[0]);
Bstrcpy(ScriptQuotes[QUOTE_MUSIC],MapInfo[g_musicIndex].musicfn);
Bstrcat(ScriptQuotes[QUOTE_MUSIC],". Use SHIFT-F5 to change.");
}
else ScriptQuotes[QUOTE_MUSIC][0] = '\0';
@ -10550,6 +10550,7 @@ int32_t app_main(int32_t argc, const char **argv)
if (i)
G_GameExit("Failure setting up Lunatic!");
C_InitQuotes();
#endif
if (g_networkMode != NET_DEDICATED_SERVER)

View file

@ -2130,6 +2130,121 @@ void C_DefineSound(int32_t sndidx, const char *fn, int32_t args[5])
}
#endif
int32_t C_AllocQuote(int32_t qnum)
{
if (ScriptQuotes[qnum] == NULL)
{
ScriptQuotes[qnum] = (char *)Bcalloc(MAXQUOTELEN,sizeof(uint8_t));
if (ScriptQuotes[qnum] == NULL)
{
Bsprintf(tempbuf, "Failed allocating %d byte quote text buffer.", MAXQUOTELEN);
G_GameExit(tempbuf);
}
return 1;
}
return 0;
}
void C_InitQuotes(void)
{
int32_t i;
for (i=127; i>=0; i--)
C_AllocQuote(i);
for (i=MAXQUOTELEN-7; i>=0; i--)
if (Bstrncmp(&ScriptQuotes[13][i],"SPACE",5) == 0)
{
Bmemset(tempbuf,0,sizeof(tempbuf));
Bstrncpy(tempbuf,ScriptQuotes[13],i);
Bstrcat(tempbuf,"OPEN");
Bstrcat(tempbuf,&ScriptQuotes[13][i+5]);
Bstrncpy(ScriptQuotes[13],tempbuf,MAXQUOTELEN-1);
i = MAXQUOTELEN-7;
}
// most of these are based on Blood, obviously
{
const char *PlayerObituaries[] =
{
"^02%s^02 beat %s^02 like a cur",
"^02%s^02 broke %s",
"^02%s^02 body bagged %s",
"^02%s^02 boned %s^02 like a fish",
"^02%s^02 castrated %s",
"^02%s^02 creamed %s",
"^02%s^02 crushed %s",
"^02%s^02 destroyed %s",
"^02%s^02 diced %s",
"^02%s^02 disemboweled %s",
"^02%s^02 erased %s",
"^02%s^02 eviscerated %s",
"^02%s^02 flailed %s",
"^02%s^02 flattened %s",
"^02%s^02 gave AnAl MaDnEsS to %s",
"^02%s^02 gave %s^02 Anal Justice",
"^02%s^02 hosed %s",
"^02%s^02 hurt %s^02 real bad",
"^02%s^02 killed %s",
"^02%s^02 made dog meat out of %s",
"^02%s^02 made mincemeat out of %s",
"^02%s^02 manhandled %s",
"^02%s^02 massacred %s",
"^02%s^02 mutilated %s",
"^02%s^02 murdered %s",
"^02%s^02 neutered %s",
"^02%s^02 punted %s",
"^02%s^02 reamed %s",
"^02%s^02 ripped %s^02 a new orifice",
"^02%s^02 rocked %s",
"^02%s^02 sent %s^02 to hell",
"^02%s^02 shredded %s",
"^02%s^02 slashed %s",
"^02%s^02 slaughtered %s",
"^02%s^02 sliced %s",
"^02%s^02 smacked %s around",
"^02%s^02 smashed %s",
"^02%s^02 snuffed %s",
"^02%s^02 sodomized %s",
"^02%s^02 splattered %s",
"^02%s^02 sprayed %s",
"^02%s^02 squashed %s",
"^02%s^02 throttled %s",
"^02%s^02 toasted %s",
"^02%s^02 vented %s",
"^02%s^02 ventilated %s",
"^02%s^02 wasted %s",
"^02%s^02 wrecked %s",
};
const char *PlayerSelfObituaries[] =
{
"^02%s^02 is excrement",
"^02%s^02 is hamburger",
"^02%s^02 suffered scrotum separation",
"^02%s^02 volunteered for population control",
"^02%s^02 has suicided",
"^02%s^02 bled out",
};
g_numObituaries = (sizeof(PlayerObituaries)/sizeof(PlayerObituaries[0]));
for (i=g_numObituaries-1; i>=0; i--)
{
if (C_AllocQuote(i+OBITQUOTEINDEX))
Bstrcpy(ScriptQuotes[i+OBITQUOTEINDEX],PlayerObituaries[i]);
}
g_numSelfObituaries = (sizeof(PlayerSelfObituaries)/sizeof(PlayerSelfObituaries[0]));
for (i=g_numSelfObituaries-1; i>=0; i--)
{
if (C_AllocQuote(i+SUICIDEQUOTEINDEX))
Bstrcpy(ScriptQuotes[i+SUICIDEQUOTEINDEX],PlayerSelfObituaries[i]);
}
}
}
#if !defined LUNATIC_ONLY
static int32_t C_ParseCommand(int32_t loop)
{
@ -5411,15 +5526,7 @@ repeatcase:
}
else
{
if (ScriptQuotes[k] == NULL)
ScriptQuotes[k] = (char *)Bcalloc(MAXQUOTELEN,sizeof(uint8_t));
if (!ScriptQuotes[k])
{
ScriptQuotes[k] = NULL;
Bsprintf(tempbuf,"Failed allocating %" PRIdPTR " byte quote text buffer.",sizeof(uint8_t) * MAXQUOTELEN);
G_GameExit(tempbuf);
}
C_AllocQuote(k);
}
if (tw == CON_DEFINEQUOTE)
@ -6115,105 +6222,7 @@ void C_Compile(const char *filenam)
initprintf("\n");
for (i=127; i>=0; i--)
if (ScriptQuotes[i] == NULL)
ScriptQuotes[i] = (char *)Bcalloc(MAXQUOTELEN,sizeof(uint8_t));
for (i=MAXQUOTELEN-7; i>=0; i--)
if (Bstrncmp(&ScriptQuotes[13][i],"SPACE",5) == 0)
{
Bmemset(tempbuf,0,sizeof(tempbuf));
Bstrncpy(tempbuf,ScriptQuotes[13],i);
Bstrcat(tempbuf,"OPEN");
Bstrcat(tempbuf,&ScriptQuotes[13][i+5]);
Bstrncpy(ScriptQuotes[13],tempbuf,MAXQUOTELEN-1);
i = MAXQUOTELEN-7;
}
// most of these are based on Blood, obviously
{
const char *PlayerObituaries[] =
{
"^02%s^02 beat %s^02 like a cur",
"^02%s^02 broke %s",
"^02%s^02 body bagged %s",
"^02%s^02 boned %s^02 like a fish",
"^02%s^02 castrated %s",
"^02%s^02 creamed %s",
"^02%s^02 crushed %s",
"^02%s^02 destroyed %s",
"^02%s^02 diced %s",
"^02%s^02 disemboweled %s",
"^02%s^02 erased %s",
"^02%s^02 eviscerated %s",
"^02%s^02 flailed %s",
"^02%s^02 flattened %s",
"^02%s^02 gave AnAl MaDnEsS to %s",
"^02%s^02 gave %s^02 Anal Justice",
"^02%s^02 hosed %s",
"^02%s^02 hurt %s^02 real bad",
"^02%s^02 killed %s",
"^02%s^02 made dog meat out of %s",
"^02%s^02 made mincemeat out of %s",
"^02%s^02 manhandled %s",
"^02%s^02 massacred %s",
"^02%s^02 mutilated %s",
"^02%s^02 murdered %s",
"^02%s^02 neutered %s",
"^02%s^02 punted %s",
"^02%s^02 reamed %s",
"^02%s^02 ripped %s^02 a new orifice",
"^02%s^02 rocked %s",
"^02%s^02 sent %s^02 to hell",
"^02%s^02 shredded %s",
"^02%s^02 slashed %s",
"^02%s^02 slaughtered %s",
"^02%s^02 sliced %s",
"^02%s^02 smacked %s around",
"^02%s^02 smashed %s",
"^02%s^02 snuffed %s",
"^02%s^02 sodomized %s",
"^02%s^02 splattered %s",
"^02%s^02 sprayed %s",
"^02%s^02 squashed %s",
"^02%s^02 throttled %s",
"^02%s^02 toasted %s",
"^02%s^02 vented %s",
"^02%s^02 ventilated %s",
"^02%s^02 wasted %s",
"^02%s^02 wrecked %s",
};
const char *PlayerSelfObituaries[] =
{
"^02%s^02 is excrement",
"^02%s^02 is hamburger",
"^02%s^02 suffered scrotum separation",
"^02%s^02 volunteered for population control",
"^02%s^02 has suicided",
"^02%s^02 bled out",
};
g_numObituaries = (sizeof(PlayerObituaries)/sizeof(PlayerObituaries[0]));
for (i=g_numObituaries-1; i>=0; i--)
{
if (ScriptQuotes[i+OBITQUOTEINDEX] == NULL)
{
ScriptQuotes[i+OBITQUOTEINDEX] = (char *)Bcalloc(MAXQUOTELEN,sizeof(uint8_t));
Bstrcpy(ScriptQuotes[i+OBITQUOTEINDEX],PlayerObituaries[i]);
}
}
g_numSelfObituaries = (sizeof(PlayerSelfObituaries)/sizeof(PlayerSelfObituaries[0]));
for (i=g_numSelfObituaries-1; i>=0; i--)
{
if (ScriptQuotes[i+SUICIDEQUOTEINDEX] == NULL)
{
ScriptQuotes[i+SUICIDEQUOTEINDEX] = (char *)Bcalloc(MAXQUOTELEN,sizeof(uint8_t));
Bstrcpy(ScriptQuotes[i+SUICIDEQUOTEINDEX],PlayerSelfObituaries[i]);
}
}
}
C_InitQuotes();
}
}
#endif // !defined LUNATIC_ONLY

View file

@ -96,6 +96,9 @@ extern const memberlabel_t userdeflabels[];
extern const memberlabel_t InputLabels[];
extern const memberlabel_t TsprLabels[];
int32_t C_AllocQuote(int32_t qnum);
void C_InitQuotes(void);
void C_ReportError(int32_t iError);
#if !defined LUNATIC_ONLY
void C_Compile(const char *filenam);

View file

@ -1563,8 +1563,7 @@ static void sv_quoteload()
{
if (savegame_quotedef[i>>3]&(1<<(i&7)))
{
if (!ScriptQuotes[i])
ScriptQuotes[i] = (char *)Bcalloc(1, MAXQUOTELEN);
C_AllocQuote(i);
Bmemcpy(ScriptQuotes[i], savegame_quotes[i], MAXQUOTELEN);
}
}