1 #ifndef CSPROGS_H
2 #define CSPROGS_H
3 
4 // LordHavoc: changed to match MAX_EDICTS
5 #define CL_MAX_EDICTS MAX_EDICTS
6 
7 #define ENTMASK_ENGINE				1
8 #define ENTMASK_ENGINEVIEWMODELS	2
9 #define ENTMASK_NORMAL				4
10 
11 #define VF_MIN			1	//(vector)
12 #define VF_MIN_X		2	//(float)
13 #define VF_MIN_Y		3	//(float)
14 #define VF_SIZE			4	//(vector) (viewport size)
15 #define VF_SIZE_X		5	//(float)
16 #define VF_SIZE_Y		6	//(float)
17 #define VF_VIEWPORT		7	//(vector, vector)
18 #define VF_FOV			8	//(vector)
19 #define VF_FOVX			9	//(float)
20 #define VF_FOVY			10	//(float)
21 #define VF_ORIGIN		11	//(vector)
22 #define VF_ORIGIN_X		12	//(float)
23 #define VF_ORIGIN_Y		13	//(float)
24 #define VF_ORIGIN_Z		14	//(float)
25 #define VF_ANGLES		15	//(vector)
26 #define VF_ANGLES_X		16	//(float)
27 #define VF_ANGLES_Y		17	//(float)
28 #define VF_ANGLES_Z		18	//(float)
29 
30 #define VF_DRAWWORLD		19	//(float)	//actually world model and sky
31 #define VF_DRAWENGINESBAR	20	//(float)
32 #define VF_DRAWCROSSHAIR	21	//(float)
33 
34 #define VF_CL_VIEWANGLES	33	//(vector)	//sweet thing for RPGs/...
35 #define VF_CL_VIEWANGLES_X	34	//(float)
36 #define VF_CL_VIEWANGLES_Y	35	//(float)
37 #define VF_CL_VIEWANGLES_Z	36	//(float)
38 
39 // FTEQW's extension range
40 #define VF_PERSPECTIVE		200 //(float)
41 
42 // what is this doing here? This is a DP extension introduced by Black, should be in 4xx range
43 #define VF_CLEARSCREEN		201 //(float)
44 
45 // what is this doing here? This is a DP extension introduced by VorteX, should be in 4xx range
46 #define VF_FOG_DENSITY		202 //(float)
47 #define VF_FOG_COLOR		203 //(vector)
48 #define VF_FOG_COLOR_R		204 //(float)
49 #define VF_FOG_COLOR_G		205 //(float)
50 #define VF_FOG_COLOR_B		206 //(float)
51 #define VF_FOG_ALPHA		207 //(float)
52 #define VF_FOG_START		208 //(float)
53 #define VF_FOG_END   		209 //(float)
54 #define VF_FOG_HEIGHT		210 //(float)
55 #define VF_FOG_FADEDEPTH	211 //(float)
56 
57 // DP's extension range
58 #define VF_MAINVIEW		400 //(float)
59 #define VF_MINFPS_QUALITY	401 //(float)
60 
61 #define RF_VIEWMODEL		1	// The entity is never drawn in mirrors. In engines with realtime lighting, it casts no shadows.
62 #define RF_EXTERNALMODEL	2	// The entity is appears in mirrors but not in the normal view. It does still cast shadows in engines with realtime lighting.
63 #define RF_DEPTHHACK		4	// The entity appears closer to the view than normal, either by scaling it wierdly or by just using a depthrange. This will usually be found in conjunction with RF_VIEWMODEL
64 #define RF_ADDITIVE			8	// Add the entity acording to it's alpha values instead of the normal blend
65 #define RF_USEAXIS			16	// When set, the entity will use the v_forward, v_right and v_up globals instead of it's angles field for orientation. Angles will be ignored compleatly.
66 								// Note that to use this properly, you'll NEED to use the predraw function to set the globals.
67 //#define RF_DOUBLESIDED		32
68 #define RF_USETRANSPARENTOFFSET 64   // Allows QC to customize origin used for transparent sorting via transparent_origin global, helps to fix transparent sorting bugs on a very large entities
69 #define RF_WORLDOBJECT          128  // for large outdoor entities that should not be culled
70 #define RF_MODELLIGHT           4096 // CSQC-set model light
71 #define RF_DYNAMICMODELLIGHT    8192 // origin-dependent model light
72 
73 #define RF_FULLBRIGHT			256
74 #define RF_NOSHADOW				512
75 
76 extern cvar_t csqc_progname;	//[515]: csqc crc check and right csprogs name according to progs.dat
77 extern cvar_t csqc_progcrc;
78 extern cvar_t csqc_progsize;
79 
80 void CL_VM_PreventInformationLeaks(void);
81 
82 qboolean MakeDownloadPacket(const char *filename, unsigned char *data, size_t len, int crc, int cnt, sizebuf_t *buf, int protocol);
83 
84 qboolean CL_VM_GetEntitySoundOrigin(int entnum, vec3_t out);
85 
86 qboolean CL_VM_TransformView(int entnum, matrix4x4_t *viewmatrix, mplane_t *clipplane, vec3_t visorigin);
87 
88 void CL_VM_Init(void);
89 void CL_VM_ShutDown(void);
90 void CL_VM_UpdateIntermissionState(int intermission);
91 void CL_VM_UpdateShowingScoresState(int showingscores);
92 qboolean CL_VM_InputEvent(int eventtype, float x, float y);
93 qboolean CL_VM_ConsoleCommand(const char *cmd);
94 void CL_VM_UpdateDmgGlobals(int dmg_take, int dmg_save, vec3_t dmg_origin);
95 void CL_VM_UpdateIntermissionState(int intermission);
96 qboolean CL_VM_Event_Sound(int sound_num, float volume, int channel, float attenuation, int ent, vec3_t pos, int flags, float speed);
97 qboolean CL_VM_Parse_TempEntity(void);
98 void CL_VM_Parse_StuffCmd(const char *msg);
99 void CL_VM_Parse_CenterPrint(const char *msg);
100 int CL_GetPitchSign(prvm_prog_t *prog, prvm_edict_t *ent);
101 int CL_GetTagMatrix(prvm_prog_t *prog, matrix4x4_t *out, prvm_edict_t *ent, int tagindex);
102 void CL_GetEntityMatrix(prvm_prog_t *prog, prvm_edict_t *ent, matrix4x4_t *out, qboolean viewmatrix);
103 /* VMs exposing the polygon calls must call this on Init/Reset */
104 void VM_Polygons_Reset(prvm_prog_t *prog);
105 void QW_CL_StartUpload(unsigned char *data, int size);
106 
107 void CSQC_UpdateNetworkTimes(double newtime, double oldtime);
108 void CSQC_AddPrintText(const char *msg);
109 void CSQC_ReadEntities(void);
110 void CSQC_RelinkAllEntities(int drawmask);
111 void CSQC_RelinkCSQCEntities(void);
112 void CSQC_Predraw(prvm_edict_t *ed);
113 void CSQC_Think(prvm_edict_t *ed);
114 qboolean CSQC_AddRenderEdict(prvm_edict_t *ed, int edictnum);//csprogs.c
115 void CSQC_R_RecalcView(void);
116 
117 dp_model_t *CL_GetModelByIndex(int modelindex);
118 
119 int CL_VM_GetViewEntity(void);
120 
121 #endif
122