]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/server/w_hlac.qc
fix the other precaches
[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.flags = FL_PROJECTILE;\r
73         missile.projectiledeathtype = WEP_HLAC;\r
74 \r
75         CSQCProjectile(missile, TRUE, PROJECTILE_HLAC);\r
76 }\r
77 \r
78 void W_HLAC_Attack2f (void)\r
79 {\r
80         local entity missile;\r
81     float spread;\r
82 \r
83     spread = cvar("g_balance_hlac_secondary_spread");\r
84 \r
85 \r
86     if(self.crouch)\r
87         spread = spread * cvar("g_balance_hlac_secondary_spread_crouchmod");\r
88 \r
89         W_SetupShot (self, '25 8 -8', FALSE, 3, "weapons/lasergun_fire.wav");\r
90         pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);\r
91 \r
92         missile = spawn ();\r
93         missile.owner = self;\r
94         missile.classname = "hlacbolt";\r
95         // missile.dmg = issecondary;\r
96         missile.bot_dodge = TRUE;\r
97 \r
98     missile.bot_dodgerating = cvar("g_balance_hlac_secondary_damage");\r
99 \r
100         missile.movetype = MOVETYPE_FLY;\r
101         missile.solid = SOLID_BBOX;\r
102 \r
103         setmodel (missile, "models/hlac_bullet.md3"); // precision set below\r
104         setsize (missile, '0 0 0', '0 0 0');\r
105         setorigin (missile, w_shotorg);\r
106 \r
107     missile.velocity = (w_shotdir + randomvec() * spread) * cvar("g_balance_hlac_secondary_speed");\r
108 \r
109         W_SetupProjectileVelocity(missile);\r
110         missile.angles = vectoangles (missile.velocity);\r
111 \r
112         missile.touch = W_HLAC_Touch2;\r
113         missile.think = SUB_Remove;\r
114 \r
115     missile.nextthink = time + cvar("g_balance_hlac_secondary_lifetime");\r
116 \r
117         missile.flags = FL_PROJECTILE;\r
118         missile.projectiledeathtype = WEP_HLAC | HITTYPE_SECONDARY;\r
119 \r
120         CSQCProjectile(missile, TRUE, PROJECTILE_HLAC);\r
121 }\r
122 \r
123 void W_HLAC_Attack2 (void)\r
124 {\r
125     float i;\r
126 \r
127     if not(self.items & IT_UNLIMITED_WEAPON_AMMO)\r
128     {\r
129         self.ammo_cells = self.ammo_cells - cvar("g_balance_hlac_secondary_ammo");\r
130     }\r
131 \r
132     for(i=cvar("g_balance_hlac_secondary_shots");i>0;--i)\r
133         W_HLAC_Attack2f();\r
134 \r
135         if (!g_norecoil)\r
136         {\r
137                 self.punchangle_x = random () - 0.5;\r
138                 self.punchangle_y = random () - 0.5;\r
139         }\r
140 \r
141         // ATTACK_FINISHED(self) = time + cvar("g_balance_hlac_secondary_refire");\r
142 }\r
143 \r
144 \r
145 // weapon frames\r
146 void HLAC_fire1_02()\r
147 {\r
148         if(self.weapon != self.switchweapon) // abort immediately if switching\r
149         {\r
150                 w_ready();\r
151                 return;\r
152         }\r
153 \r
154         if (self.BUTTON_ATCK)\r
155         {\r
156                 if (!weapon_action(self.weapon, WR_CHECKAMMO1))\r
157                 {\r
158                         W_SwitchWeapon_Force(self, w_getbestweapon(self));\r
159                         w_ready();\r
160                         return;\r
161                 }\r
162 \r
163                 ATTACK_FINISHED(self) = time + cvar("g_balance_hlac_primary_refire");\r
164                 W_HLAC_Attack();\r
165                 self.HLAC_bulletcounter = self.HLAC_bulletcounter + 1;\r
166         weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_hlac_primary_refire"), HLAC_fire1_02);\r
167         }\r
168         else\r
169         {\r
170                 weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_hlac_primary_animtime"), w_ready);\r
171         }\r
172 };\r
173 \r
174 void spawnfunc_weapon_hlac (void)\r
175 {\r
176         weapon_defaultspawnfunc(WEP_HLAC);\r
177 }\r
178 \r
179 float w_hlac(float req)\r
180 {\r
181         if (req == WR_AIM)\r
182         self.BUTTON_ATCK = bot_aim(cvar("g_balance_hlac_primary_speed"), 0, cvar("g_balance_hlac_primary_lifetime"), FALSE);\r
183         else if (req == WR_THINK)\r
184         {\r
185                 if (self.BUTTON_ATCK)\r
186                 if (weapon_prepareattack(0, cvar("g_balance_hlac_primary_refire")))\r
187                 {\r
188                         self.HLAC_bulletcounter = 0;\r
189                         W_HLAC_Attack();\r
190                         weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_hlac_primary_refire"), HLAC_fire1_02);\r
191                 }\r
192 \r
193                 if (self.BUTTON_ATCK2)\r
194                 if (weapon_prepareattack(1, cvar("g_balance_hlac_secondary_refire")))\r
195                 {\r
196                         W_HLAC_Attack2();\r
197                         weapon_thinkf(WFRAME_FIRE2, cvar("g_balance_hlac_secondary_animtime"), w_ready);\r
198                 }\r
199 \r
200         }\r
201         else if (req == WR_PRECACHE)\r
202         {\r
203         precache_model ("models/weapons/g_hlac.md3");\r
204                 precache_model ("models/weapons/v_hlac.md3");\r
205                 precache_model ("models/weapons/w_hlac.zym");\r
206                 precache_sound ("weapons/lasergun_fire.wav");\r
207 \r
208         }\r
209         else if (req == WR_SETUP)\r
210                 weapon_setup(WEP_HLAC);\r
211         else if (req == WR_CHECKAMMO1)\r
212                 return self.ammo_cells >= cvar("g_balance_hlac_primary_ammo");\r
213         else if (req == WR_CHECKAMMO2)\r
214                 return self.ammo_cells >= cvar("g_balance_hlac_secondary_ammo");\r
215         else if (req == WR_SUICIDEMESSAGE)\r
216                 w_deathtypestring = "should have used a smaller gun";\r
217         else if (req == WR_KILLMESSAGE)\r
218                 w_deathtypestring = "was cut down by";\r
219         return TRUE;\r
220 };\r