diff --git a/source/core/gamecontrol.h b/source/core/gamecontrol.h index d9222d9ae..49c51ad37 100644 --- a/source/core/gamecontrol.h +++ b/source/core/gamecontrol.h @@ -195,4 +195,5 @@ enum }; void updatePauseStatus(); +void updatePauseStatus(bool state, bool multiplayer); extern int paused; diff --git a/source/core/gamecvars.cpp b/source/core/gamecvars.cpp index 098d7d791..263f8f6bd 100644 --- a/source/core/gamecvars.cpp +++ b/source/core/gamecvars.cpp @@ -462,13 +462,7 @@ CVAR(String, usermapfolder, "", CVAR_ARCHIVE); CUSTOM_CVAR(Int, playercolor, 0, CVAR_ARCHIVE|CVAR_USERINFO) { if (self < 0 || self > 10) self = 0; - else ;// gi->UpdatePlayerColor(); // this part is game specific -} - -CUSTOM_CVAR(Int, playerteam, 0, CVAR_USERINFO) // this one is transient and won't be saved. -{ - if (self < 0 || self > 3) self = 0; - else ;// gi->UpdatePlayerTeam(); // this part is game specific + else ;// gi->PlayerColorChanged(); // this part is game specific } // Will only become useful if the obituary system gets overhauled and for localization diff --git a/source/core/gamecvars.h b/source/core/gamecvars.h index 272beea96..0bc5f1faf 100644 --- a/source/core/gamecvars.h +++ b/source/core/gamecvars.h @@ -110,7 +110,6 @@ EXTERN_CVAR(Int, m_marker) EXTERN_CVAR(Int, m_ffire) EXTERN_CVAR(Int, m_noexits) EXTERN_CVAR(Int, playercolor) -EXTERN_CVAR(Int, playerteam) extern bool gNoAutoLoad; extern int hud_statusbarrange; // will be set by the game's configuration setup. diff --git a/source/core/inputstate.cpp b/source/core/inputstate.cpp index b62560eef..e6ff43661 100644 --- a/source/core/inputstate.cpp +++ b/source/core/inputstate.cpp @@ -203,3 +203,9 @@ void CONTROL_GetInput(ControlInfo* info) info->dpitch += -joyaxes[JOYAXIS_Pitch] * 22.5f; } } + + +CCMD(pause) +{ + inputState.SetPause(); +} diff --git a/source/core/inputstate.h b/source/core/inputstate.h index b77261063..f60fd17d3 100644 --- a/source/core/inputstate.h +++ b/source/core/inputstate.h @@ -36,6 +36,11 @@ class InputState KEYFIFOSIZ = 64, }; + enum EAction + { + Action_Pause = 1, + }; + uint8_t KeyStatus[NUM_KEYS]; kb_scancode g_keyFIFO[KEYFIFOSIZ]; @@ -47,6 +52,8 @@ class InputState vec2f_t g_mousePos; + int actions; + void keySetState(int32_t key, int32_t state); public: @@ -166,6 +173,7 @@ public: keyFlushChars(); keyFlushScans(); buttonMap.ResetButtonStates(); // this is important. If all input is cleared, the buttons must be cleared as well. + actions = 0; } bool CheckAllInput() @@ -178,6 +186,10 @@ public: return res; } + void SetPause() { actions |= Action_Pause; } + void ClearPause() { actions &= ~Action_Pause; } + bool CheckPause() { bool b = !!(actions & Action_Pause); ClearPause(); return b; } + }; extern InputState inputState; diff --git a/source/exhumed/src/exhumed.cpp b/source/exhumed/src/exhumed.cpp index 04394063c..675064695 100644 --- a/source/exhumed/src/exhumed.cpp +++ b/source/exhumed/src/exhumed.cpp @@ -2273,11 +2273,7 @@ GAMELOOP: // loc_11FBC: while (paused) { - inputState.ClearAllInput(); - if (WaitAnyKey(-1) != sc_Pause) - { - paused = kFalse; - } + updatePauseStatus(); } } diff --git a/source/games/duke/src/2d_d.cpp b/source/games/duke/src/2d_d.cpp index 5335bd761..4555de733 100644 --- a/source/games/duke/src/2d_d.cpp +++ b/source/games/duke/src/2d_d.cpp @@ -711,7 +711,7 @@ public: mysnprintf(tempbuf, 32, "%ld", i + 1); MiniText(30, 90 + t, tempbuf, 0); - MiniText(38, 90 + t, g_player[i].user_name, 0, -1, ps[i].palookup); + MiniText(38, 90 + t, ud.user_name[i], 0, -1, ps[i].palookup); for (int y = 0; y < playerswhenstarted; y++) { diff --git a/source/games/duke/src/2d_r.cpp b/source/games/duke/src/2d_r.cpp index a5f13c7c3..addf802ba 100644 --- a/source/games/duke/src/2d_r.cpp +++ b/source/games/duke/src/2d_r.cpp @@ -294,7 +294,7 @@ public: mysnprintf(tempbuf, 32, "%ld", i + 1); MiniText(30, 90 + t, tempbuf, 0); - MiniText(38, 90 + t, g_player[i].user_name, 0, -1, ps[i].palookup); + MiniText(38, 90 + t, ud.user_name[i], 0, -1, ps[i].palookup); for (int y = 0; y < playerswhenstarted; y++) { diff --git a/source/games/duke/src/ccmds.cpp b/source/games/duke/src/ccmds.cpp index 2d71ab993..7535946c1 100644 --- a/source/games/duke/src/ccmds.cpp +++ b/source/games/duke/src/ccmds.cpp @@ -58,7 +58,7 @@ static void dowarp(MapRecord *map) newgame(map, ud.m_player_skill); ps[myconnectindex].gm = MODE_RESTART; } - else G_NewGame_EnterLevel(map, ud.m_player_skill); + else startnewgame(map, ud.m_player_skill); } static int ccmd_levelwarp(CCmdFuncPtr parm) diff --git a/source/games/duke/src/d_menu.cpp b/source/games/duke/src/d_menu.cpp index b7a8064bd..2ec7b92ef 100644 --- a/source/games/duke/src/d_menu.cpp +++ b/source/games/duke/src/d_menu.cpp @@ -318,7 +318,7 @@ void GameInterface::StartGame(FNewGameStartup& gs) auto map = FindMapByLevelNum(levelnum(gs.Episode, gs.Level)); if (map) { - G_NewGame_EnterLevel(map, ud.m_player_skill); + startnewgame(map, ud.m_player_skill); } } diff --git a/source/games/duke/src/funct.h b/source/games/duke/src/funct.h index 48f1fe7fd..61d6b856b 100644 --- a/source/games/duke/src/funct.h +++ b/source/games/duke/src/funct.h @@ -185,6 +185,7 @@ void initwaterdrip(int j, int i); int initreactor(int j, int i, bool isrecon); void spawneffector(int i); void gameexitfrommenu(); +int startrts(int lumpNum, int localPlayer); void pickrandomspot(int pn); void resetinventory(int pn); @@ -225,5 +226,8 @@ void clearfrags(void); int exitlevel(); int enterlevel(MapRecord* mi, int gm); void newgame(MapRecord* mi, int sk); +void startnewgame(MapRecord* map, int skill); +void setlocalplayerinput(player_struct *pp); +void PlayerColorChanged(void); END_DUKE_NS diff --git a/source/games/duke/src/game.h b/source/games/duke/src/game.h index c5a5f83a8..fdd4d5095 100644 --- a/source/games/duke/src/game.h +++ b/source/games/duke/src/game.h @@ -69,15 +69,6 @@ struct TileInfo extern TileInfo tileinfo[MAXTILES]; -extern int startrts(int lumpNum, int localPlayer); - -static inline void G_NewGame_EnterLevel(MapRecord *map, int skill) -{ - newgame(map, skill); - - if (enterlevel(map, MODE_GAME)) - G_BackToMenu(); -} extern void setupbackdrop(); diff --git a/source/games/duke/src/game_misc.cpp b/source/games/duke/src/game_misc.cpp index 590940f0d..3674d2ca6 100644 --- a/source/games/duke/src/game_misc.cpp +++ b/source/games/duke/src/game_misc.cpp @@ -423,7 +423,7 @@ void displayrest(int smoothratio) if (ud.scrollmode == 0) { - if (pp->newowner == -1 && !ud.pause_on) + if (pp->newowner == -1 && !paused) { if (screenpeek == myconnectindex && numplayers > 1) { @@ -447,7 +447,7 @@ void displayrest(int smoothratio) } else { - if (!ud.pause_on) + if (!paused) { ud.fola += ud.folavel >> 3; ud.folx += (ud.folfvel * sintable[(512 + 2048 - ud.fola) & 2047]) >> 14; @@ -490,7 +490,7 @@ void displayrest(int smoothratio) } } - if (ud.pause_on == 1 && (ps[myconnectindex].gm & MODE_MENU) == 0) + if (paused == 1 && (ps[myconnectindex].gm & MODE_MENU) == 0) fi.PrintPaused(); } diff --git a/source/games/duke/src/gameloop.cpp b/source/games/duke/src/gameloop.cpp index 3c8031c8f..9de6b951b 100644 --- a/source/games/duke/src/gameloop.cpp +++ b/source/games/duke/src/gameloop.cpp @@ -239,7 +239,7 @@ int domovethings() if (numplayers < 2 && !isRR()) S_PlaySound(GENERIC_AMBIENCE17, CHAN_AUTO, CHANF_UI); - Printf(PRINT_NOTIFY, "%s is history!", g_player[i].user_name); + Printf(PRINT_NOTIFY, "%s is history!", ud.user_name[i]); quickkill(&ps[i]); deletesprite(ps[i].i); @@ -249,7 +249,7 @@ int domovethings() //if(ud.recstat == 1) record(); - if (ud.pause_on == 0) + if (paused == 0) { global_random = krand(); movedummyplayers();//ST 13 @@ -257,7 +257,7 @@ int domovethings() for (i = connecthead; i >= 0; i = connectpoint2[i]) { - if (ud.pause_on == 0) + if (paused == 0) { auto p = &ps[i]; if (p->pals.a > 0) @@ -268,7 +268,7 @@ int domovethings() } } - if (ud.pause_on == 0) + if (paused == 0) { if (levelTextTime > 0) levelTextTime--; diff --git a/source/games/duke/src/inlines.h b/source/games/duke/src/inlines.h index 1c20b3edb..0412d46a3 100644 --- a/source/games/duke/src/inlines.h +++ b/source/games/duke/src/inlines.h @@ -160,7 +160,7 @@ inline void SetPlayerPal(player_struct* p, PalEntry pe) inline int calc_smoothratio(ClockTicks totalclk, ClockTicks ototalclk) { if (!((ud.multimode < 2 && ((ps[myconnectindex].gm & MODE_MENU) == 0)) || - ud.multimode > 1 || ud.recstat == 2) || ud.pause_on) + ud.multimode > 1 || ud.recstat == 2) || paused) { return 65536; } diff --git a/source/games/duke/src/input.cpp b/source/games/duke/src/input.cpp index 6145923bd..779243b44 100644 --- a/source/games/duke/src/input.cpp +++ b/source/games/duke/src/input.cpp @@ -105,16 +105,8 @@ void hud_input(int snum) { p->interface_toggle_flag = 1; - if (PlayerInput(snum, SKB_PAUSE)) - { - ud.pause_on = !ud.pause_on; - if (ud.pause_on == 1 && PlayerInput(snum, SKB_RUN)) ud.pause_on = 2; // Mode 2 is silent, i.e. prints no notification. - Mus_SetPaused(ud.pause_on); - S_PauseSounds(ud.pause_on); - } - // Don't go on if paused or dead. - if (ud.pause_on) return; + if (paused) return; if (sprite[p->i].extra <= 0) return; // Activate an inventory item. This just forwards to the other inventory bits. If the inventory selector was taken out of the playsim this could be removed. diff --git a/source/games/duke/src/player.cpp b/source/games/duke/src/player.cpp index 267bf49a2..d0b308a1a 100644 --- a/source/games/duke/src/player.cpp +++ b/source/games/duke/src/player.cpp @@ -39,6 +39,50 @@ source as it is released. BEGIN_DUKE_NS +//--------------------------------------------------------------------------- +// +// callback for playercolor CVAR +// +//--------------------------------------------------------------------------- + +inline int playercolor2lookup(int color) +{ + static int8_t player_pals[] = { 0, 9, 10, 11, 12, 13, 14, 15, 16, 21, 23, }; + if (color >= 0 && color < 10) return player_pals[color]; + return 0; +} + +void PlayerColorChanged(void) +{ + if (ud.recstat != 0) + return; + + if (ud.multimode > 1) + { + //Net_SendClientInfo(); + } + else + { + ps[myconnectindex].palookup = ud.user_pals[myconnectindex] = playercolor2lookup(playercolor); + } + if (sprite[ps[myconnectindex].i].picnum == TILE_APLAYER && sprite[ps[myconnectindex].i].pal != 1) + sprite[ps[myconnectindex].i].pal = ud.user_pals[myconnectindex]; +} + +//--------------------------------------------------------------------------- +// +// Sync local player with CVARs. +// +//--------------------------------------------------------------------------- + +void setlocalplayerinput(player_struct* pp) +{ + pp->aim_mode = in_mousemode; + pp->auto_aim = cl_autoaim; + pp->weaponswitch = cl_weaponswitch; +} + + //--------------------------------------------------------------------------- // // why is this such a mess? @@ -502,8 +546,7 @@ void playerisdead(int snum, int psectlotag, int fz, int cz) ps[p->frag_ps].frag++; frags[p->frag_ps][snum]++; - auto pname = &g_player[p->frag_ps].user_name[0]; // TRANSITIONAL - //&ud.user_name[p->frag_ps][0]); + auto pname = &ud.user_name[p->frag_ps][0]; if (snum == screenpeek) { quoteMgr.InitializeQuote(QUOTE_RESERVED, "Killed by %s", pname); diff --git a/source/games/duke/src/player.h b/source/games/duke/src/player.h index 41e8116eb..7b42ce642 100644 --- a/source/games/duke/src/player.h +++ b/source/games/duke/src/player.h @@ -48,14 +48,8 @@ enum gamemode_t { typedef struct { - bool horizRecenter; float horizAngleAdjust; fix16_t horizSkew; - - int32_t pcolor, pteam; - // NOTE: wchoice[HANDREMOTE_WEAPON .. MAX_WEAPONS-1] unused - - char user_name[32]; double lastInputTicks; } playerdata_t; diff --git a/source/games/duke/src/premap.cpp b/source/games/duke/src/premap.cpp index 01278105e..335ae3b68 100644 --- a/source/games/duke/src/premap.cpp +++ b/source/games/duke/src/premap.cpp @@ -415,7 +415,7 @@ void resetprestat(int snum,int g) animatecnt = 0; parallaxtype = 0; randomseed = 17L; - ud.pause_on = 0; + paused = 0; ud.camerasprite =-1; ud.eog = 0; tempwallptr = 0; @@ -623,14 +623,14 @@ void resetpspritevars(int g) if (s->pal == 0) { s->pal = ps[j].palookup = which_palookup; - //ud.user_pals[j] = which_palookup; + ud.user_pals[j] = which_palookup; which_palookup++; if (which_palookup == 17) which_palookup = 9; } - else /*ud.user_pals[j] =*/ ps[j].palookup = s->pal; + else ud.user_pals[j] = ps[j].palookup = s->pal; } else - s->pal = ps[j].palookup = g_player[j].pcolor;// ud.user_pals[j]; + s->pal = ps[j].palookup = ud.user_pals[j]; ps[j].i = i; ps[j].frag_ps = j; @@ -1009,6 +1009,24 @@ int enterlevel(MapRecord *mi, int gamemode) return 0; } +//--------------------------------------------------------------------------- +// +// Start a new game from the menu +// +//--------------------------------------------------------------------------- + +void startnewgame(MapRecord* map, int skill) +{ + newgame(map, skill); + + if (enterlevel(map, MODE_GAME)) + { + ps[myconnectindex].gm = 0; + M_StartControlPanel(false); + M_SetMenu(NAME_Mainmenu); + } +} + //--------------------------------------------------------------------------- // // Ideally this will become the only place where map progression gets set up. diff --git a/source/games/duke/src/render.cpp b/source/games/duke/src/render.cpp index 03dc99e99..94003aefa 100644 --- a/source/games/duke/src/render.cpp +++ b/source/games/duke/src/render.cpp @@ -295,7 +295,7 @@ void setdrugmode(player_struct *p, int oyrepeat) { if (!paused) { - if (p->DrugMode > 0 && !(p->gm & MODE_TYPE) && !ud.pause_on) + if (p->DrugMode > 0 && !(p->gm & MODE_TYPE) && !paused) { int var_8c; if (p->drug_stat[0] == 0) @@ -491,7 +491,7 @@ void displayrooms(int snum, int smoothratio) videoSetCorrectedAspect(); smoothratio = min(max(smoothratio, 0), 65536); - if (ud.pause_on || ps[snum].on_crane > -1) smoothratio = 65536; + if (paused || ps[snum].on_crane > -1) smoothratio = 65536; sect = p->cursectnum; if (sect < 0 || sect >= MAXSECTORS) return; diff --git a/source/games/duke/src/types.h b/source/games/duke/src/types.h index ab2b7c32d..17b326ec1 100644 --- a/source/games/duke/src/types.h +++ b/source/games/duke/src/types.h @@ -47,8 +47,9 @@ struct user_defs unsigned char show_help, scrollmode, clipping; char user_name[MAXPLAYERS][32]; unsigned char overhead_on, last_overhead, showweapons; + unsigned char user_pals[MAXPLAYERS]; - short pause_on, from_bonus; + short from_bonus; short camerasprite, last_camsprite; short last_level, secretlevel; diff --git a/source/games/duke/src/zz_game.cpp b/source/games/duke/src/zz_game.cpp index 46b7b736d..5787d1fc5 100644 --- a/source/games/duke/src/zz_game.cpp +++ b/source/games/duke/src/zz_game.cpp @@ -58,6 +58,7 @@ int32_t moveloop(void); int menuloop(void); void advancequeue(int myconnectindex); input_t& nextinput(int myconnectindex); +void GetInput(); int16_t max_ammo_amount[MAX_WEAPONS]; int32_t spriteqamount = 64; @@ -287,14 +288,6 @@ static int parsedefinitions_game(scriptfile *, int); =================== */ -inline int G_CheckPlayerColor(int color) -{ - static int32_t player_pals[] = { 0, 9, 10, 11, 12, 13, 14, 15, 16, 21, 23, }; - if (color >= 0 && color < 10) return player_pals[color]; - return 0; -} - - static void G_Startup(void) { timerInit(TICRATE); @@ -346,46 +339,6 @@ static void G_Startup(void) screenpeek = myconnectindex; } -static void P_SetupMiscInputSettings(void) -{ - struct player_struct *pp = &ps[myconnectindex]; - - pp->aim_mode = in_mousemode; - pp->auto_aim = cl_autoaim; - pp->weaponswitch = cl_weaponswitch; -} - -void G_UpdatePlayerFromMenu(void) -{ - if (ud.recstat != 0) - return; - - if (numplayers > 1) - { - //Net_SendClientInfo(); - if (sprite[ps[myconnectindex].i].picnum == TILE_APLAYER && sprite[ps[myconnectindex].i].pal != 1) - sprite[ps[myconnectindex].i].pal = g_player[myconnectindex].pcolor; - } - else - { - P_SetupMiscInputSettings(); - ps[myconnectindex].palookup = g_player[myconnectindex].pcolor = G_CheckPlayerColor(playercolor); - - g_player[myconnectindex].pteam = playerteam; - - if (sprite[ps[myconnectindex].i].picnum == TILE_APLAYER && sprite[ps[myconnectindex].i].pal != 1) - sprite[ps[myconnectindex].i].pal = g_player[myconnectindex].pcolor; - } -} - -void G_BackToMenu(void) -{ - ps[myconnectindex].gm = 0; - M_StartControlPanel(false); - M_SetMenu(NAME_Mainmenu); - inputState.keyFlushChars(); -} - void app_loop(); // TODO: reorder (net)weaponhit to eliminate slop and update assertion @@ -480,8 +433,7 @@ int GameInterface::app_main() ud.ShowOpponentWeapons = 0; ud.camerasprite = -1; ud.camera_time = 0;//4; - playerteam = 0; - + S_InitSound(); @@ -513,8 +465,7 @@ int GameInterface::app_main() for (int i=1, j=numplayers; jq16ang); @@ -682,12 +623,7 @@ MAIN_LOOP_RESTART: if (G_FPSLimit()) { - if (isRRRA() && ps[myconnectindex].OnMotorcycle) - P_GetInputMotorcycle(myconnectindex); - else if (isRRRA() && ps[myconnectindex].OnBoat) - P_GetInputBoat(myconnectindex); - else - P_GetInput(myconnectindex); + GetInput(); int const smoothRatio = calc_smoothratio(totalclock, ototalclock); diff --git a/source/games/duke/src/zz_player.cpp b/source/games/duke/src/zz_player.cpp index 513033eff..73df03304 100644 --- a/source/games/duke/src/zz_player.cpp +++ b/source/games/duke/src/zz_player.cpp @@ -98,7 +98,7 @@ void P_GetInput(int const playerNum) return; - if ((pPlayer->gm & (MODE_MENU|MODE_TYPE)) || (ud.pause_on && !inputState.GetKeyStatus(sc_Pause))) + if (paused) { if (!(pPlayer->gm&MODE_MENU)) CONTROL_GetInput(&info); @@ -114,9 +114,7 @@ void P_GetInput(int const playerNum) if (numplayers == 1) { - pPlayer->aim_mode = in_mousemode; - pPlayer->auto_aim = cl_autoaim; - pPlayer->weaponswitch = cl_weaponswitch; + setlocalplayerinput(pPlayer); } @@ -327,7 +325,7 @@ void P_GetInput(int const playerNum) localInput.bits |= (mouseaim << SK_AIMMODE); localInput.bits |= (g_gameQuit << SK_GAMEQUIT); - localInput.bits |= !!inputState.GetKeyStatus(sc_Pause) << SK_PAUSE; + localInput.bits |= inputState.CheckPause() << SK_PAUSE; //localInput.bits |= ((uint32_t)inputState.GetKeyStatus(sc_Escape)) << SK_ESCAPE; fixme.This needs to be done differently if (isRR()) @@ -391,14 +389,13 @@ void P_GetInput(int const playerNum) = atan2f(pPlayer->q16horiz - F16(100), F16(128)) * (512.f / fPI) + scaleAdjustmentToInterval(thisPlayer.horizAngleAdjust); pPlayer->q16horiz = F16(100) + Blrintf(F16(128) * tanf(horizAngle * (fPI / 512.f))); } - else if (pPlayer->return_to_center > 0 || thisPlayer.horizRecenter) + else if (pPlayer->return_to_center > 0) { pPlayer->q16horiz = fix16_sadd(pPlayer->q16horiz, fix16_from_dbl(scaleAdjustmentToInterval(fix16_to_dbl(fix16_from_dbl(200 / 3) - fix16_sdiv(pPlayer->q16horiz, F16(1.5)))))); - if ((!pPlayer->return_to_center && thisPlayer.horizRecenter) || (pPlayer->q16horiz >= F16(99.9) && pPlayer->q16horiz <= F16(100.1))) + if ((pPlayer->q16horiz >= F16(99.9) && pPlayer->q16horiz <= F16(100.1))) { pPlayer->q16horiz = F16(100); - thisPlayer.horizRecenter = false; } if (pPlayer->q16horizoff >= F16(-0.1) && pPlayer->q16horizoff <= F16(0.1)) @@ -446,7 +443,7 @@ void P_GetInputMotorcycle(int playerNum) auto const pPlayer = &ps[playerNum]; ControlInfo info; - if ((pPlayer->gm & (MODE_MENU|MODE_TYPE)) || (ud.pause_on && !inputState.GetKeyStatus(sc_Pause))) + if (paused) { if (!(pPlayer->gm&MODE_MENU)) CONTROL_GetInput(&info); @@ -462,9 +459,7 @@ void P_GetInputMotorcycle(int playerNum) if (numplayers == 1) { - pPlayer->aim_mode = in_mousemode; - pPlayer->auto_aim = cl_autoaim; - pPlayer->weaponswitch = cl_weaponswitch; + setlocalplayerinput(pPlayer); } CONTROL_GetInput(&info); @@ -497,7 +492,7 @@ void P_GetInputMotorcycle(int playerNum) localInput.bits |= buttonMap.ButtonDown(gamefunc_MedKit) << SK_MEDKIT; localInput.bits |= (buttonMap.ButtonDown(gamefunc_Inventory_Left) || (buttonMap.ButtonDown(gamefunc_Dpad_Select) && (input.svel > 0 || input.q16avel < 0))) << SK_INV_LEFT; - localInput.bits |= !!inputState.GetKeyStatus(sc_Pause) << SK_PAUSE; + localInput.bits |= inputState.CheckPause() << SK_PAUSE; localInput.bits |= buttonMap.ButtonDown(gamefunc_Holo_Duke) << SK_HOLODUKE; localInput.bits |= buttonMap.ButtonDown(gamefunc_Jetpack) << SK_JETPACK; localInput.bits |= (g_gameQuit << SK_GAMEQUIT); @@ -638,7 +633,7 @@ void P_GetInputBoat(int playerNum) auto const pPlayer = &ps[playerNum]; ControlInfo info; - if ((pPlayer->gm & (MODE_MENU|MODE_TYPE)) || (ud.pause_on && !inputState.GetKeyStatus(sc_Pause))) + if (paused) { if (!(pPlayer->gm&MODE_MENU)) CONTROL_GetInput(&info); @@ -654,9 +649,7 @@ void P_GetInputBoat(int playerNum) if (numplayers == 1) { - pPlayer->aim_mode = in_mousemode; - pPlayer->auto_aim = cl_autoaim; - pPlayer->weaponswitch = cl_weaponswitch; + setlocalplayerinput(pPlayer); } CONTROL_GetInput(&info); @@ -687,9 +680,9 @@ void P_GetInputBoat(int playerNum) localInput.bits |= buttonMap.ButtonDown(gamefunc_Steroids) << SK_STEROIDS; localInput.bits |= buttonMap.ButtonDown(gamefunc_NightVision) << SK_NIGHTVISION; localInput.bits |= buttonMap.ButtonDown(gamefunc_MedKit) << SK_MEDKIT; - localInput.bits |= (buttonMap.ButtonDown(gamefunc_Inventory_Left) || + localInput.bits |= (buttonMap.ButtonDown(gamefunc_Inventory_Left) || (buttonMap.ButtonDown(gamefunc_Dpad_Select) && (input.svel > 0 || input.q16avel < 0))) << SK_INV_LEFT; - localInput.bits |= !!inputState.GetKeyStatus(sc_Pause) << SK_PAUSE; + localInput.bits |= inputState.CheckPause() << SK_PAUSE; localInput.bits |= buttonMap.ButtonDown(gamefunc_Holo_Duke) << SK_HOLODUKE; localInput.bits |= buttonMap.ButtonDown(gamefunc_Jetpack) << SK_JETPACK; localInput.bits |= (g_gameQuit << SK_GAMEQUIT); @@ -805,4 +798,15 @@ void P_GetInputBoat(int playerNum) localInput.fvel = clamp((input.fvel += pPlayer->MotoSpeed), -(MAXVELMOTO / 8), MAXVELMOTO); } +void GetInput() +{ + updatePauseStatus(); + + if (isRRRA() && ps[myconnectindex].OnMotorcycle) + P_GetInputMotorcycle(myconnectindex); + else if (isRRRA() && ps[myconnectindex].OnBoat) + P_GetInputBoat(myconnectindex); + else + P_GetInput(myconnectindex); +} END_DUKE_NS diff --git a/source/games/duke/src/zz_savegame.cpp b/source/games/duke/src/zz_savegame.cpp index 471d9aa50..6112cff2a 100644 --- a/source/games/duke/src/zz_savegame.cpp +++ b/source/games/duke/src/zz_savegame.cpp @@ -533,9 +533,7 @@ static void sv_restsave(); static void sv_restload(); static void sv_rrrafog(); -#define SVARDATALEN \ - ((sizeof(g_player[0].user_name)+sizeof(g_player[0].pcolor)+sizeof(g_player[0].pteam) \ - +sizeof(struct player_struct))*MAXPLAYERS) +#define SVARDATALEN 1 static uint8_t savegame_restdata[SVARDATALEN]; @@ -561,7 +559,6 @@ static const dataspec_t svgm_udnetw[] = { DS_NOCHK, &ud.coop, sizeof(ud.coop), 1 }, { DS_NOCHK, &ud.marker, sizeof(ud.marker), 1 }, { DS_NOCHK, &ud.ffire, sizeof(ud.ffire), 1 }, - { 0, &ud.pause_on, sizeof(ud.pause_on), 1 }, { 0, connectpoint2, sizeof(connectpoint2), 1 }, { 0, &randomseed, sizeof(randomseed), 1 }, { 0, &global_random, sizeof(global_random), 1 }, @@ -933,9 +930,6 @@ static void sv_restsave() #define CPDAT(ptr,sz) do { Bmemcpy(mem, ptr, sz), mem+=sz ; } while (0) for (int i = 0; i < MAXPLAYERS; i++) { - CPDAT(g_player[i].user_name, 32); - CPDAT(&g_player[i].pcolor, sizeof(g_player[0].pcolor)); - CPDAT(&g_player[i].pteam, sizeof(g_player[0].pteam)); CPDAT(&ps[i], sizeof(struct player_struct)); } @@ -949,9 +943,6 @@ static void sv_restload() #define CPDAT(ptr,sz) Bmemcpy(ptr, mem, sz), mem+=sz for (int i = 0; i < MAXPLAYERS; i++) { - CPDAT(g_player[i].user_name, 32); - CPDAT(&g_player[i].pcolor, sizeof(g_player[0].pcolor)); - CPDAT(&g_player[i].pteam, sizeof(g_player[0].pteam)); CPDAT(&ps[i], sizeof(struct player_struct)); } #undef CPDAT diff --git a/source/sw/src/game.cpp b/source/sw/src/game.cpp index 501a723d6..19933c48d 100644 --- a/source/sw/src/game.cpp +++ b/source/sw/src/game.cpp @@ -3160,10 +3160,10 @@ getinput(SW_PACKET *loc, SWBOOL tied) } #endif } - else if (inputState.GetKeyStatus(sc_Pause)) + else if (inputState.CheckPause()) { - SET_LOC_KEY(loc->bits, SK_PAUSE, inputState.GetKeyStatus(sc_Pause)); - inputState.ClearKeyStatus(sc_Pause); + SET_LOC_KEY(loc->bits, SK_PAUSE, true); + inputState.ClearPause(); } SET_LOC_KEY(loc->bits, SK_CENTER_VIEW, buttonMap.ButtonDown(gamefunc_Center_View)); diff --git a/wadsrc/static/engine/commonbinds.txt b/wadsrc/static/engine/commonbinds.txt index 1b7206482..deaa73239 100644 --- a/wadsrc/static/engine/commonbinds.txt +++ b/wadsrc/static/engine/commonbinds.txt @@ -42,6 +42,7 @@ Home "+Aim_Up" End "+Aim_Down" RCtrl "+Fire" Scroll "+Holster_Weapon" +Pause "pause" Enter "+Inventory" KP-Enter "+Inventory" diff --git a/wadsrc/static/engine/menudef.txt b/wadsrc/static/engine/menudef.txt index 71d6c02cc..5b22af217 100644 --- a/wadsrc/static/engine/menudef.txt +++ b/wadsrc/static/engine/menudef.txt @@ -1079,7 +1079,6 @@ OptionMenu "NewPlayerMenu" //protected Option "$PLYRMNU_PLAYERCOLOR", "playercolor", "PlayerColorsSW" } Option "$PLYRMNU_PLAYERGENDER", "playergender", "Gender" - Option "$PLYRMNU_TEAM", "playerteam", "PlayerTeam" Submenu "$PLRMNU_TAUNTS", "TauntsMenu" Class "NewPlayerMenu" }