RemoveGrapplingHook(self); // Wazat's Grappling Hook
+ if(self.vehicle)
+ vehicles_exit(VHEF_RELESE);
+
self.classname = "player";
self.wasplayer = TRUE;
self.iscreature = TRUE;
if(self.vehicle)
if(self.vehicle.deadflag == DEAD_NO)
- if(self.vehicle.vehicles_impusle)
- if(self.vehicle.vehicles_impusle(imp))
+ if(self.vehicle.vehicles_impulse)
+ if(self.vehicle.vehicles_impulse(imp))
return;
if(CheatImpulse(imp))
// trigger new round
// reset objectives, toggle spawnpoints, reset triggers, ...
-void vehicles_clearrturn();
-void vehicles_spawn();
void assault_new_round()
{
- entity oldself;
- //bprint("ASSAULT: new round\n");
-
- oldself = self;
- // Eject players from vehicles
- FOR_EACH_PLAYER(self)
- {
- if(self.vehicle)
- vehicles_exit(VHEF_RELESE);
- }
-
- self = findchainflags(vehicle_flags, VHF_ISVEHICLE);
- while(self)
- {
- vehicles_clearrturn();
- vehicles_spawn();
- self = self.chain;
- }
-
- self = oldself;
-
// up round counter
self.winning = self.winning + 1;
void bumb_impact()
{
- if(autocvar_g_vehicle_bumblebee_bouncepain_x)
- vehilces_impact(autocvar_g_vehicle_bumblebee_bouncepain_x,
- autocvar_g_vehicle_bumblebee_bouncepain_y,
- autocvar_g_vehicle_bumblebee_bouncepain_z);
+ if(autocvar_g_vehicle_bumblebee_bouncepain_x)
+ vehicles_impact(autocvar_g_vehicle_bumblebee_bouncepain_x, autocvar_g_vehicle_bumblebee_bouncepain_y, autocvar_g_vehicle_bumblebee_bouncepain_z);
}
void bumb_spawn(float _f)
vector autocvar_g_vehicle_racer_bouncepain;
var vector racer_force_from_tag(string tag_name, float spring_length, float max_power);
-void racer_spawn_default();
void racer_align4point(float _delta)
{
void racer_impact()
{
- if(autocvar_g_vehicle_racer_bouncepain_x)
- vehilces_impact(autocvar_g_vehicle_racer_bouncepain_x, autocvar_g_vehicle_racer_bouncepain_y, autocvar_g_vehicle_racer_bouncepain_z);
+ if(autocvar_g_vehicle_racer_bouncepain_x)
+ vehicles_impact(autocvar_g_vehicle_racer_bouncepain_x, autocvar_g_vehicle_racer_bouncepain_y, autocvar_g_vehicle_racer_bouncepain_z);
}
void racer_blowup()
autocvar_g_vehicle_racer_blowup_forceintensity,
DEATH_VH_WAKI_DEATH, world);
- self.nextthink = time + autocvar_g_vehicle_racer_respawntime;
- self.think = racer_spawn_default;
+ self.alpha = -1;
self.movetype = MOVETYPE_NONE;
self.effects = EF_NODRAW;
-
self.colormod = '0 0 0';
self.avelocity = '0 0 0';
self.velocity = '0 0 0';
setorigin(self, self.pos1);
+ self.touch = func_null;
+ self.nextthink = 0;
}
void racer_deadtouch()
self.damageforcescale = 0.5;
//self.destvec = autocvar_g_vehicle_racer_bouncepain;
}
-void racer_spawn_default()
-{
- racer_spawn(0);
-}
-
-
void spawnfunc_vehicle_racer()
{
float autocvar_g_vehicle_raptor_shield_regen;
float autocvar_g_vehicle_raptor_shield_regen_pause;
+float autocvar_g_vehicle_raptor_blowup_radius;
+float autocvar_g_vehicle_raptor_blowup_coredamage;
+float autocvar_g_vehicle_raptor_blowup_edgedamage;
+float autocvar_g_vehicle_raptor_blowup_forceintensity;
+
float autocvar_g_vehicle_raptor_bouncefactor;
float autocvar_g_vehicle_raptor_bouncestop;
vector autocvar_g_vehicle_raptor_bouncepain;
{
self.deadflag = DEAD_DEAD;
self.vehicle_exit(VHEF_NORMAL);
- RadiusDamage (self, self.enemy, 250, 15, 250, world, 250, DEATH_VH_RAPT_DEATH, world);
+ RadiusDamage(self, self.enemy, autocvar_g_vehicle_raptor_blowup_coredamage,
+ autocvar_g_vehicle_raptor_blowup_edgedamage,
+ autocvar_g_vehicle_raptor_blowup_radius, world,
+ autocvar_g_vehicle_raptor_blowup_forceintensity, DEATH_VH_RAPT_DEATH, world);
self.alpha = -1;
self.movetype = MOVETYPE_NONE;
void raptor_impact()
{
- if(autocvar_g_vehicle_raptor_bouncepain_x)
- vehilces_impact(autocvar_g_vehicle_raptor_bouncepain_x, autocvar_g_vehicle_raptor_bouncepain_y, autocvar_g_vehicle_raptor_bouncepain_z);
+ if(autocvar_g_vehicle_raptor_bouncepain_x)
+ vehicles_impact(autocvar_g_vehicle_raptor_bouncepain_x, autocvar_g_vehicle_raptor_bouncepain_y, autocvar_g_vehicle_raptor_bouncepain_z);
}
// If we dont do this ever now and then, the raptors rotors
//FIXME: Camera is in a bad place in HUD model.
//setorigin(self.vehicle_viewport, '25 0 5');
- self.vehicles_impusle = raptor_impulse;
+ self.vehicles_impulse = raptor_impulse;
self.frame = 0;
float autocvar_g_vehicle_spiderbot_rocket_turnrate;
float autocvar_g_vehicle_spiderbot_rocket_lifetime;
+float autocvar_g_vehicle_spiderbot_blowup_radius;
+float autocvar_g_vehicle_spiderbot_blowup_coredamage;
+float autocvar_g_vehicle_spiderbot_blowup_edgedamage;
+float autocvar_g_vehicle_spiderbot_blowup_forceintensity;
+
vector autocvar_g_vehicle_spiderbot_bouncepain;
void spider_impact()
{
- if(autocvar_g_vehicle_spiderbot_bouncepain_x)
- vehilces_impact(autocvar_g_vehicle_spiderbot_bouncepain_x, autocvar_g_vehicle_spiderbot_bouncepain_y, autocvar_g_vehicle_spiderbot_bouncepain_z);
+ if(autocvar_g_vehicle_spiderbot_bouncepain_x)
+ vehicles_impact(autocvar_g_vehicle_spiderbot_bouncepain_x, autocvar_g_vehicle_spiderbot_bouncepain_y, autocvar_g_vehicle_spiderbot_bouncepain_z);
}
void spiderbot_headfade()
SUB_SetFade(g1, time, min(autocvar_g_vehicle_spiderbot_respawntime, 10));
SUB_SetFade(g2, time, min(autocvar_g_vehicle_spiderbot_respawntime, 10));
- RadiusDamage (self, self.enemy, 250, 15, 250, world, 250, DEATH_VH_SPID_DEATH, world);
+ RadiusDamage(self, self.enemy, autocvar_g_vehicle_spiderbot_blowup_coredamage,
+ autocvar_g_vehicle_spiderbot_blowup_edgedamage,
+ autocvar_g_vehicle_spiderbot_blowup_radius, world,
+ autocvar_g_vehicle_spiderbot_blowup_forceintensity, DEATH_VH_SPID_DEATH, world);
self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = -1;
self.movetype = MOVETYPE_NONE;
self.deadflag = DEAD_DEAD;
self.solid = SOLID_NOT;
self.tur_head.effects &= ~EF_FLAME;
- self.vehicle_hudmodel.viewmodelforclient = self;
+ self.vehicle_hudmodel.viewmodelforclient = self;
+ setorigin(self, self.pos1);
}
void spiderbot_die()
{
if(!self.gun1)
{
- self.vehicles_impusle = spiderbot_impulse;
+ self.vehicles_impulse = spiderbot_impulse;
self.gun1 = spawn();
self.gun2 = spawn();
setmodel(self.gun1, "models/vehicles/spiderbot_barrels.dpm");
void vehicles_enter();
void vehicles_touch();
void vehicles_reset_colors();
-void vehicles_clearrturn();
+void vehicles_clearreturn();
void vehicles_setreturn();
}
// End generic vehile projectile system
+void vehicles_reset()
+{
+ if(self.owner)
+ {
+ entity oldself = self;
+ self = self.owner;
+ vehicles_exit(VHEF_RELESE);
+ self = oldself;
+ }
+ self.alpha = -1;
+ self.movetype = MOVETYPE_NONE;
+ self.effects = EF_NODRAW;
+ self.colormod = '0 0 0';
+ self.avelocity = '0 0 0';
+ self.velocity = '0 0 0';
+ self.event_damage = func_null;
+ self.solid = SOLID_NOT;
+ self.deadflag = DEAD_NO;
+
+ self.touch = func_null;
+ self.nextthink = 0;
+ vehicles_setreturn();
+}
+
/** vehicles_spawn
Exetuted for all vehicles on (re)spawn.
Sets defaults for newly spawned units.
self.owner = world;
self.touch = vehicles_touch;
self.event_damage = vehicles_damage;
+ self.reset = vehicles_reset;
self.iscreature = TRUE;
self.teleportable = FALSE; // no teleporting for vehicles, too buggy
self.damagedbycontents = TRUE;
return FALSE;
}
-void vehilces_impact(float _minspeed, float _speedfac, float _maxpain)
+void vehicles_impact(float _minspeed, float _speedfac, float _maxpain)
{
if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
return;
}
}
- vehicles_clearrturn();
+ vehicles_clearreturn();
CSQCVehicleSetup(self.owner, self.hud);
}
}
-void vehicles_clearrturn()
+void vehicles_clearreturn()
{
entity ret;
// Remove "return helper", if any.
{
entity ret;
- vehicles_clearrturn();
+ vehicles_clearreturn();
ret = spawn();
ret.classname = "vehicle_return";
ret.team = self.team;
ret.think = vehicles_showwp;
- if(self.deadflag != DEAD_NO)
- {
- ret.cnt = time + self.vehicle_respawntime;
- ret.nextthink = min(time + self.vehicle_respawntime, time + self.vehicle_respawntime - 5);
- }
- else
- {
- ret.nextthink = min(time + self.vehicle_respawntime, time + self.vehicle_respawntime - 1);
- }
+ if(self.deadflag != DEAD_NO)
+ {
+ ret.cnt = max(game_starttime, time) + self.vehicle_respawntime;
+ ret.nextthink = max(game_starttime, time) + max(0, self.vehicle_respawntime - 5);
+ }
+ else
+ ret.nextthink = max(game_starttime, time) + max(0, self.vehicle_respawntime - 1);
setmodel(ret, "null");
setorigin(ret, self.pos1 + '0 0 96');
-
}
void vehicles_reset_colors()
self.event_damage = func_null;
self.touch = vehicles_touch;
self.think = vehicles_spawn;
- self.nextthink = time;
- self.vehicle_respawntime = _respawntime;
self.vehicle_spawn = spawnproc;
+ self.vehicle_respawntime = max(0, _respawntime);
self.effects = EF_NODRAW;
self.dphitcontentsmask = DPCONTENTS_BODY | DPCONTENTS_SOLID;
- if(!autocvar_g_vehicles_delayspawn)
- self.nextthink = time + game_starttime;
- else
- self.nextthink = time + _respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter);
+ if(!autocvar_g_vehicles_delayspawn || !self.vehicle_respawntime)
+ self.nextthink = time;
+ else
+ self.nextthink = max(time, game_starttime) + max(0, self.vehicle_respawntime + ((random() * 2 - 1) * autocvar_g_vehicles_delayspawn_jitter));
if(autocvar_g_playerclip_collisions)
self.dphitcontentsmask |= DPCONTENTS_PLAYERCLIP;
#define VHSF_NORMAL 0
#define VHSF_FACTORY 2
.void(float _spawnflag) vehicle_spawn; /// Vehicles custom fucntion to be efecuted when vehicle (re)spawns
-.float(float _imp) vehicles_impusle;
+.float(float _imp) vehicles_impulse;
.float vehicle_weapon2mode = volly_counter;
-//ยง .void() vehicle_factory()
-
#ifdef VEHICLES_USE_ODE
void(entity e, float physics_enabled) physics_enable = #540; // enable or disable physics on object
void(entity e, vector force, vector force_pos) physics_addforce = #541; // apply a force from certain origin, length of force vector is power of force
set g_vehicle_raptor_shield_regen 25
set g_vehicle_raptor_shield_regen_pause 1.5
+set g_vehicle_raptor_blowup_radius 250
+set g_vehicle_raptor_blowup_coredamage 250
+set g_vehicle_raptor_blowup_edgedamage 15
+set g_vehicle_raptor_blowup_forceintensity 250
+
set g_vehicle_raptor_bouncefactor 0.2
set g_vehicle_raptor_bouncestop 0
set g_vehicle_raptor_bouncepain "1 4 1000"
set g_vehicle_spiderbot_rocket_lifetime 20
set g_vehicle_spiderbot_rocket_spread 0.05
+set g_vehicle_spiderbot_blowup_radius 250
+set g_vehicle_spiderbot_blowup_coredamage 250
+set g_vehicle_spiderbot_blowup_edgedamage 15
+set g_vehicle_spiderbot_blowup_forceintensity 250
+
set g_vehicle_spiderbot_bouncefactor 0 // Factor of old velocity to keep after colission
set g_vehicle_spiderbot_bouncestop 0 // if != 0, New veloctiy after bounce = 0 if new velocity < this
set g_vehicle_spiderbot_bouncepain "0 0 0" // "minspeed_for_pain speedchange_to_pain_factor max_damage"