mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-25 05:41:42 +00:00
Merge branch 'dedicated-scoretally-crash-fix' into 'next'
Fix dedicated server crashing when exiting special stage (Fixes #453) Closes #453 See merge request STJr/SRB2!1451
This commit is contained in:
commit
1d863408c7
3 changed files with 78 additions and 48 deletions
|
@ -3973,6 +3973,7 @@ static void G_DoCompleted(void)
|
|||
{
|
||||
G_SetGamestate(GS_INTERMISSION);
|
||||
Y_StartIntermission();
|
||||
Y_LoadIntermissionData();
|
||||
G_UpdateVisited();
|
||||
G_HandleSaveLevel();
|
||||
}
|
||||
|
|
124
src/y_inter.c
124
src/y_inter.c
|
@ -215,6 +215,81 @@ static void Y_IntermissionTokenDrawer(void)
|
|||
V_DrawCroppedPatch(32<<FRACBITS, y<<FRACBITS, FRACUNIT/2, 0, tokenicon, 0, 0, tokenicon->width, calc);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Y_LoadIntermissionData
|
||||
//
|
||||
// Load patches for drawing the intermission, if acceptable
|
||||
//
|
||||
void Y_LoadIntermissionData(void)
|
||||
{
|
||||
INT32 i;
|
||||
|
||||
if (dedicated)
|
||||
return;
|
||||
|
||||
switch (intertype)
|
||||
{
|
||||
case int_coop:
|
||||
{
|
||||
for (i = 0; i < 4; ++i)
|
||||
{
|
||||
if (strlen(data.coop.bonuses[i].patch))
|
||||
data.coop.bonuspatches[i] = W_CachePatchName(data.coop.bonuses[i].patch, PU_PATCH);
|
||||
}
|
||||
data.coop.ptotal = W_CachePatchName("YB_TOTAL", PU_PATCH);
|
||||
|
||||
// get background patches
|
||||
bgpatch = W_CachePatchName("INTERSCR", PU_PATCH);
|
||||
|
||||
// grab an interscreen if appropriate
|
||||
if (mapheaderinfo[gamemap-1]->interscreen[0] != '#')
|
||||
interpic = W_CachePatchName(mapheaderinfo[gamemap-1]->interscreen, PU_PATCH);
|
||||
break;
|
||||
}
|
||||
case int_spec:
|
||||
{
|
||||
for (i = 0; i < 2; ++i)
|
||||
data.spec.bonuspatches[i] = W_CachePatchName(data.spec.bonuses[i].patch, PU_PATCH);
|
||||
|
||||
data.spec.pscore = W_CachePatchName("YB_SCORE", PU_PATCH);
|
||||
data.spec.pcontinues = W_CachePatchName("YB_CONTI", PU_PATCH);
|
||||
|
||||
// get background tile
|
||||
bgtile = W_CachePatchName("SPECTILE", PU_PATCH);
|
||||
|
||||
// grab an interscreen if appropriate
|
||||
if (mapheaderinfo[gamemap-1]->interscreen[0] != '#')
|
||||
interpic = W_CachePatchName(mapheaderinfo[gamemap-1]->interscreen, PU_PATCH);
|
||||
break;
|
||||
}
|
||||
case int_ctf:
|
||||
case int_teammatch:
|
||||
{
|
||||
data.match.redflag = (intertype == int_ctf) ? rflagico : rmatcico;
|
||||
data.match.blueflag = (intertype == int_ctf) ? bflagico : bmatcico;
|
||||
}
|
||||
/* FALLTHRU */
|
||||
case int_match:
|
||||
case int_race:
|
||||
case int_comp:
|
||||
{
|
||||
if (intertype == int_match || intertype == int_race)
|
||||
{
|
||||
// get RESULT header
|
||||
data.match.result = W_CachePatchName("RESULT", PU_PATCH);
|
||||
}
|
||||
|
||||
// get background tile
|
||||
bgtile = W_CachePatchName("SRB2BACK", PU_PATCH);
|
||||
break;
|
||||
}
|
||||
case int_none:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Y_ConsiderScreenBuffer
|
||||
//
|
||||
|
@ -1181,10 +1256,9 @@ void Y_DetermineIntermissionType(void)
|
|||
//
|
||||
// Called by G_DoCompleted. Sets up data for intermission drawer/ticker.
|
||||
//
|
||||
//
|
||||
void Y_StartIntermission(void)
|
||||
{
|
||||
INT32 i;
|
||||
|
||||
intertic = -1;
|
||||
|
||||
#ifdef PARANOIA
|
||||
|
@ -1228,23 +1302,12 @@ void Y_StartIntermission(void)
|
|||
// setup time data
|
||||
data.coop.tics = players[consoleplayer].realtime;
|
||||
|
||||
for (i = 0; i < 4; ++i)
|
||||
{
|
||||
if (strlen(data.coop.bonuses[i].patch))
|
||||
data.coop.bonuspatches[i] = W_CachePatchName(data.coop.bonuses[i].patch, PU_PATCH);
|
||||
}
|
||||
data.coop.ptotal = W_CachePatchName("YB_TOTAL", PU_PATCH);
|
||||
|
||||
// get act number
|
||||
data.coop.actnum = mapheaderinfo[gamemap-1]->actnum;
|
||||
|
||||
// get background patches
|
||||
bgpatch = W_CachePatchName("INTERSCR", PU_PATCH);
|
||||
|
||||
// grab an interscreen if appropriate
|
||||
if (mapheaderinfo[gamemap-1]->interscreen[0] != '#')
|
||||
{
|
||||
interpic = W_CachePatchName(mapheaderinfo[gamemap-1]->interscreen, PU_PATCH);
|
||||
useinterpic = true;
|
||||
usebuffer = false;
|
||||
}
|
||||
|
@ -1301,21 +1364,9 @@ void Y_StartIntermission(void)
|
|||
// give out ring bonuses
|
||||
Y_AwardSpecialStageBonus();
|
||||
|
||||
for (i = 0; i < 2; ++i)
|
||||
data.spec.bonuspatches[i] = W_CachePatchName(data.spec.bonuses[i].patch, PU_PATCH);
|
||||
|
||||
data.spec.pscore = W_CachePatchName("YB_SCORE", PU_PATCH);
|
||||
data.spec.pcontinues = W_CachePatchName("YB_CONTI", PU_PATCH);
|
||||
|
||||
// get background tile
|
||||
bgtile = W_CachePatchName("SPECTILE", PU_PATCH);
|
||||
|
||||
// grab an interscreen if appropriate
|
||||
if (mapheaderinfo[gamemap-1]->interscreen[0] != '#')
|
||||
{
|
||||
interpic = W_CachePatchName(mapheaderinfo[gamemap-1]->interscreen, PU_PATCH);
|
||||
useinterpic = true;
|
||||
}
|
||||
else
|
||||
useinterpic = false;
|
||||
|
||||
|
@ -1408,11 +1459,6 @@ void Y_StartIntermission(void)
|
|||
|
||||
data.match.levelstring[sizeof data.match.levelstring - 1] = '\0';
|
||||
|
||||
// get RESULT header
|
||||
data.match.result =
|
||||
W_CachePatchName("RESULT", PU_PATCH);
|
||||
|
||||
bgtile = W_CachePatchName("SRB2BACK", PU_PATCH);
|
||||
usetile = true;
|
||||
useinterpic = false;
|
||||
break;
|
||||
|
@ -1437,10 +1483,6 @@ void Y_StartIntermission(void)
|
|||
|
||||
data.match.levelstring[sizeof data.match.levelstring - 1] = '\0';
|
||||
|
||||
// get RESULT header
|
||||
data.match.result = W_CachePatchName("RESULT", PU_PATCH);
|
||||
|
||||
bgtile = W_CachePatchName("SRB2BACK", PU_PATCH);
|
||||
usetile = true;
|
||||
useinterpic = false;
|
||||
break;
|
||||
|
@ -1466,18 +1508,6 @@ void Y_StartIntermission(void)
|
|||
|
||||
data.match.levelstring[sizeof data.match.levelstring - 1] = '\0';
|
||||
|
||||
if (intertype == int_ctf)
|
||||
{
|
||||
data.match.redflag = rflagico;
|
||||
data.match.blueflag = bflagico;
|
||||
}
|
||||
else // team match
|
||||
{
|
||||
data.match.redflag = rmatcico;
|
||||
data.match.blueflag = bmatcico;
|
||||
}
|
||||
|
||||
bgtile = W_CachePatchName("SRB2BACK", PU_PATCH);
|
||||
usetile = true;
|
||||
useinterpic = false;
|
||||
break;
|
||||
|
@ -1502,8 +1532,6 @@ void Y_StartIntermission(void)
|
|||
|
||||
data.competition.levelstring[sizeof data.competition.levelstring - 1] = '\0';
|
||||
|
||||
// get background tile
|
||||
bgtile = W_CachePatchName("SRB2BACK", PU_PATCH);
|
||||
usetile = true;
|
||||
useinterpic = false;
|
||||
break;
|
||||
|
|
|
@ -14,6 +14,7 @@ extern boolean usebuffer;
|
|||
void Y_IntermissionDrawer(void);
|
||||
void Y_Ticker(void);
|
||||
|
||||
void Y_LoadIntermissionData(void);
|
||||
void Y_StartIntermission(void);
|
||||
void Y_EndIntermission(void);
|
||||
|
||||
|
|
Loading…
Reference in a new issue