1 /*
2 ===========================================================================
3 Copyright (C) 1999 - 2005, Id Software, Inc.
4 Copyright (C) 2000 - 2013, Raven Software, Inc.
5 Copyright (C) 2001 - 2013, Activision, Inc.
6 Copyright (C) 2013 - 2015, OpenJK contributors
7 
8 This file is part of the OpenJK source code.
9 
10 OpenJK is free software; you can redistribute it and/or modify it
11 under the terms of the GNU General Public License version 2 as
12 published by the Free Software Foundation.
13 
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18 
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, see <http://www.gnu.org/licenses/>.
21 ===========================================================================
22 */
23 
24 #include "cg_local.h"
25 
26 // this file is only included when building a dll
27 
28 //prototypes
29 extern void CG_PreInit();
30 
31 static intptr_t (QDECL *Q_syscall)( intptr_t arg, ... ) = (intptr_t (QDECL *)( intptr_t, ...))-1;
32 
dllEntry(intptr_t (QDECL * syscallptr)(intptr_t arg,...))33 extern "C" Q_EXPORT void QDECL dllEntry( intptr_t (QDECL  *syscallptr)( intptr_t arg, ... ) ) {
34 	Q_syscall = syscallptr;
35 	CG_PreInit();
36 }
37 
PASSFLOAT(float x)38 inline int PASSFLOAT( float x ) {
39 	byteAlias_t fi;
40 	fi.f = x;
41 	return fi.i;
42 }
43 
cgi_Printf(const char * fmt)44 void	cgi_Printf( const char *fmt ) {
45 	Q_syscall( CG_PRINT, fmt );
46 }
47 
cgi_Error(const char * fmt)48 NORETURN void	cgi_Error( const char *fmt ) {
49 	Q_syscall( CG_ERROR, fmt );
50 	// shut up GCC warning about returning functions, because we know better
51 	exit(1);
52 }
53 
cgi_Milliseconds(void)54 int		cgi_Milliseconds( void ) {
55 	return Q_syscall( CG_MILLISECONDS );
56 }
57 
cgi_Cvar_Register(vmCvar_t * vmCvar,const char * varName,const char * defaultValue,int flags)58 void	cgi_Cvar_Register( vmCvar_t *vmCvar, const char *varName, const char *defaultValue, int flags ) {
59 	Q_syscall( CG_CVAR_REGISTER, vmCvar, varName, defaultValue, flags );
60 }
61 
cgi_Cvar_Update(vmCvar_t * vmCvar)62 void	cgi_Cvar_Update( vmCvar_t *vmCvar ) {
63 	Q_syscall( CG_CVAR_UPDATE, vmCvar );
64 }
65 
cgi_Cvar_Set(const char * var_name,const char * value)66 void	cgi_Cvar_Set( const char *var_name, const char *value ) {
67 	Q_syscall( CG_CVAR_SET, var_name, value );
68 }
69 
cgi_Argc(void)70 int		cgi_Argc( void ) {
71 	return Q_syscall( CG_ARGC );
72 }
73 
cgi_Argv(int n,char * buffer,int bufferLength)74 void	cgi_Argv( int n, char *buffer, int bufferLength ) {
75 	Q_syscall( CG_ARGV, n, buffer, bufferLength );
76 }
77 
cgi_Args(char * buffer,int bufferLength)78 void	cgi_Args( char *buffer, int bufferLength ) {
79 	Q_syscall( CG_ARGS, buffer, bufferLength );
80 }
81 
cgi_FS_FOpenFile(const char * qpath,fileHandle_t * f,fsMode_t mode)82 int		cgi_FS_FOpenFile( const char *qpath, fileHandle_t *f, fsMode_t mode ) {
83 	return Q_syscall( CG_FS_FOPENFILE, qpath, f, mode );
84 }
85 
cgi_FS_Read(void * buffer,int len,fileHandle_t f)86 int	cgi_FS_Read( void *buffer, int len, fileHandle_t f ) {
87 	return Q_syscall( CG_FS_READ, buffer, len, f );
88 }
89 
cgi_FS_Write(const void * buffer,int len,fileHandle_t f)90 int	cgi_FS_Write( const void *buffer, int len, fileHandle_t f ) {
91 	return Q_syscall( CG_FS_WRITE, buffer, len, f );
92 }
93 
cgi_FS_FCloseFile(fileHandle_t f)94 void	cgi_FS_FCloseFile( fileHandle_t f ) {
95 	Q_syscall( CG_FS_FCLOSEFILE, f );
96 }
97 
cgi_SendConsoleCommand(const char * text)98 void	cgi_SendConsoleCommand( const char *text ) {
99 	Q_syscall( CG_SENDCONSOLECOMMAND, text );
100 }
101 
cgi_AddCommand(const char * cmdName)102 void	cgi_AddCommand( const char *cmdName ) {
103 	Q_syscall( CG_ADDCOMMAND, cmdName );
104 }
105 
cgi_SendClientCommand(const char * s)106 void	cgi_SendClientCommand( const char *s ) {
107 	Q_syscall( CG_SENDCLIENTCOMMAND, s );
108 }
109 
cgi_UpdateScreen(void)110 void	cgi_UpdateScreen( void ) {
111 	Q_syscall( CG_UPDATESCREEN );
112 }
113 
cgi_CM_LoadMap(const char * mapname,qboolean subBSP)114 void	cgi_CM_LoadMap( const char *mapname, qboolean subBSP ) {
115 	Q_syscall( CG_CM_LOADMAP, mapname, subBSP );
116 }
117 
cgi_CM_NumInlineModels(void)118 int		cgi_CM_NumInlineModels( void ) {
119 	return Q_syscall( CG_CM_NUMINLINEMODELS );
120 }
121 
cgi_CM_InlineModel(int index)122 clipHandle_t cgi_CM_InlineModel( int index ) {
123 	return Q_syscall( CG_CM_INLINEMODEL, index );
124 }
125 
cgi_CM_TempBoxModel(const vec3_t mins,const vec3_t maxs)126 clipHandle_t cgi_CM_TempBoxModel( const vec3_t mins, const vec3_t maxs ) {//, const int contents ) {
127 	return Q_syscall( CG_CM_TEMPBOXMODEL, mins, maxs );//, contents );
128 }
129 
cgi_CM_PointContents(const vec3_t p,clipHandle_t model)130 int		cgi_CM_PointContents( const vec3_t p, clipHandle_t model ) {
131 	return Q_syscall( CG_CM_POINTCONTENTS, p, model );
132 }
133 
cgi_CM_TransformedPointContents(const vec3_t p,clipHandle_t model,const vec3_t origin,const vec3_t angles)134 int		cgi_CM_TransformedPointContents( const vec3_t p, clipHandle_t model, const vec3_t origin, const vec3_t angles ) {
135 	return Q_syscall( CG_CM_TRANSFORMEDPOINTCONTENTS, p, model, origin, angles );
136 }
137 
cgi_CM_BoxTrace(trace_t * results,const vec3_t start,const vec3_t end,const vec3_t mins,const vec3_t maxs,clipHandle_t model,int brushmask)138 void	cgi_CM_BoxTrace( trace_t *results, const vec3_t start, const vec3_t end,
139 						  const vec3_t mins, const vec3_t maxs,
140 						  clipHandle_t model, int brushmask ) {
141 	Q_syscall( CG_CM_BOXTRACE, results, start, end, mins, maxs, model, brushmask );
142 }
143 
cgi_CM_TransformedBoxTrace(trace_t * results,const vec3_t start,const vec3_t end,const vec3_t mins,const vec3_t maxs,clipHandle_t model,int brushmask,const vec3_t origin,const vec3_t angles)144 void	cgi_CM_TransformedBoxTrace( trace_t *results, const vec3_t start, const vec3_t end,
145 						  const vec3_t mins, const vec3_t maxs,
146 						  clipHandle_t model, int brushmask,
147 						  const vec3_t origin, const vec3_t angles ) {
148 	Q_syscall( CG_CM_TRANSFORMEDBOXTRACE, results, start, end, mins, maxs, model, brushmask, origin, angles );
149 }
150 
cgi_CM_MarkFragments(int numPoints,const vec3_t * points,const vec3_t projection,int maxPoints,vec3_t pointBuffer,int maxFragments,markFragment_t * fragmentBuffer)151 int		cgi_CM_MarkFragments( int numPoints, const vec3_t *points,
152 				const vec3_t projection,
153 				int maxPoints, vec3_t pointBuffer,
154 				int maxFragments, markFragment_t *fragmentBuffer ) {
155 	return Q_syscall( CG_CM_MARKFRAGMENTS, numPoints, points, projection, maxPoints, pointBuffer, maxFragments, fragmentBuffer );
156 }
157 
cgi_CM_SnapPVS(vec3_t origin,byte * buffer)158 void cgi_CM_SnapPVS(vec3_t origin,byte *buffer)
159 {
160 	Q_syscall(CG_CM_SNAPPVS,origin,buffer);
161 }
162 
cgi_S_StartSound(vec3_t origin,int entityNum,int entchannel,sfxHandle_t sfx)163 void	cgi_S_StartSound( vec3_t origin, int entityNum, int entchannel, sfxHandle_t sfx ) {
164 	Q_syscall( CG_S_STARTSOUND, origin, entityNum, entchannel, sfx );
165 }
166 
cgi_AS_ParseSets(void)167 void	cgi_AS_ParseSets( void ) {
168 	Q_syscall( CG_AS_PARSESETS );
169 }
170 
cgi_AS_AddPrecacheEntry(const char * name)171 void	cgi_AS_AddPrecacheEntry( const char *name ) {
172 	Q_syscall( CG_AS_ADDENTRY, name );
173 }
174 
cgi_S_UpdateAmbientSet(const char * name,vec3_t origin)175 void	cgi_S_UpdateAmbientSet( const char *name, vec3_t origin ) {
176 	Q_syscall( CG_S_UPDATEAMBIENTSET, name, origin );
177 }
178 
cgi_S_AddLocalSet(const char * name,vec3_t listener_origin,vec3_t origin,int entID,int time)179 int		cgi_S_AddLocalSet( const char *name, vec3_t listener_origin, vec3_t origin, int entID, int time ) {
180 	return Q_syscall( CG_S_ADDLOCALSET, name, listener_origin, origin, entID, time );
181 }
182 
cgi_AS_GetBModelSound(const char * name,int stage)183 sfxHandle_t cgi_AS_GetBModelSound( const char *name, int stage ) {
184 	return Q_syscall( CG_AS_GETBMODELSOUND, name, stage );
185 }
186 
cgi_S_StartLocalSound(sfxHandle_t sfx,int channelNum)187 void	cgi_S_StartLocalSound( sfxHandle_t sfx, int channelNum ) {
188 	Q_syscall( CG_S_STARTLOCALSOUND, sfx, channelNum );
189 }
190 
cgi_S_ClearLoopingSounds(void)191 void	cgi_S_ClearLoopingSounds( void ) {
192 	Q_syscall( CG_S_CLEARLOOPINGSOUNDS );
193 }
194 
cgi_S_AddLoopingSound(int entityNum,const vec3_t origin,const vec3_t velocity,sfxHandle_t sfx,soundChannel_t chan)195 void	cgi_S_AddLoopingSound( int entityNum, const vec3_t origin, const vec3_t velocity, sfxHandle_t sfx, soundChannel_t chan ) {
196 	Q_syscall( CG_S_ADDLOOPINGSOUND, entityNum, origin, velocity, sfx, chan );
197 }
198 
cgi_S_UpdateEntityPosition(int entityNum,const vec3_t origin)199 void	cgi_S_UpdateEntityPosition( int entityNum, const vec3_t origin ) {
200 	Q_syscall( CG_S_UPDATEENTITYPOSITION, entityNum, origin );
201 }
202 
cgi_S_Respatialize(int entityNum,const vec3_t origin,vec3_t axis[3],qboolean inwater)203 void	cgi_S_Respatialize( int entityNum, const vec3_t origin, vec3_t axis[3], qboolean inwater ) {
204 	Q_syscall( CG_S_RESPATIALIZE, entityNum, origin, axis, inwater );
205 }
206 
cgi_S_RegisterSound(const char * sample)207 sfxHandle_t	cgi_S_RegisterSound( const char *sample ) {
208 	return Q_syscall( CG_S_REGISTERSOUND, sample );
209 }
210 
cgi_S_StartBackgroundTrack(const char * intro,const char * loop,qboolean bForceStart)211 void	cgi_S_StartBackgroundTrack( const char *intro, const char *loop, qboolean bForceStart ) {
212 	Q_syscall( CG_S_STARTBACKGROUNDTRACK, intro, loop, bForceStart );
213 }
214 
cgi_S_GetSampleLength(sfxHandle_t sfx)215 float	cgi_S_GetSampleLength( sfxHandle_t sfx ) {
216 	return Q_syscall( CG_S_GETSAMPLELENGTH, sfx);
217 }
218 
cgi_R_LoadWorldMap(const char * mapname)219 void	cgi_R_LoadWorldMap( const char *mapname ) {
220 	Q_syscall( CG_R_LOADWORLDMAP, mapname );
221 }
222 
cgi_R_RegisterModel(const char * name)223 qhandle_t cgi_R_RegisterModel( const char *name ) {
224 	return Q_syscall( CG_R_REGISTERMODEL, name );
225 }
226 
cgi_R_RegisterSkin(const char * name)227 qhandle_t cgi_R_RegisterSkin( const char *name ) {
228 	return Q_syscall( CG_R_REGISTERSKIN, name );
229 }
230 
cgi_R_RegisterShader(const char * name)231 qhandle_t cgi_R_RegisterShader( const char *name ) {
232 	return Q_syscall( CG_R_REGISTERSHADER, name );
233 }
234 
cgi_R_RegisterShaderNoMip(const char * name)235 qhandle_t cgi_R_RegisterShaderNoMip( const char *name ) {
236 	return Q_syscall( CG_R_REGISTERSHADERNOMIP, name );
237 }
238 
cgi_R_RegisterFont(const char * name)239 qhandle_t cgi_R_RegisterFont( const char *name ) {
240 	return Q_syscall( CG_R_REGISTERFONT, name );
241 }
242 
cgi_R_Font_StrLenPixels(const char * text,const int iFontIndex,const float scale)243 int cgi_R_Font_StrLenPixels(const char *text, const int iFontIndex, const float scale /*= 1.0f*/) {
244 	return Q_syscall( CG_R_FONTSTRLENPIXELS, text, iFontIndex, PASSFLOAT(scale) ) ;
245 }
246 
cgi_R_Font_StrLenChars(const char * text)247 int cgi_R_Font_StrLenChars(const char *text) {
248 	return Q_syscall( CG_R_FONTSTRLENCHARS, text ) ;
249 }
250 
cgi_R_Font_HeightPixels(const int iFontIndex,const float scale)251 int cgi_R_Font_HeightPixels(const int iFontIndex, const float scale /*= 1.0f*/) {
252 	return Q_syscall( CG_R_FONTHEIGHTPIXELS, iFontIndex, PASSFLOAT(scale) );
253 }
254 
cgi_Language_IsAsian(void)255 qboolean cgi_Language_IsAsian( void )
256 {
257 	return (qboolean)Q_syscall( CG_LANGUAGE_ISASIAN );
258 }
259 
cgi_Language_UsesSpaces(void)260 qboolean cgi_Language_UsesSpaces(void)
261 {
262 	return (qboolean)Q_syscall( CG_LANGUAGE_USESSPACES );
263 }
264 
cgi_AnyLanguage_ReadCharFromString(const char ** ppText,qboolean * pbIsTrailingPunctuation)265 unsigned int cgi_AnyLanguage_ReadCharFromString( const char **ppText, qboolean *pbIsTrailingPunctuation /* = NULL */ )
266 {
267 	int dummy;
268 	return Q_syscall( CG_ANYLANGUAGE_READFROMSTRING2, ppText, &dummy, pbIsTrailingPunctuation );
269 }
270 
cgi_AnyLanguage_ReadCharFromString(const char ** ppText,int * ppos,qboolean * pbIsTrailingPunctuation)271 unsigned int cgi_AnyLanguage_ReadCharFromString( const char **ppText, int *ppos, qboolean *pbIsTrailingPunctuation /* = NULL */ )
272 {
273 	return Q_syscall( CG_ANYLANGUAGE_READFROMSTRING, ppText, ppos, pbIsTrailingPunctuation );
274 }
275 
cgi_R_Font_DrawString(int ox,int oy,const char * text,const float * rgba,const int setIndex,int iMaxPixelWidth,const float scale)276 void cgi_R_Font_DrawString(int ox, int oy, const char *text, const float *rgba, const int setIndex, int iMaxPixelWidth, const float scale /*= 1.0f*/) {
277 	Q_syscall (CG_R_FONTDRAWSTRING, ox, oy, text, rgba, setIndex, iMaxPixelWidth, PASSFLOAT(scale) );
278 }
279 
cgi_R_ClearScene(void)280 void	cgi_R_ClearScene( void ) {
281 	Q_syscall( CG_R_CLEARSCENE );
282 }
283 
cgi_R_AddRefEntityToScene(const refEntity_t * re)284 void	cgi_R_AddRefEntityToScene( const refEntity_t *re ) {
285 	Q_syscall( CG_R_ADDREFENTITYTOSCENE, re );
286 }
287 
cgi_R_GetLighting(const vec3_t origin,vec3_t ambientLight,vec3_t directedLight,vec3_t ligthDir)288 void	cgi_R_GetLighting( const vec3_t origin, vec3_t ambientLight, vec3_t directedLight, vec3_t ligthDir ) {
289 	Q_syscall( CG_R_GETLIGHTING, origin, ambientLight, directedLight, ligthDir );
290 }
291 
cgi_R_AddPolyToScene(qhandle_t hShader,int numVerts,const polyVert_t * verts)292 void	cgi_R_AddPolyToScene( qhandle_t hShader , int numVerts, const polyVert_t *verts ) {
293 	Q_syscall( CG_R_ADDPOLYTOSCENE, hShader, numVerts, verts );
294 }
295 
cgi_R_AddLightToScene(const vec3_t org,float intensity,float r,float g,float b)296 void	cgi_R_AddLightToScene( const vec3_t org, float intensity, float r, float g, float b ) {
297 	Q_syscall( CG_R_ADDLIGHTTOSCENE, org, PASSFLOAT(intensity), PASSFLOAT(r), PASSFLOAT(g), PASSFLOAT(b) );
298 }
299 
cgi_R_RenderScene(const refdef_t * fd)300 void	cgi_R_RenderScene( const refdef_t *fd ) {
301 	Q_syscall( CG_R_RENDERSCENE, fd );
302 }
303 
cgi_R_SetColor(const float * rgba)304 void	cgi_R_SetColor( const float *rgba ) {
305 	Q_syscall( CG_R_SETCOLOR, rgba );
306 }
307 
cgi_R_DrawStretchPic(float x,float y,float w,float h,float s1,float t1,float s2,float t2,qhandle_t hShader)308 void	cgi_R_DrawStretchPic( float x, float y, float w, float h,
309 							   float s1, float t1, float s2, float t2, qhandle_t hShader ) {
310 	Q_syscall( CG_R_DRAWSTRETCHPIC, PASSFLOAT(x), PASSFLOAT(y), PASSFLOAT(w), PASSFLOAT(h), PASSFLOAT(s1), PASSFLOAT(t1), PASSFLOAT(s2), PASSFLOAT(t2), hShader );
311 }
312 
cgi_R_DrawScreenShot(float x,float y,float w,float h)313 void	cgi_R_DrawScreenShot( float x, float y, float w, float h){
314 	Q_syscall( CG_R_DRAWSCREENSHOT, PASSFLOAT(x), PASSFLOAT(y), PASSFLOAT(w), PASSFLOAT(h) );
315 }
316 
cgi_R_ModelBounds(qhandle_t model,vec3_t mins,vec3_t maxs)317 void	cgi_R_ModelBounds( qhandle_t model, vec3_t mins, vec3_t maxs ) {
318 	Q_syscall( CG_R_MODELBOUNDS, model, mins, maxs );
319 }
320 
cgi_R_LerpTag(orientation_t * tag,qhandle_t mod,int startFrame,int endFrame,float frac,const char * tagName)321 void	cgi_R_LerpTag( orientation_t *tag, qhandle_t mod, int startFrame, int endFrame,
322 					   float frac, const char *tagName ) {
323 	Q_syscall( CG_R_LERPTAG, tag, mod, startFrame, endFrame, PASSFLOAT(frac), tagName );
324 }
325 
cgi_R_DrawRotatePic(float x,float y,float w,float h,float s1,float t1,float s2,float t2,float a,qhandle_t hShader)326 void	cgi_R_DrawRotatePic( float x, float y, float w, float h,
327 				   float s1, float t1, float s2, float t2,float a, qhandle_t hShader )
328 {
329 	Q_syscall( CG_R_DRAWROTATEPIC, PASSFLOAT(x), PASSFLOAT(y), PASSFLOAT(w), PASSFLOAT(h), PASSFLOAT(s1), PASSFLOAT(t1), PASSFLOAT(s2), PASSFLOAT(t2), PASSFLOAT(a), hShader );
330 }
331 
cgi_R_DrawRotatePic2(float x,float y,float w,float h,float s1,float t1,float s2,float t2,float a,qhandle_t hShader)332 void	cgi_R_DrawRotatePic2( float x, float y, float w, float h,
333 				   float s1, float t1, float s2, float t2,float a, qhandle_t hShader )
334 {
335 	Q_syscall( CG_R_DRAWROTATEPIC2, PASSFLOAT(x), PASSFLOAT(y), PASSFLOAT(w), PASSFLOAT(h), PASSFLOAT(s1), PASSFLOAT(t1), PASSFLOAT(s2), PASSFLOAT(t2), PASSFLOAT(a), hShader );
336 }
337 
cgi_R_LAGoggles(void)338 void	cgi_R_LAGoggles( void )
339 {
340 	Q_syscall( CG_R_LA_GOGGLES );
341 }
342 
cgi_R_Scissor(float x,float y,float w,float h)343 void	cgi_R_Scissor( float x, float y, float w, float h)
344 {
345 	Q_syscall( CG_R_SCISSOR, PASSFLOAT(x), PASSFLOAT(y), PASSFLOAT(w), PASSFLOAT(h));
346 }
347 
cgi_GetGlconfig(glconfig_t * glconfig)348 void		cgi_GetGlconfig( glconfig_t *glconfig ) {
349 	Q_syscall( CG_GETGLCONFIG, glconfig );
350 }
351 
cgi_GetGameState(gameState_t * gamestate)352 void		cgi_GetGameState( gameState_t *gamestate ) {
353 	Q_syscall( CG_GETGAMESTATE, gamestate );
354 }
355 
cgi_GetCurrentSnapshotNumber(int * snapshotNumber,int * serverTime)356 void		cgi_GetCurrentSnapshotNumber( int *snapshotNumber, int *serverTime ) {
357 	Q_syscall( CG_GETCURRENTSNAPSHOTNUMBER, snapshotNumber, serverTime );
358 }
359 
cgi_GetSnapshot(int snapshotNumber,snapshot_t * snapshot)360 qboolean	cgi_GetSnapshot( int snapshotNumber, snapshot_t *snapshot ) {
361 	return (qboolean)Q_syscall( CG_GETSNAPSHOT, snapshotNumber, snapshot );
362 }
363 
cgi_GetServerCommand(int serverCommandNumber)364 qboolean	cgi_GetServerCommand( int serverCommandNumber ) {
365 	return (qboolean)Q_syscall( CG_GETSERVERCOMMAND, serverCommandNumber );
366 }
367 
cgi_GetCurrentCmdNumber(void)368 int			cgi_GetCurrentCmdNumber( void ) {
369 	return Q_syscall( CG_GETCURRENTCMDNUMBER );
370 }
371 
cgi_GetUserCmd(int cmdNumber,usercmd_t * ucmd)372 qboolean	cgi_GetUserCmd( int cmdNumber, usercmd_t *ucmd ) {
373 	return (qboolean)Q_syscall( CG_GETUSERCMD, cmdNumber, ucmd );
374 }
375 
cgi_SetUserCmdValue(int stateValue,float sensitivityScale,float mPitchOverride,float mYawOverride)376 void		cgi_SetUserCmdValue( int stateValue, float sensitivityScale, float mPitchOverride, float mYawOverride ) {
377 	Q_syscall( CG_SETUSERCMDVALUE, stateValue, PASSFLOAT(sensitivityScale), PASSFLOAT(mPitchOverride), PASSFLOAT(mYawOverride) );
378 }
379 
cgi_SetUserCmdAngles(float pitchOverride,float yawOverride,float rollOverride)380 void		cgi_SetUserCmdAngles( float pitchOverride, float yawOverride, float rollOverride ) {
381 	Q_syscall( CG_SETUSERCMDANGLES, PASSFLOAT(pitchOverride), PASSFLOAT(yawOverride), PASSFLOAT(rollOverride) );
382 }
383 /*
384 Ghoul2 Insert Start
385 */
386 // CG Specific API calls
trap_G2_SetGhoul2ModelIndexes(CGhoul2Info_v & ghoul2,qhandle_t * modelList,qhandle_t * skinList)387 void		trap_G2_SetGhoul2ModelIndexes(CGhoul2Info_v &ghoul2, qhandle_t *modelList, qhandle_t *skinList)
388 {
389 	Q_syscall( CG_G2_SETMODELS, &ghoul2, modelList, skinList);
390 }
391 /*
392 Ghoul2 Insert End
393 */
394 
trap_Com_SetOrgAngles(vec3_t org,vec3_t angles)395 void	trap_Com_SetOrgAngles(vec3_t org,vec3_t angles)
396 {
397 	Q_syscall(COM_SETORGANGLES,org,angles);
398 }
399 
trap_R_GetLightStyle(int style,color4ub_t color)400 void	trap_R_GetLightStyle(int style, color4ub_t color)
401 {
402 	Q_syscall(CG_R_GET_LIGHT_STYLE, style, color);
403 }
404 
trap_R_SetLightStyle(int style,int color)405 void	trap_R_SetLightStyle(int style, int color)
406 {
407 	Q_syscall(CG_R_SET_LIGHT_STYLE, style, color);
408 }
409 
cgi_R_GetBModelVerts(int bmodelIndex,vec3_t * verts,vec3_t normal)410 void	cgi_R_GetBModelVerts(int bmodelIndex, vec3_t *verts, vec3_t normal )
411 {
412 	Q_syscall( CG_R_GET_BMODEL_VERTS, bmodelIndex, verts, normal );
413 }
414 
cgi_R_WorldEffectCommand(const char * command)415 void	cgi_R_WorldEffectCommand( const char *command )
416 {
417 	Q_syscall( CG_R_WORLD_EFFECT_COMMAND, command );
418 }
419 
420 // this returns a handle.  arg0 is the name in the format "idlogo.roq", set arg1 to NULL, alteredstates to qfalse (do not alter gamestate)
trap_CIN_PlayCinematic(const char * arg0,int xpos,int ypos,int width,int height,int bits,const char * psAudioFile)421 int trap_CIN_PlayCinematic( const char *arg0, int xpos, int ypos, int width, int height, int bits, const char *psAudioFile /* = NULL */) {
422   return Q_syscall(CG_CIN_PLAYCINEMATIC, arg0, xpos, ypos, width, height, bits, psAudioFile);
423 }
424 
425 // stops playing the cinematic and ends it.  should always return FMV_EOF
426 // cinematics must be stopped in reverse order of when they are started
trap_CIN_StopCinematic(int handle)427 e_status trap_CIN_StopCinematic(int handle) {
428   return (e_status) Q_syscall(CG_CIN_STOPCINEMATIC, handle);
429 }
430 
431 
432 // will run a frame of the cinematic but will not draw it.  Will return FMV_EOF if the end of the cinematic has been reached.
trap_CIN_RunCinematic(int handle)433 e_status trap_CIN_RunCinematic (int handle) {
434   return (e_status) Q_syscall(CG_CIN_RUNCINEMATIC, handle);
435 }
436 
437 
438 // draws the current frame
trap_CIN_DrawCinematic(int handle)439 void trap_CIN_DrawCinematic (int handle) {
440   Q_syscall(CG_CIN_DRAWCINEMATIC, handle);
441 }
442 
443 
444 // allows you to resize the animation dynamically
trap_CIN_SetExtents(int handle,int x,int y,int w,int h)445 void trap_CIN_SetExtents (int handle, int x, int y, int w, int h) {
446   Q_syscall(CG_CIN_SETEXTENTS, handle, x, y, w, h);
447 }
448 
cgi_Z_Malloc(int size,int tag)449 void *cgi_Z_Malloc( int size, int tag )
450 {
451 	return (void *)Q_syscall(CG_Z_MALLOC,size,tag);
452 }
453 
cgi_Z_Free(void * ptr)454 void cgi_Z_Free( void *ptr )
455 {
456 	Q_syscall(CG_Z_FREE,ptr);
457 }
458 
cgi_UI_Menu_Reset(void)459 void cgi_UI_Menu_Reset(void)
460 {
461 	Q_syscall(CG_UI_MENU_RESET);
462 }
463 
cgi_UI_Menu_New(char * buf)464 void cgi_UI_Menu_New(char *buf)
465 {
466 	Q_syscall(CG_UI_MENU_NEW,buf);
467 }
468 
cgi_UI_Parse_Int(int * value)469 void cgi_UI_Parse_Int(int *value)
470 {
471 	Q_syscall(CG_UI_PARSE_INT,value);
472 }
473 
cgi_UI_Parse_String(char * buf)474 void cgi_UI_Parse_String(char *buf)
475 {
476 	Q_syscall(CG_UI_PARSE_STRING,buf);
477 }
478 
cgi_UI_Parse_Float(float * value)479 void cgi_UI_Parse_Float(float *value)
480 {
481 	Q_syscall(CG_UI_PARSE_FLOAT,value);
482 }
483 
cgi_UI_StartParseSession(char * menuFile,char ** buf)484 int cgi_UI_StartParseSession(char *menuFile,char **buf)
485 {
486 	return(int) Q_syscall(CG_UI_STARTPARSESESSION,menuFile,buf);
487 }
488 
cgi_UI_EndParseSession(char * buf)489 void cgi_UI_EndParseSession(char *buf)
490 {
491 	Q_syscall(CG_UI_ENDPARSESESSION,buf);
492 }
493 
cgi_UI_ParseExt(char ** token)494 void cgi_UI_ParseExt(char **token)
495 {
496 	Q_syscall(CG_UI_PARSEEXT,token);
497 }
498 
cgi_UI_MenuPaintAll(void)499 void cgi_UI_MenuPaintAll(void)
500 {
501 	Q_syscall(CG_UI_MENUPAINT_ALL);
502 }
503 
cgi_UI_String_Init(void)504 void cgi_UI_String_Init(void)
505 {
506 	Q_syscall(CG_UI_STRING_INIT);
507 }
508 
cgi_UI_GetMenuInfo(char * menuFile,int * x,int * y)509 int cgi_UI_GetMenuInfo(char *menuFile,int *x,int *y)
510 {
511 	return(int) Q_syscall(CG_UI_GETMENUINFO,menuFile,x,y);
512 }
513 
cgi_UI_GetItemText(char * menuFile,char * itemName,char * text)514 int cgi_UI_GetItemText(char *menuFile,char *itemName, char* text)
515 {
516 	return(int) Q_syscall(CG_UI_GETITEMTEXT,menuFile,itemName,text);
517 }
518 
cgi_SP_Register(const char * text,qboolean persist)519 int cgi_SP_Register(const char *text, qboolean persist )
520 {
521 	return Q_syscall( CG_SP_REGISTER, text, persist );
522 }
523 
cgi_SP_GetStringTextString(const char * text,char * buffer,int bufferLength)524 int cgi_SP_GetStringTextString(const char *text, char *buffer, int bufferLength)
525 {
526 	return Q_syscall( CG_SP_GETSTRINGTEXTSTRING, text, buffer, bufferLength );
527 }
528 
cgi_SP_GetStringText(int ID,char * buffer,int bufferLength)529 int cgi_SP_GetStringText(int ID, char *buffer, int bufferLength)
530 {
531 	return Q_syscall( CG_SP_GETSTRINGTEXT, ID, buffer, bufferLength );
532 }
533 
534 /*
535 OpenJK Add
536 Since the modules are incompatible, might as well break base compat even further amirite?
537 */
538 
cgi_UI_GetMenuByName(const char * menu)539 void *cgi_UI_GetMenuByName( const char *menu )
540 {
541 	return (void *)Q_syscall( CG_OPENJK_GETMENU_BYNAME, menu );
542 }
543 
cgi_UI_Menu_Paint(void * menu,qboolean force)544 void cgi_UI_Menu_Paint( void *menu, qboolean force )
545 {
546 	Q_syscall( CG_OPENJK_MENU_PAINT, menu, force );
547 }
548