X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fvehicles%2Funit%2Fbumblebee.qc;h=cc52716c79f4761c91fc83b3a00d768a4108f3a1;hp=e22a4da704e87089e73d3e16075d00aeaee4cafa;hb=ae2c1407ec9a05e4f501a6604a7cce8e1030df9f;hpb=23ab6599859e8a4b53501c8635b987bc1c33b771 diff --git a/qcsrc/common/vehicles/unit/bumblebee.qc b/qcsrc/common/vehicles/unit/bumblebee.qc index e22a4da704..cc52716c79 100644 --- a/qcsrc/common/vehicles/unit/bumblebee.qc +++ b/qcsrc/common/vehicles/unit/bumblebee.qc @@ -3,7 +3,7 @@ REGISTER_VEHICLE( /* VEH_##id */ BUMBLEBEE, /* function */ v_bumblebee, /* spawnflags */ VHF_DMGSHAKE, -/* mins,maxs */ '-130 -130 -130', '130 130 130', +/* mins,maxs */ '-245 -130 -130', '230 130 130', /* model */ "models/vehicles/bumblebee_body.dpm", /* head_model */ "", /* hud_model */ "models/vehicles/spiderbot_cockpit.dpm", @@ -51,7 +51,7 @@ float autocvar_g_vehicle_bumblebee_cannon_ammo; float autocvar_g_vehicle_bumblebee_cannon_ammo_regen; float autocvar_g_vehicle_bumblebee_cannon_ammo_regen_pause; -var float autocvar_g_vehicle_bumblebee_cannon_lock = 0; +float autocvar_g_vehicle_bumblebee_cannon_lock = 0; float autocvar_g_vehicle_bumblebee_cannon_turnspeed; float autocvar_g_vehicle_bumblebee_cannon_pitchlimit_down; @@ -84,12 +84,11 @@ float autocvar_g_vehicle_bumblebee_blowup_radius; float autocvar_g_vehicle_bumblebee_blowup_coredamage; float autocvar_g_vehicle_bumblebee_blowup_edgedamage; float autocvar_g_vehicle_bumblebee_blowup_forceintensity; -var vector autocvar_g_vehicle_bumblebee_bouncepain; +vector autocvar_g_vehicle_bumblebee_bouncepain; -var float autocvar_g_vehicle_bumblebee = 0; +bool autocvar_g_vehicle_bumblebee = 0; - -float bumble_raygun_send(entity to, float sf); +float bumble_raygun_send(entity to, int sf); void bumblebee_fire_cannon(entity _gun, string _tagname, entity _owner) { @@ -97,7 +96,7 @@ void bumblebee_fire_cannon(entity _gun, string _tagname, entity _owner) vehicles_projectile("bigplasma_muzzleflash", "weapons/flacexp3.wav", v, normalize(v_forward + randomvec() * autocvar_g_vehicle_bumblebee_cannon_spread) * autocvar_g_vehicle_bumblebee_cannon_speed, autocvar_g_vehicle_bumblebee_cannon_damage, autocvar_g_vehicle_bumblebee_cannon_radius, autocvar_g_vehicle_bumblebee_cannon_force, 0, - DEATH_VH_BUMB_GUN, PROJECTILE_BUMBLE_GUN, 0, TRUE, TRUE, _owner); + DEATH_VH_BUMB_GUN, PROJECTILE_BUMBLE_GUN, 0, true, true, _owner); } float bumblebee_gunner_frame() @@ -106,16 +105,16 @@ float bumblebee_gunner_frame() entity gun = self.vehicle; entity gunner = self; self = vehic; - + vehic.solid = SOLID_NOT; //setorigin(gunner, vehic.origin); gunner.velocity = vehic.velocity; - + float _in, _out; vehic.angles_x *= -1; makevectors(vehic.angles); vehic.angles_x *= -1; - if((gun == vehic.gun1)) + if(gun == vehic.gun1) { _in = autocvar_g_vehicle_bumblebee_cannon_turnlimit_in; _out = autocvar_g_vehicle_bumblebee_cannon_turnlimit_out; @@ -125,9 +124,9 @@ float bumblebee_gunner_frame() { _in = autocvar_g_vehicle_bumblebee_cannon_turnlimit_out; _out = autocvar_g_vehicle_bumblebee_cannon_turnlimit_in; - setorigin(gunner, vehic.origin + v_up * -16 + v_forward * -16 + v_right * -128); + setorigin(gunner, vehic.origin + v_up * -16 + v_forward * -16 + v_right * -128); } - + crosshair_trace(gunner); vector _ct = trace_endpos; vector ad; @@ -142,15 +141,7 @@ float bumblebee_gunner_frame() if(trace_ent.takedamage) if(!trace_ent.deadflag) { - if(teamplay) - { - if(trace_ent.team != gunner.team) - { - gun.enemy = trace_ent; - gun.lock_time = time + 5; - } - } - else + if(DIFF_TEAM(trace_ent, gunner)) { gun.enemy = trace_ent; gun.lock_time = time + 5; @@ -160,21 +151,18 @@ float bumblebee_gunner_frame() if(gun.enemy) { - float i, distance, impact_time; + float distance, impact_time; vector vf = real_origin(gun.enemy); vector _vel = gun.enemy.velocity; if(gun.enemy.movetype == MOVETYPE_WALK) - _vel_z *= 0.1; + _vel.z *= 0.1; ad = vf; - for(i = 0; i < 4; ++i) - { - distance = vlen(ad - gunner.origin); - impact_time = distance / autocvar_g_vehicle_bumblebee_cannon_speed; - ad = vf + _vel * impact_time; - } + distance = vlen(ad - gunner.origin); + impact_time = distance / autocvar_g_vehicle_bumblebee_cannon_speed; + ad = vf + _vel * impact_time; trace_endpos = ad; @@ -189,6 +177,7 @@ float bumblebee_gunner_frame() autocvar_g_vehicle_bumblebee_cannon_pitchlimit_down * -1, autocvar_g_vehicle_bumblebee_cannon_pitchlimit_up, _out * -1, _in, autocvar_g_vehicle_bumblebee_cannon_turnspeed); + if(!forbidWeaponUse(gunner)) if(gunner.BUTTON_ATCK) if(time > gun.attack_finished_single) if(gun.vehicle_energy >= autocvar_g_vehicle_bumblebee_cannon_cost) @@ -220,154 +209,173 @@ float bumblebee_gunner_frame() return 1; } -void bumblebee_gunner_exit(float _exitflag) +vector bumblebee_gunner_findgoodexit(vector prefer_spot, entity gunner, entity player) { - if(IS_REAL_CLIENT(self)) + //vector exitspot; + float mysize; + + tracebox(gunner.origin + '0 0 32', PL_MIN, PL_MAX, 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 + float i; + vector v, v2; + v2 = 0.5 * (gunner.absmin + gunner.absmax); + for(i = 0; i < 100; ++i) { - msg_entity = self; + v = randomvec(); + v_z = 0; + v = v2 + normalize(v) * mysize; + tracebox(v2, PL_MIN, PL_MAX, v, MOVE_NORMAL, player); + if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid) + return v; + } + + return prefer_spot; // this should be considered a fallback?! +} + +void bumblebee_gunner_exit(int _exitflag) +{ + entity player = self; + entity gunner = player.vehicle; + entity vehic = gunner.owner; + + if(IS_REAL_CLIENT(player)) + { + msg_entity = player; WriteByte(MSG_ONE, SVC_SETVIEWPORT); - WriteEntity(MSG_ONE, self); + WriteEntity(MSG_ONE, player); WriteByte(MSG_ONE, SVC_SETVIEWANGLES); WriteAngle(MSG_ONE, 0); - WriteAngle(MSG_ONE, self.vehicle.angles_y); + WriteAngle(MSG_ONE, vehic.angles.y); WriteAngle(MSG_ONE, 0); } - - CSQCVehicleSetup(self, HUD_NORMAL); - setsize(self, PL_MIN, PL_MAX); - - self.takedamage = DAMAGE_AIM; - self.solid = SOLID_SLIDEBOX; - self.movetype = MOVETYPE_WALK; - self.effects &= ~EF_NODRAW; - self.alpha = 1; - self.PlayerPhysplug = func_null; - self.view_ofs = PL_VIEW_OFS; - self.event_damage = PlayerDamage; - self.hud = HUD_NORMAL; - self.switchweapon = self.vehicle.switchweapon; - - vh_player = self; - vh_vehicle = self.vehicle; - MUTATOR_CALLHOOK(VehicleExit); - self = vh_player; - self.vehicle = vh_vehicle; - - self.vehicle.vehicle_hudmodel.viewmodelforclient = self.vehicle; - - fixedmakevectors(self.vehicle.owner.angles); - - if(self == self.vehicle.owner.gunner1) - { - self.vehicle.owner.gunner1 = world; - } - else if(self == self.vehicle.owner.gunner2) - { - self.vehicle.owner.gunner2 = world; - v_right *= -1; - } - else - dprint("^1self != gunner1 or gunner2, this is a BIG PROBLEM, tell tZork this happend.\n"); - - vector spot = self.vehicle.owner.origin + + v_up * 128 + v_right * 300; - spot = vehicles_findgoodexit(spot); - //setorigin(self , spot); - self.velocity = 0.75 * self.vehicle.owner.velocity + normalize(spot - self.vehicle.owner.origin) * 200; - self.velocity_z += 10; + CSQCVehicleSetup(player, HUD_NORMAL); + setsize(player, PL_MIN, PL_MAX); + + player.takedamage = DAMAGE_AIM; + player.solid = SOLID_SLIDEBOX; + player.movetype = MOVETYPE_WALK; + player.effects &= ~EF_NODRAW; + player.alpha = 1; + player.PlayerPhysplug = func_null; + player.view_ofs = PL_VIEW_OFS; + player.event_damage = PlayerDamage; + player.hud = HUD_NORMAL; + player.teleportable = TELEPORT_NORMAL; + player.switchweapon = gunner.switchweapon; + player.vehicle_enter_delay = time + 2; + + fixedmakevectors(vehic.angles); + + if(player == vehic.gunner1) { vehic.gunner1 = world; } + if(player == vehic.gunner2) { vehic.gunner2 = world; v_right *= -1; } + + vector spot = real_origin(gunner); + spot = spot + v_up * 128 + v_forward * 300 + v_right * 150; + spot = bumblebee_gunner_findgoodexit(spot, gunner, player); + + // TODO: figure a way to move player out of the gunner + + player.velocity = 0.75 * vehic.velocity + normalize(spot - vehic.origin) * 200; + player.velocity_z += 10; + + gunner.phase = time + 5; + gunner.vehicle_hudmodel.viewmodelforclient = gunner; + + MUTATOR_CALLHOOK(VehicleExit, player, gunner); - self.vehicle.phase = time + 5; - self.vehicle = world; + player.vehicle = world; } -float bumblebee_gunner_enter() +bool bumblebee_gunner_enter() { - RemoveGrapplingHook(other); - entity _gun, _gunner; - if(!self.gunner1) - { - _gun = self.gun1; - _gunner = self.gunner1; - self.gunner1 = other; - } - else if(!self.gunner2) + entity vehic = self; + entity player = other; + entity gunner = world; + + if(!vehic.gunner1 && !vehic.gunner2 && ((time >= vehic.gun1.phase) + (time >= vehic.gun2.phase)) == 2) { - _gun = self.gun2; - _gunner = self.gunner2; - self.gunner2 = other; + // we can have some fun + if(vlen(real_origin(vehic.gun2) - player.origin) < vlen(real_origin(vehic.gun1) - player.origin)) + { + gunner = vehic.gun2; + vehic.gunner2 = player; + } + else + { + gunner = vehic.gun1; + vehic.gunner1 = player; + } } - else + else if(!vehic.gunner1 && time >= vehic.gun1.phase) { gunner = vehic.gun1; vehic.gunner1 = player; } + else if(!vehic.gunner2 && time >= vehic.gun2.phase) { gunner = vehic.gun2; vehic.gunner2 = player; } + else { dprint("Vehicle is full, fail\n"); return false; } + + player.vehicle = gunner; + player.angles = vehic.angles; + player.takedamage = DAMAGE_NO; + player.solid = SOLID_NOT; + player.alpha = -1; + player.movetype = MOVETYPE_NOCLIP; + player.event_damage = func_null; + player.view_ofs = '0 0 0'; + player.hud = gunner.hud; + player.teleportable = false; + player.PlayerPhysplug = gunner.PlayerPhysplug; + player.vehicle_ammo1 = vehic.vehicle_ammo1; + player.vehicle_ammo2 = vehic.vehicle_ammo2; + player.vehicle_reload1 = vehic.vehicle_reload1; + player.vehicle_reload2 = vehic.vehicle_reload2; + player.vehicle_energy = vehic.vehicle_energy; + player.flags &= ~FL_ONGROUND; + + RemoveGrapplingHook(player); + + gunner.switchweapon = player.switchweapon; + gunner.vehicle_exit = bumblebee_gunner_exit; + gunner.vehicle_hudmodel.viewmodelforclient = player; + + if(IS_REAL_CLIENT(player)) { - dprint("^1ERROR:^7Tried to enter a fully occupied vehicle!\n"); - return FALSE; + msg_entity = player; + WriteByte(MSG_ONE, SVC_SETVIEWPORT); + WriteEntity(MSG_ONE, gunner.vehicle_viewport); + + WriteByte(MSG_ONE, SVC_SETVIEWANGLES); + WriteAngle(MSG_ONE, gunner.angles_x + vehic.angles_x); // tilt + WriteAngle(MSG_ONE, gunner.angles_y + vehic.angles_y); // yaw + WriteAngle(MSG_ONE, 0); // roll } - _gunner = other; - _gunner.vehicle = _gun; - _gun.switchweapon = other.switchweapon; - _gun.vehicle_exit = bumblebee_gunner_exit; - - other.angles = self.angles; - other.takedamage = DAMAGE_NO; - other.solid = SOLID_NOT; - other.movetype = MOVETYPE_NOCLIP; - other.alpha = -1; - other.event_damage = func_null; - other.view_ofs = '0 0 0'; - other.hud = _gun.hud; - other.PlayerPhysplug = _gun.PlayerPhysplug; - other.vehicle_ammo1 = self.vehicle_ammo1; - other.vehicle_ammo2 = self.vehicle_ammo2; - other.vehicle_reload1 = self.vehicle_reload1; - other.vehicle_reload2 = self.vehicle_reload2; - other.vehicle_energy = self.vehicle_energy; - other.PlayerPhysplug = bumblebee_gunner_frame; - other.flags &= ~FL_ONGROUND; - - msg_entity = other; - WriteByte(MSG_ONE, SVC_SETVIEWPORT); - WriteEntity(MSG_ONE, _gun.vehicle_viewport); - WriteByte(MSG_ONE, SVC_SETVIEWANGLES); - WriteAngle(MSG_ONE, _gun.angles_x + self.angles_x); // tilt - WriteAngle(MSG_ONE, _gun.angles_y + self.angles_y); // yaw - WriteAngle(MSG_ONE, 0); // roll - _gun.vehicle_hudmodel.viewmodelforclient = other; - - CSQCVehicleSetup(other, other.hud); - - vh_player = other; - vh_vehicle = _gun; - MUTATOR_CALLHOOK(VehicleEnter); - other = vh_player; - _gun = vh_vehicle; + CSQCVehicleSetup(player, player.hud); - return TRUE; + MUTATOR_CALLHOOK(VehicleEnter, player, gunner); + + return true; } -float vehicles_valid_pilot() +bool vehicles_valid_pilot() { - if not(IS_PLAYER(other)) - return FALSE; - - if(other.deadflag != DEAD_NO) - return FALSE; - - if(other.vehicle != world) - return FALSE; + if(IS_BOT_CLIENT(other) && !autocvar_g_vehicles_allow_bots) + return false; - if not(IS_REAL_CLIENT(other)) - if(!autocvar_g_vehicles_allow_bots) - return FALSE; + if((!IS_PLAYER(other)) + || (other.deadflag != DEAD_NO) + || (other.vehicle) + || (DIFF_TEAM(other, self)) + ) { return false; } - if(teamplay && other.team != self.team) - return FALSE; - - return TRUE; + return true; } void bumblebee_touch() { + if(autocvar_g_vehicles_enter) { return; } + if(self.gunner1 != world && self.gunner2 != world) { vehicles_touch(); @@ -376,13 +384,11 @@ void bumblebee_touch() if(vehicles_valid_pilot()) { - if(self.gun1.phase <= time) - if(bumblebee_gunner_enter()) - return; + float phase_time = (time >= self.gun1.phase) + (time >= self.gun2.phase); - if(self.gun2.phase <= time) - if(bumblebee_gunner_enter()) - return; + if(time >= other.vehicle_enter_delay && phase_time) + if(bumblebee_gunner_enter()) + return; } vehicles_touch(); @@ -399,13 +405,13 @@ void bumblebee_regen() self.gun2.vehicle_energy + autocvar_g_vehicle_bumblebee_cannon_ammo_regen * frametime); if(self.vehicle_flags & VHF_SHIELDREGEN) - vehicles_regen(self.dmg_time, vehicle_shield, autocvar_g_vehicle_bumblebee_shield, autocvar_g_vehicle_bumblebee_shield_regen_pause, autocvar_g_vehicle_bumblebee_shield_regen, frametime, TRUE); + vehicles_regen(self.dmg_time, vehicle_shield, autocvar_g_vehicle_bumblebee_shield, autocvar_g_vehicle_bumblebee_shield_regen_pause, autocvar_g_vehicle_bumblebee_shield_regen, frametime, true); if(self.vehicle_flags & VHF_HEALTHREGEN) - vehicles_regen(self.dmg_time, vehicle_health, autocvar_g_vehicle_bumblebee_health, autocvar_g_vehicle_bumblebee_health_regen_pause, autocvar_g_vehicle_bumblebee_health_regen, frametime, FALSE); + vehicles_regen(self.dmg_time, vehicle_health, autocvar_g_vehicle_bumblebee_health, autocvar_g_vehicle_bumblebee_health_regen_pause, autocvar_g_vehicle_bumblebee_health_regen, frametime, false); if(self.vehicle_flags & VHF_ENERGYREGEN) - vehicles_regen(self.wait, vehicle_energy, autocvar_g_vehicle_bumblebee_energy, autocvar_g_vehicle_bumblebee_energy_regen_pause, autocvar_g_vehicle_bumblebee_energy_regen, frametime, FALSE); + vehicles_regen(self.wait, vehicle_energy, autocvar_g_vehicle_bumblebee_energy, autocvar_g_vehicle_bumblebee_energy_regen_pause, autocvar_g_vehicle_bumblebee_energy_regen, frametime, false); } @@ -413,12 +419,18 @@ float bumblebee_pilot_frame() { entity pilot, vehic; vector newvel; + + if(intermission_running) + { + self.vehicle.velocity = '0 0 0'; + self.vehicle.avelocity = '0 0 0'; + return 1; + } pilot = self; vehic = self.vehicle; self = vehic; - if(vehic.deadflag != DEAD_NO) { self = pilot; @@ -435,58 +447,58 @@ float bumblebee_pilot_frame() vang = vehic.angles; newvel = vectoangles(normalize(trace_endpos - self.origin + '0 0 32')); - vang_x *= -1; - newvel_x *= -1; - if(newvel_x > 180) newvel_x -= 360; - if(newvel_x < -180) newvel_x += 360; - if(newvel_y > 180) newvel_y -= 360; - if(newvel_y < -180) newvel_y += 360; - - ftmp = shortangle_f(pilot.v_angle_y - vang_y, vang_y); + vang.x *= -1; + newvel.x *= -1; + if(newvel.x > 180) newvel.x -= 360; + if(newvel.x < -180) newvel.x += 360; + if(newvel.y > 180) newvel.y -= 360; + if(newvel.y < -180) newvel.y += 360; + + ftmp = shortangle_f(pilot.v_angle.y - vang.y, vang.y); if(ftmp > 180) ftmp -= 360; if(ftmp < -180) ftmp += 360; - vehic.avelocity_y = bound(-autocvar_g_vehicle_bumblebee_turnspeed, ftmp + vehic.avelocity_y * 0.9, autocvar_g_vehicle_bumblebee_turnspeed); + vehic.avelocity_y = bound(-autocvar_g_vehicle_bumblebee_turnspeed, ftmp + vehic.avelocity.y * 0.9, autocvar_g_vehicle_bumblebee_turnspeed); // Pitch ftmp = 0; - if(pilot.movement_x > 0 && vang_x < autocvar_g_vehicle_bumblebee_pitchlimit) + if(pilot.movement.x > 0 && vang.x < autocvar_g_vehicle_bumblebee_pitchlimit) ftmp = 4; - else if(pilot.movement_x < 0 && vang_x > -autocvar_g_vehicle_bumblebee_pitchlimit) + else if(pilot.movement.x < 0 && vang.x > -autocvar_g_vehicle_bumblebee_pitchlimit) ftmp = -8; - newvel_x = bound(-autocvar_g_vehicle_bumblebee_pitchlimit, newvel_x , autocvar_g_vehicle_bumblebee_pitchlimit); - ftmp = vang_x - bound(-autocvar_g_vehicle_bumblebee_pitchlimit, newvel_x + ftmp, autocvar_g_vehicle_bumblebee_pitchlimit); - vehic.avelocity_x = bound(-autocvar_g_vehicle_bumblebee_pitchspeed, ftmp + vehic.avelocity_x * 0.9, autocvar_g_vehicle_bumblebee_pitchspeed); + newvel.x = bound(-autocvar_g_vehicle_bumblebee_pitchlimit, newvel.x , autocvar_g_vehicle_bumblebee_pitchlimit); + ftmp = vang.x - bound(-autocvar_g_vehicle_bumblebee_pitchlimit, newvel.x + ftmp, autocvar_g_vehicle_bumblebee_pitchlimit); + vehic.avelocity_x = bound(-autocvar_g_vehicle_bumblebee_pitchspeed, ftmp + vehic.avelocity.x * 0.9, autocvar_g_vehicle_bumblebee_pitchspeed); - vehic.angles_x = anglemods(vehic.angles_x); - vehic.angles_y = anglemods(vehic.angles_y); - vehic.angles_z = anglemods(vehic.angles_z); + vehic.angles_x = anglemods(vehic.angles.x); + vehic.angles_y = anglemods(vehic.angles.y); + vehic.angles_z = anglemods(vehic.angles.z); - makevectors('0 1 0' * vehic.angles_y); + makevectors('0 1 0' * vehic.angles.y); newvel = vehic.velocity * -autocvar_g_vehicle_bumblebee_friction; - if(pilot.movement_x != 0) + if(pilot.movement.x != 0) { - if(pilot.movement_x > 0) + if(pilot.movement.x > 0) newvel += v_forward * autocvar_g_vehicle_bumblebee_speed_forward; - else if(pilot.movement_x < 0) + else if(pilot.movement.x < 0) newvel -= v_forward * autocvar_g_vehicle_bumblebee_speed_forward; } - if(pilot.movement_y != 0) + if(pilot.movement.y != 0) { - if(pilot.movement_y < 0) + if(pilot.movement.y < 0) newvel -= v_right * autocvar_g_vehicle_bumblebee_speed_strafe; - else if(pilot.movement_y > 0) + else if(pilot.movement.y > 0) newvel += v_right * autocvar_g_vehicle_bumblebee_speed_strafe; ftmp = newvel * v_right; ftmp *= frametime * 0.1; - vehic.angles_z = bound(-15, vehic.angles_z + ftmp, 15); + vehic.angles_z = bound(-15, vehic.angles.z + ftmp, 15); } else { vehic.angles_z *= 0.95; - if(vehic.angles_z >= -1 && vehic.angles_z <= -1) + if(vehic.angles.z >= -1 && vehic.angles.z <= -1) vehic.angles_z = 0; } @@ -497,10 +509,10 @@ float bumblebee_pilot_frame() vehic.velocity += newvel * frametime; pilot.velocity = pilot.movement = vehic.velocity; - + if(autocvar_g_vehicle_bumblebee_healgun_locktime) - { + { if(vehic.tur_head.lock_time < time || vehic.tur_head.enemy.deadflag) vehic.tur_head.enemy = world; @@ -518,33 +530,34 @@ float bumblebee_pilot_frame() } } else - { + { vehic.tur_head.enemy = trace_ent; vehic.tur_head.lock_time = time + autocvar_g_vehicle_bumblebee_healgun_locktime; } } - + if(vehic.tur_head.enemy) { - trace_endpos = real_origin(vehic.tur_head.enemy); - UpdateAuxiliaryXhair(pilot, trace_endpos, '0 0.75 0', 0); + trace_endpos = real_origin(vehic.tur_head.enemy); + UpdateAuxiliaryXhair(pilot, trace_endpos, '0 0.75 0', 0); } } - + vang = vehicle_aimturret(vehic, trace_endpos, self.gun3, "fire", autocvar_g_vehicle_bumblebee_raygun_pitchlimit_down * -1, autocvar_g_vehicle_bumblebee_raygun_pitchlimit_up, autocvar_g_vehicle_bumblebee_raygun_turnlimit_sides * -1, autocvar_g_vehicle_bumblebee_raygun_turnlimit_sides, autocvar_g_vehicle_bumblebee_raygun_turnspeed); + if(!forbidWeaponUse(pilot)) if((pilot.BUTTON_ATCK || pilot.BUTTON_ATCK2) && (vehic.vehicle_energy > autocvar_g_vehicle_bumblebee_raygun_dps * sys_frametime || autocvar_g_vehicle_bumblebee_raygun == 0)) { vehic.gun3.enemy.realowner = pilot; vehic.gun3.enemy.effects &= ~EF_NODRAW; - + vehic.gun3.enemy.hook_start = gettaginfo(vehic.gun3, gettagindex(vehic.gun3, "fire")); vehic.gun3.enemy.SendFlags |= BRG_START; - + traceline(vehic.gun3.enemy.hook_start, vehic.gun3.enemy.hook_start + v_forward * autocvar_g_vehicle_bumblebee_raygun_range, MOVE_NORMAL, vehic); - + if(trace_ent) { if(autocvar_g_vehicle_bumblebee_raygun) @@ -560,11 +573,11 @@ float bumblebee_pilot_frame() if(trace_ent.vehicle_flags & VHF_ISVEHICLE) { - if(autocvar_g_vehicle_bumblebee_healgun_sps && trace_ent.vehicle_health <= trace_ent.tur_health) - trace_ent.vehicle_shield = min(trace_ent.vehicle_shield + autocvar_g_vehicle_bumblebee_healgun_sps * frametime, trace_ent.tur_head.tur_health); + if(autocvar_g_vehicle_bumblebee_healgun_sps && trace_ent.vehicle_health <= trace_ent.max_health) + trace_ent.vehicle_shield = min(trace_ent.vehicle_shield + autocvar_g_vehicle_bumblebee_healgun_sps * frametime, trace_ent.tur_head.max_health); if(autocvar_g_vehicle_bumblebee_healgun_hps) - trace_ent.vehicle_health = min(trace_ent.vehicle_health + autocvar_g_vehicle_bumblebee_healgun_hps * frametime, trace_ent.tur_health); + trace_ent.vehicle_health = min(trace_ent.vehicle_health + autocvar_g_vehicle_bumblebee_healgun_hps * frametime, trace_ent.max_health); } else if(IS_CLIENT(trace_ent)) { @@ -576,10 +589,10 @@ float bumblebee_pilot_frame() trace_ent.health = min(trace_ent.health + autocvar_g_vehicle_bumblebee_healgun_hps * frametime, autocvar_g_vehicle_bumblebee_healgun_hmax); } - else if(trace_ent.turrcaps_flags & TFL_TURRCAPS_ISTURRET) + else if(IS_TURRET(trace_ent)) { - if(trace_ent.health <= trace_ent.tur_health && autocvar_g_vehicle_bumblebee_healgun_hps) - trace_ent.health = min(trace_ent.health + autocvar_g_vehicle_bumblebee_healgun_hps * frametime, trace_ent.tur_health); + if(trace_ent.health <= trace_ent.max_health && autocvar_g_vehicle_bumblebee_healgun_hps) + trace_ent.health = min(trace_ent.health + autocvar_g_vehicle_bumblebee_healgun_hps * frametime, trace_ent.max_health); //else ..hmmm what? ammo? trace_ent.SendFlags |= TNSF_STATUS; @@ -587,11 +600,11 @@ float bumblebee_pilot_frame() } } } - + vehic.gun3.enemy.hook_end = trace_endpos; setorigin(vehic.gun3.enemy, trace_endpos); vehic.gun3.enemy.SendFlags |= BRG_END; - + vehic.wait = time + 1; } else @@ -603,7 +616,7 @@ float bumblebee_pilot_frame() vehic.gun3.enemy = world; } */ - + VEHICLE_UPDATE_PLAYER(pilot, health, bumblebee); VEHICLE_UPDATE_PLAYER(pilot, energy, bumblebee); @@ -612,7 +625,7 @@ float bumblebee_pilot_frame() if(vehic.vehicle_flags & VHF_HASSHIELD) VEHICLE_UPDATE_PLAYER(pilot, shield, bumblebee); - + vehic.angles_x *= -1; makevectors(vehic.angles); vehic.angles_x *= -1; @@ -624,51 +637,80 @@ float bumblebee_pilot_frame() return 1; } +void bumblebee_land() +{ + float hgt; + + hgt = raptor_altitude(512); + self.velocity = (self.velocity * 0.9) + ('0 0 -1800' * (hgt / 256) * sys_frametime); + self.angles_x *= 0.95; + self.angles_z *= 0.95; + + if(hgt < 16) + self.think = vehicles_think; + + self.nextthink = time; + + CSQCMODEL_AUTOUPDATE(); +} + void bumblebee_exit(float eject) { + if(self.owner.vehicleid == VEH_BUMBLEBEE) + { + bumblebee_gunner_exit(eject); + return; + } + self.touch = vehicles_touch; - self.think = vehicles_think; - self.nextthink = time; + + if(self.deadflag == DEAD_NO) + { + self.think = bumblebee_land; + self.nextthink = time; + } + self.movetype = MOVETYPE_TOSS; + if(!self.owner) return; - + fixedmakevectors(self.angles); vector spot; - if(vlen(self.velocity) > autocvar_g_vehicle_bumblebee_speed_forward * 0.5) - spot = self.origin + v_up * 128 + v_forward * 200; + if(vlen(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 * 200; - + spot = self.origin + v_up * 128 - v_forward * 300; + spot = vehicles_findgoodexit(spot); - + // Hide beam if(self.gun3.enemy || !wasfreed(self.gun3.enemy)) { self.gun3.enemy.effects |= EF_NODRAW; - } + } self.owner.velocity = 0.75 * self.vehicle.velocity + normalize(spot - self.vehicle.origin) * 200; self.owner.velocity_z += 10; setorigin(self.owner, spot); - + antilag_clear(self.owner); - self.owner = world; + self.owner = world; } void bumblebee_blowup() { RadiusDamage(self, self.enemy, autocvar_g_vehicle_bumblebee_blowup_coredamage, autocvar_g_vehicle_bumblebee_blowup_edgedamage, - autocvar_g_vehicle_bumblebee_blowup_radius, self, + autocvar_g_vehicle_bumblebee_blowup_radius, self, world, autocvar_g_vehicle_bumblebee_blowup_forceintensity, DEATH_VH_BUMB_DEATH, world); sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM); - pointparticles(particleeffectnum("explosion_large"), randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1); - + Send_Effect("explosion_big", (self.origin + '0 0 100') + (randomvec() * 80), '0 0 0', 1); + if(self.owner.deadflag == DEAD_DYING) self.owner.deadflag = DEAD_DEAD; - + remove(self); } @@ -680,7 +722,7 @@ void bumblebee_diethink() if(random() < 0.1) { sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM); - pointparticles(particleeffectnum("explosion_small"), randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1); + Send_Effect("explosion_small", randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1); } self.nextthink = time + 0.1; @@ -712,13 +754,13 @@ float bumble_raygun_send(entity to, float sf) WriteCoord(MSG_ENTITY, self.hook_end_z); } - return TRUE; + return true; } void spawnfunc_vehicle_bumblebee() { - if not(autocvar_g_vehicle_bumblebee) { remove(self); return; } - if not(vehicle_initialize(VEH_BUMBLEBEE, FALSE)) { remove(self); return; } + if(!autocvar_g_vehicle_bumblebee) { remove(self); return; } + if(!vehicle_initialize(VEH_BUMBLEBEE, false)) { remove(self); return; } } float v_bumblebee(float req) @@ -730,23 +772,21 @@ float v_bumblebee(float req) 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); - return TRUE; + return true; } case VR_ENTER: { self.touch = bumblebee_touch; self.nextthink = 0; self.movetype = MOVETYPE_BOUNCEMISSILE; - return TRUE; + return true; } case VR_THINK: { - self.movetype = MOVETYPE_TOSS; - self.angles_z *= 0.8; self.angles_x *= 0.8; - self.nextthink = time + 0.05; + self.nextthink = time; if(!self.owner) { @@ -761,7 +801,7 @@ float v_bumblebee(float req) self.phase = 0; self.touch(); other = oldother; - return TRUE; + return true; } if(self.gunner2) @@ -774,16 +814,18 @@ float v_bumblebee(float req) self.phase = 0; self.touch(); other = oldother; - return TRUE; + return true; } } - return TRUE; + return true; } case VR_DEATH: { entity oldself = self; - + + CSQCModel_UnlinkEntity(); + // Hide beam if(self.gun3.enemy || !wasfreed(self.gun3.enemy)) self.gun3.enemy.effects |= EF_NODRAW; @@ -821,12 +863,14 @@ float v_bumblebee(float req) _body.wait = time + 2 + (random() * 8); _body.owner = self; _body.enemy = self.enemy; - - pointparticles(particleeffectnum("explosion_medium"), findbetterlocation(self.origin, 16), '0 0 0', 1); + _body.scale = 1.5; + _body.angles = self.angles; + + Send_Effect("explosion_medium", findbetterlocation(self.origin, 16), '0 0 0', 1); self.health = 0; self.event_damage = func_null; - self.solid = SOLID_CORPSE; + self.solid = SOLID_NOT; self.takedamage = DAMAGE_NO; self.deadflag = DEAD_DYING; self.movetype = MOVETYPE_NONE; @@ -838,11 +882,11 @@ float v_bumblebee(float req) self.nextthink = 0; setorigin(self, self.pos1); - return TRUE; + return true; } case VR_SPAWN: { - if not(self.gun1) + if(!self.gun1) { // for some reason, autosizing of the shield entity refuses to work for this one so set it up in advance. self.vehicle_shieldent = spawn(); @@ -865,6 +909,8 @@ float v_bumblebee(float req) self.gun2.owner = self; self.gun3.owner = self; + self.gun1.classname = self.gun2.classname = "vehicle_playerslot"; + setmodel(self.gun1, "models/vehicles/bumblebee_plasma_right.dpm"); setmodel(self.gun2, "models/vehicles/bumblebee_plasma_left.dpm"); setmodel(self.gun3, "models/vehicles/bumblebee_ray.dpm"); @@ -881,8 +927,8 @@ float v_bumblebee(float req) setorigin(self.gun3, ofs); self.angles = self.gun3.pos1; - vehicle_addplayerslot(self, self.gun1, HUD_BUMBLEBEE_GUN, "models/vehicles/wakizashi_cockpit.dpm", bumblebee_gunner_frame, bumblebee_gunner_exit); - vehicle_addplayerslot(self, self.gun2, HUD_BUMBLEBEE_GUN, "models/vehicles/wakizashi_cockpit.dpm", bumblebee_gunner_frame, bumblebee_gunner_exit); + vehicle_addplayerslot(self, self.gun1, HUD_BUMBLEBEE_GUN, "models/vehicles/wakizashi_cockpit.dpm", bumblebee_gunner_frame, bumblebee_gunner_exit, bumblebee_gunner_enter); + vehicle_addplayerslot(self, self.gun2, HUD_BUMBLEBEE_GUN, "models/vehicles/wakizashi_cockpit.dpm", bumblebee_gunner_frame, bumblebee_gunner_exit, bumblebee_gunner_enter); setorigin(self.vehicle_hudmodel, '50 0 -5'); // Move cockpit forward - down. setorigin(self.vehicle_viewport, '5 0 2'); // Move camera forward up @@ -900,7 +946,7 @@ float v_bumblebee(float req) if(self.gun3.enemy == world) { self.gun3.enemy = spawn(); - Net_LinkEntity(self.gun3.enemy, TRUE, 0, bumble_raygun_send); + Net_LinkEntity(self.gun3.enemy, true, 0, bumble_raygun_send); self.gun3.enemy.SendFlags = BRG_SETUP; self.gun3.enemy.cnt = autocvar_g_vehicle_bumblebee_raygun; self.gun3.enemy.effects = EF_NODRAW | EF_LOWPRECISION; @@ -916,7 +962,7 @@ float v_bumblebee(float req) self.PlayerPhysplug = bumblebee_pilot_frame; setorigin(self, self.origin + '0 0 25'); - return TRUE; + return true; } case VR_SETUP: { @@ -939,7 +985,7 @@ float v_bumblebee(float req) self.max_health = self.vehicle_health; self.vehicle_shield = autocvar_g_vehicle_bumblebee_shield; - return TRUE; + return true; } case VR_PRECACHE: { @@ -950,16 +996,24 @@ float v_bumblebee(float req) precache_model("models/vehicles/wakizashi_cockpit.dpm"); precache_model("models/vehicles/spiderbot_cockpit.dpm"); precache_model("models/vehicles/raptor_cockpit.dpm"); - return TRUE; + return true; } } - return TRUE; + return true; } #endif // SVQC #ifdef CSQC +void CSQC_BUMBLE_GUN_HUD() +{ + Vehicles_drawHUD("vehicle_gunner", "vehicle_gunner_weapon1", string_null, + "vehicle_icon_ammo1", autocvar_hud_progressbar_vehicles_ammo1_color, + string_null, '0 0 0', + string_null); +} + void bumble_raygun_draw() { float _len; @@ -968,7 +1022,7 @@ void bumble_raygun_draw() _len = vlen(self.origin - self.move_origin); _dir = normalize(self.move_origin - self.origin); - + if(self.total_damages < time) { boxparticles(self.traileffect, self, self.origin, self.origin + _dir * -64, _dir * -_len , _dir * -_len, 1, PARTICLES_USEALPHA); @@ -998,28 +1052,28 @@ void bumble_raygun_draw() } } -void bumble_raygun_read(float bIsNew) +void bumble_raygun_read(bool bIsNew) { - float sf = ReadByte(); + int sf = ReadByte(); if(sf & BRG_SETUP) { self.cnt = ReadByte(); self.team = ReadByte(); self.cnt = ReadByte(); - + if(self.cnt) self.colormod = '1 0 0'; else self.colormod = '0 1 0'; self.traileffect = particleeffectnum("healray_muzzleflash"); - self.lip = particleeffectnum("healray_impact"); + self.lip = particleeffectnum("healray_impact"); self.draw = bumble_raygun_draw; } - - + + if(sf & BRG_START) { self.origin_x = ReadCoord(); @@ -1042,182 +1096,26 @@ float v_bumblebee(float req) { case VR_HUD: { - if(autocvar_r_letterbox) - return TRUE; - - vector picsize, hudloc = '0 0 0', pic2size, picloc; - - // Fetch health & ammo stats - HUD_GETVEHICLESTATS - - picsize = draw_getimagesize(hud_bg) * autocvar_cl_vehicles_hudscale; - hudloc_y = vid_conheight - picsize_y; - hudloc_x = vid_conwidth * 0.5 - picsize_x * 0.5; - - drawpic(hudloc, hud_bg, picsize, '1 1 1', autocvar_cl_vehicles_hudalpha, DRAWFLAG_NORMAL); - - shield *= 0.01; - vh_health *= 0.01; - energy *= 0.01; - reload1 *= 0.01; - - pic2size = draw_getimagesize(bumb_ico) * (autocvar_cl_vehicles_hudscale * 0.8); - picloc = picsize * 0.5 - pic2size * 0.5; - - if(vh_health < 0.25) - drawpic(hudloc + picloc, bumb_ico, pic2size, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL); - else - drawpic(hudloc + picloc, bumb_ico, pic2size, '1 1 1' * vh_health + '1 0 0' * (1 - vh_health), 1, DRAWFLAG_NORMAL); - - drawpic(hudloc + picloc, bumb_lgun, pic2size, '1 1 1' * energy + '1 0 0' * (1 - energy), 1, DRAWFLAG_NORMAL); - drawpic(hudloc + picloc, bumb_lgun, pic2size, '1 1 1' * energy + '1 0 0' * (1 - energy), 1, DRAWFLAG_NORMAL); - drawpic(hudloc + picloc, hud_sh, pic2size, '1 1 1', shield, DRAWFLAG_NORMAL); - - // Health bar - picsize = draw_getimagesize(hud_hp_bar) * autocvar_cl_vehicles_hudscale; - picloc = '69 69 0' * autocvar_cl_vehicles_hudscale; - drawsetcliparea(hudloc_x + picloc_x + (picsize_x * (1 - vh_health)), 0, vid_conwidth, vid_conheight); - drawpic(hudloc + picloc, hud_hp_bar, picsize, '1 1 1', 1 , DRAWFLAG_NORMAL); - drawresetcliparea(); - // .. and icon - picsize = draw_getimagesize(hud_hp_ico) * autocvar_cl_vehicles_hudscale; - picloc = '37 65 0' * autocvar_cl_vehicles_hudscale; - if(vh_health < 0.25) - { - if(alarm1time < time) - { - alarm1time = time + 2; - vehicle_alarm(self, CH_PAIN_SINGLE, "vehicles/alarm.wav"); - } - - drawpic(hudloc + picloc, hud_hp_ico, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL); - } - else - { - drawpic(hudloc + picloc, hud_hp_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL); - if(alarm1time) - { - vehicle_alarm(self, CH_PAIN_SINGLE, "misc/null.wav"); - alarm1time = 0; - } - } - - // Shield bar - picsize = draw_getimagesize(hud_sh_bar) * autocvar_cl_vehicles_hudscale; - picloc = '69 140 0' * autocvar_cl_vehicles_hudscale; - drawsetcliparea(hudloc_x + picloc_x + (picsize_x * (1 - shield)), 0, vid_conwidth, vid_conheight); - drawpic(hudloc + picloc, hud_sh_bar, picsize, '1 1 1', 1, DRAWFLAG_NORMAL); - drawresetcliparea(); - // .. and icon - picloc = '40 136 0' * autocvar_cl_vehicles_hudscale; - picsize = draw_getimagesize(hud_sh_ico) * autocvar_cl_vehicles_hudscale; - if(shield < 0.25) - { - if(alarm2time < time) - { - alarm2time = time + 1; - vehicle_alarm(self, CH_TRIGGER_SINGLE, "vehicles/alarm_shield.wav"); - } - drawpic(hudloc + picloc, hud_sh_ico, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL); - } - else - { - drawpic(hudloc + picloc, hud_sh_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL); - if(alarm2time) - { - vehicle_alarm(self, CH_TRIGGER_SINGLE, "misc/null.wav"); - alarm2time = 0; - } - } - - ammo1 *= 0.01; - ammo2 *= 0.01; - - // Gunner1 bar - picsize = draw_getimagesize(hud_ammo1_bar) * autocvar_cl_vehicles_hudscale; - picloc = '450 69 0' * autocvar_cl_vehicles_hudscale; - drawsetcliparea(hudloc_x + picloc_x, picloc_y, picsize_x * ammo1, vid_conheight); - drawpic(hudloc + picloc, hud_ammo1_bar, picsize, '1 1 1', 1, DRAWFLAG_NORMAL); - drawresetcliparea(); - - // Right gunner slot occupied? - if(!AuxiliaryXhair[1].draw2d) - { - shield = (picsize_x * 0.5) - (0.5 * stringwidth(_("No right gunner!"), FALSE, '1 0 0' * picsize_y + '0 1 0' * picsize_y)); - drawfill(hudloc + picloc - '0.2 0.2 0', picsize + '0.4 0.4 0', '0.25 0.25 0.25', 0.75, DRAWFLAG_NORMAL); - drawstring(hudloc + picloc + '1 0 0' * shield, _("No right gunner!"), '1 0 0' * picsize_y + '0 1 0' * picsize_y, '1 0 0' + '0 1 1' * sin(time * 10), 1, DRAWFLAG_NORMAL); - } - - // .. and icon - picsize = 1.5 * draw_getimagesize(hud_energy) * autocvar_cl_vehicles_hudscale; - picloc = '664 60 0' * autocvar_cl_vehicles_hudscale; - if(ammo1 < 0.2) - drawpic(hudloc + picloc, hud_energy, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL); - else - drawpic(hudloc + picloc, hud_energy, picsize, '1 1 1', 1, DRAWFLAG_NORMAL); - - // Gunner2 bar - picsize = draw_getimagesize(hud_ammo2_bar) * autocvar_cl_vehicles_hudscale; - picloc = '450 140 0' * autocvar_cl_vehicles_hudscale; - drawsetcliparea(hudloc_x + picloc_x, picloc_y, picsize_x * ammo2, vid_conheight); - drawpic(hudloc + picloc, hud_ammo2_bar, picsize, '1 1 1', 1, DRAWFLAG_NORMAL); - drawresetcliparea(); - // Left gunner slot occupied? - if(!AuxiliaryXhair[2].draw2d) - { - shield = (picsize_x * 0.5) - (0.5 * stringwidth(_("No left gunner!"), FALSE, '1 0 0' * picsize_y + '0 1 0' * picsize_y)); - drawfill(hudloc + picloc - '0.2 0.2 0', picsize + '0.4 0.4 0', '0.25 0.25 0.25', 0.75, DRAWFLAG_NORMAL); - drawstring(hudloc + picloc + '1 0 0' * shield, _("No left gunner!"), '1 0 0' * picsize_y + '0 1 0' * picsize_y, '1 0 0' + '0 1 1' * sin(time * 10), 1, DRAWFLAG_NORMAL); - } - - // .. and icon - picsize = 1.5 * draw_getimagesize(hud_energy) * autocvar_cl_vehicles_hudscale; - picloc = '664 130 0' * autocvar_cl_vehicles_hudscale; - if(ammo2 < 0.2) - drawpic(hudloc + picloc, hud_energy, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL); - else - drawpic(hudloc + picloc, hud_energy, picsize, '1 1 1', 1, DRAWFLAG_NORMAL); - - if (scoreboard_showscores) - HUD_DrawScoreboard(); - else - { - picsize = draw_getimagesize(waki_xhair); - picsize_x *= 0.5; - picsize_y *= 0.5; - drawpic('0.5 0 0' * (vid_conwidth - picsize_x) + '0 0.5 0' * (vid_conheight - picsize_y), waki_xhair, picsize, '1 1 1', 1, DRAWFLAG_NORMAL); - } - return TRUE; + Vehicles_drawHUD("vehicle_bumble", "vehicle_bumble_weapon1", "vehicle_bumble_weapon2", + "vehicle_icon_ammo1", autocvar_hud_progressbar_vehicles_ammo1_color, + "vehicle_icon_ammo1", autocvar_hud_progressbar_vehicles_ammo1_color, + vCROSS_HEAL); + return true; } case VR_SETUP: { - // Raygun-locked - AuxiliaryXhair[0].axh_image = "gfx/vehicles/axh-bracket.tga"; - AuxiliaryXhair[0].axh_scale = 0.5; - - // Gunner1 - AuxiliaryXhair[1].axh_image = "gfx/vehicles/axh-target.tga"; - AuxiliaryXhair[1].axh_scale = 0.75; - - // Gunner2 - AuxiliaryXhair[2].axh_image = "gfx/vehicles/axh-target.tga"; - AuxiliaryXhair[2].axh_scale = 0.75; - return TRUE; + AuxiliaryXhair[0].axh_image = vCROSS_LOCK; // Raygun-locked + AuxiliaryXhair[1].axh_image = vCROSS_BURST; // Gunner1 + AuxiliaryXhair[2].axh_image = vCROSS_BURST; // Gunner2 + return true; } case VR_PRECACHE: { - precache_model("models/vehicles/bumblebee_body.dpm"); - precache_model("models/vehicles/bumblebee_plasma_left.dpm"); - precache_model("models/vehicles/bumblebee_plasma_right.dpm"); - precache_model("models/vehicles/bumblebee_ray.dpm"); - precache_model("models/vehicles/wakizashi_cockpit.dpm"); - precache_model("models/vehicles/spiderbot_cockpit.dpm"); - precache_model("models/vehicles/raptor_cockpit.dpm"); - return TRUE; + return true; } } - return TRUE; + return true; } #endif // CSQC