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