Xonotic
_all.inc
Go to the documentation of this file.
1 #ifndef NOCOMPAT
2  #define COMPAT_NO_MOD_IS_XONOTIC
3 #endif
4 
5 #ifdef CSQC
6 #define IS_CSQC 1
7 #else
8 #define IS_CSQC 0
9 #endif
10 
11 #ifdef SVQC
12 #define IS_SVQC 1
13 #else
14 #define IS_SVQC 0
15 #endif
16 
17 #include "compiler.qh"
18 
19 #ifndef QCC_SUPPORT_INT
20  #define int float
21 #endif
22 
23 #ifndef QCC_SUPPORT_BOOL
24  #define bool float
25 #endif
26 
27 #ifndef QCC_SUPPORT_ACCUMULATE
28  #warning "QCC does not support accumulate, may not compile correctly"
29  #define ACCUMULATE
30 #else
31  #define ACCUMULATE [[accumulate]]
32 #endif
33 
34 #ifndef QCC_SUPPORT_ERASEABLE
35  #define ERASEABLE
36 #else
37  #define ERASEABLE [[eraseable]]
38 #endif
39 
40 #ifndef QCC_SUPPORT_ALIAS
41  #warning "QCC does not support alias, may not compile correctly"
42  #define ALIAS(var)
43 #else
44  #define ALIAS(var) [[alias(var)]]
45 #endif
46 
47 #include <dpdefs/pre.qh>
48 
49 #if defined(CSQC)
50  #include <dpdefs/csprogsdefs.qh>
51  #include <dpdefs/keycodes.qh>
52 #elif defined(SVQC)
53  #include <server/sys-pre.qh>
54  #include <dpdefs/progsdefs.qh>
55  #include <dpdefs/dpextensions.qh>
56  #include <server/sys-post.qh>
57 #elif defined(MENUQC)
58  #include <dpdefs/menudefs.qh>
59  #include <dpdefs/keycodes.qh>
60 #endif
61 
62 #include <dpdefs/post.qh>
63 
64 #ifndef QCC_SUPPORT_POW
65  #define pow(a, b) pow(a, b)
66 #else
67  #define pow(a, b) ((a) ** (b))
68 #endif
69 
70 #include "self.qh"
71 
72 #define USING(name, T) typedef T name
73 
74 #include "bool.qh"
75 #include "int.qh"
76 
77 #include "macro.qh"
78 
79 #if NDEBUG
80  #define TC(T, sym) MACRO_BEGIN MACRO_END
81 #else
82  #define TC(T, sym) MACRO_BEGIN \
83  if (!is_##T(sym)) { \
84  LOG_WARNF("Type check failed: " #sym " :: " #T); \
85  isnt_##T(sym); \
86  } \
87  MACRO_END
88 #endif
89 
90 #if !(NDEBUG)
91  #define is_float(this) (true || ftoe(this))
92  #define isnt_float(this)
93  #define is_vector(this) (true || vtos(this))
94  #define isnt_vector(this)
95  #define is_string(this) (true || stof(this))
96  #define isnt_string(this)
97  #define is_entity(this) (true || etof(this))
98  #define isnt_entity(this)
99  bool is_int(float this) { return this == floor(this); }
100  void isnt_int(float this) { print(ftos(this)); }
101  bool is_bool(float this) { return this == true || this == false; }
102  void isnt_bool(float this) { print(ftos(this)); }
103 #endif
104 
105 #include "warpzone/mathlib.qc"
106 
107 // needs to be included before any of the functions which use globals are called
108 #include "deglobalization.qh"
109 
110 #include "accumulate.qh"
111 #include "angle.qc"
112 #include "arraylist.qh"
113 #include "bits.qh"
114 #include "color.qh"
115 #include "counting.qh"
116 #include "cvar.qh"
117 #include "defer.qh"
118 #include "draw.qh"
119 #include "enumclass.qh"
120 #include "file.qh"
121 #include "float.qh"
122 #include "functional.qh"
123 #include "i18n.qh"
124 #include "intrusivelist.qh"
125 #include "iter.qh"
126 #include "json.qc"
127 #include "lazy.qh"
128 #include "linkedlist.qh"
129 #include "log.qh"
130 #include "map.qh"
131 #include "markdown.qh"
132 #include "math.qh"
133 #include "misc.qh"
134 #include "net.qh"
135 #include "nil.qh"
136 #include "noise.qh"
137 #include "oo.qh"
138 #include "p2mathlib.qc"
139 #include "progname.qh"
140 #include "promise.qc"
141 #include "random.qc"
142 #include "registry.qh"
143 #include "registry_net.qh"
144 #include "replicate.qh"
145 #include "sortlist.qc"
146 #include "sort.qh"
147 #include "spawnfunc.qh"
148 #include "static.qh"
149 #include "stats.qh"
150 #include "string.qh"
151 #include "struct.qh"
152 #include "test.qc"
153 #include "unsafe.qh"
154 #include "urllib.qc"
155 #include "vector.qh"
156 #include "yenc.qh"
157 
158 #if XONOTIC
159  #include "matrix/_mod.inc"
160 #endif
161 
162 #ifndef SVQC
163 #define objerror_safe(e)
164 #else
165 void make_safe_for_remove(entity this);
166  #define objerror_safe(e) make_safe_for_remove(e)
167 #endif
168 
169 #define objerror(this, msg) MACRO_BEGIN \
170  LOG_WARN("======OBJECT ERROR======"); \
171  entity _e = (this); \
172  eprint(_e); \
173  objerror_safe(_e); \
174  delete(_e); \
175  LOG_WARNF("%s OBJECT ERROR in %s:\n%s\nTip: read above for entity information", PROGNAME, __FUNC__, msg); \
176 MACRO_END
177 
178 #ifdef MENUQC
179  void _m_init();
180  void m_init() { if (_m_init) _m_init(); }
181  #define m_init _m_init
182 
183  void _m_shutdown();
184  void m_shutdown() { if (_m_shutdown) _m_shutdown(); }
185  #define m_shutdown _m_shutdown
186 
187  void _m_draw(float width, float height);
188  void m_draw(float width, float height) { if (_m_draw) _m_draw(width, height); }
189  #define m_draw _m_draw
190 
191  void _m_keydown(int keynr, int ascii);
192  void m_keydown(int keynr, int ascii) { if (_m_keydown) _m_keydown(keynr, ascii); }
193  #define m_keydown _m_keydown
194 
195  void _m_toggle(int mode);
196  void m_toggle(int mode) { if (_m_toggle) _m_toggle(mode); }
197  #define m_toggle _m_toggle
198 #endif
199 
200 #ifdef SVQC
201  void _main();
202  void main() { if (_main) _main(); }
203  #define main _main
204 
205  void _SV_Shutdown();
206  void SV_Shutdown() { if (_SV_Shutdown) _SV_Shutdown(); }
207  #define SV_Shutdown _SV_Shutdown
208 
209  void _StartFrame();
210  bool _StartFrame_init;
211  void spawnfunc_worldspawn(entity);
212  void StartFrame() {
213  if (!_StartFrame_init) {
214  _StartFrame_init = true;
215  float oldtime = time; time = 1;
216  __spawnfunc_expecting = 2; NULL.__spawnfunc_constructor(NULL);
217  time = oldtime;
218  }
219  if (_StartFrame) _StartFrame();
220  }
221  #define StartFrame _StartFrame
222 
223  void _SetNewParms();
224  void SetNewParms() { if (_SetNewParms) _SetNewParms(); }
225  #define SetNewParms _SetNewParms
226 
227  void _SetChangeParms(entity this);
228  void SetChangeParms() { ENGINE_EVENT(); if (_SetChangeParms) _SetChangeParms(this); }
229  #define SetChangeParms _SetChangeParms
230 
231 #ifdef DP_EXT_PRECONNECT
232  void _ClientPreConnect(entity this);
233  void ClientPreConnect() { ENGINE_EVENT(); if (_ClientPreConnect) _ClientPreConnect(this); }
234  #define ClientPreConnect _ClientPreConnect
235 #endif
236 
237  void _ClientConnect(entity this);
238  void ClientConnect() { ENGINE_EVENT(); if (_ClientConnect) _ClientConnect(this); }
239  #define ClientConnect _ClientConnect
240 
241  void _ClientDisconnect(entity this);
242  void ClientDisconnect() { ENGINE_EVENT(); if (_ClientDisconnect) _ClientDisconnect(this); }
243  #define ClientDisconnect _ClientDisconnect
244 
245  void _PutClientInServer(entity this);
246  void PutClientInServer() { ENGINE_EVENT(); if (_PutClientInServer) _PutClientInServer(this); }
247  #define PutClientInServer _PutClientInServer
248 
249  void _ClientKill(entity this);
250  void ClientKill() { ENGINE_EVENT(); if (_ClientKill) _ClientKill(this); }
251  #define ClientKill _ClientKill
252 
253  void _PlayerPreThink(entity this);
254  void PlayerPreThink() { ENGINE_EVENT(); if (_PlayerPreThink) _PlayerPreThink(this); }
255  #define PlayerPreThink _PlayerPreThink
256 
257  void _PlayerPostThink(entity this);
258  void PlayerPostThink() { ENGINE_EVENT(); if (_PlayerPostThink) _PlayerPostThink(this); }
259  #define PlayerPostThink _PlayerPostThink
260 
261  void _SV_PlayerPhysics(entity this);
262  void SV_PlayerPhysics() { ENGINE_EVENT(); if (_SV_PlayerPhysics) _SV_PlayerPhysics(this); }
263  #define SV_PlayerPhysics _SV_PlayerPhysics
264 
265  void _SV_OnEntityPreSpawnFunction(entity this);
267  {
268  ENGINE_EVENT();
269  __spawnfunc_expecting = true;
270  __spawnfunc_expect = this;
271  }
272  #define SV_OnEntityPreSpawnFunction _SV_OnEntityPreSpawnFunction
273 
274  void _SV_ChangeTeam(entity this, int _color);
275  void SV_ChangeTeam(int _color) { ENGINE_EVENT(); if (_SV_ChangeTeam) _SV_ChangeTeam(this, _color); }
276  #define SV_ChangeTeam _SV_ChangeTeam
277 
278  void _SV_ParseClientCommand(entity this, string command);
279  void SV_ParseClientCommand(string command)
280  {
281  ENGINE_EVENT();
282  if (_SV_ParseClientCommand) _SV_ParseClientCommand(this, command);
283  }
284  #define SV_ParseClientCommand _SV_ParseClientCommand
285 #endif
286 
287 #ifdef CSQC
288  void _CSQC_Init();
289  void CSQC_Init() { if (_CSQC_Init) _CSQC_Init(); }
290  #define CSQC_Init _CSQC_Init
291 
292  void _CSQC_Shutdown();
293  void CSQC_Shutdown() { if (_CSQC_Shutdown) _CSQC_Shutdown(); }
294  #define CSQC_Shutdown _CSQC_Shutdown
295 
296  void _CSQC_UpdateView(entity this, float w, float h);
297  void CSQC_UpdateView(float w, float h) { ENGINE_EVENT(); if (_CSQC_UpdateView) _CSQC_UpdateView(this, w, h); }
298  #define CSQC_UpdateView _CSQC_UpdateView
299 
300  bool _CSQC_InputEvent(int inputType, float nPrimary, float nSecondary);
301  bool CSQC_InputEvent(int inputType, float nPrimary, float nSecondary)
302  {
303  return _CSQC_InputEvent ? _CSQC_InputEvent(inputType, nPrimary, nSecondary) : false;
304  }
305  #define CSQC_InputEvent _CSQC_InputEvent
306 
307  bool _CSQC_ConsoleCommand(string s);
308  bool CSQC_ConsoleCommand(string s) { return _CSQC_ConsoleCommand ? _CSQC_ConsoleCommand(s) : false; }
309  #define CSQC_ConsoleCommand _CSQC_ConsoleCommand
310 
311  void _CSQC_Ent_Update(entity this, bool isNew);
312  void CSQC_Ent_Update(bool isNew) { ENGINE_EVENT(); if (_CSQC_Ent_Update) _CSQC_Ent_Update(this, isNew); }
313  #define CSQC_Ent_Update _CSQC_Ent_Update
314 
315  void _CSQC_Ent_Remove(entity this);
316  void CSQC_Ent_Remove() { ENGINE_EVENT(); if (_CSQC_Ent_Remove) _CSQC_Ent_Remove(this); }
317  #define CSQC_Ent_Remove _CSQC_Ent_Remove
318 #endif
319 #undef ENGINE_EVENT
320 
321 #if XONOTIC
322 #ifdef GAMEQC
323  #include <ecs/_mod.qh>
324 #endif
325 #endif
void ClientConnect(entity this)
ClientConnect
Definition: client.qc:1096
void ClientKill(entity this)
Definition: clientkill.qc:208
void SetChangeParms(entity this)
Definition: client.qc:921
void PlayerPostThink(entity this)
Definition: client.qc:2651
entity() spawn
void StartFrame()
Definition: main.qc:274
#define false
Definition: csprogsdefs.qh:6
void PlayerPreThink(entity this)
Definition: client.qc:2402
ClientDisconnect(this)
void isnt_int(float this)
Definition: _all.inc:100
bool is_int(float this)
Definition: _all.inc:99
void SV_OnEntityPreSpawnFunction(entity this)
Definition: main.qc:354
void SV_ParseClientCommand(entity this, string command)
Definition: cmd.qc:866
void SV_ChangeTeam(entity player, int new_color)
Called when the player changes color with the "color" command.
Definition: teamplay.qc:1151
void CSQC_Ent_Remove(entity this)
Definition: main.qc:943
float height
Definition: jumppads.qh:12
void CSQC_Ent_Update(entity this, bool isnew)
Definition: main.qc:861
#define NULL
Definition: post.qh:17
void CSQC_UpdateView(entity this, float w, float h)
Definition: view.qc:1532
void make_safe_for_remove(entity e)
Definition: main.qc:210
bool is_bool(float this)
Definition: _all.inc:101
#define ENGINE_EVENT()
Definition: self.qh:26
bool CSQC_ConsoleCommand(string command)
Definition: cl_cmd.qc:634
float CSQC_InputEvent(int bInputType, float nPrimary, float nSecondary)
Definition: main.qc:452
void isnt_bool(float this)
Definition: _all.inc:102
void CSQC_Init()
Definition: main.qc:45
PutClientInServer(this)
float time
Definition: csprogsdefs.qc:16
void SetNewParms()
Definition: client.qc:908