]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/server/tturrets/units/unit_plasma.qc
Merge remote-tracking branch 'origin/master' into divVerent/force_colors_teamplay
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / tturrets / units / unit_plasma.qc
1 void spawnfunc_turret_plasma();
2 void spawnfunc_turret_plasma_dual();
3
4 void turret_plasma_std_init();
5 void turret_plasma_dual_init();
6
7 void turret_plasma_attack();
8
9
10 void turret_plasma_postthink()
11 {
12     if (self.tur_head.frame != 0)
13         self.tur_head.frame = self.tur_head.frame + 1;
14
15     if (self.tur_head.frame > 5)
16         self.tur_head.frame = 0;
17 }
18
19 void turret_plasma_dual_postthink()
20 {
21     if ((self.tur_head.frame != 0) && (self.tur_head.frame != 3))
22         self.tur_head.frame = self.tur_head.frame + 1;
23
24     if (self.tur_head.frame > 6)
25         self.tur_head.frame = 0;
26 }
27
28 void turret_plasma_attack()
29
30     entity missile = turret_projectile("weapons/hagar_fire.wav", 1, 0, DEATH_TURRET_PLASMA, PROJECTILE_ELECTRO_BEAM, TRUE, TRUE);    
31     missile.missile_flags = MIF_SPLASH;
32     
33     pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
34     if (self.tur_head.frame == 0)
35         self.tur_head.frame = 1;
36 }
37
38 void turret_plasma_dual_attack()
39 {
40     entity missile = turret_projectile("weapons/hagar_fire.wav", 1, 0, DEATH_TURRET_PLASMA, PROJECTILE_ELECTRO_BEAM, TRUE, TRUE); 
41     missile.missile_flags = MIF_SPLASH;   
42     pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
43     self.tur_head.frame += 1;
44 }
45
46 void turret_plasma_std_init()
47 {
48     if (self.netname == "")      self.netname     = "Plasma Cannon";
49
50     // What ammo to use
51     self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
52
53     // How to aim
54     self.aim_flags      = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_GROUNDGROUND;
55     self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL;
56
57     if (turret_stdproc_init("plasma_std", "models/turrets/base.md3", "models/turrets/plasma.md3", TID_PLASMA) == 0)
58     {
59         remove(self);
60         return;
61     }
62
63     self.damage_flags    |= TFL_DMG_HEADSHAKE;
64     self.firecheck_flags |= TFL_FIRECHECK_AFF;
65
66     // Our fireing routine
67     self.turret_firefunc  = turret_plasma_attack;
68
69     // Custom per turret frame stuff. usualy animation.
70     self.turret_postthink = turret_plasma_postthink;
71     turret_do_updates(self);
72 }
73
74
75 void turret_plasma_dual_init()
76 {
77     if (self.netname == "")      self.netname     = "Dual Plasma Cannon";
78
79     // What ammo to use
80     self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
81
82     // How to aim at targets
83     self.aim_flags      = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE  | TFL_AIM_GROUNDGROUND ;
84     self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL;
85
86     if (turret_stdproc_init("plasma_dual", "models/turrets/base.md3", "models/turrets/plasmad.md3", TID_PLASMA_DUAL) == 0)
87     {
88         remove(self);
89         return;
90     }
91
92     self.damage_flags    |= TFL_DMG_HEADSHAKE;
93     self.firecheck_flags |= TFL_FIRECHECK_AFF;
94
95     // Our fireing routine
96     self.turret_firefunc  = turret_plasma_dual_attack;
97
98     // Custom per turret frame stuff. usualy animation.
99     self.turret_postthink = turret_plasma_dual_postthink;
100 }
101
102
103 /*
104 * Basic moderate (std) or fast (dual) fireing, short-mid range energy cannon.
105 * Not too mutch of a therat on its own, but can be rather dangerous in groups.
106 * Regenerates ammo slowly, support with a fusionreactor(s) to do some real damage.
107 */
108
109 /*QUAKED turret_plasma (0 .5 .8) ?
110 */
111 void spawnfunc_turret_plasma()
112 {
113     g_turrets_common_precash();
114     precache_model ("models/turrets/plasma.md3");
115     precache_model ("models/turrets/base.md3");
116
117     self.think = turret_plasma_std_init;
118     self.nextthink = time + 0.5;
119 }
120
121 /*QUAKED turret_plasma_dual (0 .5 .8) ?
122 */
123 void spawnfunc_turret_plasma_dual()
124 {
125
126     precache_model ("models/turrets/plasmad.md3");
127     precache_model ("models/turrets/base.md3");
128
129     self.think = turret_plasma_dual_init;
130     self.nextthink = time + 0.5;
131 }
132