2019-08-31 19:18:15 -07:00
|
|
|
/*
|
2022-03-11 11:40:43 -08:00
|
|
|
* Copyright (c) 2016-2021 Marco Cawthorne <marco@icculus.org>
|
2019-08-31 19:18:15 -07:00
|
|
|
*
|
|
|
|
* Permission to use, copy, modify, and distribute this software for any
|
|
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
|
|
* copyright notice and this permission notice appear in all copies.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
|
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
|
|
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
|
|
|
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
|
|
|
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
*/
|
2019-01-18 20:50:25 -08:00
|
|
|
|
2022-07-19 15:22:15 -07:00
|
|
|
#include "NSOutput.h"
|
2022-10-14 15:49:59 -07:00
|
|
|
#include "NSGameRules.h"
|
2020-05-02 20:26:06 -07:00
|
|
|
#include "sentences.h"
|
|
|
|
#include "skill.h"
|
|
|
|
#include "logging.h"
|
|
|
|
#include "nodes.h"
|
|
|
|
#include "spawn.h"
|
|
|
|
#include "weapons.h"
|
2020-08-14 13:13:03 -07:00
|
|
|
#include "plugins.h"
|
2022-10-14 15:49:59 -07:00
|
|
|
#include "NSTraceAttack.h"
|
2020-10-30 05:29:37 -07:00
|
|
|
#include "footsteps.h"
|
2020-05-02 20:26:06 -07:00
|
|
|
|
2022-04-10 06:59:40 -07:00
|
|
|
#include "route.h"
|
|
|
|
#include "way.h"
|
|
|
|
|
2022-07-14 18:04:11 -07:00
|
|
|
/* helper macros */
|
|
|
|
#define EVALUATE_FIELD(fieldname, changedflag) {\
|
2022-08-07 14:12:55 -07:00
|
|
|
if (ATTR_CHANGED(fieldname)) {\
|
|
|
|
SetSendFlags(changedflag);\
|
|
|
|
}\
|
|
|
|
SAVE_STATE(fieldname);\
|
|
|
|
}
|
|
|
|
|
2022-07-14 18:04:11 -07:00
|
|
|
#define EVALUATE_VECTOR(fieldname, id, changedflag) {\
|
2022-08-07 14:12:55 -07:00
|
|
|
if (VEC_CHANGED(fieldname, id)) {\
|
|
|
|
SetSendFlags(changedflag);\
|
|
|
|
}\
|
|
|
|
SAVE_STATE_FIELD(fieldname, id);\
|
|
|
|
}
|
|
|
|
|
|
|
|
#define SENDENTITY_BYTE(field, changedflag) {\
|
|
|
|
if (flChanged & changedflag)\
|
|
|
|
WriteByte(MSG_ENTITY, field);\
|
|
|
|
}
|
|
|
|
|
|
|
|
#define SENDENTITY_SHORT(field, changedflag) {\
|
|
|
|
if (flChanged & changedflag)\
|
|
|
|
WriteShort(MSG_ENTITY, field);\
|
|
|
|
}
|
|
|
|
|
|
|
|
#define SENDENTITY_INT(field, changedflag) {\
|
|
|
|
if (flChanged & changedflag)\
|
|
|
|
WriteInt(MSG_ENTITY, field);\
|
|
|
|
}
|
|
|
|
|
|
|
|
#define SENDENTITY_FLOAT(field, changedflag) {\
|
|
|
|
if (flChanged & changedflag)\
|
|
|
|
WriteFloat(MSG_ENTITY, field);\
|
|
|
|
}
|
|
|
|
|
|
|
|
#define SENDENTITY_STRING(field, changedflag) {\
|
|
|
|
if (flChanged & changedflag)\
|
|
|
|
WriteString(MSG_ENTITY, field);\
|
|
|
|
}
|
|
|
|
|
|
|
|
#define SENDENTITY_COORD(field, changedflag) {\
|
|
|
|
if (flChanged & changedflag)\
|
|
|
|
WriteCoord(MSG_ENTITY, field);\
|
|
|
|
}
|
|
|
|
|
|
|
|
#define SENDENTITY_ANGLE(field, changedflag) {\
|
|
|
|
if (flChanged & changedflag)\
|
|
|
|
WriteShort(MSG_ENTITY, field * 32767 / 360);\
|
|
|
|
}
|
|
|
|
|
|
|
|
#define SENDENTITY_ENTITY(field, changedflag) {\
|
|
|
|
if (flChanged & changedflag)\
|
|
|
|
WriteEntity(MSG_ENTITY, field);\
|
|
|
|
}
|
2022-07-14 18:04:11 -07:00
|
|
|
|
2020-10-17 16:10:21 -07:00
|
|
|
#define AREAPORTAL_CLOSED 0
|
|
|
|
#define AREAPORTAL_OPEN 1
|
|
|
|
|
2022-08-10 14:24:06 -07:00
|
|
|
var bool g_isloading = false;
|
|
|
|
|
2022-07-16 15:11:33 -07:00
|
|
|
var bool autocvar_mp_flashlight = true;
|
2019-03-01 14:35:28 -08:00
|
|
|
|
2021-05-08 08:44:16 -07:00
|
|
|
void FX_Impact(impactType_t, vector, vector);
|
2020-05-02 20:26:06 -07:00
|
|
|
void FX_Explosion(vector);
|
2022-04-05 20:39:30 -07:00
|
|
|
void FX_GibHuman(vector vecOrigin, vector vecDir, float flForce);
|
2020-04-22 21:51:39 -07:00
|
|
|
|
2020-05-02 20:26:06 -07:00
|
|
|
void TraceAttack_FireBullets(int, vector, int, vector, int);
|
2020-04-22 21:51:39 -07:00
|
|
|
#ifdef BULLETPENETRATION
|
|
|
|
void TraceAttack_SetPenetrationPower(int);
|
2022-04-24 00:23:38 -07:00
|
|
|
void TraceAttack_SetRangeModifier(float);
|
2020-04-22 21:51:39 -07:00
|
|
|
#endif
|
|
|
|
|
2020-04-12 06:50:42 -07:00
|
|
|
void Damage_Radius(vector, entity, float, float, int, int);
|
2021-05-08 08:44:16 -07:00
|
|
|
void Damage_Apply(entity, entity, float, int, damageType_t);
|
2020-04-03 15:52:45 -07:00
|
|
|
void Client_FixAngle(entity, vector);
|
2021-01-06 04:58:37 -08:00
|
|
|
void Client_ShakeOnce(vector, float, float, float, float);
|
|
|
|
|
|
|
|
void Game_ServerModelEvent(float, int, string);
|
|
|
|
void Event_ServerModelEvent(float, int, string);
|
2020-12-11 21:24:48 -08:00
|
|
|
|
2022-06-20 11:46:29 -07:00
|
|
|
void Mapcycle_Load(string);
|
2019-01-18 20:50:25 -08:00
|
|
|
|
|
|
|
entity eActivator;
|
|
|
|
|
2020-03-24 00:41:06 -07:00
|
|
|
/* Generic entity fields */
|
2020-04-12 06:50:42 -07:00
|
|
|
.void(void) PlayerUse;
|
2022-01-04 21:54:42 -08:00
|
|
|
.void(void) PlayerUseUnpressed;
|
2022-07-16 15:11:33 -07:00
|
|
|
.bool iBleeds;
|
2019-01-18 20:50:25 -08:00
|
|
|
.entity eUser;
|
|
|
|
.float material;
|
2019-03-19 12:01:24 -07:00
|
|
|
.float deaths;
|
2020-10-22 07:30:37 -07:00
|
|
|
.float identity;
|
2020-12-22 22:53:43 -08:00
|
|
|
.float botinfo;
|
2019-01-18 20:50:25 -08:00
|
|
|
|
2020-03-24 00:41:06 -07:00
|
|
|
/* in idTech the .owner field causes collisions to fail against set entity,
|
|
|
|
* we don't want this all of the time. so use this as a fallback */
|
|
|
|
.entity real_owner;
|
|
|
|
|
2020-04-19 03:01:20 -07:00
|
|
|
int trace_surfaceflagsi;
|
2019-01-18 20:50:25 -08:00
|
|
|
string startspot;
|
|
|
|
string __fullspawndata;
|
2019-09-28 16:54:29 -07:00
|
|
|
|
2020-04-26 04:17:19 -07:00
|
|
|
/* damage related tempglobals, like trace_* */
|
|
|
|
entity g_dmg_eAttacker;
|
|
|
|
entity g_dmg_eTarget;
|
|
|
|
int g_dmg_iDamage;
|
2021-12-17 20:27:36 -08:00
|
|
|
int g_dmg_iRealDamage;
|
2021-05-08 08:44:16 -07:00
|
|
|
bodyType_t g_dmg_iHitBody;
|
2020-04-26 04:17:19 -07:00
|
|
|
int g_dmg_iFlags;
|
|
|
|
int g_dmg_iWeapon;
|
2022-11-11 15:04:11 -08:00
|
|
|
vector g_dmg_vecLocation;
|
2021-01-06 04:58:37 -08:00
|
|
|
|
2022-07-16 15:11:33 -07:00
|
|
|
var bool g_ents_initialized = FALSE;
|
2021-02-14 12:05:10 -08:00
|
|
|
|
2021-01-06 04:58:37 -08:00
|
|
|
/* main is a qcc leftover */
|
|
|
|
void main(void)
|
|
|
|
{
|
|
|
|
}
|
2021-05-28 01:26:42 -07:00
|
|
|
|
|
|
|
#define SAVE_DECIMAL(x,y,z) fputs(x, sprintf("%S \"%d\" ", y, z))
|
|
|
|
#define SAVE_INTEGER(x,y,z) fputs(x, sprintf("%S \"%i\" ", y, z))
|
|
|
|
#define SAVE_FLOAT(x,y,z) fputs(x, sprintf("%S \"%f\" ", y, z))
|
|
|
|
#define SAVE_VECTOR(x,y,z) fputs(x, sprintf("%S \"%v\" ", y, z))
|
|
|
|
#define SAVE_STRING(x,y,z) fputs(x, sprintf("%S \"%s\" ", y, z))
|
|
|
|
#define SAVE_HEX(x,y,z) fputs(x, sprintf("%S \"%x\" ", y, z))
|