diff --git a/source/sw/src/draw.cpp b/source/sw/src/draw.cpp index 5e466fe3f..01a1c6254 100644 --- a/source/sw/src/draw.cpp +++ b/source/sw/src/draw.cpp @@ -1974,10 +1974,6 @@ drawscreen(PLAYERp pp) // Boss Health Meter, if Boss present BossHealthMeter(); - //if (!M_Active()) - - videoNextPage(); - #if SYNC_TEST SyncStatMessage(); #endif diff --git a/source/sw/src/game.cpp b/source/sw/src/game.cpp index 8f6bdf917..41074a626 100644 --- a/source/sw/src/game.cpp +++ b/source/sw/src/game.cpp @@ -155,7 +155,6 @@ SWBOOL CameraTestMode = FALSE; char ds[645]; // debug string extern short NormalVisibility; -SWBOOL QuitFlag = FALSE; SWBOOL CommandSetup = FALSE; char buffer[80], ch; @@ -173,36 +172,74 @@ void InitRunLevel(void); void RunLevel(void); ///////////////////////////////////////////////////////////////////////////////////////////// -// Transitioning helper. -void Logo(const CompletionFunc& completion); - -int SyncScreenJob() -{ - while (gamestate == GS_INTERMISSION || gamestate == GS_INTRO) - { - DoUpdateSounds(); - handleevents(); - updatePauseStatus(); - D_ProcessEvents(); - ControlInfo info; - CONTROL_GetInput(&info); - C_RunDelayedCommands(); - - RunScreenJobFrame(); // This handles continuation through its completion callback. - videoNextPage(); - } - return 0; -} - - //--------------------------------------------------------------------------- // // // //--------------------------------------------------------------------------- +static const char* actions[] = { + "Move_Forward", + "Move_Backward", + "Turn_Left", + "Turn_Right", + "Strafe", + "Fire", + "Open", + "Run", + "Alt_Fire", // Duke3D", Blood + "Jump", + "Crouch", + "Look_Up", + "Look_Down", + "Look_Left", + "Look_Right", + "Strafe_Left", + "Strafe_Right", + "Aim_Up", + "Aim_Down", + "SendMessage", + "Map", + "Shrink_Screen", + "Enlarge_Screen", + "Show_Opponents_Weapon", + "Map_Follow_Mode", + "See_Coop_View", + "Mouse_Aiming", + "Dpad_Select", + "Dpad_Aiming", + "Last_Weapon", + "Alt_Weapon", + "Third_Person_View", + "Toggle_Crouch", // This is the last one used by EDuke32"", + +}; + bool InitGame() { + InitCheats(); + buttonMap.SetButtons(actions, NUM_ACTIONS); + automapping = 1; + + gs = gs_defaults; + + for (int i = 0; i < MAX_SW_PLAYERS; i++) + INITLIST(&Player[i].PanelSpriteList); + + DebugOperate = TRUE; + enginecompatibility_mode = ENGINECOMPATIBILITY_19961112; + + if (SW_SHAREWARE) + Printf("SHADOW WARRIOR(tm) Version 1.2 (Shareware Version)\n"); + else + Printf("SHADOW WARRIOR(tm) Version 1.2\n"); + + if (sw_snd_scratch == 0) // This is always 0 at this point - this check is only here to prevent whole program optimization from eliminating the variable. + Printf("Copyright (c) 1997 3D Realms Entertainment\n"); + + registerosdcommands(); + registerinputcommands(); + engineInit(); auto pal = fileSystem.LoadFile("3drealms.pal", 0); if (pal.Size() >= 768) @@ -509,6 +546,7 @@ void InitLevel(void) auto maprec = NextLevel; NextLevel = nullptr; + if (!maprec) maprec = currentLevel; if (!maprec) { NewGame = false; @@ -684,12 +722,9 @@ void NewLevel(void) while (LoadGameOutsideMoveLoop); STAT_Update(false); - if (!QuitFlag) - { - // for good measure do this - ready2send = 0; - waitforeverybody(); - } + // for good measure do this + ready2send = 0; + waitforeverybody(); StatScreen(&Player[myconnectindex]); @@ -797,12 +832,6 @@ void MenuLevel(void) break; } - if (QuitFlag) - { - // Quiting Game - break; - } - // must lock the clock for drawing so animations will happen totalclocklock = totalclock; @@ -833,13 +862,11 @@ void EndGameSequence(void) //BonusScreen(); ExitLevel = FALSE; - QuitFlag = FALSE; //if (FinishAnim == ANIM_ZILLA) // CreditsLevel(); ExitLevel = FALSE; - QuitFlag = FALSE; if (currentLevel->levelNumber != 4 && currentLevel->levelNumber != 20) { @@ -879,6 +906,30 @@ void StatScreen(PLAYERp mpp) //MPBonusScreen(); } + +// Transitioning helper. +void Logo(const CompletionFunc& completion); + +int SyncScreenJob() +{ + while (gamestate == GS_INTERMISSION || gamestate == GS_INTRO) + { + DoUpdateSounds(); + handleevents(); + updatePauseStatus(); + D_ProcessEvents(); + ControlInfo info; + CONTROL_GetInput(&info); + C_RunDelayedCommands(); + + RunScreenJobFrame(); // This handles continuation through its completion callback. + videoNextPage(); + } + return 0; +} + + + void GameIntro(void) { Logo([](bool) { gamestate = GS_LEVEL; }); @@ -886,25 +937,6 @@ void GameIntro(void) MenuLevel(); } -void Control() -{ - InitGame(); - - GameIntro(); - - while (!QuitFlag) - { - handleevents(); - C_RunDelayedCommands(); - - NewLevel(); - } - - //SybexScreen(); - throw CExitEvent(0); -} - - void getinput(SW_PACKET *, SWBOOL); @@ -922,12 +954,13 @@ void RunLevel(void) handleevents(); C_RunDelayedCommands(); D_ProcessEvents(); + updatePauseStatus(); + if (LoadGameOutsideMoveLoop) { return; // Stop the game loop if a savegame was loaded from the menu. } - updatePauseStatus(); if (paused) { @@ -948,9 +981,7 @@ void RunLevel(void) } drawscreen(Player + screenpeek); - - if (QuitFlag) - break; + videoNextPage(); if (ExitLevel) { @@ -962,81 +993,31 @@ void RunLevel(void) ready2send = 0; } -static const char* actions[] = { - "Move_Forward", - "Move_Backward", - "Turn_Left", - "Turn_Right", - "Strafe", - "Fire", - "Open", - "Run", - "Alt_Fire", // Duke3D", Blood - "Jump", - "Crouch", - "Look_Up", - "Look_Down", - "Look_Left", - "Look_Right", - "Strafe_Left", - "Strafe_Right", - "Aim_Up", - "Aim_Down", - "SendMessage", - "Map", - "Shrink_Screen", - "Enlarge_Screen", - "Show_Opponents_Weapon", - "Map_Follow_Mode", - "See_Coop_View", - "Mouse_Aiming", - "Dpad_Select", - "Dpad_Aiming", - "Last_Weapon", - "Alt_Weapon", - "Third_Person_View", - "Toggle_Crouch", // This is the last one used by EDuke32"", - -}; - int32_t GameInterface::app_main() { - int i; - extern int MovesPerPacket; - void DoSector(void); - void gameinput(void); - int cnt = 0; + InitGame(); - InitCheats(); - buttonMap.SetButtons(actions, NUM_ACTIONS); - automapping = 1; - - gs = gs_defaults; + GameIntro(); - for (i = 0; i < MAX_SW_PLAYERS; i++) - INITLIST(&Player[i].PanelSpriteList); + while (true) + { + handleevents(); + C_RunDelayedCommands(); - DebugOperate = TRUE; - enginecompatibility_mode = ENGINECOMPATIBILITY_19961112; + NewLevel(); + } - if (SW_SHAREWARE) - Printf("SHADOW WARRIOR(tm) Version 1.2 (Shareware Version)\n"); - else - Printf("SHADOW WARRIOR(tm) Version 1.2\n"); - - if (sw_snd_scratch == 0) // This is always 0 at this point - this check is only here to prevent whole program optimization from eliminating the variable. - Printf("Copyright (c) 1997 3D Realms Entertainment\n"); - - registerosdcommands(); - registerinputcommands(); - - Control(); + //SybexScreen(); + throw CExitEvent(0); return 0; } -char WangBangMacro[10][64]; - +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- int RandomRange(int range) { @@ -1060,6 +1041,12 @@ int RandomRange(int range) return value; } +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- + int StdRandomRange(int range) { uint32_t rand_num; @@ -1086,6 +1073,12 @@ int StdRandomRange(int range) return value; } +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- + #include "saveable.h" saveable_module saveable_build{}; @@ -1103,18 +1096,22 @@ void Saveable_Init_Dynamic() saveable_build.numdata = NUM_SAVEABLE_ITEMS(saveable_build_data); } +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- + ReservedSpace GameInterface::GetReservedScreenSpace(int viewsize) { return { 0, 48 }; } - ::GameInterface* CreateInterface() { return new GameInterface; } - GameStats GameInterface::getStats() { PLAYERp pp = Player + myconnectindex; diff --git a/source/sw/src/network.cpp b/source/sw/src/network.cpp index d72130fa3..c65076379 100644 --- a/source/sw/src/network.cpp +++ b/source/sw/src/network.cpp @@ -123,8 +123,11 @@ InitNetPlayerOptions(void) // myconnectindex palette pp->TeamColor = gs.NetColor; - pp->SpriteP->pal = PALETTE_PLAYER0 + pp->TeamColor; - User[pp->SpriteP - sprite]->spal = pp->SpriteP->pal; + if (pp->SpriteP) + { + pp->SpriteP->pal = PALETTE_PLAYER0 + pp->TeamColor; + User[pp->SpriteP - sprite]->spal = pp->SpriteP->pal; + } } void