3 float autocvar_g_vehicle_bumblebee_speed_forward;
4 float autocvar_g_vehicle_bumblebee_speed_strafe;
5 float autocvar_g_vehicle_bumblebee_speed_up;
6 float autocvar_g_vehicle_bumblebee_speed_down;
7 float autocvar_g_vehicle_bumblebee_turnspeed;
8 float autocvar_g_vehicle_bumblebee_pitchspeed;
9 float autocvar_g_vehicle_bumblebee_pitchlimit;
10 float autocvar_g_vehicle_bumblebee_friction;
12 float autocvar_g_vehicle_bumblebee_energy;
13 float autocvar_g_vehicle_bumblebee_energy_regen;
14 float autocvar_g_vehicle_bumblebee_energy_regen_pause;
16 float autocvar_g_vehicle_bumblebee_health;
17 float autocvar_g_vehicle_bumblebee_health_regen;
18 float autocvar_g_vehicle_bumblebee_health_regen_pause;
20 float autocvar_g_vehicle_bumblebee_shield;
21 float autocvar_g_vehicle_bumblebee_shield_regen;
22 float autocvar_g_vehicle_bumblebee_shield_regen_pause;
24 float autocvar_g_vehicle_bumblebee_cannon_cost;
25 float autocvar_g_vehicle_bumblebee_cannon_damage;
26 float autocvar_g_vehicle_bumblebee_cannon_radius;
27 float autocvar_g_vehicle_bumblebee_cannon_refire;
28 float autocvar_g_vehicle_bumblebee_cannon_speed;
29 float autocvar_g_vehicle_bumblebee_cannon_spread;
30 float autocvar_g_vehicle_bumblebee_cannon_force;
32 float autocvar_g_vehicle_bumblebee_cannon_turnspeed;
33 float autocvar_g_vehicle_bumblebee_cannon_pitchlimit_down;
34 float autocvar_g_vehicle_bumblebee_cannon_pitchlimit_up;
35 float autocvar_g_vehicle_bumblebee_cannon_turnlimit_in;
36 float autocvar_g_vehicle_bumblebee_cannon_turnlimit_out;
38 float autocvar_g_vehicle_bumblebee_respawntime;
40 float autocvar_g_vehicle_bumblebee_blowup_radius;
41 float autocvar_g_vehicle_bumblebee_blowup_coredamage;
42 float autocvar_g_vehicle_bumblebee_blowup_edgedamage;
43 float autocvar_g_vehicle_bumblebee_blowup_forceintensity;
45 #define BUMB_MIN '-120 -120 -40'
46 #define BUMB_MAX '120 120 40'
51 float bumb_gunner_frame()
53 entity vehic, gun, gunner;
58 gun = self.vehicle.gun1;
62 vehic.solid = SOLID_NOT;
63 crosshair_trace(gunner);
65 //vtmp = gettaginfo(vehic, gettagindexvehic, "tag_hardpoint01"));
66 vtmp = gettaginfo(gun, gettagindex(gun, "muzzle"));
67 vtmp = vectoangles(normalize(trace_endpos - vtmp)); // Find the direction & angle
68 vtmp = shortangle_vxy(vtmp - (vehic.angles + gun.angles), vehic.angles + gun.angles); // Find aim offset
71 ftmp2 = autocvar_g_vehicle_bumblebee_cannon_turnspeed * frametime; ftmp = -ftmp2;
72 vtmp_x = bound(ftmp, vtmp_x, ftmp2);
73 vtmp_y = bound(ftmp, vtmp_y, ftmp2);
75 gun.angles_x = bound(-autocvar_g_vehicle_bumblebee_cannon_pitchlimit_down, vtmp_x + gun.angles_x, autocvar_g_vehicle_bumblebee_cannon_pitchlimit_up);
76 gun.angles_y = bound(-autocvar_g_vehicle_bumblebee_cannon_turnlimit_in, vtmp_y + gun.angles_y, autocvar_g_vehicle_bumblebee_cannon_turnlimit_out);
78 if(gunner.BUTTON_ATCK && gun.cnt <= time)
80 vtmp = gettaginfo(gun, gettagindex(gun, "muzzle"));
81 v_forward = normalize(v_forward);
82 vtmp += v_forward * 50;
84 fireBullet (vtmp, v_forward, autocvar_g_vehicle_spiderbot_minigun_spread, autocvar_g_vehicle_spiderbot_minigun_damage,
85 autocvar_g_vehicle_spiderbot_minigun_spread, DEATH_SBMINIGUN, 0);
90 setorigin(gunner, vehic.origin);
91 gunner.velocity = vehic.velocity;
93 vehic.solid = SOLID_BBOX;
94 gunner.BUTTON_ATCK = gunner.BUTTON_ATCK2 = gunner.BUTTON_CROUCH = 0;
99 void bumb_gunner_enter()
101 if(self.gunner1 != world)
104 self.gunner1 = other;
105 self.gunner1.vehicle = self;
108 WriteByte (MSG_ONE, SVC_SETVIEWPORT);
109 WriteEntity(MSG_ONE, self.gun1);
110 WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
113 WriteAngle(MSG_ONE, self.gun1.angles_x + self.angles_x); // tilt
114 WriteAngle(MSG_ONE, self.gun1.angles_y + self.angles_y); // yaw
115 WriteAngle(MSG_ONE, 0); // roll
117 other.PlayerPhysplug = bumb_gunner_frame;
120 float bumb_pilot_frame()
122 entity pilot, gunner, vehic;
126 vehic = self.vehicle;
129 if(pilot.BUTTON_USE && vehic.deadflag == DEAD_NO)
132 vehicles_exit(VHEF_NORMAL);
137 if(vehic.deadflag != DEAD_NO)
140 pilot.BUTTON_ATCK = pilot.BUTTON_ATCK2 = 0;
144 crosshair_trace(pilot);
150 newvel = vectoangles(normalize(trace_endpos - self.origin + '0 0 32'));
153 if(newvel_x > 180) newvel_x -= 360;
154 if(newvel_x < -180) newvel_x += 360;
155 if(newvel_y > 180) newvel_y -= 360;
156 if(newvel_y < -180) newvel_y += 360;
158 ftmp = shortangle_f(pilot.v_angle_y - vang_y, vang_y);
159 if(ftmp > 180) ftmp -= 360; if(ftmp < -180) ftmp += 360;
160 vehic.avelocity_y = bound(-autocvar_g_vehicle_bumblebee_turnspeed, ftmp + vehic.avelocity_y * 0.9, autocvar_g_vehicle_bumblebee_turnspeed);
164 if(pilot.movement_x > 0 && vang_x < autocvar_g_vehicle_bumblebee_pitchlimit) ftmp = 5;
165 else if(pilot.movement_x < 0 && vang_x > -autocvar_g_vehicle_bumblebee_pitchlimit) ftmp = -20;
167 newvel_x = bound(-autocvar_g_vehicle_bumblebee_pitchlimit, newvel_x , autocvar_g_vehicle_bumblebee_pitchlimit);
168 ftmp = vang_x - bound(-autocvar_g_vehicle_bumblebee_pitchlimit, newvel_x + ftmp, autocvar_g_vehicle_bumblebee_pitchlimit);
169 vehic.avelocity_x = bound(-autocvar_g_vehicle_bumblebee_pitchspeed, ftmp + vehic.avelocity_x * 0.9, autocvar_g_vehicle_bumblebee_pitchspeed);
171 vehic.angles_x = anglemods(vehic.angles_x);
172 vehic.angles_y = anglemods(vehic.angles_y);
173 vehic.angles_z = anglemods(vehic.angles_z);
175 makevectors('0 1 0' * vehic.angles_y);
176 newvel = vehic.velocity * -autocvar_g_vehicle_bumblebee_friction;
178 if(pilot.movement_x != 0)
180 if(pilot.movement_x > 0)
181 newvel += v_forward * autocvar_g_vehicle_bumblebee_speed_forward;
182 else if(pilot.movement_x < 0)
183 newvel -= v_forward * autocvar_g_vehicle_bumblebee_speed_forward;
186 if(pilot.movement_y != 0)
188 if(pilot.movement_y < 0)
189 newvel -= v_right * autocvar_g_vehicle_bumblebee_speed_strafe;
190 else if(pilot.movement_y > 0)
191 newvel += v_right * autocvar_g_vehicle_bumblebee_speed_strafe;
192 ftmp = newvel * v_right;
193 ftmp *= frametime * 0.1;
194 vehic.angles_z = bound(-15, vehic.angles_z + ftmp, 15);
198 vehic.angles_z *= 0.95;
199 if(vehic.angles_z >= -1 && vehic.angles_z <= -1)
203 if(pilot.BUTTON_CROUCH)
204 newvel -= v_up * autocvar_g_vehicle_bumblebee_speed_down;
205 else if (pilot.BUTTON_JUMP)
206 newvel += v_up * autocvar_g_vehicle_bumblebee_speed_up;
208 vehic.velocity += newvel * frametime;
209 pilot.velocity = pilot.movement = vehic.velocity;
210 setorigin(pilot,vehic.origin + '0 0 32');
213 if(vehic.vehicle_flags & VHF_SHIELDREGEN)
214 vehicles_regen(dmg_time, vehicle_shield, autocvar_g_vehicle_bumblebee_shield, autocvar_g_vehicle_bumblebee_shield_regen_pause, autocvar_g_vehicle_bumblebee_shield_regen, frametime);
216 if(vehic.vehicle_flags & VHF_HEALTHREGEN)
217 vehicles_regen(dmg_time, vehicle_health, autocvar_g_vehicle_bumblebee_health, autocvar_g_vehicle_bumblebee_health_regen_pause, autocvar_g_vehicle_bumblebee_health_regen, frametime);
219 if(vehic.vehicle_flags & VHF_ENERGYREGEN)
220 vehicles_regen(cnt, vehicle_energy, autocvar_g_vehicle_bumblebee_energy, autocvar_g_vehicle_bumblebee_energy_regen_pause, autocvar_g_vehicle_bumblebee_energy_regen, frametime);
222 VEHICLE_UPDATE_PLAYER(health, bumblebee);
223 VEHICLE_UPDATE_PLAYER(energy, bumblebee);
224 if(vehic.vehicle_flags & VHF_HASSHIELD)
225 VEHICLE_UPDATE_PLAYER(shield, bumblebee);
227 pilot.BUTTON_ATCK = pilot.BUTTON_ATCK2 = pilot.BUTTON_CROUCH = 0;
235 self.velocity = self.velocity * 0.99;
236 self.nextthink = time + 0.1;
241 self.touch = bumb_gunner_enter;
244 void bumb_exit(float eject)
247 self.touch = vehicles_touch;
252 self.vehicle_health = autocvar_g_vehicle_bumblebee_health;
253 self.vehicle_shield = autocvar_g_vehicle_bumblebee_shield;
254 self.movetype = MOVETYPE_TOSS;
255 self.solid = SOLID_BBOX;
256 //self.vehicle_energy = 1;
257 self.movetype = MOVETYPE_FLY;
258 setorigin(self, self.origin + '0 0 25');
264 self.event_damage = SUB_Null;
265 self.solid = SOLID_CORPSE;
266 self.takedamage = DAMAGE_NO;
267 self.deadflag = DEAD_DYING;
268 self.movetype = MOVETYPE_BOUNCE;
270 pointparticles(particleeffectnum("rocket_explode"), findbetterlocation (self.origin, 16), '0 0 0', 1);
275 if not (vehicle_initialize(
277 "models/vehicles/bumblebee_body.dpm",
279 "models/vehicles/spiderbot_cockpit.dpm",
280 "", "", "tag_viewport",
284 bumb_spawn, autocvar_g_vehicle_bumblebee_respawntime,
286 bumb_enter, bumb_exit,
287 bumb_die, bumb_think,
294 setmodel(self.gun1, "models/vehicles/bumblebee_ray.dpm");
295 setattachment(self.gun1, self, "tag_hardpoint03");
300 self.gun1.owner = self;
301 self.gun2.owner = self;
303 setmodel(self.gun1, "models/vehicles/bumblebee_plasma_right.dpm");
304 setmodel(self.gun2, "models/vehicles/bumblebee_plasma_left.dpm");
306 setattachment(self.gun1, self, "tag_hardpoint01");
307 setattachment(self.gun2, self, "tag_hardpoint02");
310 ofs = gettaginfo(self, gettagindex(self, "tag_hardpoint01"));
312 setattachment(self.gun1, self, "");
313 setorigin(self.gun1, ofs);
315 ofs = gettaginfo(self, gettagindex(self, "tag_hardpoint02"));
317 setattachment(self.gun2, self, "");
318 setorigin(self.gun2, ofs);
323 void spawnfunc_vehicle_bumblebee()
326 precache_model ("models/vehicles/bumblebee_body.dpm");
327 precache_model ("models/vehicles/bumblebee_plasma_left.dpm");
328 precache_model ("models/vehicles/bumblebee_plasma_right.dpm");
329 precache_model ("models/vehicles/bumblebee_ray.dpm");
331 //vehicles_configcheck("vehicle_bumblebee.cfg", autocvar_g_vehicle_bumblebee_health);
333 if(autocvar_g_vehicle_bumblebee_energy)
334 if(autocvar_g_vehicle_bumblebee_energy_regen)
335 self.vehicle_flags |= VHF_ENERGYREGEN;
337 if(autocvar_g_vehicle_bumblebee_shield)
338 self.vehicle_flags |= VHF_HASSHIELD;
340 if(autocvar_g_vehicle_bumblebee_shield_regen)
341 self.vehicle_flags |= VHF_SHIELDREGEN;
343 if(autocvar_g_vehicle_bumblebee_health_regen)
344 self.vehicle_flags |= VHF_HEALTHREGEN;
346 self.think = bumb_dinit;
347 self.nextthink = time + 1;
352 void bumblebee_draw()
357 void bumblebee_draw2d()
362 void bumblebee_read_extra()
367 void vehicle_bumblebee_assemble()