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