entity player = isPlayer ? actor : actor.owner;
entity veh = player.vehicle;
// 1 [wait] 1 [wait] 2 [wait] 2 [wait] [wait]
- float t = autocvar_g_vehicle_raptor_cannon_refire * (1 + veh.misc_bulletcounter == 4);
+ float t = autocvar_g_vehicle_raptor_cannon_refire * (1 + ((veh.misc_bulletcounter + 1) >= 4));
if (fire & 1)
if (weapon_prepareattack(thiswep, player, weaponentity, false, t)) {
if (isPlayer) W_SetupShot_Dir(player, weaponentity, v_forward, false, 0, SND_Null, CH_WEAPON_B, 0, DEATH_VH_RAPT_CANNON.m_id);
if (veh) {
veh.misc_bulletcounter += 1;
org = (veh.misc_bulletcounter <= 2) ? gettaginfo(veh.gun1, gettagindex(veh.gun1, "fire1"))
- : (((veh.misc_bulletcounter == 4) ? veh.misc_bulletcounter = 0 : 0), gettaginfo(veh.gun2, gettagindex(veh.gun2, "fire1")));
+ : (((veh.misc_bulletcounter >= 4) ? veh.misc_bulletcounter = 0 : 0), gettaginfo(veh.gun2, gettagindex(veh.gun2, "fire1")));
dir = v_forward;
veh.vehicle_energy -= autocvar_g_vehicle_raptor_cannon_cost;
actor.cnt = time;
}
- vehicles_projectile(veh, EFFECT_RAPTOR_MUZZLEFLASH.eent_eff_name, SND_LASERGUN_FIRE,
+ vehicles_projectile(veh, EFFECT_RAPTOR_MUZZLEFLASH, SND_LASERGUN_FIRE,
org, normalize(dir + 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_VH_RAPT_CANNON.m_id, PROJECTILE_RAPTORCANNON, 0, true, true, player);
entity veh = player.vehicle;
if (fire & 2)
if (!isPlayer || weapon_prepareattack(thiswep, player, weaponentity, true, autocvar_g_vehicle_raptor_flare_refire)) {
+ vector forward, right, up;
+ MAKE_VECTORS(player.v_angle, forward, right, up);
for(int i = 0; i < 3; ++i) {
- entity _flare = spawn();
+ entity _flare = new(RaptorFlare_flare);
setmodel(_flare, MDL_VEH_RAPTOR_FLARE);
_flare.effects = EF_LOWPRECISION | EF_FLAME;
_flare.scale = 0.5;
+ _flare.solid = SOLID_CORPSE; // before setorigin so it will be linked to the area grid
setorigin(_flare, actor.origin - '0 0 16');
set_movetype(_flare, MOVETYPE_TOSS);
_flare.gravity = 0.15;
- _flare.velocity = 0.25 * actor.velocity + (v_forward + randomvec() * 0.25)* -500;
+ _flare.velocity = 0.25 * actor.velocity + (forward + randomvec() * 0.25)* -500;
setthink(_flare, raptor_flare_think);
_flare.nextthink = time;
_flare.owner = veh ? veh : player;
- _flare.solid = SOLID_CORPSE;
_flare.takedamage = DAMAGE_YES;
_flare.event_damage = raptor_flare_damage;
SetResourceExplicit(_flare, RES_HEALTH, 20);
for(i = 0; i < autocvar_g_vehicle_raptor_bomblets; ++i)
{
- bomblet = spawn();
+ bomblet = new(raptor_bomb_bomblet);
setorigin(bomblet, this.origin);
set_movetype(bomblet, MOVETYPE_TOSS);
void raptor_bombdrop(entity this)
{
- entity bomb_1, bomb_2;
-
- bomb_1 = spawn();
- bomb_2 = spawn();
+ entity bomb_1 = new(bombmount_left);
+ entity bomb_2 = new(bombmount_right);
vector org = gettaginfo(this, gettagindex(this, "bombmount_left"));
+ bomb_1.solid = bomb_2.solid = SOLID_BBOX; // before setorigin to ensure area grid linking
setorigin(bomb_1, org);
org = gettaginfo(this, gettagindex(this, "bombmount_right"));
setorigin(bomb_2, org);
bomb_1.owner = bomb_2.owner = this;
bomb_1.realowner = bomb_2.realowner = this.owner;
- bomb_1.solid = bomb_2.solid = SOLID_BBOX;
bomb_1.gravity = bomb_2.gravity = 1;
PROJECTILE_MAKETRIGGER(bomb_1);
void RaptorCBShellfragToss(vector _org, vector _vel, vector _ang)
{
- entity sfrag = spawn();
+ entity sfrag = new(RaptorCBShellfrag);
setmodel(sfrag, MDL_VEH_RAPTOR_CB_FRAGMENT);
+ sfrag.solid = SOLID_CORPSE; // before setorigin to ensure area grid linking
setorigin(sfrag, _org);
set_movetype(sfrag, MOVETYPE_BOUNCE);
sfrag.gravity = 0.15;
- sfrag.solid = SOLID_CORPSE;
sfrag.draw = RaptorCBShellfragDraw;
IL_PUSH(g_drawables, sfrag);