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