]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/server/tturrets/units/unit_plasma.qc
fix a typo in walker code
[divverent/nexuiz.git] / data / qcsrc / server / tturrets / units / unit_plasma.qc
1 void spawnfunc_turret_plasma();\r
2 void spawnfunc_turret_plasma_dual();\r
3 \r
4 void turret_plasma_std_init();\r
5 void turret_plasma_dual_init();\r
6 \r
7 void turret_plasma_attack();\r
8 void turret_plasma_projectile_explode();\r
9 \r
10 void turret_plasma_postthink()\r
11 {\r
12     if (self.tur_head.frame != 0)\r
13         self.tur_head.frame = self.tur_head.frame + 1;\r
14 \r
15     if (self.tur_head.frame > 5)\r
16         self.tur_head.frame = 0;\r
17 }\r
18 \r
19 void turret_plasma_dual_postthink()\r
20 {\r
21     if ((self.tur_head.frame != 0) && (self.tur_head.frame != 3))\r
22         self.tur_head.frame = self.tur_head.frame + 1;\r
23 \r
24     if (self.tur_head.frame > 6)\r
25         self.tur_head.frame = 0;\r
26 }\r
27 \r
28 void turret_plasma_attack()\r
29 {\r
30     entity proj;\r
31 \r
32     sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);\r
33     pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);\r
34 \r
35     proj                    = spawn ();\r
36     setorigin(proj, self.tur_shotorg);\r
37     setsize(proj, '-1 -1 -1', '1 1 1');\r
38     proj.classname       = "plasmabomb";\r
39     proj.owner           = self;\r
40     proj.bot_dodge       = TRUE;\r
41     proj.bot_dodgerating = self.shot_dmg;\r
42     proj.think           = turret_plasma_projectile_explode;\r
43     proj.nextthink       = time + 9;\r
44     proj.solid           = SOLID_BBOX;\r
45     proj.movetype        = MOVETYPE_FLYMISSILE;\r
46     proj.velocity        = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;\r
47     //proj.velocity        = self.tur_shotdir_updated  * self.shot_speed;\r
48     proj.touch           = turret_plasma_projectile_explode;\r
49     proj.flags           = FL_PROJECTILE;\r
50     proj.enemy           = self.enemy;\r
51     proj.flags           = FL_PROJECTILE | FL_NOTARGET;\r
52 \r
53     CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO_BEAM, TRUE);\r
54 \r
55     if (self.tur_head.frame == 0)\r
56         self.tur_head.frame = 1;\r
57 }\r
58 \r
59 void turret_plasma_dual_attack()\r
60 {\r
61     entity proj;\r
62 \r
63     sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM);\r
64     proj                    = spawn ();\r
65     setorigin(proj, self.tur_shotorg);\r
66     setsize(proj, '0 0 0', '0 0 0');\r
67     proj.classname       = "plasmabomb";\r
68     proj.owner           = self;\r
69     proj.bot_dodge       = TRUE;\r
70     proj.bot_dodgerating = self.shot_dmg;\r
71     proj.think           = turret_plasma_projectile_explode;\r
72     proj.nextthink       = time + 9;\r
73     proj.solid           = SOLID_BBOX;\r
74     proj.movetype        = MOVETYPE_FLYMISSILE;\r
75     proj.velocity        = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;\r
76     //proj.velocity        = self.tur_shotdir_updated  * self.shot_speed;\r
77     proj.touch           = turret_plasma_projectile_explode;\r
78     proj.flags           = FL_PROJECTILE;\r
79     proj.enemy           = self.enemy;\r
80     proj.flags           = FL_PROJECTILE | FL_NOTARGET;\r
81 \r
82     self.tur_head.frame += 1;\r
83 \r
84     CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO_BEAM, TRUE);\r
85 }\r
86 \r
87 void turret_plasma_projectile_explode()\r
88 {\r
89     vector org2;\r
90 \r
91     org2 = findbetterlocation (self.origin, 8);\r
92     WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);\r
93     WriteByte (MSG_BROADCAST, 79);\r
94     WriteCoord (MSG_BROADCAST, org2_x);\r
95     WriteCoord (MSG_BROADCAST, org2_y);\r
96     WriteCoord (MSG_BROADCAST, org2_z);\r
97     WriteCoord (MSG_BROADCAST, 0);              // SeienAbunae: groan... Useless clutter\r
98     WriteCoord (MSG_BROADCAST, 0);\r
99     WriteCoord (MSG_BROADCAST, 0);\r
100     WriteByte (MSG_BROADCAST, 155);\r
101 \r
102     self.event_damage = SUB_Null;\r
103     //w_deathtypestring = "ate to much plasma";\r
104 #ifdef TURRET_DEBUG\r
105     float d;\r
106 \r
107     d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);\r
108     self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;\r
109     self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;\r
110 #else\r
111     RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);\r
112 #endif\r
113     sound (self, CHAN_PROJECTILE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);\r
114 \r
115     remove (self);\r
116 }\r
117 \r
118 void turret_plasma_std_init()\r
119 {\r
120     if (self.netname == "")      self.netname     = "Plasma Cannon";\r
121 \r
122     // What ammo to use\r
123     self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;\r
124 \r
125     // How to aim\r
126     //self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_ZPREDICT | TFL_AIM_GROUND2;\r
127     self.aim_flags      = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_GROUND2;\r
128     self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MISSILEKILL;\r
129 \r
130     if (turret_stdproc_init("plasma_std") == 0)\r
131     {\r
132         remove(self);\r
133         return;\r
134     }\r
135 \r
136     self.damage_flags    |= TFL_DMG_HEADSHAKE;\r
137 \r
138     //self.firecheck_flags |= (TFL_FIRECHECK_AFF | TFL_FIRECHECK_VERIFIED);\r
139     self.firecheck_flags |= TFL_FIRECHECK_AFF;\r
140 \r
141     //self.target_select_flags |= TFL_TARGETSELECT_FOV;\r
142     //self.target_select_fov    = 45;\r
143 \r
144     setmodel(self,"models/turrets/base.md3");\r
145     setmodel(self.tur_head,"models/turrets/plasma.md3");\r
146 \r
147     if (!turret_tag_setup())\r
148         dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");\r
149 \r
150     // Our fireing routine\r
151     self.turret_firefunc  = turret_plasma_attack;\r
152 \r
153     // Custom per turret frame stuff. usualy animation.\r
154     self.turret_postthink = turret_plasma_postthink;\r
155     turret_do_updates(self);\r
156 }\r
157 \r
158 \r
159 void turret_plasma_dual_init()\r
160 {\r
161     if (self.netname == "")      self.netname     = "Dual Plasma Cannon";\r
162 \r
163     // What ammo to use\r
164     self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;\r
165 \r
166     // How to aim at targets\r
167     self.aim_flags      = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE  | TFL_AIM_GROUND2 ;\r
168     self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL;\r
169 \r
170     if (turret_stdproc_init("plasma_dual") == 0)\r
171     {\r
172         remove(self);\r
173         return;\r
174     }\r
175 \r
176     self.damage_flags    |= TFL_DMG_HEADSHAKE;\r
177     //self.firecheck_flags |= (TFL_FIRECHECK_AFF | TFL_FIRECHECK_VERIFIED);\r
178     //self.firecheck_flags |= TFL_FIRECHECK_AFF;\r
179 \r
180     setmodel(self,"models/turrets/base.md3");\r
181     setmodel(self.tur_head,"models/turrets/plasmad.md3");\r
182 \r
183 \r
184     if (!turret_tag_setup())\r
185         dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");\r
186 \r
187     // Our fireing routine\r
188     self.turret_firefunc  = turret_plasma_dual_attack;\r
189 \r
190     // Custom per turret frame stuff. usualy animation.\r
191     self.turret_postthink = turret_plasma_dual_postthink;\r
192 }\r
193 \r
194 \r
195 /*\r
196 * Basic moderate (std) or fast (dual) fireing, short-mid range energy cannon.\r
197 * Not too mutch of a therat on its own, but can be rather dangerous in groups.\r
198 * Regenerates ammo slowly, support with a fusionreactor(s) to do some real damage.\r
199 */\r
200 \r
201 /*QUAKED turret_plasma (0 .5 .8) ?\r
202 */\r
203 void spawnfunc_turret_plasma()\r
204 {\r
205     g_turrets_common_precash();\r
206     precache_model ("models/turrets/plasma.md3");\r
207     precache_model ("models/turrets/base.md3");\r
208 \r
209     self.think = turret_plasma_std_init;\r
210     self.nextthink = time + 0.5;\r
211 }\r
212 \r
213 /*QUAKED turret_plasma_dual (0 .5 .8) ?\r
214 */\r
215 void spawnfunc_turret_plasma_dual()\r
216 {\r
217 \r
218     precache_model ("models/turrets/plasmad.md3");\r
219     precache_model ("models/turrets/base.md3");\r
220 \r
221     self.think = turret_plasma_dual_init;\r
222     self.nextthink = time + 0.5;\r
223 }\r
224 \r