1 #define MODEL_SPIDERBOT_FORWARD_START 1
\r
2 #define MODEL_SPIDERBOT_FORWARD_END 31
\r
3 #define MODEL_SPIDERBOT_FORWARD_LENGTH 31
\r
5 #define MODEL_SPIDERBOT_BACKWARDS_START 32
\r
6 #define MODEL_SPIDERBOT_BACKWARDS_END 62
\r
7 #define MODEL_SPIDERBOT_BACKWARDS_LENGTH 31
\r
9 #define MODEL_SPIDERBOT_LEFT_START 63
\r
10 #define MODEL_SPIDERBOT_LEFT_END 93
\r
11 #define MODEL_SPIDERBOT_LEFT_LENGTH 31
\r
13 #define MODEL_SPIDERBOT_RIGHT_START 94
\r
14 #define MODEL_SPIDERBOT_RIGHT_END 124
\r
15 #define MODEL_SPIDERBOT_RIGHT_LENGTH 31
\r
17 #define MODEL_SPIDERBOT_JUMP_START 125
\r
18 #define MODEL_SPIDERBOT_JUMP_END 155
\r
19 #define MODEL_SPIDERBOT_JUMP_LENGTH 31
\r
21 #define spiderbot_MIN '-75 -75 5'
\r
22 #define spiderbot_MAX '75 75 105'
\r
28 void spider_anim_idle()
\r
30 movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
\r
31 if(self.anim_next != self.anim_now)
\r
32 self.anim_now = self.anim_next;
\r
35 void spider_anim_forward()
\r
37 movelib_move_simple(normalize(v_forward),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
\r
39 if((self.frame < MODEL_SPIDERBOT_FORWARD_START) || (self.frame > MODEL_SPIDERBOT_FORWARD_END))
\r
40 self.frame = MODEL_SPIDERBOT_FORWARD_START;
\r
44 if(self.frame > MODEL_SPIDERBOT_FORWARD_END)
\r
45 self.anim_now = self.anim_next;
\r
48 void spider_anim_backward()
\r
50 movelib_move_simple(normalize(v_forward * -1),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
\r
52 if(self.frame < MODEL_SPIDERBOT_BACKWARDS_START)
\r
53 self.frame = MODEL_SPIDERBOT_BACKWARDS_START;
\r
57 if(self.frame > MODEL_SPIDERBOT_BACKWARDS_END)
\r
58 self.anim_now = self.anim_next;
\r
61 void spider_anim_strafel()
\r
63 movelib_move_simple(normalize(v_right * -1),cvar("g_vehicle_spiderbot_speed_strafe"),cvar("g_vehicle_spiderbot_movement_inertia"));
\r
65 if(self.frame < MODEL_SPIDERBOT_LEFT_START)
\r
66 self.frame = MODEL_SPIDERBOT_LEFT_START;
\r
70 if(self.frame > MODEL_SPIDERBOT_LEFT_END)
\r
71 self.anim_now = self.anim_next;
\r
74 void spider_anim_strafer()
\r
76 movelib_move_simple(normalize(v_right),cvar("g_vehicle_spiderbot_speed_strafe"),cvar("g_vehicle_spiderbot_movement_inertia"));
\r
78 if(self.frame < MODEL_SPIDERBOT_RIGHT_START)
\r
79 self.frame = MODEL_SPIDERBOT_RIGHT_START;
\r
83 if(self.frame > MODEL_SPIDERBOT_RIGHT_END)
\r
84 self.anim_now = self.anim_next;
\r
87 void spider_anim_jump()
\r
89 //movelib_move_simple(normalize(v_forward),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
\r
91 if(self.frame < MODEL_SPIDERBOT_JUMP_START)
\r
92 self.frame = MODEL_SPIDERBOT_JUMP_START;
\r
97 movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
\r
100 self.velocity = v_forward * 400 + v_up * 400;
\r
102 if(self.frame >= 19)
\r
103 movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
\r
105 if(self.frame > MODEL_SPIDERBOT_JUMP_END)
\r
106 self.anim_now = self.anim_next;
\r
111 if not (self.anim_now)
\r
112 self.anim_now = self.anim_next;
\r
121 self.frame = self.frame + 0.8;
\r
122 if ((self.frame < self.anim_start) || (self.frame > self.anim_end))
\r
123 if(self.anim_start == 0)
\r
129 self.frame = self.anim_start;
\r
132 void spiderbot_exit(float eject);
\r
133 void spiderbot_enter();
\r
135 void spiderbot_rocket_explode()
\r
139 if(self.event_damage != SUB_Null)
\r
141 self.event_damage = SUB_Null;
\r
142 self.think = spiderbot_rocket_explode;
\r
143 self.nextthink = time;
\r
147 sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
\r
148 org2 = findbetterlocation (self.origin, 16);
\r
149 pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
\r
150 w_deathtypestring = "dident escape the rocket barrage";
\r
153 self.owner = self.realowner;
\r
155 RadiusDamage (self, self.owner,
\r
156 cvar("g_vehicle_spiderbot_rocket_damage"),
\r
157 cvar("g_vehicle_spiderbot_rocket_edgedamage"),
\r
158 cvar("g_vehicle_spiderbot_rocket_radius"), world,
\r
159 cvar("g_vehicle_spiderbot_rocket_force"), DEATH_TURRET, world);
\r
164 void spiderbot_rocket_touch()
\r
168 if(other == self.owner.vehicle)
\r
171 if(other == self.owner.vehicle.tur_head)
\r
176 spiderbot_rocket_explode();
\r
179 void spiderbot_rocket_think()
\r
181 vector newdir,olddir;
\r
183 self.nextthink = time;
\r
186 UpdateCSQCProjectile(self);
\r
190 self.solid = SOLID_BBOX;
\r
191 self.touch = spiderbot_rocket_touch;
\r
192 olddir = normalize(self.velocity);
\r
193 newdir = normalize(self.owner.cursor_trace_endpos - self.origin);
\r
194 newdir += randomvec() * cvar("g_vehicle_spiderbot_rocket_noise");
\r
195 self.velocity = normalize(olddir + newdir * cvar("g_vehicle_spiderbot_rocket_turnrate")) * cvar("g_vehicle_spiderbot_rocket_speed");
\r
197 UpdateCSQCProjectile(self);
\r
200 void spiderbot_rocket_do()
\r
204 if(self.gun2.cnt > time)
\r
207 if(self.tur_head.frame > 7)
\r
208 self.tur_head.frame = 0;
\r
210 if not (self.owner.BUTTON_ATCK2)
\r
213 self.tur_head.frame += 1;
\r
214 if(self.tur_head.frame > 7)
\r
215 self.attack_finished_single = cvar("g_vehicle_spiderbot_rocket_reload");
\r
217 self.attack_finished_single = cvar("g_vehicle_spiderbot_rocket_refire");
\r
219 self.gun2.cnt = time + self.attack_finished_single;
\r
221 sound (self, CHAN_WEAPON, "weapons/rocket_fire.wav", VOL_BASE, ATTN_NORM);
\r
222 missile = spawn ();
\r
223 setsize (missile, '-3 -1 -1', '3 1 1'); // give it some size so it can be shot
\r
224 setorigin(missile,gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire")));
\r
225 te_explosion (missile.origin);
\r
227 missile.classname = "spiderbot_rocket";
\r
228 missile.owner = self.owner;
\r
229 missile.bot_dodge = TRUE;
\r
230 missile.bot_dodgerating = 75;
\r
231 missile.nextthink = time;// + 0.2;
\r
232 missile.movetype = MOVETYPE_FLYMISSILE;
\r
233 missile.velocity = normalize(v_forward + (v_up * 0.5) + randomvec() * 0.25) * cvar("g_vehicle_spiderbot_rocket_speed");
\r
234 missile.angles = vectoangles(missile.velocity);
\r
235 missile.think = spiderbot_rocket_think;
\r
236 missile.flags = FL_PROJECTILE;
\r
237 missile.solid = SOLID_NOT;
\r
239 CSQCProjectile(missile, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
\r
242 void spiderbot_minigun_fire_Flash_Go() {
\r
243 if (self.frame > 10){
\r
249 self.frame = self.frame + 2;
\r
250 self.alpha = self.alpha - 0.2;
\r
251 self.nextthink = time + 0.02;
\r
254 void spiderbot_minigun_fire(entity gun,float trail)
\r
259 v = gettaginfo(gun,gettagindex(gun,"barrels"));
\r
260 v_forward = normalize(v_forward);
\r
262 sound (gun, CHAN_WEAPON, "weapons/uzi_fire.wav", VOL_BASE, ATTN_NORM);
\r
264 fireBullet (v, v_forward, cvar("g_vehicle_spiderbot_minigun_spread"), cvar("g_vehicle_spiderbot_minigun_damage"),
\r
265 cvar("g_vehicle_spiderbot_minigun_spread"), DEATH_TURRET, 0);
\r
269 gun.enemy = spawn();
\r
270 setattachment(gun.enemy , gun, "barrels");
\r
271 setorigin(gun.enemy ,gun.enemy.origin + '48 0 0');
\r
274 flash = gun.enemy; //spawn();
\r
275 setmodel(flash, "models/uziflash.md3"); // precision set below
\r
276 flash.think = spiderbot_minigun_fire_Flash_Go;
\r
277 flash.nextthink = time + 0.02;
\r
279 flash.angles_z = flash.v_angle_z + random() * 180;
\r
281 flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION;
\r
283 trailparticles(self, particleeffectnum("EF_MGTURRETTRAIL"), v, trace_endpos);
\r
286 void spiderbot_miniguns_do()
\r
288 if ((self.owner.BUTTON_ATCK) && (self.owner.vehicle_heat < 1) && (self.tur_head.attack_finished_single < time))
\r
291 self.gun1.angles_z += 36;
\r
292 self.gun2.angles_z -= 36;
\r
293 if(self.gun1.angles_z >= 360)
\r
295 self.gun1.angles_z = 0;
\r
296 self.gun2.angles_z = 360;
\r
300 if(self.uzi_bulletcounter == 1)
\r
302 spiderbot_minigun_fire(self.vehicle.gun1,0);
\r
303 spiderbot_minigun_fire(self.vehicle.gun2,1);
\r
304 self.uzi_bulletcounter = 0;
\r
308 spiderbot_minigun_fire(self.vehicle.gun1,1);
\r
309 spiderbot_minigun_fire(self.vehicle.gun2,0);
\r
310 self.uzi_bulletcounter += 1;
\r
313 self = self.vehicle;
\r
314 self.owner.vehicle_heat += cvar("g_vehicle_spiderbot_minigun_heat");
\r
315 if(self.owner.vehicle_heat >= 1)
\r
317 self.vehicle_heat = 1;
\r
318 self.owner.vehicle_heat = 1;
\r
319 self.tur_head.attack_finished_single = (1/(cvar("g_vehicle_spiderbot_minigun_cooldown") * server_fps))+time;
\r
322 self.tur_head.attack_finished_single = cvar("g_vehicle_spiderbot_minigun_refire") + time;
\r
327 if(self.vehicle_heat != 0)
\r
329 self.vehicle_heat = max(self.vehicle_heat - cvar("g_vehicle_spiderbot_minigun_cooldown"),0);
\r
330 if(self.tur_head.attack_finished_single < time)
\r
332 self.vehicle_heat = 0;
\r
333 self.owner.vehicle_heat = 0;
\r
337 if(self.tur_head.uzi_bulletcounter < time)
\r
339 self.tur_head.uzi_bulletcounter = time + 0.2;
\r
340 self.owner.vehicle_heat = self.vehicle_heat;
\r
343 self.owner.vehicle_heat = 1;
\r
347 self.owner.vehicle_heat = max(self.owner.vehicle_heat - cvar("g_vehicle_spiderbot_minigun_cooldown"),0);
\r
351 float spiderbot_pplug()
\r
354 entity player,spider;
\r
358 spider = self.vehicle;
\r
361 self.BUTTON_ATCK = 0;
\r
363 self.BUTTON_JUMP = 0;
\r
364 self.BUTTON_ATCK2 = 0;
\r
367 self.BUTTON_HOOK = 0;
\r
368 self.BUTTON_INFO = 0;
\r
370 self.BUTTON_CHAT = 0;
\r
371 self.BUTTON_USE = 0;
\r
374 player.BUTTON_ZOOM = 0;
\r
375 player.BUTTON_CROUCH = 0;
\r
378 if(player.BUTTON_USE)
\r
386 player.exteriormodeltoclient = spider.tur_head;
\r
388 spider.tur_head.angles_x *= -1;
\r
389 spider.angles_x *= -1;
\r
390 //player.angles_x *= -1;
\r
391 makevectors(spider.angles);
\r
393 //ad = player.v_angle - (spider.tur_head.angles + spider.angles);
\r
394 ad = player.v_angle - (spider.tur_head.angles + spider.angles);
\r
397 ftmp = cvar("g_vehicle_spiderbot_head_turnspeed") / server_fps;
\r
399 spider.tur_head.angles_y += bound(ftmp2,shortangle_f(ad_y,spider.tur_head.angles_y),ftmp);
\r
400 spider.tur_head.angles_y = bound(cvar("g_vehicle_spiderbot_head_turnlimit") * -1,spider.tur_head.angles_y,cvar("g_vehicle_spiderbot_head_turnlimit"));
\r
403 ftmp = cvar("g_vehicle_spiderbot_head_pitchspeed") / server_fps;
\r
405 spider.tur_head.angles_x += bound(ftmp2,shortangle_f(ad_x,spider.tur_head.angles_x),ftmp);
\r
406 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"));
\r
408 spider.tur_head.angles_x *= -1;
\r
409 spider.angles_x *= -1;
\r
410 //player.angles_x *= -1;
\r
413 ftmp = cvar("g_vehicle_spiderbot_turnspeed") / server_fps;
\r
415 ftmp = bound(ftmp2,spider.tur_head.angles_y,ftmp);
\r
418 if(spider.flags & FL_ONGROUND)
\r
420 if(player.BUTTON_JUMP)
\r
422 player.BUTTON_JUMP = 0;
\r
423 spider.anim_start = MODEL_SPIDERBOT_JUMP_START;
\r
424 spider.anim_end = MODEL_SPIDERBOT_JUMP_END;
\r
425 spider.velocity = v_forward * 700 + v_up * 600;
\r
429 if(vlen(player.movement) == 0)
\r
431 movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
\r
432 spider.anim_start = 0;
\r
433 spider.anim_end = 0;
\r
437 spider.angles_y = safeangle(spider.angles_y + ftmp);
\r
438 spider.tur_head.angles_y -= ftmp;
\r
440 if(player.movement_x != 0)
\r
442 if(player.movement_x > 0)
\r
444 player.movement_x = 1;
\r
445 spider.anim_start = MODEL_SPIDERBOT_FORWARD_START;
\r
446 spider.anim_end = MODEL_SPIDERBOT_FORWARD_END;
\r
448 else if(player.movement_x < 0)
\r
450 player.movement_x = -1;
\r
451 spider.anim_start = MODEL_SPIDERBOT_BACKWARDS_START;
\r
452 spider.anim_end = MODEL_SPIDERBOT_BACKWARDS_END;
\r
455 player.movement_y = 0;
\r
456 movelib_move_simple(normalize(v_forward * player.movement_x),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
\r
458 else if(player.movement_y != 0)
\r
460 if(player.movement_y < 0)
\r
462 player.movement_y = -1;
\r
463 spider.anim_start = MODEL_SPIDERBOT_LEFT_START;
\r
464 spider.anim_end = MODEL_SPIDERBOT_LEFT_END;
\r
466 else if(player.movement_y > 0)
\r
468 player.movement_y = 1;
\r
469 spider.anim_start = MODEL_SPIDERBOT_RIGHT_START;
\r
470 spider.anim_end = MODEL_SPIDERBOT_RIGHT_END;
\r
472 movelib_move_simple(normalize(v_right * player.movement_y),cvar("g_vehicle_spiderbot_speed_strafe"),cvar("g_vehicle_spiderbot_movement_inertia"));
\r
477 movelib_groundalign4point(300,100,0.25);
\r
481 spiderbot_miniguns_do();
\r
482 spiderbot_rocket_do();
\r
483 vehicle_stdproc_regen();
\r
485 player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
\r
486 player.rockets = spider.tur_head.frame;
\r
488 if(spider.gun2.cnt <= time)
\r
489 player.rockets_reload = 1;
\r
491 player.rockets_reload = 1 - ((spider.gun2.cnt - time) /spider.attack_finished_single);
\r
495 setorigin(player,spider.origin + '0 0 64');
\r
496 player.velocity = spider.velocity;
\r
501 void spiderbot_think()
\r
503 if(self.flags & FL_ONGROUND)
\r
505 movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
\r
506 //movelib_groundalign4point(300,100);
\r
509 self.nextthink = time;
\r
512 void spiderbot_enter()
\r
514 self.owner = other;
\r
516 self.event_damage = vehicle_stdproc_damage ;
\r
517 self.colormap = self.owner.colormap;
\r
518 self.tur_head.colormap = self.owner.colormap;
\r
519 self.vehicle_hudmodel.viewmodelforclient = self.owner;
\r
520 self.nextthink = 0;
\r
521 self.owner.angles = self.angles;
\r
522 self.owner.takedamage = DAMAGE_NO;
\r
523 self.owner.solid = SOLID_NOT;
\r
524 self.owner.movetype = MOVETYPE_NOCLIP;
\r
525 self.owner.alpha = -1;
\r
526 self.owner.PlayerPhysplug = spiderbot_pplug;
\r
527 self.owner.vehicle = self;
\r
528 self.owner.event_damage = SUB_Null;
\r
529 self.owner.hud = HUD_SPIDEBOT;
\r
530 self.owner.vehicle_health = (self.vehicle_health / cvar("g_vehicle_spiderbot_health"));
\r
531 self.owner.vehicle_shield = (self.vehicle_shield / cvar("g_vehicle_spiderbot_shield"));
\r
532 self.team = self.owner.team;
\r
534 //setorigin(self.owner,self.origin);
\r
535 //setattachment(self.owner,self,"");
\r
536 //setorigin(self.owner,'0 0 0');
\r
538 msg_entity = other;
\r
539 WriteByte (MSG_ONE, SVC_SETVIEWPORT);
\r
540 WriteEntity( MSG_ONE, self.vehicle_viewport);
\r
542 WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
\r
543 WriteAngle(MSG_ONE, self.tur_head.angles_x + self.angles_x); // tilt
\r
544 WriteAngle(MSG_ONE, self.tur_head.angles_y + self.angles_y); // yaw
\r
545 WriteAngle(MSG_ONE, 0); // roll
\r
546 //WriteAngle(MSG_ONE, self.tur_head.angles_z + self.angles_z); // roll
\r
548 //self.owner.view_ofs = '0 0 0';
\r
549 //self.tur_head.nodrawtoclient = self.owner;
\r
552 void spiderbot_exit(float eject)
\r
556 e = findchain(classname,"spiderbot_rocket");
\r
559 if(e.owner == self.owner)
\r
561 e.realowner = self.owner;
\r
563 //e.solid = SOLID_BBOX;
\r
564 //e.think = SUB_Null;
\r
565 //e.nextthink = -1;
\r
570 self.velocity = '0 0 0';
\r
572 msg_entity = self.owner;
\r
573 WriteByte (MSG_ONE, SVC_SETVIEWPORT);
\r
574 WriteEntity( MSG_ONE, self.owner);
\r
576 WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
\r
577 WriteAngle(MSG_ONE, 0); // tilt
\r
578 WriteAngle(MSG_ONE, self.angles_y); // yaw
\r
579 WriteAngle(MSG_ONE, 0); // roll
\r
581 //setattachment(self.owner,world,"");
\r
582 self.think = spiderbot_think;
\r
583 self.nextthink = time;
\r
584 self.owner.takedamage = DAMAGE_AIM;
\r
585 self.owner.solid = SOLID_SLIDEBOX;
\r
586 self.owner.movetype = MOVETYPE_WALK;
\r
588 setsize(self.owner,PL_MIN,PL_MAX);
\r
590 self.owner.alpha = 1;
\r
591 self.owner.PlayerPhysplug = SUB_Null;
\r
592 self.owner.vehicle = world;
\r
593 self.owner.view_ofs = PL_VIEW_OFS;
\r
594 self.owner.hud = HUD_NORMAL;
\r
595 self.owner.event_damage = PlayerDamage;
\r
597 self.colormap = 1024;
\r
598 self.tur_head.colormap = 1024;
\r
601 self.vehicle_hudmodel.viewmodelforclient = self;
\r
602 self.tur_head.nodrawtoclient = self;
\r
604 setattachment(self.owner,world,"");
\r
606 makevectors(self.angles);
\r
609 setorigin(self.owner,self.origin + v_forward * 100 + '0 0 64');
\r
610 self.owner.velocity = (v_up + v_forward * 0.25) * 750;
\r
613 setorigin(self.owner,self.origin - v_forward * 200 + '0 0 64');
\r
615 self.owner = world;
\r
618 void spiderbot_touch()
\r
622 if(vlen(self.velocity) == 0)
\r
625 if(other.classname != "player")
\r
628 //todo: add check for velocity here (so we dont cush players runing onto us from behind)
\r
630 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") );
\r
634 if(other.classname != "player")
\r
637 if(other.deadflag != DEAD_NO)
\r
640 if(other.vehicle != world)
\r
646 float spiderbot_customizeentityforclient()
\r
648 if(self.deadflag == DEAD_DEAD)
\r
654 //void spiderbot_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force);
\r
655 void spiderbot_spawn()
\r
657 self.think = spiderbot_think;
\r
658 self.nextthink = time;
\r
660 self.vehicle_health = CCVAR("_health");
\r
661 self.vehicle_shield = CCVAR("_shield");
\r
662 self.event_damage = vehicle_stdproc_damage;
\r
663 self.iscreature = TRUE;
\r
664 self.movetype = MOVETYPE_WALK;
\r
665 self.solid = SOLID_SLIDEBOX;
\r
666 self.takedamage = DAMAGE_AIM;
\r
667 self.touch = spiderbot_touch;
\r
668 self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = 1;
\r
669 self.tur_head.angles = '0 0 0';
\r
670 self.colormap = 1024;
\r
671 self.tur_head.colormap = 1024;
\r
672 self.deadflag = DEAD_NO;
\r
673 self.bot_attack = TRUE;
\r
675 setsize(self,spiderbot_MIN,spiderbot_MAX);
\r
676 setorigin(self,self.tur_aimpos);
\r
677 pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
\r
680 void spiderbot_blowup()
\r
682 sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
\r
683 pointparticles(particleeffectnum("rocket_explode"), findbetterlocation (self.origin, 16), '0 0 0', 1);
\r
685 RadiusDamage (self, self, 250, 15, 250, world, 250, DEATH_TURRET, world);
\r
687 self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = -1;
\r
688 self.nextthink = time + 10;
\r
689 self.think = spiderbot_spawn;
\r
691 setorigin(self,self.tur_aimpos);
\r
694 void spiderbot_die()
\r
698 self.event_damage = SUB_Null;
\r
699 self.iscreature = FALSE;
\r
700 self.solid = SOLID_NOT;
\r
701 self.takedamage = DAMAGE_NO;
\r
702 self.touch = SUB_Null;
\r
703 self.nextthink = time + random() * 2;
\r
704 self.think = spiderbot_blowup;
\r
705 self.deadflag = DEAD_DEAD;
\r
706 self.vehicle_hudmodel.viewmodelforclient = self;
\r
708 self.tur_head.frame = 0;
\r
712 void vewhicle_spiderbot_dinit()
\r
715 server_fps = (1 / sys_ticrate);
\r
717 addstat(STAT_HUD, AS_INT, hud);
\r
718 addstat(STAT_SPIDERBOT_ROCKETS, AS_INT, rockets);
\r
719 addstat(STAT_SPIDERBOT_RELOAD, AS_FLOAT, rockets_reload);
\r
720 addstat(STAT_SPIDERBOT_HEAT, AS_FLOAT, vehicle_heat);
\r
721 addstat(STAT_SPIDERBOT_HEALTH, AS_FLOAT, vehicle_health);
\r
722 addstat(STAT_SPIDERBOT_SHIELD, AS_FLOAT, vehicle_shield);
\r
724 if (self.netname == "") self.netname = "spiderbot";
\r
726 self.tur_head = spawn();
\r
727 self.gun1 = spawn();
\r
728 self.gun2 = spawn();
\r
729 self.vehicle_viewport = spawn();
\r
731 self.vehicle_hudmodel = spawn();
\r
732 self.vehicle_flags = VHF_HASSHIELD | VHF_SHIELDREGEN | VHF_HEALTHREGEN;
\r
733 self.cvar_basename = "g_vehicle_spiderbot";
\r
735 setmodel (self.vehicle_hudmodel, "models/spiderbot/cp.md3");
\r
736 setmodel (self.vehicle_viewport, "models/null.md3");
\r
737 setmodel(self,"models/spiderbot/spiderbot.dpm");
\r
738 setmodel(self.tur_head,"models/spiderbot/spiderbot_top.dpm");
\r
739 setmodel(self.gun1,"models/spiderbot/spiderbot_barrels.dpm");
\r
740 setmodel(self.gun2,"models/spiderbot/spiderbot_barrels.dpm");
\r
742 setattachment(self.tur_head,self,"tag_head");
\r
743 setattachment(self.vehicle_hudmodel,self.tur_head,"");
\r
744 setattachment(self.vehicle_viewport,self.vehicle_hudmodel,"");
\r
745 setattachment(self.gun1,self.tur_head,"tag_hardpoint01");
\r
746 setattachment(self.gun2,self.tur_head,"tag_hardpoint02");
\r
748 self.tur_head.owner = self;
\r
749 self.customizeentityforclient = spiderbot_customizeentityforclient;
\r
751 setorigin(self.vehicle_viewport,'35 0 -14');
\r
752 self.tur_aimpos = self.origin;
\r
755 self.vehicle_die = spiderbot_die;
\r
756 self.vehicle_exit = spiderbot_exit;
\r
759 void spawnfunc_vehicle_spiderbot()
\r
761 // g_turrets_common_precash();
\r
763 precache_model ( "models/spiderbot/cr.md3");
\r
764 precache_model ( "models/vhshield.md3");
\r
765 precache_model ( "models/spiderbot/cp.md3");
\r
766 precache_model ( "models/spiderbot/spiderbot.dpm");
\r
767 precache_model ( "models/spiderbot/spiderbot_top.dpm");
\r
768 precache_model ( "models/spiderbot/spiderbot_barrels.dpm");
\r
770 precache_model ( "models/turrets/rocket.md3");
\r
771 precache_sound ( "weapons/rocket_impact.wav" );
\r
774 self.think = vewhicle_spiderbot_dinit;
\r
775 self.nextthink = time + 0.5;
\r