]> git.xonotic.org Git - xonotic/darkplaces.git/blob - csprogs.h
zone: Do a straight malloc on non-Windows
[xonotic/darkplaces.git] / csprogs.h
1 /*
2 Copyright (C) 2006-2021 DarkPlaces contributors
3
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License
6 as published by the Free Software Foundation; either version 2
7 of the License, or (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
13 See the GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18
19 */
20
21 #ifndef CSPROGS_H
22 #define CSPROGS_H
23
24 // LadyHavoc: changed to match MAX_EDICTS
25 #define CL_MAX_EDICTS MAX_EDICTS
26
27 #define ENTMASK_ENGINE                          1
28 #define ENTMASK_ENGINEVIEWMODELS        2
29 #define ENTMASK_NORMAL                          4
30
31 #define VF_MIN                  1       //(vector)
32 #define VF_MIN_X                2       //(float)
33 #define VF_MIN_Y                3       //(float)
34 #define VF_SIZE                 4       //(vector) (viewport size)
35 #define VF_SIZE_X               5       //(float)
36 #define VF_SIZE_Y               6       //(float)
37 #define VF_VIEWPORT             7       //(vector, vector)
38 #define VF_FOV                  8       //(vector)
39 #define VF_FOVX                 9       //(float)
40 #define VF_FOVY                 10      //(float)
41 #define VF_ORIGIN               11      //(vector)
42 #define VF_ORIGIN_X             12      //(float)
43 #define VF_ORIGIN_Y             13      //(float)
44 #define VF_ORIGIN_Z             14      //(float)
45 #define VF_ANGLES               15      //(vector)
46 #define VF_ANGLES_X             16      //(float)
47 #define VF_ANGLES_Y             17      //(float)
48 #define VF_ANGLES_Z             18      //(float)
49
50 #define VF_DRAWWORLD            19      //(float)       //actually world model and sky
51 #define VF_DRAWENGINESBAR       20      //(float)
52 #define VF_DRAWCROSSHAIR        21      //(float)
53
54 #define VF_CL_VIEWANGLES        33      //(vector)      //sweet thing for RPGs/...
55 #define VF_CL_VIEWANGLES_X      34      //(float)
56 #define VF_CL_VIEWANGLES_Y      35      //(float)
57 #define VF_CL_VIEWANGLES_Z      36      //(float)
58
59 // FTEQW's extension range
60 #define VF_PERSPECTIVE          200 //(float)
61
62 // what is this doing here? This is a DP extension introduced by Black, should be in 4xx range
63 #define VF_CLEARSCREEN          201 //(float)
64
65 // what is this doing here? This is a DP extension introduced by VorteX, should be in 4xx range
66 #define VF_FOG_DENSITY          202 //(float)
67 #define VF_FOG_COLOR            203 //(vector)
68 #define VF_FOG_COLOR_R          204 //(float)
69 #define VF_FOG_COLOR_G          205 //(float)
70 #define VF_FOG_COLOR_B          206 //(float)
71 #define VF_FOG_ALPHA            207 //(float)
72 #define VF_FOG_START            208 //(float)
73 #define VF_FOG_END              209 //(float)
74 #define VF_FOG_HEIGHT           210 //(float)
75 #define VF_FOG_FADEDEPTH        211 //(float)
76
77 // DP's extension range
78 #define VF_MAINVIEW             400 //(float)
79 #define VF_MINFPS_QUALITY       401 //(float)
80
81 #define RF_VIEWMODEL            1       // The entity is never drawn in mirrors. In engines with realtime lighting, it casts no shadows.
82 #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.
83 #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
84 #define RF_ADDITIVE                     8       // Add the entity acording to it's alpha values instead of the normal blend
85 #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.
86                                                                 // Note that to use this properly, you'll NEED to use the predraw function to set the globals.
87 //#define RF_DOUBLESIDED                32
88 #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
89 #define RF_WORLDOBJECT          128  // for large outdoor entities that should not be culled
90 #define RF_MODELLIGHT           4096 // CSQC-set model light
91 #define RF_DYNAMICMODELLIGHT    8192 // origin-dependent model light
92
93 #define RF_FULLBRIGHT                   256
94 #define RF_NOSHADOW                             512
95
96 extern cvar_t csqc_progname;    //[515]: csqc crc check and right csprogs name according to progs.dat
97 extern cvar_t csqc_progcrc;
98 extern cvar_t csqc_progsize;
99 extern cvar_t csqc_polygons_defaultmaterial_nocullface;
100
101 void CL_VM_PreventInformationLeaks(void);
102
103 qbool MakeDownloadPacket(const char *filename, unsigned char *data, size_t len, int crc, int cnt, sizebuf_t *buf, int protocol);
104
105 qbool CL_VM_GetEntitySoundOrigin(int entnum, vec3_t out);
106
107 qbool CL_VM_TransformView(int entnum, matrix4x4_t *viewmatrix, mplane_t *clipplane, vec3_t visorigin);
108
109 void CL_VM_Init(void);
110 void CL_VM_ShutDown(void);
111 void CL_VM_UpdateIntermissionState(int intermission);
112 void CL_VM_UpdateShowingScoresState(int showingscores);
113 qbool CL_VM_InputEvent(int eventtype, float x, float y);
114 qbool CL_VM_ConsoleCommand(const char *text);
115 void CL_VM_UpdateDmgGlobals(int dmg_take, int dmg_save, vec3_t dmg_origin);
116 void CL_VM_UpdateIntermissionState(int intermission);
117 qbool CL_VM_Event_Sound(int sound_num, float volume, int channel, float attenuation, int ent, vec3_t pos, int flags, float speed);
118 qbool CL_VM_Parse_TempEntity(void);
119 void CL_VM_Parse_StuffCmd(const char *msg);
120 void CL_VM_Parse_CenterPrint(const char *msg);
121 int CL_GetPitchSign(prvm_prog_t *prog, prvm_edict_t *ent);
122 int CL_GetTagMatrix(prvm_prog_t *prog, matrix4x4_t *out, prvm_edict_t *ent, int tagindex, prvm_vec_t *shadingorigin);
123 void CL_GetEntityMatrix(prvm_prog_t *prog, prvm_edict_t *ent, matrix4x4_t *out, qbool viewmatrix);
124 void QW_CL_StartUpload(unsigned char *data, int size);
125
126 void CSQC_UpdateNetworkTimes(double newtime, double oldtime);
127 void CSQC_AddPrintText(const char *msg);
128 void CSQC_ReadEntities(void);
129 void CSQC_RelinkAllEntities(int drawmask);
130 void CSQC_RelinkCSQCEntities(void);
131 void CSQC_Predraw(prvm_edict_t *ed);
132 void CSQC_Think(prvm_edict_t *ed);
133 qbool CSQC_AddRenderEdict(prvm_edict_t *ed, int edictnum);//csprogs.c
134 void CSQC_R_RecalcView(void);
135
136 model_t *CL_GetModelByIndex(int modelindex);
137
138 int CL_VM_GetViewEntity(void);
139
140 #endif