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