entity axh;
axh_id = bound(0, axh_id, MAX_AXH);
- axh = own.AuxiliaryXhair[axh_id];
+ axh = own.(AuxiliaryXhair[axh_id]);
if(axh == world || wasfreed(axh)) // MADNESS? THIS IS QQQQCCCCCCCCC (wasfreed, why do you exsist?)
{
setorigin(axh, loc);
axh.colormod = clr;
axh.SendFlags = 0x01;
- own.AuxiliaryXhair[axh_id] = axh;
+ own.(AuxiliaryXhair[axh_id]) = axh;
}
/*
proj.flags = FL_PROJECTILE | FL_NOTARGET;
if(_mzlsound)
- sound (self, CHAN_WEAPON, _mzlsound, VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_A, _mzlsound, VOL_BASE, ATTN_NORM);
if(_mzlfx)
pointparticles(particleeffectnum(_mzlfx), proj.origin, proj.velocity, 1);
self.touch = vehicles_touch;
self.event_damage = vehicles_damage;
self.iscreature = TRUE;
+ self.damagedbycontents = TRUE;
self.movetype = MOVETYPE_WALK;
self.solid = SOLID_SLIDEBOX;
self.takedamage = DAMAGE_AIM;
return FALSE;
}
+void vehilces_impact(float _minspeed, float _speedfac, float _maxpain)
+{
+ if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
+ return;
+
+ if(self.play_time < time)
+ {
+ float wc = vlen(self.velocity - self.oldvelocity);
+ //dprint("oldvel: ", vtos(self.oldvelocity), "\n");
+ //dprint("vel: ", vtos(self.velocity), "\n");
+ if(_minspeed < wc)
+ {
+ float take = take = min(_speedfac * wc, _maxpain);
+ Damage (self, world, world, take, DEATH_FALL, self.origin, '0 0 0');
+ self.play_time = time + 0.25;
+
+ //dprint("wc: ", ftos(wc), "\n");
+ //dprint("take: ", ftos(take), "\n");
+ }
+ }
+}
+
+.void() vehicle_impact;
void vehicles_touch()
{
// Vehicle currently in use
if(self.owner)
{
- // Colided with world?
- if(other == world)
- {
- // Apply velocity based self damage here
- }
- else
+ if(other != world)
+ if(vehicles_crushable(other))
{
- if(other.vehicle_flags & VHF_ISVEHICLE)
- {
- //other.velocity += self.velocity * (self.mass / other.mass);
- }
- else if(vehicles_crushable(other))
- {
- if(vlen(self.velocity) != 0)
- Damage(other, self, self.owner, autocvar_g_vehicles_crush_dmg, DEATH_VHCRUSH, '0 0 0', normalize(other.origin - self.origin) * autocvar_g_vehicles_crush_force);
- }
+ if(vlen(self.velocity) != 0)
+ Damage(other, self, self.owner, autocvar_g_vehicles_crush_dmg, DEATH_VHCRUSH, '0 0 0', normalize(other.origin - self.origin) * autocvar_g_vehicles_crush_force);
+
+ return; // Dont do selfdamage when hitting "soft targets".
}
+
+ if(self.play_time < time)
+ if(self.vehicle_impact)
+ self.vehicle_impact();
+
return;
}
if(self.team)
if(self.team != other.team)
return;
+
+ RemoveGrapplingHook(other);
self.vehicle_ammo1 = 0;
self.vehicle_ammo2 = 0;
}
else
{
- WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
WriteAngle(MSG_ONE, self.angles_x * -1); // tilt
WriteAngle(MSG_ONE, self.angles_y); // yaw
WriteAngle(MSG_ONE, 0); // roll
if(!teamplay)
self.team = 0;
-
+ else
+ self.team = self.tur_head.team;
+
if(self.owner.flagcarried)
{
self.owner.flagcarried.scale = 0.6;
setorigin(self.owner.flagcarried, FLAG_CARRY_POS);
}
- sound (self, CHAN_TRIGGER, "misc/null.wav", 1, ATTN_NORM);
+ sound (self, CH_TRIGGER_SINGLE, "misc/null.wav", 1, ATTN_NORM);
self.vehicle_exit(eject);
self.owner = world;
+ vehicles_reset_colors();
if(oldself)
self = oldself;
}
}
+void vehicles_painframe()
+{
+//.float pain_finished; //Added by Supajoe
+
+ if(self.owner.vehicle_health <= 50)
+ if(self.pain_frame < time)
+ {
+ float _ftmp;
+ _ftmp = self.owner.vehicle_health / 50;
+ self.pain_frame = time + 0.1 + (random() * 0.5 * _ftmp);
+ pointparticles(particleeffectnum("smoke_small"), (self.origin + (randomvec() * 80)), '0 0 0', 1);
+
+ if(self.vehicle_flags & VHF_DMGSHAKE)
+ self.velocity += randomvec() * 30;
+
+ if(self.vehicle_flags & VHF_DMGROLL)
+ if(self.vehicle_flags & VHF_DMGHEADROLL)
+ self.tur_head.angles += randomvec();
+ else
+ self.angles += randomvec();
+
+ }
+}
+
void vehicles_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
{
self.dmg_time = time;
self.vehicle_shieldent.think = shieldhit_think;
}
-
self.vehicle_shieldent.colormod = '1 1 1';
self.vehicle_shieldent.alpha = 0.45;
self.vehicle_shieldent.angles = vectoangles(normalize(hitloc - (self.origin + self.vehicle_shieldent.origin))) - self.angles;
if(self.vehicle_shield < 0)
{
+ self.vehicle_health -= fabs(self.vehicle_shield);
self.vehicle_shieldent.colormod = '2 0 0';
self.vehicle_shield = 0;
self.vehicle_shieldent.alpha = 0.75;
- self.vehicle_health -= fabs(self.vehicle_shield);
+
+ if(sound_allowed(MSG_BROADCAST, attacker))
+ spamsound (self, CH_PAIN, "onslaught/ons_hit2.wav", VOL_BASE, ATTN_NORM); // FIXME: PLACEHOLDER
}
+ else
+ if(sound_allowed(MSG_BROADCAST, attacker))
+ spamsound (self, CH_PAIN, "onslaught/electricity_explode.wav", VOL_BASE, ATTN_NORM); // FIXME: PLACEHOLDER
+
}
else
+ {
self.vehicle_health -= damage;
+ if(sound_allowed(MSG_BROADCAST, attacker))
+ spamsound (self, CH_PAIN, "onslaught/ons_hit2.wav", VOL_BASE, ATTN_NORM); // FIXME: PLACEHOLDER
+ }
+
self.velocity += force; // * (vlen(force) / self.mass);
if(self.vehicle_health <= 0)
void vehicles_showwp()
{
entity oldself;
+ vector rgb;
if(self.cnt)
{
self.think = vehicles_showwp_goaway;
}
- WaypointSprite_Spawn("vehicle", 0, 0, self, '0 0 64', world, 0, self, waypointsprite_attached, TRUE);
+ if(teamplay && self.team)
+ rgb = TeamColor(self.team);
+ else
+ rgb = '1 1 1';
+ WaypointSprite_Spawn("vehicle", 0, 0, self, '0 0 64', world, 0, self, waypointsprite_attached, TRUE, RADARICON_POWERUP, rgb);
if(self.waypointsprite_attached)
- {
-
- if(teamplay && self.team)
- WaypointSprite_UpdateTeamRadar(self.waypointsprite_attached, RADARICON_POWERUP, TeamColor(self.team));
- else
- WaypointSprite_UpdateTeamRadar(self.waypointsprite_attached, RADARICON_POWERUP, '1 1 1');
-
+ {
WaypointSprite_UpdateRule(self.waypointsprite_attached, self.enemy.team, SPRITERULE_DEFAULT);
if(oldself == world)
- {
WaypointSprite_UpdateBuildFinished(self.waypointsprite_attached, self.nextthink);
- dprint("Oldies is goldies\n");
- }
-
WaypointSprite_Ping(self.waypointsprite_attached);
}
ret.classname = "vehicle_return";
ret.enemy = self;
ret.team = self.team;
- ret.think = vehicles_showwp;
+ ret.think = vehicles_showwp;
if(self.deadflag != DEAD_NO)
{
{
ret.nextthink = min(time + self.vehicle_respawntime, time + self.vehicle_respawntime - 1);
}
-
-
setmodel(ret, "null");
setorigin(ret, self.pos1 + '0 0 96');
{
if(e != self.vehicle_shieldent)
{
- e.effects = _effects | EF_LOWPRECISION;
+ e.effects = _effects; // | EF_LOWPRECISION;
e.colormod = _colormod;
e.colormap = _colormap;
e.alpha = 1;
e = e.chain;
}
- self.vehicle_hudmodel.effects = self.effects = _effects | EF_LOWPRECISION;
+ self.vehicle_hudmodel.effects = self.effects = _effects; // | EF_LOWPRECISION;
self.vehicle_hudmodel.colormod = self.colormod = _colormod;
self.vehicle_hudmodel.colormap = self.colormap = _colormap;
self.vehicle_viewport.effects = (EF_ADDITIVE | EF_DOUBLESIDED | EF_FULLBRIGHT | EF_NODEPTHTEST | EF_NOGUNBOB | EF_NOSHADOW | EF_LOWPRECISION | EF_SELECTABLE | EF_TELEPORT_BIT);
if(self.team && !teamplay)
self.team = 0;
-
+
self.vehicle_flags |= VHF_ISVEHICLE;
-
+
setmodel(self, bodymodel);
self.vehicle_viewport = spawn();
self.takedamage = DAMAGE_AIM;
self.bot_attack = TRUE;
self.iscreature = TRUE;
+ self.damagedbycontents = TRUE;
self.hud = vhud;
self.vehicle_die = dieproc;
self.pos1 = self.origin;
self.pos2 = self.angles;
-
+ self.tur_head.team = self.team;
+
return TRUE;
}