]> de.git.xonotic.org Git - voretournament/voretournament.git/blob - data/qcsrc/server/g_models.qc
Better Grabber impact effects
[voretournament/voretournament.git] / data / qcsrc / server / g_models.qc
1 .float modelscale;\r
2 \r
3 void g_model_setcolormaptoactivator (void)\r
4 {\r
5         if(teams_matter)\r
6         {\r
7                 if(activator.team)\r
8                         self.colormap = (activator.team - 1) * 0x11;\r
9                 else\r
10                         self.colormap = 0x00;\r
11         }\r
12         else\r
13                 self.colormap = floor(random() * 256);\r
14         self.colormap |= 1024; // RENDER_COLORMAPPED\r
15 }\r
16 \r
17 void g_clientmodel_setcolormaptoactivator (void)\r
18 {\r
19         g_model_setcolormaptoactivator();\r
20         self.SendFlags |= 1;\r
21 }\r
22 \r
23 void g_model_dropbyspawnflags()\r
24 {\r
25         if(self.spawnflags & 3 == 1) // ALIGN_ORIGIN\r
26         {\r
27                 traceline(self.origin, self.origin - '0 0 4096', MOVE_NOMONSTERS, self);\r
28                 setorigin(self, trace_endpos);\r
29         }\r
30         else if(self.spawnflags & 3 == 2) // ALIGN_BOTTOM\r
31         {\r
32                 tracebox(self.origin, self.mins, self.maxs, self.origin - '0 0 4096', MOVE_NOMONSTERS, self);\r
33                 setorigin(self, trace_endpos);\r
34         }\r
35         else if(self.spawnflags & 3 == 3) // ALIGN_ORIGIN | ALIGN_BOTTOM\r
36         {\r
37                 traceline(self.origin, self.origin - '0 0 4096', MOVE_NOMONSTERS, self);\r
38                 setorigin(self, trace_endpos - '0 0 1' * self.mins_z);\r
39         }\r
40 }\r
41 \r
42 void g_clientmodel_dropbyspawnflags()\r
43 {\r
44         vector o0;\r
45         o0 = self.origin;\r
46         g_model_dropbyspawnflags();\r
47         if(self.origin != o0)\r
48                 self.SendFlags |= 2;\r
49 }\r
50 \r
51 float g_clientmodel_genericsendentity (entity to, float sf)\r
52 {\r
53         sf = sf & 0x0F;\r
54         if(self.angles != '0 0 0')\r
55                 sf |= 0x10;\r
56         if(self.solid && (self.mins != '0 0 0' || self.maxs != '0 0 0'))\r
57                 sf |= 0x20;\r
58         if(self.colormap != 0)\r
59                 sf |= 0x40;\r
60         \r
61         WriteByte(MSG_ENTITY, ENT_CLIENT_WALL);\r
62         WriteByte(MSG_ENTITY, sf);\r
63 \r
64         if(sf & 1)\r
65         {\r
66                 if(sf & 0x40)\r
67                         WriteShort(MSG_ENTITY, self.colormap);\r
68         }\r
69 \r
70         if(sf & 2)\r
71         {\r
72                 WriteCoord(MSG_ENTITY, self.origin_x);\r
73                 WriteCoord(MSG_ENTITY, self.origin_y);\r
74                 WriteCoord(MSG_ENTITY, self.origin_z);\r
75         }\r
76 \r
77         if(sf & 4)\r
78         {\r
79                 if(sf & 0x10)\r
80                 {\r
81                         WriteAngle(MSG_ENTITY, self.angles_x);\r
82                         WriteAngle(MSG_ENTITY, self.angles_y);\r
83                         WriteAngle(MSG_ENTITY, self.angles_z);\r
84                 }\r
85         }\r
86 \r
87         if(sf & 8)\r
88         {\r
89                 WriteShort(MSG_ENTITY, self.modelindex);\r
90                 WriteByte(MSG_ENTITY, self.solid);\r
91                 WriteByte(MSG_ENTITY, floor(self.scale * 16));\r
92                 if(sf & 0x20)\r
93                 {\r
94                         WriteCoord(MSG_ENTITY, self.mins_x);\r
95                         WriteCoord(MSG_ENTITY, self.mins_y);\r
96                         WriteCoord(MSG_ENTITY, self.mins_z);\r
97                         WriteCoord(MSG_ENTITY, self.maxs_x);\r
98                         WriteCoord(MSG_ENTITY, self.maxs_y);\r
99                         WriteCoord(MSG_ENTITY, self.maxs_z);\r
100                 }\r
101                 WriteString(MSG_ENTITY, self.bgmscript);\r
102                 if(self.bgmscript != "")\r
103                 {\r
104                         WriteByte(MSG_ENTITY, floor(self.bgmscriptattack * 64));\r
105                         WriteByte(MSG_ENTITY, floor(self.bgmscriptdecay * 64));\r
106                         WriteByte(MSG_ENTITY, floor(self.bgmscriptsustain * 255));\r
107                         WriteByte(MSG_ENTITY, floor(self.bgmscriptrelease * 64));\r
108                         WriteCoord(MSG_ENTITY, self.movedir_x);\r
109                         WriteCoord(MSG_ENTITY, self.movedir_y);\r
110                         WriteCoord(MSG_ENTITY, self.movedir_z);\r
111                         WriteByte(MSG_ENTITY, floor(self.lip * 255));\r
112                 }\r
113         }\r
114 \r
115         return TRUE;\r
116 }\r
117 \r
118 \r
119 #define G_MODEL_INIT(sol) \\r
120         SetBrushEntityModel(); \\r
121         if(!self.scale) self.scale = self.modelscale; \\r
122         self.use = g_model_setcolormaptoactivator; \\r
123         InitializeEntity(self, g_model_dropbyspawnflags, INITPRIO_DROPTOFLOOR); \\r
124         if(!self.solid) self.solid = (sol); else if(self.solid < 0) self.solid = SOLID_NOT;\r
125 \r
126 #define G_CLIENTMODEL_INIT(sol) \\r
127         SetBrushEntityModelNoLOD(); \\r
128         if(!self.scale) self.scale = self.modelscale; \\r
129         self.use = g_clientmodel_setcolormaptoactivator; \\r
130         InitializeEntity(self, g_clientmodel_dropbyspawnflags, INITPRIO_DROPTOFLOOR); \\r
131         if(!self.solid) self.solid = (sol); else if(self.solid < 0) self.solid = SOLID_NOT; \\r
132         if(!self.bgmscriptsustain) self.bgmscriptsustain = 1; else if(self.bgmscriptsustain < 0) self.bgmscriptsustain = 0; \\r
133         Net_LinkEntity(self, TRUE, 0, g_clientmodel_genericsendentity);\r
134 \r
135 // non-solid model entities:\r
136 void spawnfunc_misc_gamemodel()         { G_MODEL_INIT      (SOLID_NOT) } // model entity\r
137 void spawnfunc_misc_clientmodel()       { G_CLIENTMODEL_INIT(SOLID_NOT) } // model entity\r
138 void spawnfunc_misc_models()            { G_MODEL_INIT      (SOLID_NOT) } // DEPRECATED old compat entity with confusing name, do not use\r
139 \r
140 // non-solid brush entities:\r
141 void spawnfunc_func_illusionary()       { G_MODEL_INIT      (SOLID_NOT) } // Q1 name (WARNING: MISPREDICTED)\r
142 void spawnfunc_func_clientillusionary() { G_CLIENTMODEL_INIT(SOLID_NOT) } // brush entity\r
143 void spawnfunc_func_static()            { G_MODEL_INIT      (SOLID_NOT) } // DEPRECATED old alias name from some other game\r
144 \r
145 // solid brush entities\r
146 void spawnfunc_func_wall()              { G_MODEL_INIT      (SOLID_BSP) } // Q1 name\r
147 void spawnfunc_func_clientwall()        { G_CLIENTMODEL_INIT(SOLID_BSP) } // brush entity (WARNING: MISPREDICTED)\r