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 #ifndef _CG_PUBLIC_H
25 #define _CG_PUBLIC_H
26 
27 #define NUM_EXPLOSION_SHADERS	8
28 #define NUM_EXPLOSION_FRAMES	3
29 
30 #define	CMD_BACKUP			64
31 #define	CMD_MASK			(CMD_BACKUP - 1)
32 // allow a lot of command backups for very fast systems
33 // multiple commands may be combined into a single packet, so this
34 // needs to be larger than PACKET_BACKUP
35 
36 
37 #define	MAX_ENTITIES_IN_SNAPSHOT	512
38 
39 #define	SNAPFLAG_RATE_DELAYED		1		// the server withheld a packet to save bandwidth
40 #define	SNAPFLAG_DROPPED_COMMANDS	2		// the server lost some cmds coming from the client
41 
42 // snapshots are a view of the server at a given time
43 
44 // Snapshots are generated at regular time intervals by the server,
45 // but they may not be sent if a client's rate level is exceeded, or
46 // they may be dropped by the network.
47 struct snapshot_s
48 {
49 	int				snapFlags;			// SNAPFLAG_RATE_DELAYED, SNAPFLAG_DROPPED_COMMANDS
50 
51 	int				serverTime;		// server time the message is valid for (in msec)
52 
53 	byte			areamask[MAX_MAP_AREA_BYTES];		// portalarea visibility bits
54 
55 	int				cmdNum;			// the next cmdNum the server is expecting
56 									// client side prediction should start with this cmd
57 	playerState_t	ps;						// complete information about the current player at this time
58 
59 	int				numEntities;			// all of the entities that need to be presented
60 	entityState_t	entities[MAX_ENTITIES_IN_SNAPSHOT];	// at the time of this snapshot
61 
62 	int				numConfigstringChanges;	// configstrings that have changed since the last
63 	int				configstringNum;		// acknowledged snapshot_t (which is usually NOT the previous snapshot!)
64 
65 	int				numServerCommands;		// text based server commands to execute when this
66 	int				serverCommandSequence;	// snapshot becomes current
67 };
68 
69 typedef snapshot_s snapshot_t;
70 
71 
72 /*
73 ==================================================================
74 
75 functions imported from the main executable
76 
77 ==================================================================
78 */
79 
80 #define	CGAME_IMPORT_API_VERSION	4
81 
82 typedef enum {
83 	CG_PRINT,
84 	CG_ERROR,
85 	CG_MILLISECONDS,
86 	CG_CVAR_REGISTER,
87 	CG_CVAR_UPDATE,
88 	CG_CVAR_SET,
89 	CG_ARGC,
90 	CG_ARGV,
91 	CG_ARGS,
92 	CG_FS_FOPENFILE,
93 	CG_FS_READ,
94 	CG_FS_WRITE,
95 	CG_FS_FCLOSEFILE,
96 	CG_SENDCONSOLECOMMAND,
97 	CG_ADDCOMMAND,
98 	CG_SENDCLIENTCOMMAND,
99 	CG_UPDATESCREEN,
100 	CG_RMG_INIT,
101 	CG_CM_REGISTER_TERRAIN,
102 	CG_RE_INIT_RENDERER_TERRAIN,
103 	CG_CM_LOADMAP,
104 	CG_CM_NUMINLINEMODELS,
105 	CG_CM_INLINEMODEL,
106 	CG_CM_TEMPBOXMODEL,
107 	CG_CM_POINTCONTENTS,
108 	CG_CM_TRANSFORMEDPOINTCONTENTS,
109 	CG_CM_BOXTRACE,
110 	CG_CM_TRANSFORMEDBOXTRACE,
111 	CG_CM_MARKFRAGMENTS,
112 	CG_CM_SNAPPVS,
113 	CG_S_STARTSOUND,
114 	CG_S_STARTLOCALSOUND,
115 	CG_S_CLEARLOOPINGSOUNDS,
116 	CG_S_ADDLOOPINGSOUND,
117 	CG_S_STOPSOUNDS,
118 	CG_S_UPDATEENTITYPOSITION,
119 	CG_S_RESPATIALIZE,
120 	CG_S_REGISTERSOUND,
121 	CG_S_STARTBACKGROUNDTRACK,
122 	CG_R_LOADWORLDMAP,
123 	CG_R_REGISTERMODEL,
124 	CG_R_REGISTERSKIN,
125 	CG_R_REGISTERSHADER,
126 	CG_R_REGISTERSHADERNOMIP,
127 	CG_R_REGISTERFONT,
128 	CG_R_FONTSTRLENPIXELS,
129 	CG_R_FONTSTRLENCHARS,
130 	CG_R_FONTHEIGHTPIXELS,
131 	CG_R_FONTDRAWSTRING,
132 	CG_LANGUAGE_ISASIAN,
133 	CG_LANGUAGE_USESSPACES,
134 	CG_ANYLANGUAGE_READFROMSTRING,
135 	CG_R_SETREFRACTIONPROP,
136 	CG_R_CLEARSCENE,
137 	CG_R_ADDREFENTITYTOSCENE,
138 
139 	CG_R_INPVS,
140 
141 	CG_R_GETLIGHTING,
142 	CG_R_ADDPOLYTOSCENE,
143 	CG_R_ADDLIGHTTOSCENE,
144 	CG_R_RENDERSCENE,
145 	CG_R_SETCOLOR,
146 	CG_R_DRAWSTRETCHPIC,
147 	//CG_R_DRAWSCREENSHOT,
148 	CG_R_MODELBOUNDS,
149 	CG_R_LERPTAG,
150 	CG_R_DRAWROTATEPIC,
151 	CG_R_DRAWROTATEPIC2,
152 	CG_R_SETRANGEFOG,
153 	CG_R_LA_GOGGLES,
154 	CG_R_SCISSOR,
155 	CG_GETGLCONFIG,
156 	CG_GETGAMESTATE,
157 	CG_GETCURRENTSNAPSHOTNUMBER,
158 	CG_GETSNAPSHOT,
159 
160 	CG_GETDEFAULTSTATE,
161 
162 	CG_GETSERVERCOMMAND,
163 	CG_GETCURRENTCMDNUMBER,
164 	CG_GETUSERCMD,
165 	CG_SETUSERCMDVALUE,
166 	CG_SETUSERCMDANGLES,
167 	CG_S_UPDATEAMBIENTSET,
168 	CG_S_ADDLOCALSET,
169 	CG_AS_PARSESETS,
170 	CG_AS_ADDENTRY,
171 	CG_AS_GETBMODELSOUND,
172 	CG_S_GETSAMPLELENGTH,
173 	COM_SETORGANGLES,
174 /*
175 Ghoul2 Insert Start
176 */
177 	CG_G2_LISTBONES,
178 	CG_G2_LISTSURFACES,
179 	CG_G2_HAVEWEGHOULMODELS,
180 	CG_G2_SETMODELS,
181 /*
182 Ghoul2 Insert End
183 */
184 
185 	CG_R_GET_LIGHT_STYLE,
186 	CG_R_SET_LIGHT_STYLE,
187 	CG_R_GET_BMODEL_VERTS,
188 	CG_R_WORLD_EFFECT_COMMAND,
189 
190 	CG_CIN_PLAYCINEMATIC,
191 	CG_CIN_STOPCINEMATIC,
192 	CG_CIN_RUNCINEMATIC,
193 	CG_CIN_DRAWCINEMATIC,
194 	CG_CIN_SETEXTENTS,
195 	CG_Z_MALLOC,
196 	CG_Z_FREE,
197 	CG_UI_MENU_RESET,
198 	CG_UI_MENU_NEW,
199 	CG_UI_SETACTIVE_MENU,
200 	CG_UI_MENU_OPENBYNAME,
201 	CG_UI_PARSE_INT,
202 	CG_UI_PARSE_STRING,
203 	CG_UI_PARSE_FLOAT,
204 	CG_UI_STARTPARSESESSION,
205 	CG_UI_ENDPARSESESSION,
206 	CG_UI_PARSEEXT,
207 	CG_UI_MENUPAINT_ALL,
208 	CG_UI_MENUCLOSE_ALL,
209 	CG_UI_STRING_INIT,
210 	CG_UI_GETMENUINFO,
211 	CG_SP_GETSTRINGTEXTSTRING,
212 	CG_UI_GETITEMTEXT,
213 	CG_UI_GETITEMINFO,
214 
215 	// special --eez
216 	CG_R_DRAWSCREENSHOT,
217 
218 	CG_SP_REGISTER,
219 	CG_SP_GETSTRINGTEXT,
220 	CG_ANYLANGUAGE_READFROMSTRING2,
221 
222 	CG_OPENJK_MENU_PAINT,
223 	CG_OPENJK_GETMENU_BYNAME,
224 } cgameImport_t;
225 
226 #ifdef JK2_MODE
227 typedef enum {
228 	CG_PRINT_JK2,
229 	CG_ERROR_JK2,
230 	CG_MILLISECONDS_JK2,
231 	CG_CVAR_REGISTER_JK2,
232 	CG_CVAR_UPDATE_JK2,
233 	CG_CVAR_SET_JK2,
234 	CG_ARGC_JK2,
235 	CG_ARGV_JK2,
236 	CG_ARGS_JK2,
237 	CG_FS_FOPENFILE_JK2,
238 	CG_FS_READ_JK2,
239 	CG_FS_WRITE_JK2,
240 	CG_FS_FCLOSEFILE_JK2,
241 	CG_SENDCONSOLECOMMAND_JK2,
242 	CG_ADDCOMMAND_JK2,
243 	CG_SENDCLIENTCOMMAND_JK2,
244 	CG_UPDATESCREEN_JK2,
245 	CG_CM_LOADMAP_JK2,
246 	CG_CM_NUMINLINEMODELS_JK2,
247 	CG_CM_INLINEMODEL_JK2,
248 	CG_CM_TEMPBOXMODEL_JK2,
249 	CG_CM_POINTCONTENTS_JK2,
250 	CG_CM_TRANSFORMEDPOINTCONTENTS_JK2,
251 	CG_CM_BOXTRACE_JK2,
252 	CG_CM_TRANSFORMEDBOXTRACE_JK2,
253 	CG_CM_MARKFRAGMENTS_JK2,
254 	CG_CM_SNAPPVS_JK2,
255 	CG_S_STARTSOUND_JK2,
256 	CG_S_STARTLOCALSOUND_JK2,
257 	CG_S_CLEARLOOPINGSOUNDS_JK2,
258 	CG_S_ADDLOOPINGSOUND_JK2,
259 	CG_S_UPDATEENTITYPOSITION_JK2,
260 	CG_S_RESPATIALIZE_JK2,
261 	CG_S_REGISTERSOUND_JK2,
262 	CG_S_STARTBACKGROUNDTRACK_JK2,
263 	CG_R_LOADWORLDMAP_JK2,
264 	CG_R_REGISTERMODEL_JK2,
265 	CG_R_REGISTERSKIN_JK2,
266 	CG_R_REGISTERSHADER_JK2,
267 	CG_R_REGISTERSHADERNOMIP_JK2,
268 	CG_R_REGISTERFONT_JK2,
269 	CG_R_FONTSTRLENPIXELS_JK2,
270 	CG_R_FONTSTRLENCHARS_JK2,
271 	CG_R_FONTHEIGHTPIXELS_JK2,
272 	CG_R_FONTDRAWSTRING_JK2,
273 	CG_LANGUAGE_ISASIAN_JK2,
274 	CG_LANGUAGE_USESSPACES_JK2,
275 	CG_ANYLANGUAGE_READFROMSTRING_JK2,
276 	CG_R_CLEARSCENE_JK2,
277 	CG_R_ADDREFENTITYTOSCENE_JK2,
278 	CG_R_GETLIGHTING_JK2,
279 	CG_R_ADDPOLYTOSCENE_JK2,
280 	CG_R_ADDLIGHTTOSCENE_JK2,
281 	CG_R_RENDERSCENE_JK2,
282 	CG_R_SETCOLOR_JK2,
283 	CG_R_DRAWSTRETCHPIC_JK2,
284 	CG_R_DRAWSCREENSHOT_JK2,
285 	CG_R_MODELBOUNDS_JK2,
286 	CG_R_LERPTAG_JK2,
287 	CG_R_DRAWROTATEPIC_JK2,
288 	CG_R_DRAWROTATEPIC2_JK2,
289 	CG_R_LA_GOGGLES_JK2,
290 	CG_R_SCISSOR_JK2,
291 	CG_GETGLCONFIG_JK2,
292 	CG_GETGAMESTATE_JK2,
293 	CG_GETCURRENTSNAPSHOTNUMBER_JK2,
294 	CG_GETSNAPSHOT_JK2,
295 	CG_GETSERVERCOMMAND_JK2,
296 	CG_GETCURRENTCMDNUMBER_JK2,
297 	CG_GETUSERCMD_JK2,
298 	CG_SETUSERCMDVALUE_JK2,
299 	CG_SETUSERCMDANGLES_JK2,
300 	CG_S_UPDATEAMBIENTSET_JK2,
301 	CG_S_ADDLOCALSET_JK2,
302 	CG_AS_PARSESETS_JK2,
303 	CG_AS_ADDENTRY_JK2,
304 	CG_AS_GETBMODELSOUND_JK2,
305 	CG_S_GETSAMPLELENGTH_JK2,
306 	COM_SETORGANGLES_JK2,
307 /*
308 Ghoul2 Insert Start
309 */
310 	CG_G2_LISTBONES_JK2,
311 	CG_G2_LISTSURFACES_JK2,
312 	CG_G2_HAVEWEGHOULMODELS_JK2,
313 	CG_G2_SETMODELS_JK2,
314 /*
315 Ghoul2 Insert End
316 */
317 
318 	CG_R_GET_LIGHT_STYLE_JK2,
319 	CG_R_SET_LIGHT_STYLE_JK2,
320 	CG_R_GET_BMODEL_VERTS_JK2,
321 	CG_R_WORLD_EFFECT_COMMAND_JK2,
322 
323 	CG_CIN_PLAYCINEMATIC_JK2,
324 	CG_CIN_STOPCINEMATIC_JK2,
325 	CG_CIN_RUNCINEMATIC_JK2,
326 	CG_CIN_DRAWCINEMATIC_JK2,
327 	CG_CIN_SETEXTENTS_JK2,
328 	CG_Z_MALLOC_JK2,
329 	CG_Z_FREE_JK2,
330 	CG_UI_MENU_RESET_JK2,
331 	CG_UI_MENU_NEW_JK2,
332 	CG_UI_PARSE_INT_JK2,
333 	CG_UI_PARSE_STRING_JK2,
334 	CG_UI_PARSE_FLOAT_JK2,
335 	CG_UI_STARTPARSESESSION_JK2,
336 	CG_UI_ENDPARSESESSION_JK2,
337 	CG_UI_PARSEEXT_JK2,
338 	CG_UI_MENUPAINT_ALL_JK2,
339 	CG_UI_STRING_INIT_JK2,
340 	CG_UI_GETMENUINFO_JK2,
341 	CG_SP_REGISTER_JK2,
342 	CG_SP_GETSTRINGTEXTSTRING_JK2,
343 	CG_SP_GETSTRINGTEXT_JK2,
344 	CG_UI_GETITEMTEXT_JK2,
345 	CG_ANYLANGUAGE_READFROMSTRING2_JK2,
346 
347 	CG_OPENJK_MENU_PAINT_JK2,
348 	CG_OPENJK_GETMENU_BYNAME_JK2,
349 } cgameJK2Import_t;
350 #endif
351 
352 //----------------------------------------------
353 
354 #endif // _CG_PUBLIC_H
355