202 newDy:= yy*Power/cPowerDivisor; |
230 newDy:= yy*Power/cPowerDivisor; |
203 altUse:= false |
231 altUse:= false |
204 end; |
232 end; |
205 |
233 |
206 case CurAmmoType of |
234 case CurAmmoType of |
207 amGrenade: FollowGear:= AddGear(hwRound(lx), hwRound(ly), gtGrenade, 0, newDx, newDy, CurWeapon^.Timer); |
235 amGrenade: newGear:= AddGear(hwRound(lx), hwRound(ly), gtGrenade, 0, newDx, newDy, CurWeapon^.Timer); |
208 amMolotov: FollowGear:= AddGear(hwRound(lx), hwRound(ly), gtMolotov, 0, newDx, newDy, 0); |
236 amMolotov: newGear:= AddGear(hwRound(lx), hwRound(ly), gtMolotov, 0, newDx, newDy, 0); |
209 amClusterBomb: FollowGear:= AddGear(hwRound(lx), hwRound(ly), gtClusterBomb, 0, newDx, newDy, CurWeapon^.Timer); |
237 amClusterBomb: newGear:= AddGear(hwRound(lx), hwRound(ly), gtClusterBomb, 0, newDx, newDy, CurWeapon^.Timer); |
210 amGasBomb: FollowGear:= AddGear(hwRound(lx), hwRound(ly), gtGasBomb, 0, newDx, newDy, CurWeapon^.Timer); |
238 amGasBomb: newGear:= AddGear(hwRound(lx), hwRound(ly), gtGasBomb, 0, newDx, newDy, CurWeapon^.Timer); |
211 amBazooka: FollowGear:= AddGear(hwRound(lx), hwRound(ly), gtShell, 0, newDx, newDy, 0); |
239 amBazooka: newGear:= AddGear(hwRound(lx), hwRound(ly), gtShell, 0, newDx, newDy, 0); |
212 amSnowball: FollowGear:= AddGear(hwRound(lx), hwRound(ly), gtSnowball, 0, newDx, newDy, 0); |
240 amSnowball: newGear:= AddGear(hwRound(lx), hwRound(ly), gtSnowball, 0, newDx, newDy, 0); |
213 amBee: FollowGear:= AddGear(hwRound(lx), hwRound(ly), gtBee, 0, newDx, newDy, 0); |
241 amBee: newGear:= AddGear(hwRound(lx), hwRound(ly), gtBee, 0, newDx, newDy, 0); |
214 amShotgun: begin |
242 amShotgun: begin |
215 PlaySound(sndShotgunReload); |
243 PlaySound(sndShotgunReload); |
216 CurAmmoGear:= AddGear(hwRound(lx), hwRound(ly), gtShotgunShot, 0, xx * _0_5, yy * _0_5, 0); |
244 newGear:= AddGear(hwRound(lx), hwRound(ly), gtShotgunShot, 0, xx * _0_5, yy * _0_5, 0); |
217 end; |
245 end; |
218 amPickHammer: CurAmmoGear:= AddGear(hwRound(lx), hwRound(ly) + cHHRadius, gtPickHammer, 0, _0, _0, 0); |
246 amPickHammer: newGear:= AddGear(hwRound(lx), hwRound(ly) + cHHRadius, gtPickHammer, 0, _0, _0, 0); |
219 amSkip: ParseCommand('/skip', true); |
247 amSkip: ParseCommand('/skip', true); |
220 amRope: CurAmmoGear:= AddGear(hwRound(lx), hwRound(ly), gtRope, 0, xx, yy, 0); |
248 amRope: newGear:= AddGear(hwRound(lx), hwRound(ly), gtRope, 0, xx, yy, 0); |
221 amMine: if altUse then |
249 amMine: if altUse then |
222 AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtMine, gstWait, newDx, newDy, 3000) |
250 newGear:= AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtMine, gstWait, newDx, newDy, 3000) |
223 else |
251 else |
224 AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtMine, gstWait, SignAs(_0_02, dX), _0, 3000); |
252 newGear:= AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtMine, gstWait, SignAs(_0_02, dX), _0, 3000); |
225 amSMine: FollowGear:= AddGear(hwRound(lx), hwRound(ly), gtSMine, 0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 0); |
253 amSMine: newGear:= AddGear(hwRound(lx), hwRound(ly), gtSMine, 0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 0); |
226 amDEagle: CurAmmoGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtDEagleShot, 0, xx * _0_5, yy * _0_5, 0); |
254 amDEagle: newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtDEagleShot, 0, xx * _0_5, yy * _0_5, 0); |
227 amSineGun: CurAmmoGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtSineGunShot, 0, xx * _0_5, yy * _0_5, 0); |
255 amSineGun: newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtSineGunShot, 0, xx * _0_5, yy * _0_5, 0); |
228 amPortalGun: begin |
256 amPortalGun: begin |
229 AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtPortal, 0, xx * _0_6, yy * _0_6, |
257 newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtPortal, 0, xx * _0_6, yy * _0_6, |
230 // set selected color |
258 // set selected color |
231 CurWeapon^.Pos); |
259 CurWeapon^.Pos); |
232 end; |
260 end; |
233 amSniperRifle: begin |
261 amSniperRifle: begin |
234 PlaySound(sndSniperReload); |
262 PlaySound(sndSniperReload); |
235 CurAmmoGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtSniperRifleShot, 0, xx * _0_5, yy * _0_5, 0); |
263 newGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtSniperRifleShot, 0, xx * _0_5, yy * _0_5, 0); |
236 end; |
264 end; |
237 amDynamite: AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtDynamite, 0, SignAs(_0_03, dX), _0, 5000); |
265 amDynamite: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtDynamite, 0, SignAs(_0_03, dX), _0, 5000); |
238 amFirePunch: CurAmmoGear:= AddGear(hwRound(lx) + hwSign(dX) * 10, hwRound(ly), gtFirePunch, 0, xx, _0, 0); |
266 amFirePunch: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 10, hwRound(ly), gtFirePunch, 0, xx, _0, 0); |
239 amWhip: begin |
267 amWhip: begin |
240 CurAmmoGear:= AddGear(hwRound(lx) + hwSign(dX) * 10, hwRound(ly), gtWhip, 0, SignAs(_1, dX), - _0_8, 0); |
268 newGear:= AddGear(hwRound(lx) + hwSign(dX) * 10, hwRound(ly), gtWhip, 0, SignAs(_1, dX), - _0_8, 0); |
241 PlaySound(sndWhipCrack) |
269 PlaySound(sndWhipCrack) |
242 end; |
270 end; |
243 amHammer: begin |
271 amHammer: begin |
244 CurAmmoGear:= AddGear(hwRound(lx) + hwSign(dX) * 10, hwRound(ly), gtHammer, 0, SignAs(_1, dX), - _0_8, 0); |
272 newGear:= AddGear(hwRound(lx) + hwSign(dX) * 10, hwRound(ly), gtHammer, 0, SignAs(_1, dX), - _0_8, 0); |
245 PlaySound(sndWhack) |
273 PlaySound(sndWhack) |
246 end; |
274 end; |
247 amBaseballBat: begin |
275 amBaseballBat: begin |
248 CurAmmoGear:= AddGear(hwRound(lx) + hwSign(dX) * 10, hwRound(ly), gtShover, gsttmpFlag, xx * _0_5, yy * _0_5, 0); |
276 newGear:= AddGear(hwRound(lx) + hwSign(dX) * 10, hwRound(ly), gtShover, gsttmpFlag, xx * _0_5, yy * _0_5, 0); |
249 PlaySound(sndBaseballBat) // TODO: Only play if something is hit? |
277 PlaySound(sndBaseballBat) // TODO: Only play if something is hit? |
250 end; |
278 end; |
251 amParachute: begin |
279 amParachute: begin |
252 CurAmmoGear:= AddGear(hwRound(lx), hwRound(ly), gtParachute, 0, _0, _0, 0); |
280 newGear:= AddGear(hwRound(lx), hwRound(ly), gtParachute, 0, _0, _0, 0); |
253 PlaySound(sndParachute) |
281 PlaySound(sndParachute) |
254 end; |
282 end; |
255 // we save CurWeapon^.Pos (in this case: cursor direction) by using it as (otherwise irrelevant) X value of the new gear. |
283 // we save CurWeapon^.Pos (in this case: cursor direction) by using it as (otherwise irrelevant) X value of the new gear. |
256 amAirAttack: AddGear(CurWeapon^.Pos, 0, gtAirAttack, 0, _0, _0, 0); |
284 amAirAttack: newGear:= AddGear(CurWeapon^.Pos, 0, gtAirAttack, 0, _0, _0, 0); |
257 amMineStrike: AddGear(CurWeapon^.Pos, 0, gtAirAttack, 1, _0, _0, 0); |
285 amMineStrike: newGear:= AddGear(CurWeapon^.Pos, 0, gtAirAttack, 1, _0, _0, 0); |
258 amBlowTorch: CurAmmoGear:= AddGear(hwRound(lx), hwRound(ly), gtBlowTorch, 0, SignAs(_0_5, dX), _0, 0); |
286 amBlowTorch: newGear:= AddGear(hwRound(lx), hwRound(ly), gtBlowTorch, 0, SignAs(_0_5, dX), _0, 0); |
259 amGirder: CurAmmoGear:= AddGear(0, 0, gtGirder, CurWeapon^.Pos, _0, _0, 0); |
287 amGirder: newGear:= AddGear(0, 0, gtGirder, CurWeapon^.Pos, _0, _0, 0); |
260 amTeleport: CurAmmoGear:= AddGear(CurWeapon^.Pos, 0, gtTeleport, 0, _0, _0, 0); |
288 amTeleport: newGear:= AddGear(CurWeapon^.Pos, 0, gtTeleport, 0, _0, _0, 0); |
261 amSwitch: CurAmmoGear:= AddGear(hwRound(lx), hwRound(ly), gtSwitcher, 0, _0, _0, 0); |
289 amSwitch: newGear:= AddGear(hwRound(lx), hwRound(ly), gtSwitcher, 0, _0, _0, 0); |
262 amMortar: begin |
290 amMortar: begin |
263 playSound(sndMortar); |
291 playSound(sndMortar); |
264 FollowGear:= AddGear(hwRound(lx), hwRound(ly), gtMortar, 0, xx*cMaxPower/cPowerDivisor, yy*cMaxPower/cPowerDivisor, 0); |
292 newGear:= AddGear(hwRound(lx), hwRound(ly), gtMortar, 0, xx*cMaxPower/cPowerDivisor, yy*cMaxPower/cPowerDivisor, 0); |
265 end; |
293 end; |
266 amRCPlane: begin |
294 amRCPlane: begin |
267 CurAmmoGear:= AddGear(hwRound(lx), hwRound(ly), gtRCPlane, 0, xx * cMaxPower / cPowerDivisor / 4, yy * cMaxPower / cPowerDivisor / 4, 0); |
295 newGear:= AddGear(hwRound(lx), hwRound(ly), gtRCPlane, 0, xx * cMaxPower / cPowerDivisor / 4, yy * cMaxPower / cPowerDivisor / 4, 0); |
268 CurAmmoGear^.SoundChannel:= LoopSound(sndRCPlane, nil) |
296 newGear^.SoundChannel:= LoopSound(sndRCPlane, nil) |
269 end; |
297 end; |
270 amKamikaze: CurAmmoGear:= AddGear(hwRound(lx), hwRound(ly), gtKamikaze, 0, xx * _0_5, yy * _0_5, 0); |
298 amKamikaze: newGear:= AddGear(hwRound(lx), hwRound(ly), gtKamikaze, 0, xx * _0_5, yy * _0_5, 0); |
271 amCake: CurAmmoGear:= AddGear(hwRound(lx) + hwSign(dX) * 3, hwRound(ly), gtCake, 0, xx, _0, 0); |
299 amCake: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 3, hwRound(ly), gtCake, 0, xx, _0, 0); |
272 amSeduction: CurAmmoGear:= AddGear(hwRound(lx + xx * cHHRadius * 2), hwRound(ly + yy * cHHRadius * 2), gtSeduction, 0, xx * _0_4, yy * _0_4, 0); |
300 amSeduction: newGear:= AddGear(hwRound(lx + xx * cHHRadius * 2), hwRound(ly + yy * cHHRadius * 2), gtSeduction, 0, xx * _0_4, yy * _0_4, 0); |
273 amWatermelon: FollowGear:= AddGear(hwRound(lx), hwRound(ly), gtWatermelon, 0, newDx, newDy, CurWeapon^.Timer); |
301 amWatermelon: newGear:= AddGear(hwRound(lx), hwRound(ly), gtWatermelon, 0, newDx, newDy, CurWeapon^.Timer); |
274 amHellishBomb: FollowGear:= AddGear(hwRound(lx), hwRound(ly), gtHellishBomb, 0, newDx, newDy, 0); |
302 amHellishBomb: newGear:= AddGear(hwRound(lx), hwRound(ly), gtHellishBomb, 0, newDx, newDy, 0); |
275 amNapalm: AddGear(CurWeapon^.Pos, 0, gtAirAttack, 2, _0, _0, 0); |
303 amNapalm: newGear:= AddGear(CurWeapon^.Pos, 0, gtAirAttack, 2, _0, _0, 0); |
276 amDrill: FollowGear:= AddGear(hwRound(lx), hwRound(ly), gtDrill, 0, newDx, newDy, 0); |
304 amDrill: newGear:= AddGear(hwRound(lx), hwRound(ly), gtDrill, 0, newDx, newDy, 0); |
277 amBallgun: CurAmmoGear:= AddGear(hwRound(X), hwRound(Y), gtBallgun, 0, xx * _0_5, yy * _0_5, 0); |
305 amBallgun: newGear:= AddGear(hwRound(X), hwRound(Y), gtBallgun, 0, xx * _0_5, yy * _0_5, 0); |
278 amJetpack: CurAmmoGear:= AddGear(hwRound(lx), hwRound(ly), gtJetpack, 0, _0, _0, 0); |
306 amJetpack: newGear:= AddGear(hwRound(lx), hwRound(ly), gtJetpack, 0, _0, _0, 0); |
279 amBirdy: begin |
307 amBirdy: begin |
280 PlaySound(sndWhistle); |
308 PlaySound(sndWhistle); |
281 CurAmmoGear:= AddGear(hwRound(lx), hwRound(ly) - 32, gtBirdy, 0, _0, _0, 0); |
309 newGear:= AddGear(hwRound(lx), hwRound(ly) - 32, gtBirdy, 0, _0, _0, 0); |
282 end; |
310 end; |
283 amLowGravity: begin |
311 amLowGravity: begin |
284 PlaySound(sndLowGravity); |
312 PlaySound(sndLowGravity); |
285 cGravity:= cMaxWindSpeed; |
313 cGravity:= cMaxWindSpeed; |
286 cGravityf:= 0.00025 |
314 cGravityf:= 0.00025 |
302 amPiano: begin |
330 amPiano: begin |
303 // Tuck the hedgehog away until the piano attack is completed |
331 // Tuck the hedgehog away until the piano attack is completed |
304 Unplaced:= true; |
332 Unplaced:= true; |
305 X:= _0; |
333 X:= _0; |
306 Y:= _0; |
334 Y:= _0; |
307 FollowGear:= AddGear(TargetPoint.X, 0, gtPiano, 0, _0, _0, 0); |
335 newGear:= AddGear(TargetPoint.X, 0, gtPiano, 0, _0, _0, 0); |
308 PauseMusic |
336 PauseMusic |
309 end; |
337 end; |
310 amFlamethrower: CurAmmoGear:= AddGear(hwRound(X), hwRound(Y), gtFlamethrower, 0, xx * _0_5, yy * _0_5, 0); |
338 amFlamethrower: newGear:= AddGear(hwRound(X), hwRound(Y), gtFlamethrower, 0, xx * _0_5, yy * _0_5, 0); |
311 amLandGun: CurAmmoGear:= AddGear(hwRound(X), hwRound(Y), gtLandGun, 0, xx * _0_5, yy * _0_5, 0); |
339 amLandGun: newGear:= AddGear(hwRound(X), hwRound(Y), gtLandGun, 0, xx * _0_5, yy * _0_5, 0); |
312 amResurrector: begin |
340 amResurrector: begin |
313 CurAmmoGear:= AddGear(hwRound(lx), hwRound(ly), |
341 newGear:= AddGear(hwRound(lx), hwRound(ly), |
314 gtResurrector, 0, _0, _0, 0); |
342 gtResurrector, 0, _0, _0, 0); |
315 CurAmmoGear^.SoundChannel := LoopSound(sndResurrector); |
343 newGear^.SoundChannel := LoopSound(sndResurrector); |
316 end; |
344 end; |
317 amDrillStrike: AddGear(CurWeapon^.Pos, 0, gtAirAttack, 3, _0, _0, CurWeapon^.Timer); |
345 amDrillStrike: newGear:= AddGear(CurWeapon^.Pos, 0, gtAirAttack, 3, _0, _0, CurWeapon^.Timer); |
318 //amMelonStrike: AddGear(CurWeapon^.Pos, 0, gtAirAttack, 4, _0, _0, 0); |
346 //amMelonStrike: AddGear(CurWeapon^.Pos, 0, gtAirAttack, 4, _0, _0, 0); |
319 amStructure: CurAmmoGear:= AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtStructure, gstWait, SignAs(_0_02, dX), _0, 3000); |
347 amStructure: newGear:= AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtStructure, gstWait, SignAs(_0_02, dX), _0, 3000); |
320 amTardis: CurAmmoGear:= AddGear(hwRound(X), hwRound(Y), gtTardis, 0, _0, _0, 5000); |
348 amTardis: newGear:= AddGear(hwRound(X), hwRound(Y), gtTardis, 0, _0, _0, 5000); |
|
349 end; |
|
350 case CurAmmoType of |
|
351 amGrenade, amMolotov, |
|
352 amClusterBomb, amGasBomb, |
|
353 amBazooka, amSnowball, |
|
354 amBee, amSMine, |
|
355 amMortar, amWatermelon, |
|
356 amHellishBomb, amDrill, |
|
357 amPiano: FollowGear:= newGear; |
|
358 |
|
359 amShotgun, amPickHammer, |
|
360 amRope, amDEagle, |
|
361 amSineGun, amSniperRifle, |
|
362 amFirePunch, amWhip, |
|
363 amHammer, amBaseballBat, |
|
364 amParachute, amBlowTorch, |
|
365 amGirder, amTeleport, |
|
366 amSwitch, amRCPlane, |
|
367 amKamikaze, amCake, |
|
368 amSeduction, amBallgun, |
|
369 amJetpack, amBirdy, |
|
370 amFlamethrower, amLandGun, |
|
371 amResurrector, amStructure, |
|
372 amTardis: CurAmmoGear:= newGear; |
321 end; |
373 end; |
322 |
374 |
323 // Clear FollowGear if using on a rope/parachute/saucer etc so focus stays with the hog's movement |
375 // Clear FollowGear if using on a rope/parachute/saucer etc so focus stays with the hog's movement |
324 if altUse then FollowGear:= nil; |
376 if altUse then FollowGear:= nil; |
325 |
377 |
326 uStats.AmmoUsed(CurAmmoType); |
378 uStats.AmmoUsed(CurAmmoType); |
327 |
379 |
328 if not (SpeechText = '') then |
380 if not (SpeechText = '') then |
329 begin |
381 begin |
330 tmpGear:= AddVisualGear(0, 0, vgtSpeechBubble); |
382 speech:= AddVisualGear(0, 0, vgtSpeechBubble); |
331 if tmpGear <> nil then |
383 if speech <> nil then |
332 begin |
384 begin |
333 tmpGear^.Text:= SpeechText; |
385 speech^.Text:= SpeechText; |
334 tmpGear^.Hedgehog:= Gear^.Hedgehog; |
386 speech^.Hedgehog:= Gear^.Hedgehog; |
335 tmpGear^.FrameTicks:= SpeechType; |
387 speech^.FrameTicks:= SpeechType; |
336 end; |
388 end; |
337 SpeechText:= '' |
389 SpeechText:= '' |
338 end; |
390 end; |
339 |
391 |
340 Power:= 0; |
392 Power:= 0; |
341 if (CurAmmoGear <> nil) |
393 if (CurAmmoGear <> nil) |
342 and ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_AltUse) = 0){check for dropping ammo from rope} then |
394 and ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_AltUse) = 0){check for dropping ammo from rope} then |
343 begin |
395 begin |
344 CurAmmoGear^.AmmoType:= CurAmmoType; |
|
345 Message:= Message or gmAttack; |
396 Message:= Message or gmAttack; |
346 CurAmmoGear^.Message:= Message |
397 CurAmmoGear^.Message:= Message |
347 end else begin |
398 end else begin |
348 if not CurrentTeam^.ExtDriven and |
399 if not CurrentTeam^.ExtDriven and |
349 ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_Power) <> 0) then SendIPC('a'); |
400 ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_Power) <> 0) then SendIPC('a'); |