1 #define RACER_MIN '-80 -80 -40'
2 #define RACER_MAX '80 80 40'
3 #define RACER_TICRATE 0.05
5 void racer_exit(float eject);
10 float racer_power_solid;
11 float racer_power_min;
12 float racer_anglestabilizer;
13 float racer_springlength;
15 float racer_healthmax;
16 float racer_shieldmax;
17 float racer_energymax;
19 float racer_pitchspeed;
20 float racer_turnspeed;
22 float racer_speed_forward;
23 float racer_speed_strafe;
25 float jetfromtag_power;
26 float jetfromtag_normpower;
27 vector jetfromtag_origin;
28 float jetfromtag_groundcontact;
30 void racer_loadsettings()
32 racer_power_min = cvar("g_vehicle_racer_power_min") * 0.25;
33 racer_power_air = cvar("g_vehicle_racer_power_air") * 0.25;
34 racer_power_solid = cvar("g_vehicle_racer_power_solid") * 0.25;
36 racer_springlength = cvar("g_vehicle_racer_springlength");
37 racer_anglestabilizer = cvar("g_vehicle_racer_anglestabilizer");
38 racer_pitchspeed = cvar("g_vehicle_racer_pitchspeed");
39 racer_turnspeed = cvar("g_vehicle_racer_turnspeed");
40 racer_turnroll = cvar("g_vehicle_racer_turnroll");
41 racer_speed_forward = cvar("g_vehicle_racer_speed_forward");
42 racer_speed_strafe = cvar("g_vehicle_racer_speed_strafe");
44 racer_healthmax = cvar("g_vehicle_racer_health");
45 racer_shieldmax = cvar("g_vehicle_racer_shield");
46 racer_energymax = cvar("g_vehicle_racer_energy");
50 vector racer_jetfromtag(string tagname)
53 float air_frac, solid_frac, air_pwr, solid_pwr;
55 jetfromtag_origin = gettaginfo(self,gettagindex(self,tagname));
56 v_forward = normalize(v_forward) * -1;
58 force_dir = jetfromtag_origin - (v_forward * racer_springlength);
59 traceline(jetfromtag_origin, force_dir, MOVE_NORMAL, self);
60 //te_lightning1(world,jetfromtag_origin, force_dir);
62 //trace_fraction *= trace_fraction;
64 solid_frac = 1 - trace_fraction;
65 air_frac = trace_fraction;
67 if (trace_fraction != 1.0)
68 jetfromtag_groundcontact = 1;
70 solid_pwr = solid_frac * racer_power_solid;
71 air_pwr = air_frac * racer_power_air;
73 jetfromtag_power = solid_pwr + air_pwr;
74 jetfromtag_normpower = jetfromtag_power / (racer_power_air + racer_power_solid);
76 //te_lightning1(world,jetfromtag_origin,jetfromtag_origin + normalize(self.origin - force_dir) * max(jetfromtag_power, racer_power_min));
77 //return normalize(self.origin - force_dir) * max(jetfromtag_power, racer_power_min);
78 return v_forward * max(jetfromtag_power, racer_power_min);
81 void racer_align4point()
84 float fl_push, fr_push, bl_push, br_push;
86 jetfromtag_groundcontact = 0;
88 push_vector = racer_jetfromtag("tag_engine_fr");
89 fr_push = jetfromtag_normpower;
90 traceline(jetfromtag_origin, jetfromtag_origin + self.velocity * frametime, MOVE_NORMAL,self);
91 if(trace_fraction != 1)
92 self.velocity += normalize(self.origin - trace_endpos) * (vlen(self.velocity) * 1.25);
94 push_vector += racer_jetfromtag("tag_engine_fl");
95 fl_push = jetfromtag_normpower;
96 traceline(jetfromtag_origin, jetfromtag_origin + self.velocity * frametime, MOVE_NORMAL,self);
97 if(trace_fraction != 1)
98 self.velocity += normalize(self.origin - trace_endpos) * (vlen(self.velocity) * 1.25);
100 push_vector += racer_jetfromtag("tag_engine_br");
101 br_push = jetfromtag_normpower;
102 traceline(jetfromtag_origin, jetfromtag_origin + self.velocity * frametime, MOVE_NORMAL,self);
103 if(trace_fraction != 1)
104 self.velocity += normalize(self.origin - trace_endpos) * (vlen(self.velocity) * 1.25);
106 push_vector += racer_jetfromtag("tag_engine_bl");
107 bl_push = jetfromtag_normpower;
108 traceline(jetfromtag_origin, jetfromtag_origin + self.velocity * frametime, MOVE_NORMAL,self);
109 if(trace_fraction != 1)
110 self.velocity += normalize(self.origin - trace_endpos) * (vlen(self.velocity) * 1.25);
112 self.velocity = self.velocity + (push_vector * frametime);
113 self.velocity_z -= sv_gravity * frametime;
115 push_vector_x = (fl_push - bl_push);
116 push_vector_x += (fr_push - br_push);
117 push_vector_x *= 360;
119 push_vector_z = (fr_push - fl_push);
120 push_vector_z += (br_push - bl_push);
121 push_vector_z *= 360;
123 //if (push_vector_z != 0)
124 if(self.angles_z > 0)
125 self.angles_z = max(0, self.angles_z - (racer_anglestabilizer * frametime));
127 self.angles_z = min(0, self.angles_z + (racer_anglestabilizer * frametime));
129 self.angles_z += push_vector_z * frametime;
131 //if (push_vector_x != 0)
132 if(self.angles_x > 0)
133 self.angles_x = max(0, self.angles_x - (racer_anglestabilizer * frametime));
135 self.angles_x = min(0, self.angles_x + (racer_anglestabilizer * frametime));
137 self.angles_x += push_vector_x * frametime;
140 void racer_bolt_explode()
144 org2 = findbetterlocation (self.origin, 8);
145 pointparticles(particleeffectnum("laser_impact"), org2, trace_plane_normal * 1000, 1);
146 RadiusDamage (self, self.realowner, cvar("g_vehicle_racer_laser_damage"), 0, cvar("g_vehicle_racer_laser_radius"), world, 150, DEATH_WAKIGUN, world);
147 sound (self, CHAN_PROJECTILE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
152 void racer_rocket_explode()
157 // self.owner = self.realowner;
159 sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
160 org2 = findbetterlocation (self.origin, 16);
161 pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
162 RadiusDamage (self, self.realowner ,cvar("g_vehicle_racer_rocket_damage"), 0, cvar("g_vehicle_racer_rocket_radius"), world, 150, DEATH_WAKIROCKET, world);
167 void racer_rocket_touch()
169 if(other.owner == self.owner)
174 if(pointcontents(self.origin) == CONTENT_SKY)
176 self.think = SUB_Remove;
177 self.nextthink = time;
182 racer_rocket_explode();
185 void racer_fire_cannon(string tagname)
190 bolt.solid = SOLID_TRIGGER;
191 bolt.movetype = MOVETYPE_FLYMISSILE;
192 bolt.flags = FL_PROJECTILE | FL_NOTARGET;
194 bolt.realowner = self.owner;
195 bolt.touch = racer_bolt_explode;
196 bolt.think = racer_bolt_explode;
197 bolt.nextthink = time + 9;
198 bolt.bot_dodge = TRUE;
199 bolt.bot_dodgerating = cvar("g_vehicle_racer_laser_damage");
200 setorigin(bolt, gettaginfo(self,gettagindex(self,tagname)));
203 v = normalize(self.owner.cursor_trace_endpos - bolt.origin);
204 v_forward_z = v_z * 0.5;
205 //v_forward_z *= 0.5;
207 bolt.velocity = v_forward * cvar("g_vehicle_racer_laser_speed");
209 CSQCProjectile(bolt, TRUE, PROJECTILE_LASER, TRUE);
212 void racer_rocket_groundhugger()
214 vector newdir,olddir;
215 float oldspeed, newspeed;
217 self.nextthink = time;
219 if ((self.owner.deadflag != DEAD_NO) || (self.cnt < time))
221 racer_rocket_explode();
225 if not (self.realowner.vehicle)
227 UpdateCSQCProjectile(self);
231 olddir = normalize(self.velocity);
232 oldspeed = vlen(self.velocity);
234 tracebox(self.origin, self.mins, self.maxs, self.origin + olddir * 512, MOVE_WORLDONLY,self);
235 if(trace_fraction >= 0.35)
237 traceline(trace_endpos, trace_endpos - '0 0 512', MOVE_NORMAL, self);
238 if(trace_fraction != 1.0)
239 newdir = trace_endpos + '0 0 32';
241 newdir = normalize(newdir - self.origin);
244 newspeed = oldspeed + self.lip;
245 self.velocity = normalize(olddir + newdir * self.wait) * newspeed;
247 UpdateCSQCProjectile(self);
250 void racer_rocket_think()
252 vector newdir,olddir, eorg, edir;
253 float oldspeed, newspeed, dist;
255 self.nextthink = time;
257 if ((self.owner.deadflag != DEAD_NO) || (self.cnt < time))
259 racer_rocket_explode();
263 if not (self.realowner.vehicle)
265 UpdateCSQCProjectile(self);
269 olddir = normalize(self.velocity);
270 oldspeed = vlen(self.velocity);
271 fixedmakevectors(olddir);
272 eorg = 0.5 * (self.enemy.absmin + self.enemy.absmax);
273 edir = normalize(eorg - self.origin);
274 dist = vlen(self.origin - self.enemy.origin);
280 p = dist / self.delay;
281 p = max(0.05, p * 0.25);
282 ddir = steerlib_traceavoid(p, oldspeed * 0.25);
286 newdir = normalize(olddir + edir * self.wait);
287 newspeed = oldspeed + self.lip;
288 self.velocity = normalize(olddir + newdir * self.wait) * newspeed;
290 UpdateCSQCProjectile(self);
293 void racer_fire_rocket(string tagname)
298 setsize (rocket, '-1 -1 -1', '1 1 1');
299 rocket.lip = cvar("g_vehicle_racer_rocket_accel") * sys_frametime;
300 rocket.wait = cvar("g_vehicle_racer_rocket_turnrate");
301 rocket.solid = SOLID_BBOX;
302 rocket.movetype = MOVETYPE_FLYMISSILE;
303 rocket.flags = FL_PROJECTILE;
305 rocket.realowner = self.owner;
306 rocket.touch = racer_rocket_touch;
307 rocket.bot_dodge = TRUE;
308 rocket.bot_dodgerating = cvar("g_vehicle_racer_rocket_damage");
309 setorigin(rocket, gettaginfo(self,gettagindex(self,tagname)));
312 if( (self.tur_head.gun1) && (self.tur_head.cnt > time))
313 rocket.enemy = self.tur_head.gun1;
317 rocket.delay = vlen(rocket.enemy.origin - rocket.origin);
318 rocket.cnt = time + 9;
319 rocket.velocity = v_forward * cvar("g_vehicle_racer_rocket_speed");
320 rocket.think = racer_rocket_think;
321 rocket.nextthink = time;
322 CSQCProjectile(rocket, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
327 rocket.cnt = time + 9;
328 rocket.velocity = v_forward * cvar("g_vehicle_racer_rocket_speed");
329 rocket.think = racer_rocket_groundhugger;
330 rocket.nextthink = time;
331 CSQCProjectile(rocket, TRUE, PROJECTILE_ROCKET, TRUE);
335 float racer_customizeentityforclient()
338 if(self.deadflag == DEAD_DEAD)
342 if(other == self.owner)
353 entity player, racer;
358 if(cvar("g_vehicle_racer_reload"))
360 racer_loadsettings();
361 cvar_set("g_vehicle_racer_reload","0");
365 racer = self.vehicle;
367 player.BUTTON_ZOOM = 0;
368 player.BUTTON_CROUCH = 0;
372 if(player.BUTTON_USE)
380 if(racer.deadflag != DEAD_NO)
383 player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
390 racer.angles_x *= -1;
391 makevectors(racer.angles);
394 ftmp = racer_turnspeed * sys_frametime;
397 ftmp = bound(ftmp2,shortangle_f(player.v_angle_y - racer.angles_y,racer.angles_y),ftmp);
398 ftmp2 = safeangle(racer.angles_y + ftmp);
401 ftmp = bound(-45,shortangle_f(player.v_angle_z + ((racer.angles_y - ftmp2) * racer_turnroll), racer.angles_z),45);
402 ftmp = safeangle(racer.angles_z + ftmp);
403 racer.angles_z = bound(-85,ftmp,85);
406 racer.angles_y = ftmp2;
409 ftmp = racer_pitchspeed * sys_frametime;
412 ftmp = bound(ftmp2,shortangle_f(player.v_angle_x - racer.angles_x,racer.angles_x),ftmp);
413 racer.angles_x = safeangle(racer.angles_x + ftmp);
414 racer.angles_x *= -1;
416 df = racer.velocity * -1;
418 if(player.movement_x != 0)
420 if(player.movement_x > 0)
421 df += v_forward * racer_speed_forward;
422 else if(player.movement_x < 0)
423 df -= v_forward * racer_speed_forward;
426 if(player.movement_y != 0)
428 if(player.movement_y < 0)
429 df -= v_right * racer_speed_strafe;
430 else if(player.movement_y > 0)
431 df += v_right * racer_speed_strafe;
434 // limit _z to avoid flying on normal thrust
436 df_z = min(df_z,700);
440 //if (jetfromtag_groundcontact)
441 if (player.BUTTON_JUMP)
442 if(racer.vehicle_energy >= (cvar("g_vehicle_racer_speed_afterburn_cost") * frametime))
444 racer.wait = time + cvar("g_vehicle_racer_energy_usepause");
445 racer.vehicle_energy -= cvar("g_vehicle_racer_speed_afterburn_cost") * frametime;
446 df += (v_forward * cvar("g_vehicle_racer_speed_afterburn"));
449 racer.velocity += df * frametime;
451 df = (vlen(racer.velocity) * cvar("g_vehicle_racer_downforce") * v_up) * frametime;
452 racer.velocity = racer.velocity - df;
453 player.movement = racer.velocity;
456 // for homing rockets
457 if(self.owner.cursor_trace_ent)
459 self.tur_head.gun1 = self.owner.cursor_trace_ent;
460 self.tur_head.cnt = time + 1;
464 if(player.BUTTON_ATCK)
465 if(time > racer.attack_finished_single)
466 if(racer.vehicle_energy >= cvar("g_vehicle_racer_laser_cost"))
468 racer.vehicle_energy -= cvar("g_vehicle_racer_laser_cost");
469 racer.wait = time + cvar("g_vehicle_racer_energy_usepause");
473 racer_fire_cannon("tag_fire1");
478 racer_fire_cannon("tag_fire2");
481 racer.attack_finished_single = time + cvar("g_vehicle_racer_laser_refire");
484 if(player.BUTTON_ATCK2)
485 if(time > racer.delay)
487 racer_fire_rocket("tag_rocket_r");
488 racer_fire_rocket("tag_rocket_l");
489 racer.delay = time + cvar("g_vehicle_racer_rocket_refire");
494 player.vehicle_reload1 = (time - racer.lip) / (racer.delay-racer.lip);
495 //player.vehicle_energy = racer.vehicle_energy;
497 vehicle_stdproc_shiledregen(racer_shieldmax, frametime);
498 vehicle_stdproc_healthregen(racer_healthmax, frametime);
500 if (racer.wait < time)
501 vehicle_stdproc_energyregen(racer_energymax, frametime);
503 player.vehicle_energy = (racer.vehicle_energy / racer_energymax);
507 player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
508 setorigin(player,racer.origin + '0 0 32');
509 player.velocity = racer.velocity;
514 void racer_exitthink()
518 self.nextthink = time;
520 a = racer_anglestabilizer;
521 b = racer_springlength;
522 c = racer_power_solid;
524 racer_anglestabilizer = 36;
525 racer_springlength = 96;
526 racer_power_solid = 300;
530 if(self.velocity_z < 0)
531 self.velocity_z *= 0.95;
533 racer_anglestabilizer = a;
534 racer_springlength = b;
535 racer_power_solid = c;
537 self.velocity_x *= 0.95;
538 self.velocity_y *= 0.95;
541 void racer_spawnthink()
546 self.nextthink = time;
548 a = racer_anglestabilizer;
549 b = racer_springlength;
550 c = racer_power_solid;
552 racer_anglestabilizer = 36;
553 racer_springlength = 96;
554 racer_power_solid = 300;
556 // self.velocity_z += sin(time * 128) * 4;
560 if(self.velocity_z < 0)
561 self.velocity_z *= 0.98;
563 racer_anglestabilizer = a;
564 racer_springlength = b;
565 racer_power_solid = c;
567 self.velocity_x *= 0.95;
568 self.velocity_y *= 0.95;
570 dorg = self.pos1 - self.origin ;
572 self.velocity_x = bound(-32, self.velocity_x + dorg_x, 32);
573 self.velocity_y = bound(-32, self.velocity_y + dorg_y, 32);
583 self.vehicle_hudmodel.viewmodelforclient = self.owner;
584 self.colormap = self.owner.colormap;
586 self.owner.PlayerPhysplug = racer_pplug;
587 self.owner.takedamage = DAMAGE_NO;
588 self.owner.event_damage = SUB_Null;
589 self.owner.vehicle = self;
590 self.owner.angles = self.angles;
591 self.owner.solid = SOLID_NOT;
592 self.owner.movetype = MOVETYPE_NOCLIP;
593 self.owner.alpha = -1;
594 self.owner.hud = HUD_WAKIZASHI;
595 self.owner.effects |= EF_NODRAW;
596 self.owner.view_ofs = '0 0 0';
598 self.owner.vehicle_health = (self.vehicle_health / cvar("g_vehicle_racer_health"));
599 self.owner.vehicle_shield = (self.vehicle_shield / cvar("g_vehicle_racer_shield"));
601 setorigin(other,self.origin + '0 0 32');
602 other.velocity = self.velocity;
604 other.flags &~= FL_ONGROUND;
606 WriteByte (MSG_ONE, SVC_SETVIEWPORT);
607 WriteEntity( MSG_ONE, self.vehicle_viewport);
609 WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
610 WriteAngle(MSG_ONE, self.angles_x * -1); // tilt
611 WriteAngle(MSG_ONE, self.angles_y); // yaw
612 WriteAngle(MSG_ONE, 0); // roll
618 pointparticles(particleeffectnum("teleport"), self.enemy.origin + '0 0 64', '0 0 0', 1);
619 self.enemy.think = racer_spawn;
620 self.enemy.nextthink = time;
624 void racer_exit(float eject)
626 self.colormap = 1024;
627 self.flags = FL_NOTARGET;
632 msg_entity = self.owner;
633 WriteByte (MSG_ONE, SVC_SETVIEWPORT);
634 WriteEntity( MSG_ONE, self.owner);
636 WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
637 WriteAngle(MSG_ONE, 0); // tilt
638 WriteAngle(MSG_ONE, self.angles_y); // yaw
639 WriteAngle(MSG_ONE, 0); // roll
641 if (self.deadflag == DEAD_NO)
643 self.think = racer_exitthink;
644 self.nextthink = time;
647 self.owner.takedamage = DAMAGE_AIM;
648 self.owner.solid = SOLID_SLIDEBOX;
649 self.owner.movetype = MOVETYPE_WALK;
651 setsize(self.owner,PL_MIN,PL_MAX);
653 self.owner.effects &~= EF_NODRAW;
654 self.owner.alpha = 1;
655 self.owner.PlayerPhysplug = SUB_Null;
656 self.owner.vehicle = world;
657 self.owner.view_ofs = PL_VIEW_OFS;
658 self.owner.event_damage = PlayerDamage;
659 self.owner.hud = HUD_NORMAL;
661 self.vehicle_hudmodel.viewmodelforclient = self;
665 makevectors(self.angles);
666 setorigin(self.owner,self.origin + v_forward * 100);
667 self.owner.velocity = (v_up + v_forward * 0.25) * 750;
671 self.owner.velocity = (v_forward) * -150;
672 setorigin(self.owner,self.origin - v_forward * 128);
677 if (self.deadflag != DEAD_NO)
682 ret.think = racer_return;
683 ret.nextthink = time + cvar("g_vehicle_racer_respawntime");
691 if(vlen(self.velocity) == 0)
694 if(other.classname != "player")
698 a = normalize(other.origin - self.origin);
699 a = a - normalize(self.velocity);
704 if(other.classname != "player")
707 if(other.deadflag != DEAD_NO)
710 if(other.vehicle != world)
717 float racer_customizeentityforclient()
719 if(self.deadflag == DEAD_DEAD)
728 self.think = racer_spawnthink;
729 self.nextthink = time;
731 self.flags = FL_NOTARGET;
734 self.vehicle_health = racer_healthmax;
735 self.vehicle_shield = racer_shieldmax;
737 self.event_damage = vehicle_stdproc_damage;
738 self.touch = racer_touch;
740 self.iscreature = TRUE;
742 self.movetype = MOVETYPE_FLY;
743 self.solid = SOLID_SLIDEBOX;
744 self.takedamage = DAMAGE_AIM;
747 self.colormap = 1024;
748 self.deadflag = DEAD_NO;
749 self.bot_attack = TRUE;
751 self.vehicle_energy = 1;
752 self.vehicle_hudmodel.viewmodelforclient = self;
754 setorigin(self, self.pos1);
755 self.angles = self.pos2;
757 setsize(self,RACER_MIN * 0.5,RACER_MAX * 0.5);
758 pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
766 sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
767 pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
769 self.deadflag = DEAD_DEAD;
770 self.vehicle_exit(VHEF_NORMAL);
771 RadiusDamage (self, self, 250, 15, 250, world, 250, DEATH_WAKIBLOWUP, world);
774 self.nextthink = time + cvar("g_vehicle_racer_respawntime");
775 self.think = racer_spawn;
776 self.movetype = MOVETYPE_NONE;
777 self.effects = EF_NODRAW;
779 self.avelocity_z = 0;
780 self.colormod = '0 0 0';
782 setorigin(self,self.pos1);
785 void racer_dietouch()
790 self.wait = time + 0.75;
792 pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
798 self.event_damage = SUB_Null;
799 self.iscreature = FALSE;
800 self.solid = SOLID_NOT;
801 self.takedamage = DAMAGE_NO;
802 self.touch = racer_dietouch;
803 self.deadflag = DEAD_DYING;
804 self.movetype = MOVETYPE_BOUNCE;
807 pointparticles(particleeffectnum("rocket_explode"), findbetterlocation (self.origin, 16), '0 0 0', 1);
809 self.velocity += '0 0 128';
812 self.avelocity_z = 16;
814 self.avelocity_z = -16;
816 self.colormod = '-0.5 -0.5 -0.5';
818 self.think = racer_blowup;
819 self.nextthink = time + 3;
825 tracebox(self.origin + '0 0 100', RACER_MIN * 0.5, RACER_MAX * 0.5, self.origin - '0 0 10000', MOVE_WORLDONLY, self);
826 setorigin(self,trace_endpos);
828 if (self.netname == "")
829 self.netname = "Race PoD";
831 self.cvar_basename = "g_vehicle_racer";
833 self.vehicle_viewport = spawn();
834 self.vehicle_hudmodel = spawn();
835 //self.ccamera = spawn();
837 setorigin(self, self.origin);
839 setmodel(self,"models/vehicles/wakizashi.dpm");
840 setmodel(self.vehicle_hudmodel, "models/vehicles/wakizashi_cockpit.dpm");
841 setmodel (self.vehicle_viewport, "null");
843 setattachment(self.vehicle_hudmodel, self, "");
844 setattachment(self.vehicle_viewport, self, "tag_viewport");
846 self.vehicle_hudmodel.viewmodelforclient = self;
847 self.customizeentityforclient = racer_customizeentityforclient;
849 self.tur_head = spawn();
851 self.pos1 = self.origin;
852 self.pos2 = self.angles;
853 self.angles = '0 0 0';
854 self.angles = self.pos1;
856 self.vehicle_die = racer_die;
857 self.vehicle_exit = racer_exit;
859 addstat(STAT_HUD, AS_INT, hud);
860 addstat(STAT_VEHICLESTAT_HEALTH, AS_FLOAT, vehicle_health);
861 addstat(STAT_VEHICLESTAT_SHIELD, AS_FLOAT, vehicle_shield);
862 addstat(STAT_VEHICLESTAT_ENERGY, AS_FLOAT, vehicle_energy);
864 addstat(STAT_VEHICLESTAT_AMMO1, AS_INT, vehicle_ammo1);
865 addstat(STAT_VEHICLESTAT_RELOAD1, AS_FLOAT, vehicle_reload1);
867 addstat(STAT_VEHICLESTAT_AMMO2, AS_INT, vehicle_ammo2);
868 addstat(STAT_VEHICLESTAT_RELOAD2, AS_FLOAT, vehicle_reload2);
873 void spawnfunc_vehicle_racer()
875 g_turrets_common_precash();
876 racer_loadsettings();
878 self.vehicle_flags = VHF_HASSHIELD | VHF_SHIELDREGEN;
881 traceline(self.origin,self.origin - '0 0 2048',MOVE_WORLDONLY,self);
884 dprint("WARNING: vehicle_racer placed in solid\n");
885 traceline(self.origin + '0 0 512' ,self.origin - '0 0 2048',MOVE_WORLDONLY,self);
886 if(trace_startsolid || trace_fraction == 1.0)
888 dprint("ERROR: vehicle_racer placed in more then 512 units into solid\n");
895 if(trace_fraction != 1.0)
896 setorigin(self,trace_endpos + '0 0 128');
898 dprint("WARNING: vehicle_racer placed more then 2048 units above ground.\n");
900 precache_model ("models/vehicles/wakizashi.dpm");
901 precache_model ("models/vehicles/wakizashi_cockpit.dpm");
902 precache_model ("maps/bspmodel.bsp");
905 self.think = racer_dinit;
906 self.nextthink = time + 1;