]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/server/w_hlac.qc
forgot this one
[divverent/nexuiz.git] / data / qcsrc / server / w_hlac.qc
1 .float HLAC_bulletcounter;\r
2 void W_HLAC_Touch (void)\r
3 {\r
4         vector  dir;\r
5         vector org2;\r
6         vector normal;\r
7 \r
8         PROJECTILE_TOUCH;\r
9 \r
10         normal = trace_plane_normal;\r
11         dir = normalize (self.owner.origin - self.origin);\r
12         org2 = findbetterlocation (self.origin, 8);\r
13 \r
14         pointparticles(particleeffectnum("laser_impact"), org2, normal * 1000, 1);\r
15 \r
16         self.event_damage = SUB_Null;\r
17 \r
18     RadiusDamage (self, self.owner, cvar("g_balance_hlac_primary_damage"), cvar("g_balance_hlac_primary_edgedamage"), cvar("g_balance_hlac_primary_radius"), world, cvar("g_balance_hlac_primary_force"), self.projectiledeathtype, other);\r
19         sound (self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);\r
20 \r
21         remove (self);\r
22 }\r
23 \r
24 void W_HLAC_Touch2 (void)\r
25 {\r
26         vector  dir;\r
27         vector org2;\r
28         vector normal;\r
29 \r
30         PROJECTILE_TOUCH;\r
31 \r
32         normal = trace_plane_normal;\r
33         dir = normalize (self.owner.origin - self.origin);\r
34         org2 = findbetterlocation (self.origin, 8);\r
35 \r
36         pointparticles(particleeffectnum("laser_impact"), org2, normal * 1000, 1);\r
37 \r
38         //self.event_damage = SUB_Null;\r
39 \r
40     RadiusDamage (self, self.owner, cvar("g_balance_hlac_secondary_damage"), cvar("g_balance_hlac_secondary_edgedamage"), cvar("g_balance_hlac_secondary_radius"), world, cvar("g_balance_hlac_secondary_force"), self.projectiledeathtype, other);\r
41         sound (self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);\r
42 \r
43         remove (self);\r
44 }\r
45 \r
46 void W_HLAC_Attack (void)\r
47 {\r
48         local entity missile;\r
49     float spread;\r
50 \r
51     if not(self.items & IT_UNLIMITED_WEAPON_AMMO)\r
52     {\r
53         self.ammo_cells = self.ammo_cells - cvar("g_balance_hlac_primary_ammo");\r
54     }\r
55 \r
56     spread = cvar("g_balance_hlac_primary_spread_min") + (cvar("g_balance_hlac_primary_spread_add") * self.HLAC_bulletcounter);\r
57     spread = min(spread,cvar("g_balance_hlac_primary_spread_max"));\r
58     if(self.crouch)\r
59         spread = spread * cvar("g_balance_hlac_primary_spread_crouchmod");\r
60 \r
61         W_SetupShot (self, '25 8 -8', FALSE, 3, "weapons/lasergun_fire.wav");\r
62         pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);\r
63         if (!g_norecoil)\r
64         {\r
65                 self.punchangle_x = random () - 0.5;\r
66                 self.punchangle_y = random () - 0.5;\r
67         }\r
68 \r
69         missile = spawn ();\r
70         missile.owner = self;\r
71         missile.classname = "hlacbolt";\r
72         // missile.dmg = issecondary;\r
73         missile.bot_dodge = TRUE;\r
74 \r
75     missile.bot_dodgerating = cvar("g_balance_hlac_primary_damage");\r
76 \r
77         missile.movetype = MOVETYPE_FLY;\r
78         missile.solid = SOLID_BBOX;\r
79 \r
80         setmodel (missile, "models/hlac_bullet.md3"); // precision set below\r
81         setsize (missile, '0 0 0', '0 0 0');\r
82         setorigin (missile, w_shotorg);\r
83 \r
84     missile.velocity = (w_shotdir + randomvec() * spread) * cvar("g_balance_hlac_primary_speed");\r
85 \r
86         W_SetupProjectileVelocity(missile);\r
87         missile.angles = vectoangles (missile.velocity);\r
88 \r
89         missile.touch = W_HLAC_Touch;\r
90         missile.think = SUB_Remove;\r
91 \r
92     missile.nextthink = time + cvar("g_balance_hlac_primary_lifetime");\r
93 \r
94         missile.effects = EF_LOWPRECISION;\r
95         missile.flags = FL_PROJECTILE;\r
96         missile.projectiledeathtype = WEP_HLAC;\r
97 }\r
98 \r
99 void W_HLAC_Attack2f (void)\r
100 {\r
101         local entity missile;\r
102     float spread;\r
103 \r
104     spread = cvar("g_balance_hlac_secondary_spread");\r
105 \r
106 \r
107     if(self.crouch)\r
108         spread = spread * cvar("g_balance_hlac_secondary_spread_crouchmod");\r
109 \r
110         W_SetupShot (self, '25 8 -8', FALSE, 3, "weapons/lasergun_fire.wav");\r
111         pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);\r
112 \r
113         missile = spawn ();\r
114         missile.owner = self;\r
115         missile.classname = "hlacbolt";\r
116         // missile.dmg = issecondary;\r
117         missile.bot_dodge = TRUE;\r
118 \r
119     missile.bot_dodgerating = cvar("g_balance_hlac_secondary_damage");\r
120 \r
121         missile.movetype = MOVETYPE_FLY;\r
122         missile.solid = SOLID_BBOX;\r
123 \r
124         setmodel (missile, "models/hlac_bullet.md3"); // precision set below\r
125         setsize (missile, '0 0 0', '0 0 0');\r
126         setorigin (missile, w_shotorg);\r
127 \r
128     missile.velocity = (w_shotdir + randomvec() * spread) * cvar("g_balance_hlac_secondary_speed");\r
129 \r
130         W_SetupProjectileVelocity(missile);\r
131         missile.angles = vectoangles (missile.velocity);\r
132 \r
133         missile.touch = W_HLAC_Touch2;\r
134         missile.think = SUB_Remove;\r
135 \r
136     missile.nextthink = time + cvar("g_balance_hlac_secondary_lifetime");\r
137 \r
138         missile.effects = EF_LOWPRECISION;\r
139         missile.flags = FL_PROJECTILE;\r
140         missile.projectiledeathtype = WEP_HLAC | HITTYPE_SECONDARY;\r
141 }\r
142 \r
143 void W_HLAC_Attack2 (void)\r
144 {\r
145     float i;\r
146 \r
147     if not(self.items & IT_UNLIMITED_WEAPON_AMMO)\r
148     {\r
149         self.ammo_cells = self.ammo_cells - cvar("g_balance_hlac_secondary_ammo");\r
150     }\r
151 \r
152     for(i=cvar("g_balance_hlac_secondary_shots");i>0;--i)\r
153         W_HLAC_Attack2f();\r
154 \r
155         if (!g_norecoil)\r
156         {\r
157                 self.punchangle_x = random () - 0.5;\r
158                 self.punchangle_y = random () - 0.5;\r
159         }\r
160 \r
161         // ATTACK_FINISHED(self) = time + cvar("g_balance_hlac_secondary_refire");\r
162 }\r
163 \r
164 \r
165 // weapon frames\r
166 void HLAC_fire1_02()\r
167 {\r
168         if(self.weapon != self.switchweapon) // abort immediately if switching\r
169         {\r
170                 w_ready();\r
171                 return;\r
172         }\r
173 \r
174         if (self.BUTTON_ATCK)\r
175         {\r
176                 if (!weapon_action(self.weapon, WR_CHECKAMMO1))\r
177                 {\r
178                         W_SwitchWeapon_Force(self, w_getbestweapon(self));\r
179                         w_ready();\r
180                         return;\r
181                 }\r
182 \r
183                 ATTACK_FINISHED(self) = time + cvar("g_balance_hlac_primary_refire");\r
184                 W_HLAC_Attack();\r
185                 self.HLAC_bulletcounter = self.HLAC_bulletcounter + 1;\r
186         weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_hlac_primary_refire"), HLAC_fire1_02);\r
187         }\r
188         else\r
189         {\r
190                 weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_hlac_primary_animtime"), w_ready);\r
191         }\r
192 };\r
193 \r
194 void spawnfunc_weapon_hlac (void)\r
195 {\r
196         weapon_defaultspawnfunc(WEP_HLAC);\r
197 }\r
198 \r
199 float w_hlac(float req)\r
200 {\r
201         if (req == WR_AIM)\r
202         self.BUTTON_ATCK = bot_aim(cvar("g_balance_hlac_primary_speed"), 0, cvar("g_balance_hlac_primary_lifetime"), FALSE);\r
203         else if (req == WR_THINK)\r
204         {\r
205                 if (self.BUTTON_ATCK)\r
206                 if (weapon_prepareattack(0, cvar("g_balance_hlac_primary_refire")))\r
207                 {\r
208                         self.HLAC_bulletcounter = 0;\r
209                         W_HLAC_Attack();\r
210                         weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_hlac_primary_refire"), HLAC_fire1_02);\r
211                 }\r
212 \r
213                 if (self.BUTTON_ATCK2)\r
214                 if (weapon_prepareattack(1, cvar("g_balance_hlac_secondary_refire")))\r
215                 {\r
216                         W_HLAC_Attack2();\r
217                         weapon_thinkf(WFRAME_FIRE2, cvar("g_balance_hlac_secondary_animtime"), w_ready);\r
218                 }\r
219 \r
220         }\r
221         else if (req == WR_PRECACHE)\r
222         {\r
223             precache_sound ("weapons/laserimpact.wav");\r
224         precache_sound ("weapons/lasergun_fire.wav");\r
225 \r
226         precache_model ("models/weapons/g_hlac.md3");\r
227                 precache_model ("models/weapons/v_hlac.md3");\r
228                 precache_model ("models/weapons/w_hlac.zym");\r
229                 precache_sound ("weapons/lasergun_fire.wav");\r
230 \r
231                 precache_model ("models/hlac_bullet.md3");\r
232 \r
233         }\r
234         else if (req == WR_SETUP)\r
235                 weapon_setup(WEP_HLAC);\r
236         else if (req == WR_CHECKAMMO1)\r
237                 return self.ammo_cells >= cvar("g_balance_hlac_primary_ammo");\r
238         else if (req == WR_CHECKAMMO2)\r
239                 return self.ammo_cells >= cvar("g_balance_hlac_secondary_ammo");\r
240         else if (req == WR_SUICIDEMESSAGE)\r
241                 w_deathtypestring = "should have used a smaller gun";\r
242         else if (req == WR_KILLMESSAGE)\r
243                 w_deathtypestring = "was cut down by";\r
244         return TRUE;\r
245 };\r