From 8c3804a1bc3568d233b4559a818d5eca9c6da382 Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Tue, 29 Mar 2022 15:20:52 -0700 Subject: [PATCH] Make Client_InIntermission() a shared (Client/Server) function, add method 'InIntermission()' to CGameRules. Tone down the intermission view movement, also tweak Spawn_SelectRandom() to find more points. --- src/client/entry.qc | 2 +- src/client/util.cpp | 9 +-------- src/server/gamerules.h | 1 + src/server/gamerules.qc | 6 ++++++ src/server/spawn.qc | 9 ++++++++- src/shared/client.qc | 11 +++++++++++ src/shared/player.qc | 2 +- 7 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/client/entry.qc b/src/client/entry.qc index 5f3ad7e5..b398fae9 100644 --- a/src/client/entry.qc +++ b/src/client/entry.qc @@ -335,7 +335,7 @@ CSQC_UpdateView(float w, float h, float focus) if (Client_InIntermission()) { view_angles = pSeat->m_vecCameraAngle; - view_angles += [sin(time), sin(time * 2)]; + view_angles += [sin(time), sin(time * 1.5f)] * 0.1f; setproperty(VF_ORIGIN, pSeat->m_vecCameraOrigin); setproperty(VF_CL_VIEWANGLES, view_angles); } diff --git a/src/client/util.cpp b/src/client/util.cpp index ac831b2c..866f7f28 100644 --- a/src/client/util.cpp +++ b/src/client/util.cpp @@ -30,11 +30,4 @@ float Client_IsPlayer(base_client cl) { return (cl.classname == "player") ? TRUE : FALSE; -} - - -float -Client_InIntermission(void) -{ - return g_iIntermission; -} +} \ No newline at end of file diff --git a/src/server/gamerules.h b/src/server/gamerules.h index 54f735dd..74b7e477 100644 --- a/src/server/gamerules.h +++ b/src/server/gamerules.h @@ -53,6 +53,7 @@ class CGameRules virtual void(void) IntermissionStart; virtual void(void) IntermissionCycle; virtual void(void) IntermissionEnd; + virtual int(void) InIntermission; virtual float(void) IsTeamPlay; diff --git a/src/server/gamerules.qc b/src/server/gamerules.qc index 90489b55..5c6da422 100644 --- a/src/server/gamerules.qc +++ b/src/server/gamerules.qc @@ -173,6 +173,12 @@ CGameRules::IntermissionCycle(void) } +int +CGameRules::InIntermission(void) +{ + return (m_iIntermission) ? 1 : 0; +} + int CGameRules::MonstersSpawn(void) { diff --git a/src/server/spawn.qc b/src/server/spawn.qc index 6cc346a9..563672f2 100644 --- a/src/server/spawn.qc +++ b/src/server/spawn.qc @@ -90,7 +90,14 @@ entity Spawn_SelectRandom(string cname) static entity lastspot; entity spot = lastspot; - for (int i = random(1, 5); i > 0; i--) { + float max = 0; + + /* count our max count */ + for (entity e = world;(e = find(e, ::classname, cname));) { + max++; + } + + for (int i = random(1, max); i > 0; i--) { spot = find(spot, classname, cname); } diff --git a/src/shared/client.qc b/src/shared/client.qc index bad0962c..bcc2e9fe 100644 --- a/src/shared/client.qc +++ b/src/shared/client.qc @@ -47,3 +47,14 @@ base_client::base_client(void) { } + + +float +Client_InIntermission(void) +{ +#ifdef CLIENT + return g_iIntermission; +#else + return (float)g_grMode.InIntermission(); +#endif +} diff --git a/src/shared/player.qc b/src/shared/player.qc index ad2c7922..4202caa1 100644 --- a/src/shared/player.qc +++ b/src/shared/player.qc @@ -88,7 +88,7 @@ base_player::PostFrame(void) void base_player::ClientInput(void) { - if (IsFakeSpectator()) { + if (!Client_InIntermission() && IsFakeSpectator()) { spectator::ClientInput(); SpectatorTrackPlayer(); return;