Cleanup for some CGameRules method types. Moved some Util_ functions into their own file.

This commit is contained in:
Marco Cawthorne 2022-07-16 15:11:33 -07:00
parent c3be8002ad
commit 878df0941e
Signed by: eukara
GPG Key ID: CE2032F0A2882A22
18 changed files with 135 additions and 127 deletions

View File

@ -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);

View File

@ -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;
};

View File

@ -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)
{

1
base/src/server/progs.src Executable file → Normal file
View File

@ -30,7 +30,6 @@ client.qc
server.qc
damage.qc
items.qc
rules.qc
flashlight.qc
modelevent.qc
spawn.qc

View File

@ -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;

View File

@ -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;

View File

@ -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));

View File

@ -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;
}

View File

@ -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;

View File

@ -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 <marco@icculus.org>\
Copyright (c) 2016-2022 Marco Cawthorne <marco@vera-visions.com>\
\
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;
}

View File

@ -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);
}
/*

View File

@ -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)

View File

@ -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;

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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)

View File

@ -10,6 +10,7 @@ player_pmove.qc
propdata.qc
surfaceproperties.qc
NSMaterial.qc
util.qc
../xr/include.src
../materials/include.src
#endlist

View File

@ -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
}