Nuclide
Software Development Kit for id Technology (BETA)
defs.h
1/*
2 * Copyright (c) 2016-2022 Vera Visions LLC.
3 *
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
13 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
14 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15*/
16
17#include "../platform/Locale.h"
18#include "api_func.h"
19#include "../shared/api.h"
20#include "../shared/system/entityDef.h"
21#include "text.h"
22#include "textmenu.h"
23#include "font.h"
24#include "fade.h"
25#include "cmd.h"
26#include "util.h"
27#include "View.h"
28#include "Radar.h"
29#include "crosshair.h"
30#include "hud.h"
31#include "InterfaceSpriteSheet.h"
32#include "UserInfo.h"
33#include "UserInfoManager.h"
34#include "ServerInfo.h"
35#include "WadIndexer.h"
36#include "ClientDataFeed.h"
37#include "UserInventory.h"
38#include "../platform/MapLibrary.h"
39
40var bool g_net_debug = false;
41var bool g_cheats = false;
42
43var float g_modelSpinAngle;
44var float g_modelSpinPitch;
45var float g_modelSpinRoll;
46var float g_modelBobHeight;
47
48var float autocvar_cg_modelSpinSpeed = 120.0f;
49var float autocvar_cg_modelSpinRoll = 0.0f;
50var float autocvar_cg_modelSpinRollSpeed = 0.0f;
51var float autocvar_cg_modelSpinPitch = 0.0f;
52var float autocvar_cg_modelSpinPitchSpeed = 0.0f;
53var float autocvar_cg_modelBobHeight = 0.0f;
54var float autocvar_cg_modelBobHeightSpeed = 0.0f;
55
56var bool autocvar_net_showUpdates = false;
57var bool g_clientInitialized = false;
58
59#define PRINTFLAG(x) if (autocvar_net_showUpdates || g_net_debug) \
60 print(sprintf("%f %s read update %s\n", time, classname, #x));
61
62#define READENTITY_BYTE(field, changedflag) {\
63 if (flChanged & changedflag) {\
64 field = readbyte();\
65 PRINTFLAG(changedflag); \
66 }\
67}
68
69#define READENTITY_SHORT(field, changedflag) {\
70 if (flChanged & changedflag) {\
71 field = readshort();\
72 PRINTFLAG(changedflag); \
73 }\
74}
75
76#define READENTITY_FLOAT(field, changedflag) {\
77 if (flChanged & changedflag) {\
78 field = readfloat();\
79 PRINTFLAG(changedflag); \
80 }\
81}
82
83#define READENTITY_INT(field, changedflag) {\
84 if (flChanged & changedflag) {\
85 field = readint();\
86 PRINTFLAG(changedflag); \
87 }\
88}
89
90#define READENTITY_STRING(field, changedflag) {\
91 if (flChanged & changedflag) {\
92 field = readstring();\
93 PRINTFLAG(changedflag); \
94 }\
95}
96
97#define READENTITY_COORD(field, changedflag) {\
98 if (flChanged & changedflag) {\
99 field = readcoord();\
100 PRINTFLAG(changedflag); \
101 }\
102}
103
104#define READENTITY_ANGLE(field, changedflag) {\
105 if (flChanged & changedflag) {\
106 field = readangle();\
107 PRINTFLAG(changedflag); \
108 }\
109}
110
111#define READENTITY_ENTITY(field, changedflag) {\
112 if (flChanged & changedflag) {\
113 field = findentity(world, ::entnum, readentitynum());\
114 PRINTFLAG(changedflag); \
115 }\
116}
117
118#define READENTITY_ENTNUM(field, changedflag) {\
119 if (flChanged & changedflag) {\
120 field = readentitynum();\
121 PRINTFLAG(changedflag); \
122 }\
123}
124
125#define READENTITY_COLOR(field, changedflag) {\
126 if (flChanged & changedflag) {\
127 field = readbyte() / 255;\
128 PRINTFLAG(changedflag); \
129 }\
130}
131
132#define READENTITY_MODELINDEX(field, changedflag) {\
133 if (flChanged & changedflag) {\
134 field = readshort();\
135 PRINTFLAG(changedflag); \
136 }\
137}
138
139/* undocumented printcall types */
140#define PRINT_LOW 0
141#define PRINT_MEDIUM 1
142#define PRINT_HIGH 2
143#define PRINT_CHAT 3
144
145var bool g_dlight_cached = false;
146var bool g_client_world_loaded = false;
147
148const float MASK_GLOWS = 16;
149var bool g_focus;
150bool Util_IsFocused(void);
151
152/* fonts */
153font_s FONT_16;
154font_s FONT_20;
155font_s FONT_CON;
156font_s FONT_CENTERPRINT;
157
158//var string g_shellchrome;
159var float g_shellchromeshader;
160var float g_shellchromeshader_cull;
161
162/* clientside cvars */
163var float autocvar_in_zoomSensitivity = 1.0f;
164var int autocvar_pm_stairSmoothing = TRUE;
165var int autocvar_pm_thirdPerson = FALSE;
166var int autocvar_cg_viewmodelFlip = FALSE;
167var vector autocvar_con_color = [255,150,0];
168var vector autocvar_vgui_color = [255,170,0];
169var vector autocvar_cg_viewmodelOffset = [0,0,0];
170var int autocvar_cg_viewmodelPass = 0;
171var float autocvar_cg_viewmodelFov = 90.0f;
172var float autocvar_cg_viewmodelScale = 1.0f;
173var float autocvar_cg_hudAspect = 0.0f;
174var bool autocvar_pm_crouchToggle = false;
175
176/* particle descriptors */
177var float PART_DUSTMOTE;
178var float PART_BURNING;
179
180/* misc globals */
181vector video_mins;
182vector g_vidsize;
183int g_iIntermission;
184
185/* this actually belongs in builtins.h since its an undocumented global */
186float clframetime;
187
188string(string modelname, int frame, float frametime) spriteframe = #0;
189
190void CSQC_UpdateSeat(void);
191
193void
194drawstring_r(vector p, string t, vector s, vector c, float a, float f)
195{
196 p[0] -= stringwidth(t, TRUE, s);
197 drawstring(p, t, s, c, a, f);
198}
199
200void GameMessage_Setup(string, int);
201void View_SetMuzzleflash(int);
202
203void Event_Callback(float mtime, __inout float btime);
204void View_AddEvent(void(void) pCallback, float flTime);
205void View_PlayAnimation(int);
206void View_PlayAnimation(int);
207
208void View_EnableViewmodel(void);
209void View_DisableViewmodel(void);
210void View_SetViewmodelSkin(float);
211
213void drawrect(vector pos, vector sz, float thickness, vector rgb, float al, optional float dfl)
214{
215 /* top */
216 drawfill(pos, [sz[0], thickness], rgb, al, dfl);
217 /* bottom */
218 drawfill(pos + [0, sz[1] - thickness], [sz[0], thickness], rgb, al, dfl);
219 /* left */
220 drawfill(pos + [0, thickness], [thickness, sz[1] - (thickness * 2)], rgb, al, dfl);
221 /* right */
222 drawfill(pos + [sz[0] - thickness, thickness], [thickness, sz[1] - (thickness * 2)], rgb, al, dfl);
223}
224
228void
229drawpic3d(vector worldpos, string mat, vector sz, vector rgb, float alpha)
230{
231 static bool
232 drawpic3d_visible(vector p1) {
233 vector delta;
234 float fov;
235 vector p2 = g_view.GetCameraOrigin();
236 vector ang = g_view.GetCameraAngle();
237
238 makevectors(ang);
239 delta = normalize (p1 - p2);
240 fov = delta * v_forward;
241
242 if (fov > (g_view.GetAFOV()/180)) {
243 traceline(p2, p1, MOVE_WORLDONLY, self);
244 if (trace_fraction == 1.0) {
245 return (1);
246 }
247 }
248 return (0);
249 }
250
251 if (drawpic3d_visible(worldpos) == true) {
252 vector vecProj = project(worldpos) - (sz/2);
253 drawpic(vecProj, mat, sz, rgb, alpha);
254 }
255}
256
258void
259drawcone(vector vecOrigin, vector vecAngle, int iDivisions, float flLength, float flRadius, vector vecColor, float flAlpha)
260{
261 vector c;
262 vector e0;
263 vector e1;
264 float angDelta;
265
266 static vector
267 perpendicularCross(vector v)
268 {
269 float min = fabs(v[0]);
270 vector ca = [1, 0, 0];
271
272 if (fabs(v[1]) < min) {
273 min = fabs(v.y);
274 ca = [0, 1, 0];
275 }
276
277 if (fabs(v[2]) < min) {
278 ca = [0, 0, 1];
279 }
280
281 return crossproduct(v, ca);
282 }
283
284 makevectors(vecAngle + [0, 0, 0]);
285 vecAngle = v_forward * -1;
286 c = vecOrigin + (-vecAngle * flLength);
287 e0 = perpendicularCross(vecAngle);
288 e1 = crossproduct(e0, vecAngle);
289 angDelta = 360.0 / (iDivisions-1) * (M_PI / 180.0f);
290
291 R_BeginPolygon("debugcone");
292 R_PolygonVertex(vecOrigin, [0,0], vecColor, flAlpha);
293 for (int i = 0; i < iDivisions; ++i) {
294 vector vecPoint;
295 float rad = angDelta * i;
296 vecPoint = c + (((e0 * cos(rad)) + (e1 * sin(rad))) * flRadius);
297 R_PolygonVertex(vecPoint, [0,0], vecColor, flAlpha);
298 }
299 R_EndPolygon();
300}
301
303void
304precache_cubemap(string path)
305{
306 precache_pic(strcat(path, "_bk"));
307 precache_pic(strcat(path, "_dn"));
308 precache_pic(strcat(path, "_ft"));
309 precache_pic(strcat(path, "_lf"));
310 precache_pic(strcat(path, "_rt"));
311 precache_pic(strcat(path, "_up"));
312}
313
314typedef enum
315{
316 STANCE_DEFAULT = 0,
317 STANCE_CROUCH = 1,
318 STANCE_PRONE = 2,
319} movementStance_t;
320
321struct
322{
323 /* viewmodel stuff */
324 entity m_eViewModel;
325 entity m_eMuzzleflash;
326 int m_iVMBones;
327 entity m_eViewModelL;
328 entity m_eMuzzleflashL;
329 int m_iVMBonesL;
330
331 void(void) m_pEventCall;
332 float m_flEventTime;
333 float m_flEventFrame;
334 float m_flEventMdl;
335 entity m_iEventEntity;
336
337 int m_iLastWeapon;
338 int m_iOldWeapon;
339
340 /* damage overlay */
341 float m_flDamageAlpha;
342 vector m_vecDamagePos;
343 int m_iDamageFlags;
344
345 /* +zoomin cmd */
346 int m_iZoomed;
347 float m_flZoomTime;
348
349 /* player fields */
350 entity m_ePlayer;
351 vector m_vecPredictedOrigin;
352 vector m_vecPredictedOriginOld;
353 vector m_vecPredictedVelocity;
354 float m_flPredictedFlags;
355
356 /* camera fields */
357 vector m_vecCameraOrigin;
358 vector m_vecCameraAngle;
359 float m_flCameraTime;
360
361 int m_iHUDWeaponSelected;
362 float m_flHUDWeaponSelectTime;
363
364 int m_iScoresVisible;
365 bool m_showInterface;
366
367 /* saturn controller */
368 int m_iSaturnMenu;
369
370 /* centerprint related */
371 float m_flCenterprintAlpha;
372 float m_flCenterprintTime;
373 float m_iCenterprintLines;
374 string m_strCenterprintBuffer[18];
375
376 /* chat related */
377 float m_flPrintTime;
378 string m_strPrintBuffer[5];
379 int m_iPrintLines;
380
381 bool m_iInputAttack;
382 bool m_iInputAttack2;
383 bool m_iInputReload;
384 bool m_iInputUse;
385 bool m_iInputDuck;
386 bool m_iInputSprint;
387 bool m_iInputProne;
388 bool m_iInputJump;
389 movementStance_t m_dForceStance;
390 float m_flInputBlockTime;
391
392 /* fading */
393 float m_flFadeDuration;
394 float m_flFadeHold;
395 float m_flFadeMaxAlpha;
396 float m_flFadeStyle;
397 float m_flFadeAlpha;
398 float m_flFadeTime;
399 float m_flSprintLerp;
400 vector m_vecFadeColor;
401 int m_iFadeActive;
402
403 /* shake */
404 float m_flShakeFreq;
405 float m_flShakeDuration;
406 float m_flShakeTime;
407 float m_flShakeAmp;
408
409 vector m_vecLag;
410
411 /* vehicles */
412 float m_flVehTransition;
413 vector m_vecVehEntry;
414
415 /* new XR helpers */
416 bool m_bMoveForward;
417
418 bool m_bInterfaceFocused;
419 bool m_bSpecInput;
420
421 int m_iLeanDir;
422 float m_flLeaning;
423 int m_iSprinting;
424
425 int m_iSelectedWeapon;
426 bool m_bCommandMenu;
427 ncWeapon m_weaponRef;
428
429 float m_weaponAnimSequence;
430 float m_weaponAnimTime;
431 float m_weaponModel;
432 string m_weaponClass;
433 string m_weaponFireInfo;
434 entity m_inputFocus;
435} g_seats[4], *pSeat;
436
437.float modelindex2;
438.float modelindex3;
439.float modelindex4;
440
441#define MASK_CLIENTENTITY 10
442#define MASK_MEDIASURFACE 11
443
444var vector g_vecMousePos;
445var vector g_hudmins;
446var vector g_hudres;
447
448var ncRadar g_overview;
449
Tasked with managing overview/radar type widgets.
Definition: Radar.h:30
nonvirtual float GetAFOV(void)
Returns the absolute field of view of the ncView.
Definition: View.qc:229
nonvirtual vector GetCameraOrigin(void)
Returns the 3D world coordinate of the ncView.
Definition: View.qc:180
nonvirtual vector GetCameraAngle(void)
Returns the 3D direction of the ncView.
Definition: View.qc:186
This entity class represents weapon based items.
Definition: Weapon.h:305
ncView g_view
the current seat run for each draw call, for each player.
Definition: View.h:156
void GameMessage_Setup(string strMessage, int iChannel)
Places a message within a specified channel.
Definition: text.qc:266
Representation of a font.
Definition: api_func.h:39