diff --git a/base/src/client/scoreboard.qc b/base/src/client/scoreboard.qc index f2c69211..519b262f 100644 --- a/base/src/client/scoreboard.qc +++ b/base/src/client/scoreboard.qc @@ -160,7 +160,7 @@ Scores_Draw(void) pos = video_mins + [(video_res[0] / 2) - 145, 30]; } - if (Util_IsTeamPlay()) { + if (Util_IsTeamplay()) { Scores_DrawTeam(pl, pos); } else { Scores_DrawNormal(pl, pos); diff --git a/base/src/server/gamerules.h b/base/src/server/gamerules.h index f00a10e5..31ee48a7 100644 --- a/base/src/server/gamerules.h +++ b/base/src/server/gamerules.h @@ -43,5 +43,5 @@ class MultiplayerRules:GameRules /* client */ virtual void(NSClientPlayer) PlayerSpawn; virtual void(NSClientPlayer) PlayerDeath; - virtual float(NSClientPlayer, string) ConsoleCommand; + virtual bool(NSClientPlayer, string) ConsoleCommand; }; diff --git a/base/src/server/gamerules.qc b/base/src/server/gamerules.qc index 0e158818..aaf24e25 100644 --- a/base/src/server/gamerules.qc +++ b/base/src/server/gamerules.qc @@ -14,8 +14,6 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -var int autocvar_sv_playerkeepalive = TRUE; - void GameRules::LevelDecodeParms(NSClientPlayer pp) { diff --git a/base/src/server/progs.src b/base/src/server/progs.src old mode 100755 new mode 100644 index c73b9b62..e4659f56 --- a/base/src/server/progs.src +++ b/base/src/server/progs.src @@ -30,7 +30,6 @@ client.qc server.qc damage.qc items.qc -rules.qc flashlight.qc modelevent.qc spawn.qc diff --git a/src/botlib/bot.qc b/src/botlib/bot.qc index cc6d6b8c..35929c03 100644 --- a/src/botlib/bot.qc +++ b/src/botlib/bot.qc @@ -166,7 +166,7 @@ bot::SeeThink(void) continue; /* ain't go hurt our brothers and sisters */ - if (rules.IsTeamPlay() == TRUE) + if (rules.IsTeamplay() == TRUE) if (team == w.team) continue; diff --git a/src/botlib/bot_combat.qc b/src/botlib/bot_combat.qc index 085b225f..63ee2aaf 100644 --- a/src/botlib/bot_combat.qc +++ b/src/botlib/bot_combat.qc @@ -21,7 +21,7 @@ bot::Pain(void) super::Pain(); - if (rules.IsTeamPlay()) { + if (rules.IsTeamplay()) { if (g_dmg_eAttacker.flags & FL_CLIENT && g_dmg_eAttacker.team == team) { ChatSayTeam("Stop shooting me!"); return; @@ -143,7 +143,7 @@ BotLib_Alert(vector pos, float radius, float t) continue; /* if they're our friend... ignore*/ - if (rules.IsTeamPlay()) + if (rules.IsTeamplay()) if (w.team == t) continue; diff --git a/src/botlib/route.qc b/src/botlib/route.qc index d19ae931..6d3ccaef 100644 --- a/src/botlib/route.qc +++ b/src/botlib/route.qc @@ -187,7 +187,7 @@ Route_SelectDestination(bot target) entity dest = world; - if (rules.IsTeamPlay()) { + if (rules.IsTeamplay()) { /* we have the goal item, so capture it */ if (target.flags & FL_GOALITEM) { print(sprintf("%s going for capture\n", target.netname)); diff --git a/src/gs-entbase/server/trigger_multiple.qc b/src/gs-entbase/server/trigger_multiple.qc index 66868475..dfe80286 100644 --- a/src/gs-entbase/server/trigger_multiple.qc +++ b/src/gs-entbase/server/trigger_multiple.qc @@ -116,7 +116,7 @@ trigger_multiple::Touch(entity eToucher) if (!HasSpawnFlags(TM_PUSHABLES) && eToucher.classname == "func_pushable") return; - if (Rules_IsTeamPlay() == TRUE) { + if (g_grMode.IsTeamplay() == TRUE) { if (m_iTeam > 0 && eActivator.team != m_iTeam + 1) { return; } diff --git a/src/gs-entbase/shared/NSEntity.qc b/src/gs-entbase/shared/NSEntity.qc index 235409ab..8198558c 100644 --- a/src/gs-entbase/shared/NSEntity.qc +++ b/src/gs-entbase/shared/NSEntity.qc @@ -203,7 +203,7 @@ void NSEntity::TouchHandler(void) { #ifdef SERVER - if (g_grMode.IsTeamPlay()) + if (g_grMode.IsTeamplay()) if (m_iTeam > 0) if (m_iTeam != other.team) { return; diff --git a/src/menu-fn/entry.qc b/src/menu-fn/entry.qc index 22f79404..eae1b7a4 100644 --- a/src/menu-fn/entry.qc +++ b/src/menu-fn/entry.qc @@ -14,13 +14,13 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -var int g_initialized = FALSE; +var bool g_initialized = false; #define FN_UPDATE_PKGLIST "http://www.frag-net.com/dl/%s_packages" const string LICENSE_TEXT = "\ ==============================================================================\ -Copyright (c) 2016-2020 Marco Cawthorne \ +Copyright (c) 2016-2022 Marco Cawthorne \ \ Permission to use, copy, modify, and distribute this software for any\ purpose with or without fee is hereby granted, provided that the above\ @@ -69,12 +69,12 @@ void Menu_GammaHack(void) { if (cvar("brightness") != cvar("vid_brightness")) { - cvar_set("brightness", "0"); + localcmd("seta brightness 0\n"); print("^1Menu_RendererRestarted^7: Brightness hack.\n"); } if (cvar("gamma") != cvar("vid_gamma")) { - cvar_set("gamma", "1"); + localcmd("seta gamma 1\n"); print("^1Menu_RendererRestarted^7: Gamma hack.\n"); } } @@ -135,7 +135,6 @@ m_init(void) Colors_Init(); Strings_Init(); - g_initialized = TRUE; if (games[gameinfo_current].gamedir != "valve" || games[gameinfo_current].steambg == 1) { m_intro_skip(); @@ -166,6 +165,8 @@ m_init(void) string mapname = games[gameinfo_current].menumap; localcmd(strcat("map_background ", mapname, "\n")); } + + g_initialized = true; } /* called upon vid_reload, vid_restart, but not menu init/restart */ @@ -180,7 +181,8 @@ Menu_RendererRestarted(string rendererdesc) void m_shutdown(void) { - g_initialized = FALSE; + g_initialized = false; + /*int i = 0; for (i = 0; i < g_bmp.length; i++) { freepic(g_bmp[i]); @@ -203,11 +205,13 @@ m_draw(vector screensize) { static float oldtime; frametime = time - oldtime; - - if (g_initialized == FALSE) { + + /* don't attempt to draw unless we're done loading everything */ + if (g_initialized == false) { return; } + /* set new scale whenever the resolution changes */ if ((screensize[0] != g_vidsize[0]) || (screensize[1] != g_vidsize[1])) { g_vidsize[0] = screensize[0]; g_vidsize[1] = screensize[1]; @@ -230,6 +234,7 @@ m_draw(vector screensize) /* to prevent TCP timeouts */ menu_chatrooms_keepalive(); + /* clear rich presence whenever the state suddenly changes */ if (g_gamestate != clientstate()) { g_gamestate = clientstate(); @@ -245,6 +250,7 @@ m_draw(vector screensize) RichPresence_Set("status", "Main Menu"); } + /* if the menu is not visible and we're no background map... */ if (!g_active && !g_background) { /* make sure we're redirecting input when the background's gone */ if (getkeydest() != KEY_GAME) { @@ -252,21 +258,28 @@ m_draw(vector screensize) setmousetarget(TARGET_CLIENT); setcursormode(FALSE); } + + /* don't draw the menu below */ return; } + /* when ingame, we'll draw a slight black tint... */ if (clientstate() == 2) { + /* ...unless we're in background map mode. */ if (!g_background) drawfill([0,0], screensize, [0,0,0], 0.75f); } else { + /* clear screen */ drawfill([0,0], screensize, [0,0,0], 1.0f); + /* draw either WON or Steam background */ if (games[gameinfo_current].steambg == 0) Background_WON(); else Background_Steam(); } + /* water mark for version info */ const string ver = "Nuclide (build " __DATE__ ")"; drawfont = Font_GetID(font_console); @@ -277,6 +290,7 @@ m_draw(vector screensize) [1.0f,1.0f,1.0f], 0.5f, 0, font_console); + /* draw the actual widgets */ main_draw(); #ifndef WEBMENU @@ -287,6 +301,7 @@ m_draw(vector screensize) localcmd(sprintf("gameinfo_gamedir %s\nmenu_restart\n", cvar_string("fs_game"))); } #endif + oldtime = time; } diff --git a/src/server/client.qc b/src/server/client.qc index 38953e8c..92a644dd 100644 --- a/src/server/client.qc +++ b/src/server/client.qc @@ -31,7 +31,7 @@ Client_FixAngle(entity target, vector ang) WriteFloat(MSG_MULTICAST, ang[1]); WriteFloat(MSG_MULTICAST, ang[2]); msg_entity = target; - multicast([0,0,0], MULTICAST_ONE); + multicast([0,0,0], MULTICAST_ONE_R); } /* diff --git a/src/server/defs.h b/src/server/defs.h index 97e028d2..111dcacb 100644 --- a/src/server/defs.h +++ b/src/server/defs.h @@ -45,7 +45,7 @@ #define AREAPORTAL_CLOSED 0 #define AREAPORTAL_OPEN 1 -var int autocvar_mp_flashlight = TRUE; +var bool autocvar_mp_flashlight = true; void FX_Impact(impactType_t, vector, vector); void FX_Explosion(vector); @@ -66,7 +66,6 @@ void Client_ShakeOnce(vector, float, float, float, float); void Game_ServerModelEvent(float, int, string); void Event_ServerModelEvent(float, int, string); -int Rules_IsTeamPlay(void); void Mapcycle_Load(string); entity eActivator; @@ -74,7 +73,7 @@ entity eActivator; /* Generic entity fields */ .void(void) PlayerUse; .void(void) PlayerUseUnpressed; -.int iBleeds; +.bool iBleeds; .entity eUser; .float material; .float deaths; @@ -99,7 +98,7 @@ bodyType_t g_dmg_iHitBody; int g_dmg_iFlags; int g_dmg_iWeapon; -var int g_ents_initialized = FALSE; +var bool g_ents_initialized = FALSE; /* main is a qcc leftover */ void main(void) diff --git a/src/server/gamerules.h b/src/server/gamerules.h index 5461eade..0e43b324 100644 --- a/src/server/gamerules.h +++ b/src/server/gamerules.h @@ -26,7 +26,7 @@ class CGameRules /* logic */ virtual void(void) FrameStart; - virtual float(NSClientPlayer,string) ConsoleCommand; + virtual bool(NSClientPlayer,string) ConsoleCommand; /* client */ virtual void(NSClientPlayer) PlayerConnect; @@ -45,18 +45,19 @@ class CGameRules /* Entities/Item manipulation */ virtual int(int) MaxItemPerSlot; - virtual int(void) MonstersSpawn; + virtual bool(void) MonstersSpawn; virtual void(entity,entity,float,int,damageType_t) DamageApply; - virtual int(entity, vector) DamageCheckTrace; + virtual bool(entity, vector) DamageCheckTrace; virtual void(vector,entity,float,float,int,int) DamageRadius; /* end of a game */ virtual void(void) IntermissionStart; virtual void(void) IntermissionCycle; virtual void(void) IntermissionEnd; - virtual int(void) InIntermission; + virtual bool(void) InIntermission; - virtual float(void) IsTeamPlay; + virtual bool(void) IsTeamplay; + virtual bool(void) IsMultiplayer; /* spectator */ /*virtual void(NSClientPlayer) SpectatorConnect; diff --git a/src/server/gamerules.qc b/src/server/gamerules.qc index 5e1bdf13..203c4b81 100644 --- a/src/server/gamerules.qc +++ b/src/server/gamerules.qc @@ -29,10 +29,10 @@ CGameRules::FrameStart(void) { //print("StartFrame!\n"); } -float +bool CGameRules::ConsoleCommand(NSClientPlayer pl, string cmd) { - return (0); + return (false); } /* client */ @@ -189,23 +189,28 @@ CGameRules::IntermissionCycle(void) } -int +bool CGameRules::InIntermission(void) { - return (m_iIntermission) ? 1 : 0; + return (m_iIntermission) ? true : false; } -int +bool CGameRules::MonstersSpawn(void) { - return (TRUE); + return (true); } /* init */ -float -CGameRules::IsTeamPlay(void) +bool +CGameRules::IsTeamplay(void) { - return (FALSE); + return (false); +} +bool +CGameRules::IsMultiplayer(void) +{ + return (false); } void @@ -229,7 +234,7 @@ CGameRules::DamageApply(entity t, entity c, float dmg, int w, damageType_t type) /* friendly fire */ if (autocvar_sv_friendlyFire == false) if (t != c) - if (IsTeamPlay()) { + if (IsTeamplay()) { if (t.flags & FL_CLIENT && c.flags & FL_CLIENT) if (t.team == c.team) return; @@ -323,36 +328,34 @@ CGameRules::DamageApply(entity t, entity c, float dmg, int w, damageType_t type) } /* checks if we can hit an entity at 5 of the same spots */ -int +bool CGameRules::DamageCheckTrace(entity t, vector vecHitPos) { /* We're lazy. Who cares */ - if (t.solid == SOLID_BSP) { - return (TRUE); - } + if (t.solid == SOLID_BSP) + return (true); - traceline(vecHitPos, t.origin, 1, self); - if (trace_fraction == 1) { - return (TRUE); - } - traceline(vecHitPos, t.origin + [15,15,0], 1, self); - if (trace_fraction == 1) { - return (TRUE); - } - traceline(vecHitPos, t.origin + [-15,-15,0], 1, self); - if (trace_fraction == 1) { - return (TRUE); - } - traceline(vecHitPos, t.origin + [-15,15,0], 1, self); - if (trace_fraction == 1) { - return (TRUE); - } - traceline(vecHitPos, t.origin + [15,-15,0], 1, self); - if (trace_fraction == 1) { - return (TRUE); - } + traceline(vecHitPos, t.origin, 1, this); + if (trace_fraction == 1) + return (true); - return (FALSE); + traceline(vecHitPos, t.origin + [15,15,0], 1, this); + if (trace_fraction == 1) + return (true); + + traceline(vecHitPos, t.origin + [-15,-15,0], 1, this); + if (trace_fraction == 1) + return (true); + + traceline(vecHitPos, t.origin + [-15,15,0], 1, this); + if (trace_fraction == 1) + return (true); + + traceline(vecHitPos, t.origin + [15,-15,0], 1, this); + if (trace_fraction == 1) + return (true); + + return (false); } void @@ -412,6 +415,12 @@ CGameRules::IntermissionEnd(void) m_flIntermissionTime = -1; } +bool +CGameRules::PlayerCanAttack(NSClientPlayer bp) +{ + return true; +} + void CGameRules::CGameRules(void) { @@ -420,15 +429,3 @@ CGameRules::CGameRules(void) /* our currently running mode */ CGameRules g_grMode; - -int -Gamerules_IsTeamPlay(void) -{ - return (g_grMode.IsTeamPlay()) ? TRUE : FALSE; -} - -bool -CGameRules::PlayerCanAttack(NSClientPlayer bp) -{ - return true; -} diff --git a/src/server/mapcycle.qc b/src/server/mapcycle.qc index 3599fb90..43d2be97 100644 --- a/src/server/mapcycle.qc +++ b/src/server/mapcycle.qc @@ -14,7 +14,7 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -var int autocvar_mapcycle_enabled = TRUE; +var bool autocvar_mapcycle_enabled = true; var string autocvar_mapcycle_file = "mapcycle.txt"; noref var string g_mapcycle_override = __NULL__; @@ -27,12 +27,6 @@ Mapcycle_Load(string filename) string lastmap = ""; int map_next = 0i; - if (!autocvar_mapcycle_enabled) - return; - - /*if (Rules_IsMultiplayer()) - return;*/ - fs_mapcycle = fopen(filename, FILE_READ); if (fs_mapcycle < 0) { @@ -71,7 +65,16 @@ Mapcycle_Load(string filename) void Mapcycle_Init(void) { - print("--------- Initializing MapCycle ----------\n"); + /* by default, this will be multiplayer only */ + if (g_grMode.IsMultiplayer() == false) + return; + /* in case some server admin wants a map to continously loop */ + if (autocvar_mapcycle_enabled == false) { + print("mapcycle disabled via cvar. skipping\n"); + return; + } + + print("--------- Initializing MapCycle ----------\n"); Mapcycle_Load(autocvar_mapcycle_file); } diff --git a/src/shared/defs.h b/src/shared/defs.h index 5b4573bf..1a19a666 100644 --- a/src/shared/defs.h +++ b/src/shared/defs.h @@ -117,47 +117,9 @@ Empty(void) } -void -Util_Destroy(void) -{ - remove(self); -} - -string -Util_TimeToString(float fTime) -{ - fTime = rint(fTime); - - switch (fTime) { - case 0: return "less than one"; - case 1: return "one"; - case 2: return "two"; - case 3: return "three"; - case 4: return "four"; - case 5: return "five"; - case 6: return "six"; - case 7: return "seven"; - case 8: return "eight"; - case 9: return "nine"; - case 10: return "ten"; - default: return "over ten"; - } -} - - -/* returns whether or not the mode we're playing is a team game */ -#ifdef SERVER -int Gamerules_IsTeamPlay(void); -#endif -int -Util_IsTeamPlay(void) -{ -#ifdef SERVER - return Gamerules_IsTeamPlay(); -#else - return (serverkeyfloat("teams") > 0) ? TRUE : FALSE; -#endif -} +void Util_Destroy(void); +string Util_TimeToString(float fTime); +int Util_IsTeamplay(void); __wrap void dprint(string m) diff --git a/src/shared/include.src b/src/shared/include.src index c990403d..8263bf92 100644 --- a/src/shared/include.src +++ b/src/shared/include.src @@ -10,6 +10,7 @@ player_pmove.qc propdata.qc surfaceproperties.qc NSMaterial.qc +util.qc ../xr/include.src ../materials/include.src #endlist diff --git a/base/src/server/rules.qc b/src/shared/util.qc similarity index 54% rename from base/src/server/rules.qc rename to src/shared/util.qc index ae5c43fa..e467759e 100644 --- a/base/src/server/rules.qc +++ b/src/shared/util.qc @@ -14,7 +14,40 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -int Rules_IsTeamPlay(void) +void +Util_Destroy(void) { - return (int)(cvar("teamplay")); + remove(self); } + +string +Util_TimeToString(float fTime) +{ + fTime = rint(fTime); + + switch (fTime) { + case 0: return "less than one"; + case 1: return "one"; + case 2: return "two"; + case 3: return "three"; + case 4: return "four"; + case 5: return "five"; + case 6: return "six"; + case 7: return "seven"; + case 8: return "eight"; + case 9: return "nine"; + case 10: return "ten"; + default: return "over ten"; + } +} + +/* returns whether or not the mode we're playing is a team game */ +int +Util_IsTeamplay(void) +{ +#ifdef SERVER + return g_grMode.IsTeamplay(); +#else + return (serverkeyfloat("teams") > 0) ? TRUE : FALSE; +#endif +} \ No newline at end of file