]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/turrets/turret/flac.qc
dbeca59ac4c141be836a44f9cd7c38a8565f9530
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / turrets / turret / flac.qc
1 #ifndef TUR_FLAC_H
2 #define TUR_FLAC_H
3
4 CLASS(Flac, Turret)
5 /* spawnflags */ ATTRIB(Flac, spawnflags, int, TUR_FLAG_SPLASH | TUR_FLAG_FASTPROJ | TUR_FLAG_MISSILE);
6 /* mins       */ ATTRIB(Flac, mins, vector, '-32 -32 0');
7 /* maxs       */ ATTRIB(Flac, maxs, vector, '32 32 64');
8 /* modelname  */ ATTRIB(Flac, mdl, string, "base.md3");
9 /* model      */ ATTRIB(Flac, model, string, strzone(strcat("models/turrets/", this.mdl)));
10 /* head_model */ ATTRIB(Flac, head_model, string, strzone(strcat("models/turrets/", "flac.md3")));
11 /* netname    */ ATTRIB(Flac, netname, string, "flac");
12 /* fullname   */ ATTRIB(Flac, turret_name, string, _("FLAC Cannon"));
13 ENDCLASS(Flac)
14
15 REGISTER_TURRET(FLAC, NEW(Flac));
16
17 #endif
18
19 #ifdef IMPLEMENTATION
20 #ifdef SVQC
21 void turret_flac_projectile_think_explode()
22 {SELFPARAM();
23     if(self.enemy != world)
24     if(vlen(self.origin - self.enemy.origin) < self.owner.shot_radius * 3)
25         setorigin(self,self.enemy.origin + randomvec() * self.owner.shot_radius);
26
27 #ifdef TURRET_DEBUG
28     float d;
29     d = RadiusDamage (self, self.owner, self.owner.shot_dmg, self.owner.shot_dmg, self.owner.shot_radius, self, world, self.owner.shot_force, self.totalfrags, world);
30     self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d;
31     self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
32 #else
33     RadiusDamage (self, self.realowner, self.owner.shot_dmg, self.owner.shot_dmg, self.owner.shot_radius, self, world, self.owner.shot_force, self.totalfrags, world);
34 #endif
35     remove(self);
36 }
37
38 void spawnfunc_turret_flac() { SELFPARAM(); if(!turret_initialize(TUR_FLAC.m_id)) remove(self); }
39
40         METHOD(Flac, tr_attack, bool(Flac thistur))
41         {
42             entity proj;
43
44             turret_tag_fire_update();
45
46             proj = turret_projectile(SND(HAGAR_FIRE), 5, 0, DEATH_TURRET_FLAC, PROJECTILE_HAGAR, TRUE, TRUE);
47             Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
48             proj.think    = turret_flac_projectile_think_explode;
49             proj.nextthink  = time + self.tur_impacttime + (random() * 0.01 - random() * 0.01);
50             proj.missile_flags = MIF_SPLASH | MIF_PROXY;
51
52             self.tur_head.frame = self.tur_head.frame + 1;
53             if (self.tur_head.frame >= 4)
54                 self.tur_head.frame = 0;
55
56             return true;
57         }
58         METHOD(Flac, tr_think, bool(Flac thistur))
59         {
60             return true;
61         }
62         METHOD(Flac, tr_death, bool(Flac thistur))
63         {
64             return true;
65         }
66         METHOD(Flac, tr_setup, bool(Flac thistur))
67         {
68             self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
69             self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;
70             self.damage_flags |= TFL_DMG_HEADSHAKE;
71             self.target_select_flags |= TFL_TARGETSELECT_NOTURRETS | TFL_TARGETSELECT_MISSILESONLY;
72
73             return true;
74         }
75         METHOD(Flac, tr_precache, bool(Flac thistur))
76         {
77             return true;
78         }
79
80 #endif // SVQC
81 #ifdef CSQC
82         METHOD(Flac, tr_setup, bool(Flac thistur))
83         {
84             return true;
85         }
86         METHOD(Flac, tr_precache, bool(Flac thistur))
87         {
88             return true;
89         }
90
91 #endif // CSQC
92 #endif // REGISTER_TURRET