1 #define MODEL_SPIDERBOT_FORWARD_START 1
2 #define MODEL_SPIDERBOT_FORWARD_END 31
3 #define MODEL_SPIDERBOT_FORWARD_LENGTH 31
5 #define MODEL_SPIDERBOT_BACKWARDS_START 32
6 #define MODEL_SPIDERBOT_BACKWARDS_END 62
7 #define MODEL_SPIDERBOT_BACKWARDS_LENGTH 31
9 #define MODEL_SPIDERBOT_LEFT_START 63
10 #define MODEL_SPIDERBOT_LEFT_END 93
11 #define MODEL_SPIDERBOT_LEFT_LENGTH 31
13 #define MODEL_SPIDERBOT_RIGHT_START 94
14 #define MODEL_SPIDERBOT_RIGHT_END 124
15 #define MODEL_SPIDERBOT_RIGHT_LENGTH 31
17 #define MODEL_SPIDERBOT_JUMP_START 125
18 #define MODEL_SPIDERBOT_JUMP_END 155
19 #define MODEL_SPIDERBOT_JUMP_LENGTH 31
21 #define spiderbot_MIN '-75 -75 5'
22 #define spiderbot_MAX '75 75 105'
23 #define spiderbot_spawnpnt wkr_spawn
29 void spider_anim_idle()
31 movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
32 if(self.anim_next != self.anim_now)
33 self.anim_now = self.anim_next;
36 void spider_anim_forward()
38 movelib_move_simple(normalize(v_forward),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
40 if((self.frame < MODEL_SPIDERBOT_FORWARD_START) || (self.frame > MODEL_SPIDERBOT_FORWARD_END))
41 self.frame = MODEL_SPIDERBOT_FORWARD_START;
45 if(self.frame > MODEL_SPIDERBOT_FORWARD_END)
46 self.anim_now = self.anim_next;
49 void spider_anim_backward()
51 movelib_move_simple(normalize(v_forward * -1),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
53 if(self.frame < MODEL_SPIDERBOT_BACKWARDS_START)
54 self.frame = MODEL_SPIDERBOT_BACKWARDS_START;
58 if(self.frame > MODEL_SPIDERBOT_BACKWARDS_END)
59 self.anim_now = self.anim_next;
62 void spider_anim_strafel()
64 movelib_move_simple(normalize(v_right * -1),cvar("g_vehicle_spiderbot_speed_strafe"),cvar("g_vehicle_spiderbot_movement_inertia"));
66 if(self.frame < MODEL_SPIDERBOT_LEFT_START)
67 self.frame = MODEL_SPIDERBOT_LEFT_START;
71 if(self.frame > MODEL_SPIDERBOT_LEFT_END)
72 self.anim_now = self.anim_next;
75 void spider_anim_strafer()
77 movelib_move_simple(normalize(v_right),cvar("g_vehicle_spiderbot_speed_strafe"),cvar("g_vehicle_spiderbot_movement_inertia"));
79 if(self.frame < MODEL_SPIDERBOT_RIGHT_START)
80 self.frame = MODEL_SPIDERBOT_RIGHT_START;
84 if(self.frame > MODEL_SPIDERBOT_RIGHT_END)
85 self.anim_now = self.anim_next;
88 void spider_anim_jump()
90 //movelib_move_simple(normalize(v_forward),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
92 if(self.frame < MODEL_SPIDERBOT_JUMP_START)
93 self.frame = MODEL_SPIDERBOT_JUMP_START;
98 movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
101 self.velocity = v_forward * 400 + v_up * 400;
104 movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
106 if(self.frame > MODEL_SPIDERBOT_JUMP_END)
107 self.anim_now = self.anim_next;
112 if not (self.anim_now)
113 self.anim_now = self.anim_next;
123 self.frame = self.frame + 0.8;
124 if ((self.frame < self.anim_start) || (self.frame > self.anim_end))
125 if(self.anim_start == 0)
131 self.frame = self.anim_start;
135 void spiderbot_exit(float eject);
136 void spiderbot_enter();
138 void spiderbot_rocket_explode()
142 if(self.event_damage != SUB_Null)
144 self.event_damage = SUB_Null;
145 self.think = spiderbot_rocket_explode;
146 self.nextthink = time;
150 sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
151 org2 = findbetterlocation (self.origin, 16);
152 pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
153 w_deathtypestring = "dident escape the rocket barrage";
156 self.owner = self.realowner;
158 RadiusDamage (self, self.owner,
159 cvar("g_vehicle_spiderbot_rocket_damage"),
160 cvar("g_vehicle_spiderbot_rocket_edgedamage"),
161 cvar("g_vehicle_spiderbot_rocket_radius"), world,
162 cvar("g_vehicle_spiderbot_rocket_force"), DEATH_TURRET, world);
167 void spiderbot_rocket_touch()
171 if(other == self.owner.vehicle)
174 if(other == self.owner.vehicle.tur_head)
179 spiderbot_rocket_explode();
182 void spiderbot_rocket_think()
184 vector newdir,olddir;
186 self.nextthink = time;
187 if (self.owner.deadflag != DEAD_NO)
189 spiderbot_rocket_explode();
193 if not (self.owner.vehicle)
195 UpdateCSQCProjectile(self);
199 self.solid = SOLID_BBOX;
200 self.touch = spiderbot_rocket_touch;
201 olddir = normalize(self.velocity);
202 newdir = normalize(self.owner.cursor_trace_endpos - self.origin);
203 newdir += randomvec() * cvar("g_vehicle_spiderbot_rocket_noise");
204 self.velocity = normalize(olddir + newdir * cvar("g_vehicle_spiderbot_rocket_turnrate")) * cvar("g_vehicle_spiderbot_rocket_speed");
206 UpdateCSQCProjectile(self);
209 void spiderbot_rocket_do()
213 if(self.gun2.cnt > time)
216 if(self.tur_head.frame > 7)
217 self.tur_head.frame = 0;
219 if not (self.owner.BUTTON_ATCK2)
222 self.tur_head.frame += 1;
223 if(self.tur_head.frame > 7)
224 self.attack_finished_single = cvar("g_vehicle_spiderbot_rocket_reload");
226 self.attack_finished_single = cvar("g_vehicle_spiderbot_rocket_refire");
228 self.gun2.cnt = time + self.attack_finished_single;
230 sound (self, CHAN_WEAPON, "weapons/rocket_fire.wav", VOL_BASE, ATTN_NORM);
232 setsize (missile, '-3 -1 -1', '3 1 1'); // give it some size so it can be shot
233 setorigin(missile,gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire")));
234 te_explosion (missile.origin);
236 missile.classname = "spiderbot_rocket";
237 missile.owner = self.owner;
238 missile.bot_dodge = TRUE;
239 missile.bot_dodgerating = 75;
240 missile.nextthink = time;// + 0.2;
241 missile.movetype = MOVETYPE_FLYMISSILE;
242 missile.velocity = normalize(v_forward + (v_up * 0.5) + randomvec() * 0.25) * cvar("g_vehicle_spiderbot_rocket_speed");
243 missile.angles = vectoangles(missile.velocity);
244 missile.think = spiderbot_rocket_think;
245 missile.flags = FL_PROJECTILE;
246 missile.solid = SOLID_NOT;
248 CSQCProjectile(missile, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
251 void spiderbot_minigun_fire_Flash_Go() {
252 if (self.frame > 10){
258 self.frame = self.frame + 2;
259 self.alpha = self.alpha - 0.2;
260 self.nextthink = time + 0.02;
263 void spiderbot_minigun_fire(entity gun,float trail)
268 v = gettaginfo(gun,gettagindex(gun,"barrels"));
269 v_forward = normalize(v_forward);
271 sound (gun, CHAN_WEAPON, "weapons/uzi_fire.wav", VOL_BASE, ATTN_NORM);
273 fireBullet (v, v_forward, cvar("g_vehicle_spiderbot_minigun_spread"), cvar("g_vehicle_spiderbot_minigun_damage"),
274 cvar("g_vehicle_spiderbot_minigun_spread"), DEATH_TURRET, 0);
279 setattachment(gun.enemy , gun, "barrels");
280 setorigin(gun.enemy ,gun.enemy.origin + '48 0 0');
283 flash = gun.enemy; //spawn();
284 setmodel(flash, "models/uziflash.md3"); // precision set below
285 flash.think = spiderbot_minigun_fire_Flash_Go;
286 flash.nextthink = time + 0.02;
288 flash.angles_z = flash.v_angle_z + random() * 180;
290 flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION;
292 trailparticles(self, particleeffectnum("EF_MGTURRETTRAIL"), v, trace_endpos);
295 void spiderbot_miniguns_do()
297 if ((self.owner.BUTTON_ATCK) && (self.owner.vehicle_heat < 1) && (self.tur_head.attack_finished_single < time))
300 self.gun1.angles_z += 36;
301 self.gun2.angles_z -= 36;
302 if(self.gun1.angles_z >= 360)
304 self.gun1.angles_z = 0;
305 self.gun2.angles_z = 360;
309 if(self.uzi_bulletcounter == 1)
311 spiderbot_minigun_fire(self.vehicle.gun1,0);
312 spiderbot_minigun_fire(self.vehicle.gun2,1);
313 self.uzi_bulletcounter = 0;
317 spiderbot_minigun_fire(self.vehicle.gun1,1);
318 spiderbot_minigun_fire(self.vehicle.gun2,0);
319 self.uzi_bulletcounter += 1;
323 self.owner.vehicle_heat += cvar("g_vehicle_spiderbot_minigun_heat");
324 if(self.owner.vehicle_heat >= 1)
326 self.vehicle_heat = 1;
327 self.owner.vehicle_heat = 1;
328 self.tur_head.attack_finished_single = (1/(cvar("g_vehicle_spiderbot_minigun_cooldown") * server_fps))+time;
331 self.tur_head.attack_finished_single = cvar("g_vehicle_spiderbot_minigun_refire") + time;
336 if(self.vehicle_heat != 0)
338 self.vehicle_heat = max(self.vehicle_heat - cvar("g_vehicle_spiderbot_minigun_cooldown"),0);
339 if(self.tur_head.attack_finished_single < time)
341 self.vehicle_heat = 0;
342 self.owner.vehicle_heat = 0;
346 if(self.tur_head.uzi_bulletcounter < time)
348 self.tur_head.uzi_bulletcounter = time + 0.2;
349 self.owner.vehicle_heat = self.vehicle_heat;
352 self.owner.vehicle_heat = 1;
356 self.owner.vehicle_heat = max(self.owner.vehicle_heat - cvar("g_vehicle_spiderbot_minigun_cooldown"),0);
367 float spiderbot_pplug()
370 entity player,spider;
374 spider = self.vehicle;
377 self.BUTTON_ATCK = 0;
379 self.BUTTON_JUMP = 0;
380 self.BUTTON_ATCK2 = 0;
383 self.BUTTON_HOOK = 0;
384 self.BUTTON_INFO = 0;
386 self.BUTTON_CHAT = 0;
390 player.BUTTON_ZOOM = 0;
391 player.BUTTON_CROUCH = 0;
392 player.switchweapon = 0;
395 if(player.BUTTON_USE)
403 player.exteriormodeltoclient = spider.tur_head;
405 spider.tur_head.angles_x *= -1;
406 spider.angles_x *= -1;
407 //player.angles_x *= -1;
408 makevectors(spider.angles);
410 //ad = player.v_angle - (spider.tur_head.angles + spider.angles);
411 ad = player.v_angle - (spider.tur_head.angles + spider.angles);
414 ftmp = cvar("g_vehicle_spiderbot_head_turnspeed") / server_fps;
416 spider.tur_head.angles_y += bound(ftmp2,shortangle_f(ad_y,spider.tur_head.angles_y),ftmp);
417 spider.tur_head.angles_y = bound(cvar("g_vehicle_spiderbot_head_turnlimit") * -1,spider.tur_head.angles_y,cvar("g_vehicle_spiderbot_head_turnlimit"));
420 ftmp = cvar("g_vehicle_spiderbot_head_pitchspeed") / server_fps;
422 spider.tur_head.angles_x += bound(ftmp2,shortangle_f(ad_x,spider.tur_head.angles_x),ftmp);
423 spider.tur_head.angles_x = bound(cvar("g_vehicle_spiderbot_head_pitchlimit_down"),spider.tur_head.angles_x,cvar("g_vehicle_spiderbot_head_pitchlimit_up"));
425 spider.tur_head.angles_x *= -1;
426 spider.angles_x *= -1;
427 //player.angles_x *= -1;
430 ftmp = cvar("g_vehicle_spiderbot_turnspeed") / server_fps;
432 ftmp = bound(ftmp2,spider.tur_head.angles_y,ftmp);
435 if(spider.flags & FL_ONGROUND)
437 //if(spider.state != SBS_JUMP)
438 if(player.BUTTON_JUMP)
440 player.BUTTON_JUMP = 0;
441 spider.anim_start = MODEL_SPIDERBOT_JUMP_START;
442 spider.anim_end = MODEL_SPIDERBOT_JUMP_END;
443 spider.velocity = v_forward * 700 + v_up * 600;
444 spider.state = SBS_JUMP;
449 if(vlen(player.movement) == 0)
451 movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
452 spider.anim_start = 0;
454 spider.state = SBS_IDLE;
459 spider.angles_y = safeangle(spider.angles_y + ftmp);
460 spider.tur_head.angles_y -= ftmp;
462 if(player.movement_x != 0)
464 if(player.movement_x > 0)
466 player.movement_x = 1;
467 spider.anim_start = MODEL_SPIDERBOT_FORWARD_START;
468 spider.anim_end = MODEL_SPIDERBOT_FORWARD_END;
469 spider.state = SBS_WALK;
472 else if(player.movement_x < 0)
474 player.movement_x = -1;
475 spider.anim_start = MODEL_SPIDERBOT_BACKWARDS_START;
476 spider.anim_end = MODEL_SPIDERBOT_BACKWARDS_END;
477 spider.state = SBS_BACK;
480 player.movement_y = 0;
481 movelib_move_simple(normalize(v_forward * player.movement_x),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
483 else if(player.movement_y != 0)
485 if(player.movement_y < 0)
487 player.movement_y = -1;
488 spider.anim_start = MODEL_SPIDERBOT_LEFT_START;
489 spider.anim_end = MODEL_SPIDERBOT_LEFT_END;
490 spider.state = SBS_LEFT;
493 else if(player.movement_y > 0)
495 player.movement_y = 1;
496 spider.anim_start = MODEL_SPIDERBOT_RIGHT_START;
497 spider.anim_end = MODEL_SPIDERBOT_RIGHT_END;
498 spider.state = SBS_RIGHT;
501 movelib_move_simple(normalize(v_right * player.movement_y),cvar("g_vehicle_spiderbot_speed_strafe"),cvar("g_vehicle_spiderbot_movement_inertia"));
506 movelib_groundalign4point(300,100,0.25);
510 spiderbot_miniguns_do();
511 spiderbot_rocket_do();
512 vehicle_stdproc_regen();
514 player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
515 player.rockets = spider.tur_head.frame;
517 if(spider.gun2.cnt <= time)
518 player.rockets_reload = 1;
520 player.rockets_reload = 1 - ((spider.gun2.cnt - time) /spider.attack_finished_single);
524 setorigin(player,spider.origin + '0 0 64');
525 player.velocity = spider.velocity;
530 void spiderbot_think()
532 if(self.flags & FL_ONGROUND)
534 movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
535 //movelib_groundalign4point(300,100);
538 self.nextthink = time;
541 void spiderbot_enter()
543 // Remove this when bots know how to use the spiderbot
544 if not (clienttype(other) == CLIENTTYPE_REAL)
547 self.colormod = self.tur_head.colormod = '0 0 0';
551 if(self.team != other.team)
555 self.switchweapon = other.switchweapon;
557 self.event_damage = vehicle_stdproc_damage ;
558 self.colormap = self.owner.colormap;
559 self.tur_head.colormap = self.owner.colormap;
560 self.vehicle_hudmodel.viewmodelforclient = self.owner;
562 self.owner.angles = self.angles;
563 self.owner.takedamage = DAMAGE_NO;
564 self.owner.solid = SOLID_NOT;
565 self.owner.movetype = MOVETYPE_NOCLIP;
566 self.owner.alpha = -1;
567 self.owner.PlayerPhysplug = spiderbot_pplug;
568 self.owner.vehicle = self;
569 self.owner.event_damage = SUB_Null;
570 self.owner.hud = HUD_SPIDERBOT;
571 self.owner.vehicle_health = (self.vehicle_health / cvar("g_vehicle_spiderbot_health"));
572 self.owner.vehicle_shield = (self.vehicle_shield / cvar("g_vehicle_spiderbot_shield"));
573 self.team = self.owner.team;
575 //setorigin(self.owner,self.origin);
576 //setattachment(self.owner,self,"");
577 //setorigin(self.owner,'0 0 0');
579 if(clienttype(other) == CLIENTTYPE_REAL)
582 WriteByte (MSG_ONE, SVC_SETVIEWPORT);
583 WriteEntity(MSG_ONE, self.vehicle_viewport);
585 WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
586 WriteAngle(MSG_ONE, self.tur_head.angles_x + self.angles_x); // tilt
587 WriteAngle(MSG_ONE, self.tur_head.angles_y + self.angles_y); // yaw
588 WriteAngle(MSG_ONE, 0); // roll
591 //WriteAngle(MSG_ONE, self.tur_head.angles_z + self.angles_z); // roll
592 //self.owner.view_ofs = '0 0 0';
593 //self.tur_head.nodrawtoclient = self.owner;
596 void spiderbot_exit(float eject)
600 e = findchain(classname,"spiderbot_rocket");
603 if(e.owner == self.owner)
605 e.realowner = self.owner;
607 //e.solid = SOLID_BBOX;
608 //e.think = SUB_Null;
614 self.owner.switchweapon = self.switchweapon;
616 self.velocity = '0 0 0';
617 if(clienttype(self.owner) == CLIENTTYPE_REAL)
619 msg_entity = self.owner;
620 WriteByte (MSG_ONE, SVC_SETVIEWPORT);
621 WriteEntity( MSG_ONE, self.owner);
623 WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
624 WriteAngle(MSG_ONE, 0); // tilt
625 WriteAngle(MSG_ONE, self.angles_y); // yaw
626 WriteAngle(MSG_ONE, 0); // roll
629 //setattachment(self.owner,world,"");
630 self.think = spiderbot_think;
631 self.nextthink = time;
632 self.owner.takedamage = DAMAGE_AIM;
633 self.owner.solid = SOLID_SLIDEBOX;
634 self.owner.movetype = MOVETYPE_WALK;
636 setsize(self.owner,PL_MIN,PL_MAX);
638 self.owner.alpha = 1;
639 self.owner.PlayerPhysplug = SUB_Null;
640 self.owner.vehicle = world;
641 self.owner.view_ofs = PL_VIEW_OFS;
642 self.owner.hud = HUD_NORMAL;
643 self.owner.event_damage = PlayerDamage;
645 self.colormap = 1024;
646 self.tur_head.colormap = 1024;
652 self.team = self.spiderbot_spawnpnt.team ;
653 if (self.team == COLOR_TEAM1) self.colormod = '1.4 0.8 0.8';
654 if (self.team == COLOR_TEAM2) self.colormod = '0.8 0.8 1.4';
655 self.tur_head.colormod = self.colormod;
658 self.vehicle_hudmodel.viewmodelforclient = self;
659 self.tur_head.nodrawtoclient = self;
661 setattachment(self.owner,world,"");
663 makevectors(self.angles);
666 setorigin(self.owner,self.origin + v_forward * 100 + '0 0 64');
667 self.owner.velocity = (v_up + v_forward * 0.25) * 750;
670 setorigin(self.owner,self.origin - v_forward * 200 + '0 0 64');
675 void spiderbot_touch()
679 if(vlen(self.velocity) == 0)
682 if(other.classname != "player")
685 //todo: add check for velocity here (so we dont cush players runing onto us from behind)
687 Damage(other,self,self.owner,cvar("g_vehicle_spiderbot_crush_dmg"),DEATH_TURRET,'0 0 0', normalize(other.origin - self.origin) * cvar("g_vehicle_spiderbot_crush_force") );
691 if(other.classname != "player")
694 if(other.deadflag != DEAD_NO)
697 if(other.vehicle != world)
703 float spiderbot_customizeentityforclient()
705 if(self.deadflag == DEAD_DEAD)
711 //void spiderbot_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force);
712 void spiderbot_spawn()
715 self.think = spiderbot_think;
716 self.nextthink = time;
718 self.vehicle_health = CCVAR("_health");
719 self.vehicle_shield = CCVAR("_shield");
720 self.event_damage = vehicle_stdproc_damage;
721 self.iscreature = TRUE;
722 self.movetype = MOVETYPE_WALK;
723 self.solid = SOLID_SLIDEBOX;
724 self.takedamage = DAMAGE_AIM;
725 self.touch = spiderbot_touch;
726 self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = 1;
727 self.tur_head.angles = '0 0 0';
728 self.colormap = 1024;
729 self.tur_head.colormap = 1024;
730 self.deadflag = DEAD_NO;
731 self.bot_attack = TRUE;
733 setsize(self,spiderbot_MIN,spiderbot_MAX);
735 setorigin(self,self.spiderbot_spawnpnt.origin);
736 self.angles = self.spiderbot_spawnpnt.angles;
738 if (self.team == COLOR_TEAM1)
739 self.colormod = '1.4 0.8 0.8';
740 else if (self.team == COLOR_TEAM2)
741 self.colormod = '0.8 0.8 1.4';
743 self.colormod = '0 0 0';
745 self.tur_head.colormod = self.colormod;
748 pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
751 void spiderbot_blowup()
753 sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
754 pointparticles(particleeffectnum("rocket_explode"), findbetterlocation (self.origin, 16), '0 0 0', 1);
756 RadiusDamage (self, self, 250, 15, 250, world, 250, DEATH_TURRET, world);
758 self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = -1;
759 self.nextthink = time + 10;
760 self.think = spiderbot_spawn;
762 setorigin(self,self.tur_aimpos);
769 self.event_damage = SUB_Null;
770 self.iscreature = FALSE;
771 self.solid = SOLID_NOT;
772 self.takedamage = DAMAGE_NO;
773 self.touch = SUB_Null;
774 self.nextthink = time + random() * 2;
775 self.think = spiderbot_blowup;
776 self.deadflag = DEAD_DEAD;
777 self.vehicle_hudmodel.viewmodelforclient = self;
779 self.tur_head.frame = 0;
783 void vewhicle_spiderbot_dinit()
786 self.spiderbot_spawnpnt = spawn();
787 self.spiderbot_spawnpnt.angles = self.angles;
789 traceline(self.origin + '0 0 16', self.origin - '0 0 10000', MOVE_WORLDONLY, self);
790 setorigin(self.spiderbot_spawnpnt,trace_endpos + '0 0 4');
791 setorigin(self,self.spiderbot_spawnpnt.origin);
793 if(self.team && !teamplay)
796 self.spiderbot_spawnpnt.team = self.team;
798 server_fps = (1 / sys_ticrate);
800 addstat(STAT_HUD, AS_INT, hud);
801 addstat(STAT_SPIDERBOT_ROCKETS, AS_INT, rockets);
802 addstat(STAT_SPIDERBOT_RELOAD, AS_FLOAT, rockets_reload);
803 addstat(STAT_SPIDERBOT_HEAT, AS_FLOAT, vehicle_heat);
804 addstat(STAT_SPIDERBOT_HEALTH, AS_FLOAT, vehicle_health);
805 addstat(STAT_SPIDERBOT_SHIELD, AS_FLOAT, vehicle_shield);
807 if (self.netname == "") self.netname = "spiderbot";
809 self.tur_head = spawn();
812 self.vehicle_viewport = spawn();
814 self.vehicle_hudmodel = spawn();
815 self.vehicle_flags = VHF_HASSHIELD | VHF_SHIELDREGEN | VHF_HEALTHREGEN;
816 self.cvar_basename = "g_vehicle_spiderbot";
818 setmodel (self.vehicle_hudmodel, "models/spiderbot/cp.md3");
819 setmodel (self.vehicle_viewport, "null");
820 setmodel(self,"models/spiderbot/spiderbot.dpm");
821 setmodel(self.tur_head,"models/spiderbot/spiderbot_top.dpm");
822 setmodel(self.gun1,"models/spiderbot/spiderbot_barrels.dpm");
823 setmodel(self.gun2,"models/spiderbot/spiderbot_barrels.dpm");
825 setattachment(self.tur_head,self,"tag_head");
826 setattachment(self.vehicle_hudmodel,self.tur_head,"");
827 setattachment(self.vehicle_viewport,self.vehicle_hudmodel,"");
828 setattachment(self.gun1,self.tur_head,"tag_hardpoint01");
829 setattachment(self.gun2,self.tur_head,"tag_hardpoint02");
831 self.tur_head.owner = self;
832 self.customizeentityforclient = spiderbot_customizeentityforclient;
834 setorigin(self.vehicle_viewport,'35 0 -14');
835 self.tur_aimpos = self.origin;
838 self.vehicle_die = spiderbot_die;
839 self.vehicle_exit = spiderbot_exit;
842 void spawnfunc_vehicle_spiderbot()
844 // g_turrets_common_precash();
846 precache_model ( "models/vhshield.md3");
847 precache_model ( "models/spiderbot/cp.md3");
848 precache_model ( "models/spiderbot/spiderbot.dpm");
849 precache_model ( "models/spiderbot/spiderbot_top.dpm");
850 precache_model ( "models/spiderbot/spiderbot_barrels.dpm");
852 precache_model ( "models/turrets/rocket.md3");
853 precache_sound ( "weapons/rocket_impact.wav" );
856 self.think = vewhicle_spiderbot_dinit;
857 self.nextthink = time + 0.5;