X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fg_models.qc;h=539522f2dce7f61ca49d840f6040439450916e8c;hp=baca561786a00bcf9da35e7883100fd622242951;hb=e87123e5fba23f7a8907e6fbab241c5eec5be168;hpb=3bdee6303ce762a39c2ad67a70745668ba298043 diff --git a/qcsrc/server/g_models.qc b/qcsrc/server/g_models.qc index baca56178..539522f2d 100644 --- a/qcsrc/server/g_models.qc +++ b/qcsrc/server/g_models.qc @@ -1,6 +1,9 @@ #include "g_models.qh" +#include +#include #include "g_subs.qh" +#include #include "../common/triggers/subs.qh" #include "../common/triggers/triggers.qh" @@ -16,79 +19,79 @@ class(BGMScript) .float bgmscriptrelease; .float modelscale; -void g_model_setcolormaptoactivator () -{SELFPARAM(); +void g_model_setcolormaptoactivator(entity this, entity actor, entity trigger) +{ if(teamplay) { - if(activator.team) - self.colormap = (activator.team - 1) * 0x11; + if(actor.team) + this.colormap = (actor.team - 1) * 0x11; else - self.colormap = 0x00; + this.colormap = 0x00; } else - self.colormap = floor(random() * 256); - self.colormap |= BIT(10); // RENDER_COLORMAPPED + this.colormap = floor(random() * 256); + this.colormap |= BIT(10); // RENDER_COLORMAPPED } -void g_clientmodel_setcolormaptoactivator () -{SELFPARAM(); - g_model_setcolormaptoactivator(); - self.SendFlags |= (BIT(3) | BIT(0)); +void g_clientmodel_setcolormaptoactivator(entity this, entity actor, entity trigger) +{ + g_model_setcolormaptoactivator(this, actor, trigger); + this.SendFlags |= (BIT(3) | BIT(0)); } -void g_clientmodel_use() -{SELFPARAM(); - if (self.antiwall_flag == 1) +void g_clientmodel_use(entity this, entity actor, entity trigger) +{ + if (this.antiwall_flag == 1) { - self.inactive = 1; - self.solid = SOLID_NOT; + this.inactive = 1; + this.solid = SOLID_NOT; } - else if (self.antiwall_flag == 2) + else if (this.antiwall_flag == 2) { - self.inactive = 0; - self.solid = self.default_solid; + this.inactive = 0; + this.solid = this.default_solid; } - g_clientmodel_setcolormaptoactivator(); + g_clientmodel_setcolormaptoactivator(this, actor, trigger); } void g_model_dropbyspawnflags(entity this) { - if((self.spawnflags & 3) == 1) // ALIGN_ORIGIN + if((this.spawnflags & 3) == 1) // ALIGN_ORIGIN { - traceline(self.origin, self.origin - '0 0 4096', MOVE_NOMONSTERS, self); - setorigin(self, trace_endpos); + traceline(this.origin, this.origin - '0 0 4096', MOVE_NOMONSTERS, this); + setorigin(this, trace_endpos); } - else if((self.spawnflags & 3) == 2) // ALIGN_BOTTOM + else if((this.spawnflags & 3) == 2) // ALIGN_BOTTOM { - tracebox(self.origin, self.mins, self.maxs, self.origin - '0 0 4096', MOVE_NOMONSTERS, self); - setorigin(self, trace_endpos); + tracebox(this.origin, this.mins, this.maxs, this.origin - '0 0 4096', MOVE_NOMONSTERS, this); + setorigin(this, trace_endpos); } - else if((self.spawnflags & 3) == 3) // ALIGN_ORIGIN | ALIGN_BOTTOM + else if((this.spawnflags & 3) == 3) // ALIGN_ORIGIN | ALIGN_BOTTOM { - traceline(self.origin, self.origin - '0 0 4096', MOVE_NOMONSTERS, self); - setorigin(self, trace_endpos - '0 0 1' * self.mins.z); + traceline(this.origin, this.origin - '0 0 4096', MOVE_NOMONSTERS, this); + setorigin(this, trace_endpos - '0 0 1' * this.mins.z); } } void g_clientmodel_dropbyspawnflags(entity this) { vector o0; - o0 = self.origin; - g_model_dropbyspawnflags(self); - if(self.origin != o0) - self.SendFlags |= 2; + o0 = this.origin; + g_model_dropbyspawnflags(this); + if(this.origin != o0) + this.SendFlags |= 2; } bool g_clientmodel_genericsendentity(entity this, entity to, int sf) { sf = sf & 0x0F; - if(self.angles != '0 0 0') + if(this.angles != '0 0 0') sf |= 0x10; - if(self.mins != '0 0 0' || self.maxs != '0 0 0') + if(this.mins != '0 0 0' || this.maxs != '0 0 0') sf |= 0x20; - if(self.colormap != 0) + if(this.colormap != 0) sf |= 0x40; - if(self.lodmodelindex1) + if(this.lodmodelindex1) sf |= 0x80; WriteHeader(MSG_ENTITY, ENT_CLIENT_WALL); @@ -97,23 +100,24 @@ bool g_clientmodel_genericsendentity(entity this, entity to, int sf) if(sf & BIT(0)) { if(sf & 0x40) - WriteShort(MSG_ENTITY, self.colormap); + WriteShort(MSG_ENTITY, this.colormap); + WriteByte(MSG_ENTITY, this.skin); } if(sf & BIT(1)) { - WriteCoord(MSG_ENTITY, self.origin.x); - WriteCoord(MSG_ENTITY, self.origin.y); - WriteCoord(MSG_ENTITY, self.origin.z); + WriteCoord(MSG_ENTITY, this.origin.x); + WriteCoord(MSG_ENTITY, this.origin.y); + WriteCoord(MSG_ENTITY, this.origin.z); } if(sf & BIT(2)) { if(sf & 0x10) { - WriteAngle(MSG_ENTITY, self.angles.x); - WriteAngle(MSG_ENTITY, self.angles.y); - WriteAngle(MSG_ENTITY, self.angles.z); + WriteAngle(MSG_ENTITY, this.angles.x); + WriteAngle(MSG_ENTITY, this.angles.y); + WriteAngle(MSG_ENTITY, this.angles.z); } } @@ -121,78 +125,78 @@ bool g_clientmodel_genericsendentity(entity this, entity to, int sf) { if(sf & 0x80) { - WriteShort(MSG_ENTITY, self.lodmodelindex0); - WriteShort(MSG_ENTITY, bound(0, self.loddistance1, 65535)); - WriteShort(MSG_ENTITY, self.lodmodelindex1); - WriteShort(MSG_ENTITY, bound(0, self.loddistance2, 65535)); - WriteShort(MSG_ENTITY, self.lodmodelindex2); + WriteShort(MSG_ENTITY, this.lodmodelindex0); + WriteShort(MSG_ENTITY, bound(0, this.loddistance1, 65535)); + WriteShort(MSG_ENTITY, this.lodmodelindex1); + WriteShort(MSG_ENTITY, bound(0, this.loddistance2, 65535)); + WriteShort(MSG_ENTITY, this.lodmodelindex2); } else - WriteShort(MSG_ENTITY, self.modelindex); - WriteByte(MSG_ENTITY, self.solid); - WriteShort(MSG_ENTITY, floor(self.scale * 256)); + WriteShort(MSG_ENTITY, this.modelindex); + WriteByte(MSG_ENTITY, this.solid); + WriteShort(MSG_ENTITY, floor(this.scale * 256)); if(sf & 0x20) { - WriteCoord(MSG_ENTITY, self.mins.x); - WriteCoord(MSG_ENTITY, self.mins.y); - WriteCoord(MSG_ENTITY, self.mins.z); - WriteCoord(MSG_ENTITY, self.maxs.x); - WriteCoord(MSG_ENTITY, self.maxs.y); - WriteCoord(MSG_ENTITY, self.maxs.z); + WriteCoord(MSG_ENTITY, this.mins.x); + WriteCoord(MSG_ENTITY, this.mins.y); + WriteCoord(MSG_ENTITY, this.mins.z); + WriteCoord(MSG_ENTITY, this.maxs.x); + WriteCoord(MSG_ENTITY, this.maxs.y); + WriteCoord(MSG_ENTITY, this.maxs.z); } - WriteString(MSG_ENTITY, self.bgmscript); - if(self.bgmscript != "") + WriteString(MSG_ENTITY, this.bgmscript); + if(this.bgmscript != "") { - WriteByte(MSG_ENTITY, floor(self.bgmscriptattack * 64)); - WriteByte(MSG_ENTITY, floor(self.bgmscriptdecay * 64)); - WriteByte(MSG_ENTITY, floor(self.bgmscriptsustain * 255)); - WriteByte(MSG_ENTITY, floor(self.bgmscriptrelease * 64)); - WriteCoord(MSG_ENTITY, self.movedir.x); - WriteCoord(MSG_ENTITY, self.movedir.y); - WriteCoord(MSG_ENTITY, self.movedir.z); - WriteByte(MSG_ENTITY, floor(self.lip * 255)); + WriteByte(MSG_ENTITY, floor(this.bgmscriptattack * 64)); + WriteByte(MSG_ENTITY, floor(this.bgmscriptdecay * 64)); + WriteByte(MSG_ENTITY, floor(this.bgmscriptsustain * 255)); + WriteByte(MSG_ENTITY, floor(this.bgmscriptrelease * 64)); + WriteCoord(MSG_ENTITY, this.movedir.x); + WriteCoord(MSG_ENTITY, this.movedir.y); + WriteCoord(MSG_ENTITY, this.movedir.z); + WriteByte(MSG_ENTITY, floor(this.lip * 255)); } - WriteShort(MSG_ENTITY, self.fade_start); - WriteShort(MSG_ENTITY, self.fade_end); - WriteShort(MSG_ENTITY, self.alpha_max); - WriteShort(MSG_ENTITY, self.alpha_min); - WriteShort(MSG_ENTITY, self.inactive); - WriteShort(MSG_ENTITY, self.fade_vertical_offset); + WriteByte(MSG_ENTITY, this.fade_start); + WriteByte(MSG_ENTITY, this.fade_end); + WriteByte(MSG_ENTITY, this.alpha_max); + WriteByte(MSG_ENTITY, this.alpha_min); + WriteByte(MSG_ENTITY, this.inactive); + WriteShort(MSG_ENTITY, this.fade_vertical_offset); } return true; } -#define G_MODEL_INIT(sol) \ - if(self.geomtype) if(autocvar_physics_ode && checkextension("DP_PHYSICS_ODE")) self.movetype = MOVETYPE_PHYSICS; \ - if(!self.scale) self.scale = self.modelscale; \ - SetBrushEntityModel(); \ - self.use = g_model_setcolormaptoactivator; \ - InitializeEntity(self, g_model_dropbyspawnflags, INITPRIO_DROPTOFLOOR); \ - if(!self.solid) self.solid = (sol); else if(self.solid < 0) self.solid = SOLID_NOT; - -#define G_CLIENTMODEL_INIT(sol) \ - if(self.geomtype) if(autocvar_physics_ode && checkextension("DP_PHYSICS_ODE")) self.movetype = MOVETYPE_PHYSICS; \ - if(!self.scale) self.scale = self.modelscale; \ - SetBrushEntityModel(); \ - self.use = g_clientmodel_use; \ - InitializeEntity(self, g_clientmodel_dropbyspawnflags, INITPRIO_DROPTOFLOOR); \ - if(!self.solid) self.solid = (sol); else if(self.solid < 0) self.solid = SOLID_NOT; \ - if(!self.bgmscriptsustain) self.bgmscriptsustain = 1; else if(self.bgmscriptsustain < 0) self.bgmscriptsustain = 0; \ - Net_LinkEntity(self, true, 0, g_clientmodel_genericsendentity); \ - self.default_solid = sol; +#define G_MODEL_INIT(ent,sol) \ + if(ent.geomtype) if(autocvar_physics_ode && checkextension("DP_PHYSICS_ODE")) set_movetype(ent, MOVETYPE_PHYSICS); \ + if(!ent.scale) ent.scale = ent.modelscale; \ + SetBrushEntityModel(ent); \ + ent.use = g_model_setcolormaptoactivator; \ + InitializeEntity(ent, g_model_dropbyspawnflags, INITPRIO_DROPTOFLOOR); \ + if(!ent.solid) ent.solid = (sol); else if(ent.solid < 0) ent.solid = SOLID_NOT; + +#define G_CLIENTMODEL_INIT(ent,sol) \ + if(ent.geomtype) if(autocvar_physics_ode && checkextension("DP_PHYSICS_ODE")) set_movetype(ent, MOVETYPE_PHYSICS); \ + if(!ent.scale) ent.scale = ent.modelscale; \ + SetBrushEntityModel(ent); \ + ent.use = g_clientmodel_use; \ + InitializeEntity(ent, g_clientmodel_dropbyspawnflags, INITPRIO_DROPTOFLOOR); \ + if(!ent.solid) ent.solid = (sol); else if(ent.solid < 0) ent.solid = SOLID_NOT; \ + if(!ent.bgmscriptsustain) ent.bgmscriptsustain = 1; else if(ent.bgmscriptsustain < 0) ent.bgmscriptsustain = 0; \ + Net_LinkEntity(ent, true, 0, g_clientmodel_genericsendentity); \ + ent.default_solid = sol; // non-solid model entities: -spawnfunc(misc_gamemodel) { self.angles_x = -self.angles.x; G_MODEL_INIT (SOLID_NOT) } // model entity -spawnfunc(misc_clientmodel) { self.angles_x = -self.angles.x; G_CLIENTMODEL_INIT(SOLID_NOT) } // model entity -spawnfunc(misc_models) { self.angles_x = -self.angles.x; G_MODEL_INIT (SOLID_NOT) } // DEPRECATED old compat entity with confusing name, do not use +spawnfunc(misc_gamemodel) { this.angles_x = -this.angles.x; G_MODEL_INIT (this, SOLID_NOT) } // model entity +spawnfunc(misc_clientmodel) { this.angles_x = -this.angles.x; G_CLIENTMODEL_INIT(this, SOLID_NOT) } // model entity +spawnfunc(misc_models) { this.angles_x = -this.angles.x; G_MODEL_INIT (this, SOLID_NOT) } // DEPRECATED old compat entity with confusing name, do not use // non-solid brush entities: -spawnfunc(func_illusionary) { G_MODEL_INIT (SOLID_NOT) } // Q1 name (WARNING: MISPREDICTED) -spawnfunc(func_clientillusionary) { G_CLIENTMODEL_INIT(SOLID_NOT) } // brush entity -spawnfunc(func_static) { G_MODEL_INIT (SOLID_NOT) } // DEPRECATED old alias name from some other game +spawnfunc(func_illusionary) { G_MODEL_INIT (this, SOLID_NOT) } // Q1 name (WARNING: MISPREDICTED) +spawnfunc(func_clientillusionary) { G_CLIENTMODEL_INIT(this, SOLID_NOT) } // brush entity +spawnfunc(func_static) { G_MODEL_INIT (this, SOLID_NOT) } // DEPRECATED old alias name from some other game // solid brush entities -spawnfunc(func_wall) { G_MODEL_INIT (SOLID_BSP) } // Q1 name -spawnfunc(func_clientwall) { G_CLIENTMODEL_INIT(SOLID_BSP) } // brush entity (WARNING: MISPREDICTED) +spawnfunc(func_wall) { G_MODEL_INIT (this, SOLID_BSP) } // Q1 name +spawnfunc(func_clientwall) { G_CLIENTMODEL_INIT(this, SOLID_BSP) } // brush entity (WARNING: MISPREDICTED)