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