-1 30 20 1 // forward
-32 30 20 1 // backward
-63 30 20 1 // left
-94 30 20 1 // right
-125 30 20 0 // jump
-0 1 20 0 // idle
+/*
+Generated framegroups file for spiderbot
+Used by DarkPlaces to simulate frame groups in DPM models.
+*/
+
+1 31 30 1 // spiderbot forward
+32 31 30 1 // spiderbot backwards
+63 31 20 1 // spiderbot left
+94 31 20 1 // spiderbot right
+125 31 20 0 // spiderbot jump
+156 1 1 0 // spiderbot idle
+157 12 20 0 // spiderbot jump2
+169 7 20 0 // spiderbot jump_charge
+176 11 15 0 // spiderbot jump_fly
+187 21 20 0 // spiderbot jump_land
+208 51 15 0 // spiderbot death
+259 3 1 0 // spiderbot dead
}
*/
+/*
void movelib_move_simple(vector newdir,float velo,float blendrate)
{
self.velocity = self.velocity * (1 - blendrate) + (newdir * blendrate) * velo;
}
+*/
+#define movelib_move_simple(newdir,velo,blendrate) \
+ self.velocity = self.velocity * (1 - blendrate) + (newdir * blendrate) * velo
void movelib_beak_simple(float force)
{
float autocvar_g_vehicle_racer_shield_regen;
float autocvar_g_vehicle_racer_shield_regen_pause;
-float autocvar_g_vehicle_racer_laser_cost;
-float autocvar_g_vehicle_racer_laser_damage;
-float autocvar_g_vehicle_racer_laser_radius;
-float autocvar_g_vehicle_racer_laser_refire;
-float autocvar_g_vehicle_racer_laser_speed;
+float autocvar_g_vehicle_racer_cannon_cost;
+float autocvar_g_vehicle_racer_cannon_damage;
+float autocvar_g_vehicle_racer_cannon_radius;
+float autocvar_g_vehicle_racer_cannon_refire;
+float autocvar_g_vehicle_racer_cannon_speed;
+float autocvar_g_vehicle_racer_cannon_spread;
+float autocvar_g_vehicle_racer_cannon_force;
float autocvar_g_vehicle_racer_rocket_accel;
float autocvar_g_vehicle_racer_rocket_damage;
float autocvar_g_vehicle_racer_rocket_radius;
+float autocvar_g_vehicle_racer_rocket_force;
float autocvar_g_vehicle_racer_rocket_refire;
float autocvar_g_vehicle_racer_rocket_speed;
float autocvar_g_vehicle_racer_rocket_turnrate;
self.angles_z *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * frametime);
}
-void racer_rocket_explode()
-{
- PROJECTILE_TOUCH;
- if(other.owner == self.owner)
- return;
-
- self.event_damage = SUB_Null;
-
- sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
- pointparticles(particleeffectnum("rocket_explode"), findbetterlocation (self.origin, 16), '0 0 0', 1);
- RadiusDamage (self, self.realowner ,autocvar_g_vehicle_racer_rocket_damage, 0, autocvar_g_vehicle_racer_rocket_radius, world, 150, DEATH_WAKIROCKET, world);
-
- remove (self);
-}
-
-void racer_bolt_explode()
-{
- PROJECTILE_TOUCH;
- pointparticles(particleeffectnum("wakizashi_gun_impact"), findbetterlocation (self.origin, 8), trace_plane_normal * 1000, 1);
- RadiusDamage (self, self.realowner, autocvar_g_vehicle_racer_laser_damage, 0, autocvar_g_vehicle_racer_laser_radius, world, 150, DEATH_WAKIGUN, world);
- sound (self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
- remove (self);
-}
-
void racer_fire_cannon(string tagname)
{
- entity bolt;
vector v;
+ entity bolt;
- bolt = spawn();
- sound (self, CHAN_WEAPON, "weapons/lasergun_fire.wav", VOL_BASE, ATTN_NORM);
-
- setorigin(bolt, gettaginfo(self, gettagindex(self, tagname)));
- PROJECTILE_MAKETRIGGER(bolt);
-
- bolt.movetype = MOVETYPE_FLYMISSILE;
- bolt.flags = FL_PROJECTILE | FL_NOTARGET;
- bolt.owner = self;
- bolt.realowner = self.owner;
- bolt.touch = racer_bolt_explode;
- bolt.think = racer_bolt_explode;
- bolt.nextthink = time + 9;
-
- bolt.bot_dodge = TRUE;
- bolt.bot_dodgerating = autocvar_g_vehicle_racer_laser_damage;
+ v = gettaginfo(self, gettagindex(self, tagname));
+ bolt = vehicles_projectile("wakizashi_gun_impact", "weapons/laserimpact.wav", "wakizashi_gun_muzzleflash", "weapons/lasergun_fire.wav",
+ v, normalize(v_forward + randomvec() * autocvar_g_vehicle_racer_cannon_spread) * autocvar_g_vehicle_racer_cannon_speed,
+ autocvar_g_vehicle_racer_cannon_damage, autocvar_g_vehicle_racer_cannon_radius, autocvar_g_vehicle_racer_cannon_force, 0,
+ DEATH_WAKIGUN, PROJECTILE_WAKICANNON, 0);
// Fix z-aim (for chase mode)
v = normalize(trace_endpos - bolt.origin);
v_forward_z = v_z * 0.5;
-
- bolt.velocity = v_forward * autocvar_g_vehicle_racer_laser_speed;
-
- pointparticles(particleeffectnum("wakizashi_gun_muzzleflash"), bolt.origin, bolt.velocity, 1);
-
- CSQCProjectile(bolt, TRUE, PROJECTILE_WAKICANNON, TRUE);
+ bolt.velocity = v_forward * autocvar_g_vehicle_racer_cannon_speed;
}
void racer_rocket_groundhugger()
self.nextthink = time;
- if ((self.owner.deadflag != DEAD_NO) || (self.cnt < time))
+ if(self.owner.deadflag != DEAD_NO || self.cnt < time)
{
- racer_rocket_explode();
+ self.use();
return;
}
self.nextthink = time;
- if ((self.owner.deadflag != DEAD_NO) || (self.cnt < time))
+ if (self.owner.deadflag != DEAD_NO || self.cnt < time)
{
- racer_rocket_explode();
+ self.use();
return;
}
void racer_fire_rocket(string tagname, entity trg)
{
+ vector v;
entity rocket;
- sound (self, CHAN_WEAPON, "weapons/rocket_fire.wav", VOL_BASE, ATTN_NORM);
-
- rocket = spawn();
- setsize (rocket, '-1 -1 -1', '1 1 1');
- setorigin(rocket, gettaginfo(self, gettagindex(self, tagname)));
+ v = gettaginfo(self, gettagindex(self, tagname));
+ rocket = vehicles_projectile("rocket_explode", "weapons/rocket_impact.wav", "", "weapons/rocket_fire.wav",
+ v, v_forward * autocvar_g_vehicle_racer_rocket_speed,
+ autocvar_g_vehicle_racer_rocket_damage, autocvar_g_vehicle_racer_rocket_radius, autocvar_g_vehicle_racer_rocket_force, 3,
+ DEATH_WAKIROCKET, PROJECTILE_WAKIROCKET, 20);
rocket.lip = autocvar_g_vehicle_racer_rocket_accel * sys_frametime;
rocket.wait = autocvar_g_vehicle_racer_rocket_turnrate;
- rocket.solid = SOLID_BBOX;
- rocket.movetype = MOVETYPE_FLYMISSILE;
- rocket.flags = FL_PROJECTILE;
- rocket.owner = self;
- rocket.realowner = self.owner;
- rocket.touch = racer_rocket_explode;
- rocket.bot_dodge = TRUE;
- rocket.bot_dodgerating = autocvar_g_vehicle_racer_rocket_damage;
- rocket.cnt = time + 9;
- rocket.velocity = v_forward * autocvar_g_vehicle_racer_rocket_speed;
+ rocket.nextthink = time;
+ rocket.enemy = trg;
+ rocket.cnt = time + 15;
if(trg)
rocket.think = racer_rocket_tracker;
else
rocket.think = racer_rocket_groundhugger;
-
- rocket.nextthink = time;
- rocket.enemy = trg;
-
- CSQCProjectile(rocket, TRUE, PROJECTILE_WAKIROCKET, TRUE);
}
float racer_frame()
if(player.BUTTON_ATCK)
if(time > racer.attack_finished_single)
- if(racer.vehicle_energy >= autocvar_g_vehicle_racer_laser_cost)
+ if(racer.vehicle_energy >= autocvar_g_vehicle_racer_cannon_cost)
{
- racer.vehicle_energy -= autocvar_g_vehicle_racer_laser_cost;
+ racer.vehicle_energy -= autocvar_g_vehicle_racer_cannon_cost;
racer.wait = time;
crosshair_trace(player);
racer_fire_cannon("tag_fire2");
racer.cnt = 1;
}
- racer.attack_finished_single = time + autocvar_g_vehicle_racer_laser_refire;
+ racer.attack_finished_single = time + autocvar_g_vehicle_racer_cannon_refire;
self.owner.vehicle_energy = racer.vehicle_energy / autocvar_g_vehicle_racer_energy;
}
precache_model ("models/vehicles/wakizashi.dpm");
precache_model ("models/vehicles/wakizashi_cockpit.dpm");
-
vehicles_configcheck("vehicle_racer.cfg", autocvar_g_vehicle_racer_health);
if(autocvar_g_vehicle_racer_energy)
if(autocvar_g_vehicle_racer_energy_regen)
float autocvar_g_vehicle_raptor_cannon_refire;
float autocvar_g_vehicle_raptor_cannon_speed;
float autocvar_g_vehicle_raptor_cannon_spread;
-
+float autocvar_g_vehicle_raptor_cannon_force;
float autocvar_g_vehicle_raptor_energy;
float autocvar_g_vehicle_raptor_energy_regen;
}
-void raptor_bolt_explode()
-{
- PROJECTILE_TOUCH;
- pointparticles(particleeffectnum("raptor_cannon_impact"), findbetterlocation (self.origin, 8), trace_plane_normal * 1000, 1);
- RadiusDamage (self, self.realowner, autocvar_g_vehicle_raptor_cannon_damage, 0, autocvar_g_vehicle_raptor_cannon_radius, world, 25, DEATH_WAKIGUN, world);
- sound (self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
- remove (self);
-}
void raptor_fire_cannon(entity gun, string tagname)
{
entity bolt;
-
- bolt = spawn();
-
- PROJECTILE_MAKETRIGGER(bolt);
- sound (gun, CHAN_WEAPON, "weapons/lasergun_fire.wav", VOL_BASE, ATTN_NORM);
- setorigin(bolt, gettaginfo(gun, gettagindex(gun, tagname)));
-
- bolt.movetype = MOVETYPE_FLYMISSILE;
- bolt.flags = FL_PROJECTILE | FL_NOTARGET;
- bolt.owner = self;
- bolt.realowner = self.owner;
- bolt.touch = raptor_bolt_explode;
- bolt.think = raptor_bolt_explode;
- bolt.nextthink = time + 9;
- bolt.bot_dodge = TRUE;
- bolt.bot_dodgerating = autocvar_g_vehicle_raptor_cannon_damage;
- bolt.velocity = normalize(v_forward + randomvec() * autocvar_g_vehicle_raptor_cannon_spread) * autocvar_g_vehicle_raptor_cannon_speed;
-
- pointparticles(particleeffectnum("raptor_cannon_muzzleflash"), bolt.origin, bolt.velocity, 1);
- //pointparticles(particleeffectnum("spiderbot_minigun_muzzleflash"), bolt.origin, bolt.velocity, 1);
-
- CSQCProjectile(bolt, TRUE, PROJECTILE_RAPTORCANNON, TRUE);
+ vector b_org;
+ b_org = gettaginfo(gun, gettagindex(gun, tagname));
+ bolt = vehicles_projectile("raptor_cannon_impact", "weapons/laserimpact.wav", "raptor_cannon_muzzleflash", "weapons/lasergun_fire.wav",
+ b_org, normalize(v_forward + randomvec() * autocvar_g_vehicle_raptor_cannon_spread) * autocvar_g_vehicle_raptor_cannon_speed,
+ autocvar_g_vehicle_raptor_cannon_damage, autocvar_g_vehicle_raptor_cannon_radius, autocvar_g_vehicle_raptor_cannon_force, 0,
+ DEATH_WAKIGUN, PROJECTILE_RAPTORCANNON, 0);
}
void raptor_think()
float raptor_takeoff()
{
entity player, raptor;
- float ftmp, ftmp2;
- vector df;
player = self;
raptor = self.vehicle;
remove(self);
return;
}
- setorigin(self, self.origin + '0 0 50');
//FIXME: Camera is in a bad place in HUD model.
setorigin(self.vehicle_viewport, '25 0 5');
void spiderbot_enter();
void spiderbot_spawn();
-void spiderbot_rocket_explode()
-{
- vector org2;
-
- if(self.event_damage != SUB_Null)
- {
- self.event_damage = SUB_Null;
- self.think = spiderbot_rocket_explode;
- self.nextthink = time;
- return;
- }
-
- sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
- org2 = findbetterlocation (self.origin, 16);
- pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
- w_deathtypestring = "dident escape the rocket barrage";
-
- if(!self.owner)
- self.owner = self.realowner;
-
- RadiusDamage (self, self.owner,
- autocvar_g_vehicle_spiderbot_rocket_damage,
- autocvar_g_vehicle_spiderbot_rocket_edgedamage,
- autocvar_g_vehicle_spiderbot_rocket_radius, world,
- autocvar_g_vehicle_spiderbot_rocket_force, DEATH_SBROCKET, world);
-
- remove (self);
-}
-
-void spiderbot_rocket_touch()
-{
- if(self.owner)
- {
- if(other == self.owner.vehicle)
- return;
-
- if(other == self.owner.vehicle.tur_head)
- return;
- }
-
- PROJECTILE_TOUCH;
- spiderbot_rocket_explode();
-}
-
void spiderbot_rocket_unguided()
{
vector newdir, olddir;
self.nextthink = time;
-
olddir = normalize(self.velocity);
newdir = normalize(self.pos1 - self.origin) + randomvec() * autocvar_g_vehicle_spiderbot_rocket_noise;
self.velocity = normalize(olddir + newdir * autocvar_g_vehicle_spiderbot_rocket_turnrate) * autocvar_g_vehicle_spiderbot_rocket_speed;
UpdateCSQCProjectile(self);
if (self.owner.deadflag != DEAD_NO || self.cnt < time)
- spiderbot_rocket_explode();
-
+ self.use();
}
void spiderbot_rocket_guided()
self.nextthink = time;
- if not (self.owner.vehicle)
+ if not (self.realowner.vehicle)
self.think = spiderbot_rocket_unguided;
- crosshair_trace(self.owner);
+ crosshair_trace(self.realowner);
olddir = normalize(self.velocity);
newdir = normalize(trace_endpos - self.origin) + randomvec() * autocvar_g_vehicle_spiderbot_rocket_noise;
self.velocity = normalize(olddir + newdir * autocvar_g_vehicle_spiderbot_rocket_turnrate) * autocvar_g_vehicle_spiderbot_rocket_speed;
UpdateCSQCProjectile(self);
if (self.owner.deadflag != DEAD_NO || self.cnt < time)
- spiderbot_rocket_explode();
-}
-
-void spiderbot_rocket_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
-{
- self.health -= damage;
- self.velocity += force;
- if(self.health < 1)
- spiderbot_rocket_explode();
+ self.use();
}
void spiderbot_guide_release()
{
entity rkt;
- rkt = findchainentity(owner,self.owner);
+ rkt = findchainentity(realowner, self.owner);
if not (rkt)
return;
void spiderbot_rocket_do()
{
+
+ vector v;
entity rocket;
if (self.owner.BUTTON_ATCK2)
if not (self.owner.BUTTON_ATCK2)
return;
- sound (self, CHAN_WEAPON, "weapons/rocket_fire.wav", VOL_BASE, ATTN_NORM);
- rocket = spawn ();
- setsize (rocket, '-1 -1 -1', '1 1 1'); // give it some size so it can be shot
- setorigin(rocket,gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire")));
- te_explosion (rocket.origin);
-
crosshair_trace(self.owner);
- rocket.classname = "spiderbot_rocket";
- rocket.bot_dodge = TRUE;
- rocket.bot_dodgerating = autocvar_g_vehicle_spiderbot_rocket_damage;
- rocket.cnt = time + autocvar_g_vehicle_spiderbot_rocket_lifetime;
- rocket.health = autocvar_g_vehicle_spiderbot_rocket_health;
- rocket.takedamage = DAMAGE_AIM;
- rocket.event_damage = spiderbot_rocket_damage;
- rocket.owner = self.owner;
- rocket.nextthink = time;
- rocket.movetype = MOVETYPE_FLYMISSILE;
- rocket.velocity = normalize(v_forward + (v_up * 0.5) + randomvec() * 0.25) * autocvar_g_vehicle_spiderbot_rocket_speed;
- rocket.angles = vectoangles(rocket.velocity);
- rocket.think = spiderbot_rocket_guided;
- rocket.touch = spiderbot_rocket_touch;
- rocket.flags = FL_PROJECTILE;
- rocket.solid = SOLID_TRIGGER;
- rocket.pos1 = trace_endpos;
-
- CSQCProjectile(rocket, FALSE, PROJECTILE_SPIDERROCKET, FALSE); // no culling, has fly sound
+ v = gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire"));
+ rocket = vehicles_projectile("rocket_explode", "weapons/rocket_impact.wav", "", "weapons/rocket_fire.wav",
+ v, normalize(v_forward + (v_up * 0.5) + randomvec() * 0.25) * autocvar_g_vehicle_spiderbot_rocket_speed,
+ autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1,
+ DEATH_SBROCKET, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health);
+
+ rocket.cnt = time + 15;
+ rocket.classname = "spiderbot_rocket";
+ rocket.pos1 = trace_endpos;
+ rocket.think = spiderbot_rocket_guided;
+ rocket.nextthink = time;
+ rocket.cnt = time + autocvar_g_vehicle_spiderbot_rocket_lifetime;
+ te_explosion (rocket.origin);
self.tur_head.frame += 1;
if (self.tur_head.frame == 9)
self.attack_finished_single = autocvar_g_vehicle_spiderbot_rocket_refire;
self.gun2.cnt = time + self.attack_finished_single;
+
+
}
void spiderbot_minigun_fire(entity gun, float trail)
setmodel(g2, "models/vehicles/spiderbot_barrels.dpm");
setorigin(b, self.origin);
+ b.frame = 11;
+ b.angles = self.angles;
+ setsize(b, self.mins, self.maxs);
+
setorigin(h, gettaginfo(self, gettagindex(self, "tag_head")));
h.movetype = MOVETYPE_BOUNCE;
h.solid = SOLID_BBOX;
g2.solid = SOLID_CORPSE;
g2.velocity = v_forward * 700 + (randomvec() * 32);
g2.avelocity = randomvec() * 180;
- b.frame = 5;
h.colormod = b.colormod = g1.colormod = g2.colormod = '-2 -2 -2';
- SUB_SetFade(b, time, min(autocvar_g_vehicle_spiderbot_respawntime, 10));
+ SUB_SetFade(b, time + 5, min(autocvar_g_vehicle_spiderbot_respawntime, 1));
//SUB_SetFade(h, time, min(autocvar_g_vehicle_spiderbot_respawntime, 10));
SUB_SetFade(g1, time, min(autocvar_g_vehicle_spiderbot_respawntime, 10));
SUB_SetFade(g2, time, min(autocvar_g_vehicle_spiderbot_respawntime, 10));
self.event_damage = SUB_Null;
self.takedamage = DAMAGE_NO;
self.touch = SUB_Null;
- self.nextthink = 1 + time + random() * 2;
+ self.nextthink = 3.4 + time + random() * 2;
self.think = spiderbot_blowup;
self.deadflag = DEAD_DYING;
self.frame = 5;
self.tur_head.effects |= EF_FLAME;
self.colormod = self.tur_head.colormod = '-1 -1 -1';
+ self.frame = 10;
+ self.movetype = MOVETYPE_TOSS;
}
return v_forward * force_fromtag_power;
}
+void vehicles_projectile_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+{
+ self.health -= damage;
+ self.velocity += force;
+ if(self.health < 1)
+ {
+ self.takedamage = DAMAGE_NO;
+ self.event_damage = SUB_Null;
+ self.think = self.use;
+ self.nextthink = time;
+ }
+
+}
+
+void vehicles_projectile_explode()
+{
+ if(self.owner && other != world)
+ {
+ if(other == self.owner.vehicle)
+ return;
+
+ if(other == self.owner.vehicle.tur_head)
+ return;
+ }
+
+ PROJECTILE_TOUCH;
+
+ self.event_damage = SUB_Null;
+ sound (self, CHAN_PROJECTILE, self.target2, VOL_BASE, ATTN_NORM);
+ pointparticles(particleeffectnum(self.target3), findbetterlocation (self.origin, 16), '0 0 0', 1);
+ RadiusDamage (self, self.realowner, self.shot_dmg, 0, self.shot_radius, self, self.shot_force, self.totalfrags, other);
+ remove (self);
+}
+
+entity vehicles_projectile(string _impactfx, string _impactsnd, string _mzlfx, string _mzlsound,
+ vector _org, vector _vel,
+ float _dmg, float _radi, float _force, float _size,
+ float _deahtype, float _projtype, float _health)
+{
+ entity proj;
+
+ proj = spawn();
+
+ PROJECTILE_MAKETRIGGER(proj);
+ setorigin(proj, _org);
+
+ proj.shot_dmg = _dmg;
+ proj.shot_radius = _radi;
+ proj.shot_force = _force;
+ proj.totalfrags = _deahtype;
+ proj.target2 = _impactsnd;
+ proj.target3 = _impactfx;
+ proj.solid = SOLID_BBOX;
+ proj.movetype = MOVETYPE_FLYMISSILE;
+ proj.flags = FL_PROJECTILE;
+ proj.bot_dodge = TRUE;
+ proj.bot_dodgerating = _dmg;
+ proj.velocity = _vel;
+ proj.touch = vehicles_projectile_explode;
+ proj.use = vehicles_projectile_explode;
+ proj.owner = self;
+ proj.realowner = self.owner;
+ proj.think = SUB_Remove;
+ proj.nextthink = time + 30;
+
+ if(_health)
+ {
+ proj.takedamage = DAMAGE_AIM;
+ proj.event_damage = vehicles_projectile_damage;
+ proj.health = _health;
+ }
+ else
+ proj.flags = FL_PROJECTILE | FL_NOTARGET;
+
+ if(_mzlsound)
+ sound (self, CHAN_WEAPON, _mzlsound, VOL_BASE, ATTN_NORM);
+
+ if(_mzlfx)
+ pointparticles(particleeffectnum(_mzlfx), proj.origin, proj.velocity, 1);
+
+
+ setsize (proj, '-1 -1 -1' * _size, '1 1 1' * _size);
+
+ CSQCProjectile(proj, TRUE, _projtype, TRUE);
+
+ return proj;
+}
void vehicles_spawn()
{
self.owner.event_damage = PlayerDamage;
self.owner.hud = HUD_NORMAL;
self.owner.switchweapon = self.switchweapon;
+ self.owner.BUTTON_USE = 0;
}
if(self.deadflag == DEAD_NO)
--- /dev/null
+spiderbot
+{
+ dpreflectcube cubemaps/default/sky
+ {
+ map textures/spiderbot.tga
+ rgbgen lightingDiffuse
+ }
+}
+wakazachi
+{
+ dpreflectcube cubemaps/default/sky
+ {
+ map textures/wakazachi.tga
+ rgbgen lightingDiffuse
+ }
+}
\ No newline at end of file
set g_vehicle_racer_maxpitch 25
set g_vehicle_racer_turnroll 32
-set g_vehicle_racer_laser_speed 9000
-set g_vehicle_racer_laser_damage 20
-set g_vehicle_racer_laser_radius 100
-set g_vehicle_racer_laser_refire 0.1
-set g_vehicle_racer_laser_cost 2
+set g_vehicle_racer_cannon_speed 9000
+set g_vehicle_racer_cannon_damage 20
+set g_vehicle_racer_cannon_radius 100
+set g_vehicle_racer_cannon_refire 0.1
+set g_vehicle_racer_cannon_cost 2
+set g_vehicle_racer_cannon_spread 0.0125
+set g_vehicle_racer_cannon_force 50
set g_vehicle_racer_rocket_speed 1000
set g_vehicle_racer_rocket_accel 1300
set g_vehicle_racer_rocket_turnrate 0.14
set g_vehicle_racer_rocket_damage 150
+set g_vehicle_racer_rocket_force 350
set g_vehicle_racer_rocket_radius 100
set g_vehicle_racer_rocket_refire 5
set g_vehicle_racer_rocket_cost 0
+
set g_vehicle_racer_rocket_locktarget 1
set g_vehicle_racer_rocket_locking_time 0.45
set g_vehicle_racer_rocket_locking_releasetime 1.2
set g_vehicle_raptor_cannon_refire 0.05
set g_vehicle_raptor_cannon_speed 12000
set g_vehicle_raptor_cannon_spread 0.01
+set g_vehicle_raptor_cannon_force 50
set g_vehicle_raptor_energy 20
set g_vehicle_raptor_energy_regen 10