]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/turrets/turret/flac.qc
Turrets: prepare for upgrade
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / turrets / turret / flac.qc
1 #ifndef TUR_FLAC_H
2 #define TUR_FLAC_H
3 REGISTER_TURRET(
4 /* TUR_##id   */ FLAC,
5 /* function   */ t_flac,
6 /* spawnflags */ TUR_FLAG_SPLASH | TUR_FLAG_FASTPROJ | TUR_FLAG_MISSILE,
7 /* mins,maxs  */ '-32 -32 0', '32 32 64',
8 /* model          */ "base.md3",
9 /* head_model */ "flac.md3",
10 /* netname        */ "flac",
11 /* fullname   */ _("FLAC Cannon")
12 );
13 #endif
14
15 #ifdef IMPLEMENTATION
16 #ifdef SVQC
17 void turret_flac_projectile_think_explode()
18 {SELFPARAM();
19     if(self.enemy != world)
20     if(vlen(self.origin - self.enemy.origin) < self.owner.shot_radius * 3)
21         setorigin(self,self.enemy.origin + randomvec() * self.owner.shot_radius);
22
23 #ifdef TURRET_DEBUG
24     float d;
25     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);
26     self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d;
27     self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
28 #else
29     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);
30 #endif
31     remove(self);
32 }
33
34 void spawnfunc_turret_flac() { SELFPARAM(); if(!turret_initialize(TUR_FLAC.m_id)) remove(self); }
35
36 float t_flac(Turret thistur, float req)
37 {SELFPARAM();
38     switch(req)
39     {
40         case TR_ATTACK:
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         case TR_THINK:
59         {
60             return true;
61         }
62         case TR_DEATH:
63         {
64             return true;
65         }
66         case TR_SETUP:
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         case TR_PRECACHE:
76         {
77             return true;
78         }
79     }
80
81     return true;
82 }
83
84 #endif // SVQC
85 #ifdef CSQC
86 float t_flac(Turret thistur, float req)
87 {
88     switch(req)
89     {
90         case TR_SETUP:
91         {
92             return true;
93         }
94         case TR_PRECACHE:
95         {
96             return true;
97         }
98     }
99
100     return true;
101 }
102
103 #endif // CSQC
104 #endif // REGISTER_TURRET