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