/* spawnflags */ ATTRIB(Bumblebee, spawnflags, int, VHF_DMGSHAKE);
/* mins */ ATTRIB(Bumblebee, mins, vector, '-245 -130 -130');
/* maxs */ ATTRIB(Bumblebee, maxs, vector, '230 130 130');
+/* view offset*/ ATTRIB(Bumblebee, view_ofs, vector, '0 0 300');
+/* view dist */ ATTRIB(Bumblebee, height, float, 450);
/* model */ ATTRIB(Bumblebee, mdl, string, "models/vehicles/bumblebee_body.dpm");
/* model */ ATTRIB(Bumblebee, model, string, "models/vehicles/bumblebee_body.dpm");
/* head_model */ ATTRIB(Bumblebee, head_model, string, "");
entity gunner = self;
setself(vehic);
+ // this isn't technically a vehicle (yet), let's not do frame functions on it (yet)
+ //vehicles_frame(gun, player);
+
vehic.solid = SOLID_NOT;
//setorigin(gunner, vehic.origin);
gunner.velocity = vehic.velocity;
if(trace_ent)
if(trace_ent.movetype)
if(trace_ent.takedamage)
- if(!trace_ent.deadflag)
+ if(!IS_DEAD(trace_ent) && !STAT(FROZEN, trace_ent))
{
if(DIFF_TEAM(trace_ent, gunner))
{
if(!forbidWeaponUse(gunner))
if(gunner.BUTTON_ATCK)
- if(time > gun.attack_finished_single)
+ if(time > gun.attack_finished_single[0])
if(gun.vehicle_energy >= autocvar_g_vehicle_bumblebee_cannon_cost)
{
gun.vehicle_energy -= autocvar_g_vehicle_bumblebee_cannon_cost;
bumblebee_fire_cannon(gun, "fire", gunner);
gun.delay = time;
- gun.attack_finished_single = time + autocvar_g_vehicle_bumblebee_cannon_refire;
+ gun.attack_finished_single[0] = time + autocvar_g_vehicle_bumblebee_cannon_refire;
}
VEHICLE_UPDATE_PLAYER(gunner, health, bumblebee);
//vector exitspot;
float mysize;
- tracebox(gunner.origin + '0 0 32', PL_MIN, PL_MAX, prefer_spot, MOVE_NORMAL, player);
+ tracebox(gunner.origin + '0 0 32', STAT(PL_MIN, NULL), STAT(PL_MAX, NULL), prefer_spot, MOVE_NORMAL, player);
if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
return prefer_spot;
- mysize = 1.5 * vlen(PL_MAX - PL_MIN); // can't use gunner's size, as they don't have a size
+ mysize = 1.5 * vlen(STAT(PL_MAX, NULL) - STAT(PL_MIN, NULL)); // can't use gunner's size, as they don't have a size
float i;
vector v, v2;
v2 = 0.5 * (gunner.absmin + gunner.absmax);
v = randomvec();
v_z = 0;
v = v2 + normalize(v) * mysize;
- tracebox(v2, PL_MIN, PL_MAX, v, MOVE_NORMAL, player);
+ tracebox(v2, STAT(PL_MIN, NULL), STAT(PL_MAX, NULL), v, MOVE_NORMAL, player);
if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
return v;
}
}
CSQCVehicleSetup(player, HUD_NORMAL);
- setsize(player, PL_MIN, PL_MAX);
+ setsize(player, STAT(PL_MIN, NULL), STAT(PL_MAX, NULL));
player.takedamage = DAMAGE_AIM;
player.solid = SOLID_SLIDEBOX;
player.effects &= ~EF_NODRAW;
player.alpha = 1;
player.PlayerPhysplug = func_null;
- player.view_ofs = PL_VIEW_OFS;
+ player.view_ofs = STAT(PL_VIEW_OFS, NULL);
player.event_damage = PlayerDamage;
player.hud = HUD_NORMAL;
player.teleportable = TELEPORT_NORMAL;
- player.switchweapon = gunner.switchweapon;
+ PS(player).m_switchweapon = gunner.m_switchweapon;
player.vehicle_enter_delay = time + 2;
fixedmakevectors(vehic.angles);
if(!vehic.gunner1 && !vehic.gunner2 && ((time >= vehic.gun1.phase) + (time >= vehic.gun2.phase)) == 2)
{
// we can have some fun
- if(vlen(real_origin(vehic.gun2) - player.origin) < vlen(real_origin(vehic.gun1) - player.origin))
+ if(vlen2(real_origin(vehic.gun2) - player.origin) < vlen2(real_origin(vehic.gun1) - player.origin))
{
gunner = vehic.gun2;
vehic.gunner2 = player;
RemoveGrapplingHook(player);
- gunner.switchweapon = player.switchweapon;
+ gunner.m_switchweapon = PS(player).m_switchweapon;
gunner.vehicle_exit = bumblebee_gunner_exit;
gunner.vehicle_hudmodel.viewmodelforclient = player;
return false;
if((!IS_PLAYER(other))
- || (other.deadflag != DEAD_NO)
+ || (IS_DEAD(other))
|| (other.vehicle)
|| (DIFF_TEAM(other, self))
) { return false; }
vehic = self.vehicle;
setself(vehic);
- if(vehic.deadflag != DEAD_NO)
+ vehicles_frame(vehic, pilot);
+
+ if(IS_DEAD(vehic))
{
setself(pilot);
pilot.BUTTON_ATCK = pilot.BUTTON_ATCK2 = 0;
if(autocvar_g_vehicle_bumblebee_healgun_locktime)
{
- if(vehic.tur_head.lock_time < time || vehic.tur_head.enemy.deadflag)
+ if(vehic.tur_head.lock_time < time || IS_DEAD(vehic.tur_head.enemy) || STAT(FROZEN, vehic.tur_head.enemy))
vehic.tur_head.enemy = world;
if(trace_ent)
if(trace_ent.movetype)
if(trace_ent.takedamage)
- if(!trace_ent.deadflag)
+ if(!IS_DEAD(trace_ent) && !STAT(FROZEN, trace_ent))
{
if(teamplay)
{
}
else
{
- if(trace_ent.deadflag == DEAD_NO)
+ if(!IS_DEAD(trace_ent))
if((teamplay && trace_ent.team == pilot.team) || !teamplay)
{
self.touch = vehicles_touch;
- if(self.deadflag == DEAD_NO)
+ if(!IS_DEAD(self))
{
self.think = bumblebee_land;
self.nextthink = time;
fixedmakevectors(self.angles);
vector spot;
- if(vlen(self.velocity) > autocvar_g_vehicle_bumblebee_speed_forward * 0.5)
+ if(vdist(self.velocity, >, autocvar_g_vehicle_bumblebee_speed_forward * 0.5))
spot = self.origin + v_up * 128 + v_forward * 300;
else
spot = self.origin + v_up * 128 - v_forward * 300;
if(!vehicle_initialize(VEH_BUMBLEBEE, false)) { remove(self); return; }
}
- METHOD(Bumblebee, vr_impact, void(Bumblebee thisveh))
+ METHOD(Bumblebee, vr_impact, void(Bumblebee thisveh, entity instance))
{
if(autocvar_g_vehicle_bumblebee_bouncepain)
vehicles_impact(autocvar_g_vehicle_bumblebee_bouncepain_x, autocvar_g_vehicle_bumblebee_bouncepain_y, autocvar_g_vehicle_bumblebee_bouncepain_z);
}
- METHOD(Bumblebee, vr_enter, void(Bumblebee thisveh))
+ METHOD(Bumblebee, vr_enter, void(Bumblebee thisveh, entity instance))
{
SELFPARAM();
self.touch = bumblebee_touch;
self.nextthink = 0;
self.movetype = MOVETYPE_BOUNCEMISSILE;
}
- METHOD(Bumblebee, vr_think, void(Bumblebee thisveh))
+ METHOD(Bumblebee, vr_think, void(Bumblebee thisveh, entity instance))
{
SELFPARAM();
self.angles_z *= 0.8;
}
}
}
- METHOD(Bumblebee, vr_death, void(Bumblebee thisveh))
+ METHOD(Bumblebee, vr_death, void(Bumblebee thisveh, entity instance))
{
SELFPARAM();
entity oldself = self;
setorigin(self, self.pos1);
}
- METHOD(Bumblebee, vr_spawn, void(Bumblebee thisveh))
+ METHOD(Bumblebee, vr_spawn, void(Bumblebee thisveh, entity instance))
{
SELFPARAM();
if(!self.gun1)
self.vehicle_shieldent.alpha = -1;
self.vehicle_shieldent.effects = EF_LOWPRECISION | EF_NODRAW;
- self.gun1 = spawn();
- self.gun2 = spawn();
- self.gun3 = spawn();
+ self.gun1 = new(vehicle_playerslot);
+ self.gun2 = new(vehicle_playerslot);
+ self.gun3 = new(bumblebee_raygun);
self.vehicle_flags |= VHF_MULTISLOT;
self.gun2.owner = self;
self.gun3.owner = self;
- self.gun1.classname = self.gun2.classname = "vehicle_playerslot";
-
setmodel(self.gun1, MDL_VEH_BUMBLEBEE_CANNON_RIGHT);
setmodel(self.gun2, MDL_VEH_BUMBLEBEE_CANNON_LEFT);
setmodel(self.gun3, MDL_VEH_BUMBLEBEE_CANNON_CENTER);
setorigin(self, self.origin + '0 0 25');
}
- METHOD(Bumblebee, vr_setup, void(Bumblebee thisveh))
+ METHOD(Bumblebee, vr_setup, void(Bumblebee thisveh, entity instance))
{
SELFPARAM();
if(autocvar_g_vehicle_bumblebee_energy)
{
Vehicles_drawCrosshair(vCROSS_HEAL);
}
- METHOD(Bumblebee, vr_setup, void(Bumblebee thisveh))
+ METHOD(Bumblebee, vr_setup, void(Bumblebee thisveh, entity instance))
{
AuxiliaryXhair[0].axh_image = vCROSS_LOCK; // Raygun-locked
AuxiliaryXhair[1].axh_image = vCROSS_BURST; // Gunner1