]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/turrets/turret/fusionreactor.qc
Turrets: prepare for upgrade
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / turrets / turret / fusionreactor.qc
1 #ifndef TUR_FUSIONREACTOR_H
2 #define TUR_FUSIONREACTOR_H
3 REGISTER_TURRET(
4 /* TUR_##id   */ FUSIONREACTOR,
5 /* function   */ t_fusionreactor,
6 /* spawnflags */ TUR_FLAG_SUPPORT | TUR_FLAG_AMMOSOURCE,
7 /* mins,maxs  */ '-34 -34 0', '34 34 90',
8 /* model          */ "base.md3",
9 /* head_model */ "reactor.md3",
10 /* netname        */ "fusionreactor",
11 /* fullname   */ _("Fusion Reactor")
12 );
13 #endif
14
15 #ifdef IMPLEMENTATION
16 #ifdef SVQC
17 bool turret_fusionreactor_firecheck()
18 {SELFPARAM();
19     if (self.attack_finished_single > time)
20         return false;
21
22     if (self.enemy.deadflag != DEAD_NO)
23         return false;
24
25     if (self.enemy == world)
26         return false;
27
28     if (self.ammo < self.shot_dmg)
29         return false;
30
31     if (self.enemy.ammo >= self.enemy.ammo_max)
32         return false;
33
34     if (vlen(self.enemy.origin - self.origin) > self.target_range)
35         return false;
36
37     if(self.team != self.enemy.team)
38         return false;
39
40     if(!(self.enemy.ammo_flags & TFL_AMMO_ENERGY))
41         return false;
42
43     return true;
44 }
45
46 void spawnfunc_turret_fusionreactor() { SELFPARAM(); if(!turret_initialize(TUR_FUSIONREACTOR.m_id)) remove(self); }
47
48 float t_fusionreactor(Turret thistur, float req)
49 {SELFPARAM();
50     switch(req)
51     {
52         case TR_ATTACK:
53         {
54             vector fl_org;
55
56             self.enemy.ammo = min(self.enemy.ammo + self.shot_dmg,self.enemy.ammo_max);
57             fl_org = 0.5 * (self.enemy.absmin + self.enemy.absmax);
58             te_smallflash(fl_org);
59
60             return true;
61         }
62         case TR_THINK:
63         {
64             self.tur_head.avelocity = '0 250 0' * (self.ammo / self.ammo_max);
65
66             return true;
67         }
68         case TR_DEATH:
69         {
70             return true;
71         }
72         case TR_SETUP:
73         {
74             self.ammo_flags                             = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE;
75             self.target_select_flags    = TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_OWNTEAM | TFL_TARGETSELECT_RANGELIMITS;
76             self.firecheck_flags                = TFL_FIRECHECK_AMMO_OWN | TFL_FIRECHECK_AMMO_OTHER | TFL_FIRECHECK_DISTANCES | TFL_FIRECHECK_DEAD;
77             self.shoot_flags                    = TFL_SHOOT_HITALLVALID;
78             self.aim_flags                              = TFL_AIM_NO;
79             self.track_flags                    = TFL_TRACK_NO;
80
81             self.tur_head.scale = 0.75;
82             self.tur_head.avelocity = '0 50 0';
83
84             self.turret_firecheckfunc = turret_fusionreactor_firecheck;
85
86             return true;
87         }
88         case TR_PRECACHE:
89         {
90             return true;
91         }
92     }
93
94     return true;
95 }
96
97 #endif // SVQC
98 #ifdef CSQC
99 float t_fusionreactor(Turret thistur, float req)
100 {
101     switch(req)
102     {
103         case TR_SETUP:
104         {
105             return true;
106         }
107         case TR_PRECACHE:
108         {
109             return true;
110         }
111     }
112
113     return true;
114 }
115
116 #endif // CSQC
117 #endif // REGISTER_TURRET