- main loop WIP.

This commit is contained in:
Christoph Oelckers 2020-08-16 21:55:26 +02:00
parent 60275c9b6b
commit 695d81f88c
5 changed files with 294 additions and 369 deletions

View file

@ -339,13 +339,14 @@ class DSWLevelSummaryScreen : public DScreenJob
STATE * State = s_BonusRest; STATE * State = s_BonusRest;
int Tics = 0; int Tics = 0;
public:
DSWLevelSummaryScreen() DSWLevelSummaryScreen()
{ {
second_tics = (PlayClock / 120); second_tics = (PlayClock / 120);
minutes = (second_tics / 60); minutes = (second_tics / 60);
seconds = (second_tics % 60); seconds = (second_tics % 60);
} }
private:
static void gNextState(STATE** State) static void gNextState(STATE** State)
{ {
// Transition to the next state // Transition to the next state
@ -462,10 +463,6 @@ class DSWMultiSummaryScreen : public DScreenJob
short death_total[MAX_SW_PLAYERS_REG]{}; short death_total[MAX_SW_PLAYERS_REG]{};
short kills[MAX_SW_PLAYERS_REG]{}; short kills[MAX_SW_PLAYERS_REG]{};
DSWMultiSummaryScreen()
{
}
int Frame(uint64_t clock, bool skiprequest) int Frame(uint64_t clock, bool skiprequest)
{ {
if (clock == 0) PlaySong(nullptr, ThemeSongs[1], ThemeTrack[1]); if (clock == 0) PlaySong(nullptr, ThemeSongs[1], ThemeTrack[1]);
@ -571,6 +568,41 @@ class DSWMultiSummaryScreen : public DScreenJob
} }
}; };
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void StatScreen(int FinishAnim, CompletionFunc completion)
{
JobDesc jobs[5];
int job = 0;
if (FinishAnim)
{
StopSound();
if (FinishAnim == ANIM_SUMO) // next level hasn't been set for this.
NextLevel = FindMapByLevelNum(currentLevel->levelNumber + 1);
else
NextLevel = nullptr;
jobs[job++] = { GetFinishAnim(FinishAnim) };
jobs[job++] = { Create<DSWLevelSummaryScreen>() };
if (FinishAnim == ANIM_ZILLA)
jobs[job++] = { Create<DSWCreditsScreen>() };
}
else if (gNet.MultiGameType != MULTI_GAME_COMMBAT)
{
jobs[job++] = { Create<DSWLevelSummaryScreen>() };
}
else
{
jobs[job++] = { Create<DSWMultiSummaryScreen>() };
}
RunScreenJob(jobs, job, completion, true);
}
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// //

View file

@ -173,10 +173,6 @@ void GameInterface::MenuSound(EMenuSounds snd)
void GameInterface::MenuClosed() void GameInterface::MenuClosed()
{ {
if (!SavegameLoaded)
{
ResumeGame();
}
} }
extern SWBOOL ExitLevel, NewGame; extern SWBOOL ExitLevel, NewGame;

View file

@ -90,6 +90,8 @@ CVAR(Bool, sw_darts, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG);
BEGIN_SW_NS BEGIN_SW_NS
void Logo(const CompletionFunc& completion); void Logo(const CompletionFunc& completion);
void StatScreen(int FinishAnim, CompletionFunc completion);
void getinput(SW_PACKET*, SWBOOL);
void pClearSpriteList(PLAYERp pp); void pClearSpriteList(PLAYERp pp);
@ -100,13 +102,13 @@ int GameVersion = 20;
int Follow_posx=0,Follow_posy=0; int Follow_posx=0,Follow_posy=0;
SWBOOL NoMeters = FALSE; SWBOOL NoMeters = false;
SWBOOL FinishAnim = 0; SWBOOL FinishAnim = 0;
SWBOOL ReloadPrompt = FALSE; SWBOOL ReloadPrompt = false;
SWBOOL NewGame = FALSE; SWBOOL NewGame = false;
SWBOOL SavegameLoaded = FALSE; SWBOOL SavegameLoaded = false;
//Miscellaneous variables //Miscellaneous variables
SWBOOL FinishedLevel = FALSE; SWBOOL FinishedLevel = false;
short screenpeek = 0; short screenpeek = 0;
SWBOOL PedanticMode; SWBOOL PedanticMode;
@ -114,7 +116,7 @@ SWBOOL PedanticMode;
SWBOOL LocationInfo = 0; SWBOOL LocationInfo = 0;
void drawoverheadmap(int cposx, int cposy, int czoom, short cang); void drawoverheadmap(int cposx, int cposy, int czoom, short cang);
SWBOOL PreCaching = TRUE; SWBOOL PreCaching = TRUE;
int GodMode = FALSE; int GodMode = false;
short Skill = 2; short Skill = 2;
short TotalKillable; short TotalKillable;
@ -123,9 +125,9 @@ const GAME_SET gs_defaults =
// Network game settings // Network game settings
0, // GameType 0, // GameType
0, // Monsters 0, // Monsters
FALSE, // HurtTeammate false, // HurtTeammate
TRUE, // SpawnMarkers Markers TRUE, // SpawnMarkers Markers
FALSE, // TeamPlay false, // TeamPlay
0, // Kill Limit 0, // Kill Limit
0, // Time Limit 0, // Time Limit
0, // Color 0, // Color
@ -133,12 +135,12 @@ const GAME_SET gs_defaults =
}; };
GAME_SET gs; GAME_SET gs;
SWBOOL PlayerTrackingMode = FALSE; SWBOOL PlayerTrackingMode = false;
SWBOOL SlowMode = FALSE; SWBOOL SlowMode = false;
SWBOOL FrameAdvanceTics = 3; SWBOOL FrameAdvanceTics = 3;
SWBOOL ScrollMode2D = FALSE; SWBOOL ScrollMode2D = false;
SWBOOL DebugOperate = FALSE; SWBOOL DebugOperate = false;
void LoadingLevelScreen(void); void LoadingLevelScreen(void);
uint8_t FakeMultiNumPlayers; uint8_t FakeMultiNumPlayers;
@ -146,18 +148,18 @@ uint8_t FakeMultiNumPlayers;
int totalsynctics; int totalsynctics;
MapRecord* NextLevel = nullptr; MapRecord* NextLevel = nullptr;
SWBOOL ExitLevel = FALSE; SWBOOL ExitLevel = false;
int OrigCommPlayers=0; int OrigCommPlayers=0;
extern uint8_t CommPlayers; extern uint8_t CommPlayers;
extern SWBOOL CommEnabled; extern SWBOOL CommEnabled;
extern int bufferjitter; extern int bufferjitter;
SWBOOL CameraTestMode = FALSE; SWBOOL CameraTestMode = false;
char ds[645]; // debug string char ds[645]; // debug string
extern short NormalVisibility; extern short NormalVisibility;
SWBOOL CommandSetup = FALSE; SWBOOL CommandSetup = false;
char buffer[80], ch; char buffer[80], ch;
@ -169,7 +171,6 @@ int ThemeTrack[6];
/// L O C A L P R O T O T Y P E S ///////////////////////////////////////////////////////// /// L O C A L P R O T O T Y P E S /////////////////////////////////////////////////////////
void SybexScreen(void); void SybexScreen(void);
void StatScreen(PLAYERp mpp); void StatScreen(PLAYERp mpp);
void InitRunLevel(void);
void RunLevel(void); void RunLevel(void);
///////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////
@ -328,11 +329,8 @@ void DrawMenuLevelScreen(void)
if (CommEnabled) if (CommEnabled)
{ {
sprintf(ds, "Lo Wang is waiting for other players..."); MNU_DrawString(160, 170, "Lo Wang is waiting for other players...", 1, 16, 0);
MNU_DrawString(160, 170, ds, 1, 16, 0); MNU_DrawString(160, 180, "They are afraid!", 1, 16, 0);
sprintf(ds, "They are afraid!");
MNU_DrawString(160, 180, ds, 1, 16, 0);
} }
} }
@ -342,54 +340,6 @@ void DrawMenuLevelScreen(void)
// //
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
void InitNewGame(void)
{
int i, ready_bak;
int ver_bak;
//waitforeverybody(); // since ready flag resets after this point, need to carefully sync
for (i = 0; i < MAX_SW_PLAYERS; i++)
{
// don't jack with the playerreadyflag
ready_bak = Player[i].playerreadyflag;
ver_bak = Player[i].PlayerVersion;
memset(&Player[i], 0, sizeof(Player[i]));
Player[i].playerreadyflag = ready_bak;
Player[i].PlayerVersion = ver_bak;
INITLIST(&Player[i].PanelSpriteList);
}
memset(puser, 0, sizeof(puser));
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
bool LoadLevel(MapRecord* maprec)
{
int16_t ang;
if (engineLoadBoard(maprec->fileName, SW_SHAREWARE ? 1 : 0, (vec3_t*)&Player[0], &ang, &Player[0].cursectnum) == -1)
{
Printf("Map not found: %s", maprec->fileName.GetChars());
return false;
}
currentLevel = maprec;
SECRET_SetMapName(currentLevel->DisplayName(), currentLevel->name);
STAT_NewLevel(currentLevel->fileName);
Player[0].q16ang = fix16_from_int(ang);
return true;
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void InitLevelGlobals(void) void InitLevelGlobals(void)
{ {
ChopTics = 0; ChopTics = 0;
@ -398,17 +348,17 @@ void InitLevelGlobals(void)
PlayerGravity = 24; PlayerGravity = 24;
wait_active_check_offset = 0; wait_active_check_offset = 0;
PlaxCeilGlobZadjust = PlaxFloorGlobZadjust = Z(500); PlaxCeilGlobZadjust = PlaxFloorGlobZadjust = Z(500);
FinishedLevel = FALSE; FinishedLevel = false;
AnimCnt = 0; AnimCnt = 0;
left_foot = FALSE; left_foot = false;
screenpeek = myconnectindex; screenpeek = myconnectindex;
numinterpolations = short_numinterpolations = 0; numinterpolations = short_numinterpolations = 0;
gNet.TimeLimitClock = gNet.TimeLimit; gNet.TimeLimitClock = gNet.TimeLimit;
serpwasseen = FALSE; serpwasseen = false;
sumowasseen = FALSE; sumowasseen = false;
zillawasseen = FALSE; zillawasseen = false;
memset(BossSpriteNum,-1,sizeof(BossSpriteNum)); memset(BossSpriteNum,-1,sizeof(BossSpriteNum));
PedanticMode = false; PedanticMode = false;
@ -428,139 +378,6 @@ void InitLevelGlobals2(void)
FinishAnim = 0; FinishAnim = 0;
} }
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void InitPlayerGameSettings(void)
{
int pnum;
if (CommEnabled)
{
// everyone gets the same Auto Aim
TRAVERSE_CONNECT(pnum)
{
if (gNet.AutoAim)
SET(Player[pnum].Flags, PF_AUTO_AIM);
else
RESET(Player[pnum].Flags, PF_AUTO_AIM);
}
}
else
{
if (cl_autoaim)
SET(Player[myconnectindex].Flags, PF_AUTO_AIM);
else
RESET(Player[myconnectindex].Flags, PF_AUTO_AIM);
}
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void InitRunLevel(void)
{
if (SavegameLoaded)
{
int SavePlayClock;
extern int PlayClock;
SavegameLoaded = FALSE;
// contains what is needed from calls below
if (snd_ambience)
StartAmbientSound();
// crappy little hack to prevent play clock from being overwritten
// for load games
SavePlayClock = PlayClock;
InitTimingVars();
PlayClock = SavePlayClock;
return;
}
//SendVersion(GameVersion);
//waitforeverybody();
Mus_Stop();
DoTheCache();
// auto aim / auto run / etc
InitPlayerGameSettings();
// send packets with player info
InitNetPlayerOptions();
// Initialize Game part of network code (When ready2send != 0)
InitNetVars();
if (currentLevel)
{
PlaySong(currentLevel->labelName, currentLevel->music, currentLevel->cdSongId);
}
InitPrediction(&Player[myconnectindex]);
waitforeverybody();
//CheckVersion(GameVersion);
// IMPORTANT - MUST be right before game loop AFTER waitforeverybody
InitTimingVars();
if (snd_ambience)
StartAmbientSound();
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void MoveTicker(void)
{
int pnum;
//getpackets();
if (PredictionOn && CommEnabled)
{
while (predictmovefifoplc < Player[myconnectindex].movefifoend)
{
DoPrediction(ppp);
}
}
//While you have new input packets to process...
if (!CommEnabled)
bufferjitter = 0;
while (Player[myconnectindex].movefifoend - movefifoplc > bufferjitter)
{
//Make sure you have at least 1 packet from everyone else
for (pnum = connecthead; pnum >= 0; pnum = connectpoint2[pnum])
{
if (movefifoplc == Player[pnum].movefifoend)
{
break;
}
}
//Pnum is >= 0 only if last loop was broken, meaning a player wasn't caught up
if (pnum >= 0)
break;
domovethings();
}
}
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// //
// //
@ -569,14 +386,6 @@ void MoveTicker(void)
void InitLevel(void) void InitLevel(void)
{ {
if (SavegameLoaded)
{
InitLevelGlobals();
return;
}
static int DemoNumber = 0;
Terminate3DSounds(); Terminate3DSounds();
// A few IMPORTANT GLOBAL RESETS // A few IMPORTANT GLOBAL RESETS
@ -595,13 +404,30 @@ void InitLevel(void)
InitLevelGlobals2(); InitLevelGlobals2();
if (NewGame) if (NewGame)
InitNewGame(); {
for (int i = 0; i < MAX_SW_PLAYERS; i++)
{
// don't jack with the playerreadyflag
int ready_bak = Player[i].playerreadyflag;
int ver_bak = Player[i].PlayerVersion;
memset(&Player[i], 0, sizeof(Player[i]));
Player[i].playerreadyflag = ready_bak;
Player[i].PlayerVersion = ver_bak;
INITLIST(&Player[i].PanelSpriteList);
}
if (!LoadLevel(maprec)) memset(puser, 0, sizeof(puser));
{ }
NewGame = false;
return; int16_t ang;
} if (engineLoadBoard(maprec->fileName, SW_SHAREWARE ? 1 : 0, (vec3_t*)&Player[0], &ang, &Player[0].cursectnum) == -1)
{
I_Error("Map not found: %s", maprec->fileName.GetChars());
}
currentLevel = maprec;
SECRET_SetMapName(currentLevel->DisplayName(), currentLevel->name);
STAT_NewLevel(currentLevel->fileName);
Player[0].q16ang = fix16_from_int(ang);
SetupPreCache(); SetupPreCache();
@ -648,19 +474,96 @@ void InitLevel(void)
PostSetupSectorObject(); PostSetupSectorObject();
SetupMirrorTiles(); SetupMirrorTiles();
initlava(); initlava();
// reset NewGame // reset NewGame
NewGame = FALSE; NewGame = false;
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void InitPlayerGameSettings(void)
{
int pnum;
if (CommEnabled)
{
// everyone gets the same Auto Aim
TRAVERSE_CONNECT(pnum)
{
if (gNet.AutoAim)
SET(Player[pnum].Flags, PF_AUTO_AIM);
else
RESET(Player[pnum].Flags, PF_AUTO_AIM);
}
}
else
{
if (cl_autoaim)
SET(Player[myconnectindex].Flags, PF_AUTO_AIM);
else
RESET(Player[myconnectindex].Flags, PF_AUTO_AIM);
}
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void InitRunLevel(void)
{
//SendVersion(GameVersion);
//waitforeverybody();
Mus_Stop();
DoTheCache();
// auto aim / auto run / etc
InitPlayerGameSettings();
// send packets with player info
InitNetPlayerOptions();
// Initialize Game part of network code (When ready2send != 0)
InitNetVars();
if (currentLevel)
{
PlaySong(currentLevel->labelName, currentLevel->music, currentLevel->cdSongId);
}
InitPrediction(&Player[myconnectindex]);
waitforeverybody();
//CheckVersion(GameVersion);
// IMPORTANT - MUST be right before game loop AFTER waitforeverybody
InitTimingVars();
if (snd_ambience)
StartAmbientSound();
} }
void //---------------------------------------------------------------------------
TerminateLevel(void) //
//
//
//---------------------------------------------------------------------------
void TerminateLevel(void)
{ {
if (!currentLevel) return; if (!currentLevel) return;
int i, nexti, stat, pnum, ndx; int i, nexti, stat, pnum, ndx;
SECT_USERp *sectu; SECT_USERp* sectu;
// Free any track points // Free any track points
for (ndx = 0; ndx < MAX_TRACKS; ndx++) for (ndx = 0; ndx < MAX_TRACKS; ndx++)
@ -677,7 +580,7 @@ TerminateLevel(void)
memset(Track, 0, sizeof(Track)); memset(Track, 0, sizeof(Track));
StopFX(); StopFX();
// Clear all anims and any memory associated with them // Clear all anims and any memory associated with them
// Clear before killing sprites - save a little time // Clear before killing sprites - save a little time
//AnimClear(); //AnimClear();
@ -706,8 +609,8 @@ TerminateLevel(void)
// Free SectUser memory // Free SectUser memory
for (sectu = &SectUser[0]; for (sectu = &SectUser[0];
sectu < &SectUser[MAXSECTORS]; sectu < &SectUser[MAXSECTORS];
sectu++) sectu++)
{ {
if (*sectu) if (*sectu)
{ {
@ -748,155 +651,156 @@ TerminateLevel(void)
} }
JS_UnInitLockouts(); JS_UnInitLockouts();
//HEAP_CHECK();
} }
void NewLevel(void) //---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void MoveTicker(void)
{ {
do int pnum;
//getpackets();
if (PredictionOn && CommEnabled)
{ {
InitLevel(); while (predictmovefifoplc < Player[myconnectindex].movefifoend)
RunLevel(); {
DoPrediction(ppp);
}
} }
while (SavegameLoaded);
STAT_Update(false); //While you have new input packets to process...
if (!CommEnabled)
bufferjitter = 0;
while (Player[myconnectindex].movefifoend - movefifoplc > bufferjitter)
{
//Make sure you have at least 1 packet from everyone else
for (pnum = connecthead; pnum >= 0; pnum = connectpoint2[pnum])
{
if (movefifoplc == Player[pnum].movefifoend)
{
break;
}
}
//Pnum is >= 0 only if last loop was broken, meaning a player wasn't caught up
if (pnum >= 0)
break;
domovethings();
}
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void EndOfLevel()
{
STAT_Update(false);
// for good measure do this // for good measure do this
ready2send = 0; ready2send = 0;
waitforeverybody(); waitforeverybody();
if (FinishedLevel)
StatScreen(&Player[myconnectindex]);
TerminateLevel();
if (FinishAnim == ANIM_ZILLA || FinishAnim == ANIM_SERP)
{ {
STAT_Update(true); //ResetPalette(mpp);
PlaySong(nullptr, ThemeSongs[0], ThemeTrack[0]); COVER_SetReverb(0); // Reset reverb
StartMenu(); Player[myconnectindex].Reverb = 0;
StopSound();
soundEngine->UpdateSounds((int)totalclock);
StatScreen(FinishAnim, [](bool)
{
TerminateLevel();
if (NextLevel == nullptr)
{
STAT_Update(true);
PlaySong(nullptr, ThemeSongs[0], ThemeTrack[0]);
StartMenu();
}
else gamestate = GS_LEVEL;
});
} }
else
{
TerminateLevel();
}
} }
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
// CTW REMOVED END void GameTicker(void)
short PlayerQuitMenuLevel = -1;
extern SWBOOL FinishedLevel;
void EndGameSequence(void)
{ {
StopSound(); if (SavegameLoaded)
//playanm(FinishAnim);
//BonusScreen();
ExitLevel = FALSE;
//if (FinishAnim == ANIM_ZILLA)
// CreditsLevel();
ExitLevel = FALSE;
if (currentLevel->levelNumber != 4 && currentLevel->levelNumber != 20)
{ {
NextLevel = FindMapByLevelNum(currentLevel->levelNumber + 1); InitLevelGlobals();
SavegameLoaded = false;
// contains what is needed from calls below
if (snd_ambience)
StartAmbientSound();
// crappy little hack to prevent play clock from being overwritten
// for load games
int SavePlayClock = PlayClock;
InitTimingVars();
PlayClock = SavePlayClock;
} }
} else if (NextLevel)
void StatScreen(PLAYERp mpp)
{
extern SWBOOL FinishedLevel;
short w,h;
short rows,cols,i,j;
PLAYERp pp = NULL;
int x,y;
short pal;
//ResetPalette(mpp);
COVER_SetReverb(0); // Reset reverb
mpp->Reverb = 0;
StopSound();
soundEngine->UpdateSounds((int)totalclock);
if (FinishAnim)
{ {
EndGameSequence(); InitLevel();
return; InitRunLevel();
} }
if (gNet.MultiGameType != MULTI_GAME_COMMBAT)
{
if (!FinishedLevel)
return;
//BonusScreen();
return;
}
//MPBonusScreen();
}
void getinput(SW_PACKET *, SWBOOL);
void RunLevel(void)
{
InitRunLevel();
#if 0
waitforeverybody();
#endif
ready2send = 1; ready2send = 1;
while (TRUE)
if (paused)
{ {
handleevents(); ototalclock = (int)totalclock - (120 / synctics);
C_RunDelayedCommands(); buttonMap.ResetButtonStates();
D_ProcessEvents(); }
updatePauseStatus(); else
{
if (SavegameLoaded) while (ready2send && (totalclock >= ototalclock + synctics))
{ {
return; // Stop the game loop if a savegame was loaded from the menu. UpdateInputs();
MoveTicker();
} }
// Get input again to update q16ang/q16horiz.
if (paused) if (!PedanticMode)
{ getinput(&loc, TRUE);
ototalclock = (int)totalclock - (120 / synctics);
buttonMap.ResetButtonStates();
}
else
{
while (ready2send && (totalclock >= ototalclock + synctics))
{
UpdateInputs();
MoveTicker();
}
// Get input again to update q16ang/q16horiz.
if (!PedanticMode)
getinput(&loc, TRUE);
}
drawscreen(Player + screenpeek);
videoNextPage();
if (ExitLevel)
{
ExitLevel = FALSE;
break;
}
} }
drawscreen(Player + screenpeek);
ready2send = 0; ready2send = 0;
if (ExitLevel)
{
ExitLevel = false;
EndOfLevel();
}
} }
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
int32_t GameInterface::app_main() int32_t GameInterface::app_main()
{ {
InitGame(); InitGame();
@ -937,7 +841,7 @@ int32_t GameInterface::app_main()
break; break;
case GS_LEVEL: case GS_LEVEL:
//if (GameTicker()) gamestate = GS_STARTUP; GameTicker();
break; break;
case GS_INTERMISSION: case GS_INTERMISSION:
@ -950,6 +854,11 @@ int32_t GameInterface::app_main()
} }
catch (CRecoverableError& err) catch (CRecoverableError& err)
{ {
TerminateLevel();
NextLevel = nullptr;
SavegameLoaded = false;
ExitLevel = false;
FinishAnim = 0;
C_FullConsole(); C_FullConsole();
Printf(TEXTCOLOR_RED "%s\n", err.what()); Printf(TEXTCOLOR_RED "%s\n", err.what());
} }

View file

@ -49,7 +49,6 @@ static uint8_t tempbuf[576], packbuf[576];
int PlayClock; int PlayClock;
gNET gNet; gNET gNet;
extern short PlayerQuitMenuLevel;
#define TIMERUPDATESIZ 32 #define TIMERUPDATESIZ 32
@ -103,16 +102,6 @@ int save_totalclock;
// must start out as 0 // must start out as 0
void
ResumeGame(void)
{
if (paused)
return;
if (numplayers < 2)
paused = 0;
}
void void
InitNetPlayerOptions(void) InitNetPlayerOptions(void)
{ {

View file

@ -78,6 +78,5 @@ void InitTimingVars(void);
void waitforeverybody(void); void waitforeverybody(void);
void InitNetPlayerOptions(void); void InitNetPlayerOptions(void);
inline void SW_SendMessage(short, const char*) {} inline void SW_SendMessage(short, const char*) {}
void ResumeGame(void);
END_SW_NS END_SW_NS