]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/turrets/unit/flac.qc
Clean up turrets system a bit
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / turrets / unit / flac.qc
1 #ifdef REGISTER_TURRET
2 REGISTER_TURRET(
3 /* TUR_##id   */ FLAC,
4 /* function   */ t_flac,
5 /* spawnflags */ TUR_FLAG_SPLASH | TUR_FLAG_FASTPROJ | TUR_FLAG_MISSILE,
6 /* mins,maxs  */ '-32 -32 0', '32 32 64',
7 /* model          */ "base.md3",
8 /* head_model */ "flac.md3",
9 /* netname        */ "flac",
10 /* fullname   */ _("FLAC Cannon")
11 );
12
13 #define FLAC_SETTINGS(turret) 
14
15
16 #ifdef SVQC
17 FLAC_SETTINGS(flac)
18 #endif // SVQC
19 #else
20 #ifdef SVQC
21
22 void turret_flac_projectile_think_explode()
23 {
24         if(self.enemy != world)
25         if(vlen(self.origin - self.enemy.origin) < self.owner.shot_radius * 3)
26                 setorigin(self,self.enemy.origin + randomvec() * self.owner.shot_radius);
27
28 #ifdef TURRET_DEBUG
29         float d;
30         d = RadiusDamage (self, self.owner, self.owner.shot_dmg, self.owner.shot_dmg, self.owner.shot_radius, self, self.owner.shot_force, self.totalfrags, world);
31         self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d;
32         self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
33 #else
34         RadiusDamage (self, self.realowner, self.owner.shot_dmg, self.owner.shot_dmg, self.owner.shot_radius, self, self.owner.shot_force, self.totalfrags, world);
35 #endif
36         remove(self);
37 }
38
39 void spawnfunc_turret_flac() { if not(turret_initialize(TUR_FLAC)) remove(self); }
40
41 float t_flac(float req)
42 {
43         switch(req)
44         {
45                 case TR_ATTACK:
46                 {
47                         entity proj;
48
49                         turret_tag_fire_update();
50
51                         proj = turret_projectile("weapons/hagar_fire.wav", 5, 0, DEATH_TURRET_FLAC, PROJECTILE_HAGAR, TRUE, TRUE);
52                         pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
53                         proj.think        = turret_flac_projectile_think_explode;
54                         proj.nextthink  = time + self.tur_impacttime + (random() * 0.01 - random() * 0.01);
55                         proj.missile_flags = MIF_SPLASH | MIF_PROXY;
56
57                         self.tur_head.frame = self.tur_head.frame + 1;
58                         if (self.tur_head.frame >= 4)
59                                 self.tur_head.frame = 0;
60                         
61                         return TRUE;
62                 }
63                 case TR_THINK:
64                 {
65                         return TRUE;
66                 }
67                 case TR_DEATH:
68                 {
69                         return TRUE;
70                 }
71                 case TR_SETUP:
72                 {
73                         self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
74                         self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;
75                         self.damage_flags |= TFL_DMG_HEADSHAKE;
76                         self.target_select_flags |= TFL_TARGETSELECT_NOTURRETS | TFL_TARGETSELECT_MISSILESONLY;
77                 
78                         return TRUE;
79                 }
80                 case TR_PRECACHE:
81                 {
82                         precache_model ("models/turrets/base.md3");
83                         precache_model ("models/turrets/flac.md3");
84                         return TRUE;
85                 }
86                 case TR_CONFIG:
87                 {
88                         TUR_CONFIG_SETTINGS(FLAC_SETTINGS(flac))
89                         return TRUE;
90                 }
91         }
92
93         return TRUE;
94 }
95
96 #endif // SVQC
97 #ifdef CSQC
98 float t_flac(float req)
99 {
100         switch(req)
101         {
102                 case TR_SETUP:
103                 {
104                         return TRUE;
105                 }
106                 case TR_PRECACHE:
107                 {
108                         precache_model ("models/turrets/base.md3");
109                         precache_model ("models/turrets/flac.md3");
110                         return TRUE;
111                 }
112         }
113
114         return TRUE;
115 }
116
117 #endif // CSQC
118 #endif // REGISTER_TURRET