Nuclide
Software Development Kit for id Technology (BETA)
Loading...
Searching...
No Matches
Weapon.h
1/*
2 * Copyright (c) 2022 Vera Visions LLC.
3 *
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
13 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
14 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15*/
16
17typedef enumflags
18{
19 WEAPONFL_CHANGED_MODELINDEX,
20 WEAPONFL_CHANGED_ORIGIN,
21 WEAPONFL_CHANGED_ANGLES,
22 WEAPONFL_CHANGED_VELOCITY,
23 WEAPONFL_CHANGED_ANGULARVELOCITY,
24 WEAPONFL_CHANGED_SIZE,
25 WEAPONFL_CHANGED_FLAGS,
26 WEAPONFL_CHANGED_SOLID,
27 WEAPONFL_CHANGED_FRAME,
28 WEAPONFL_CHANGED_SKIN,
29 WEAPONFL_CHANGED_MOVETYPE,
30 WEAPONFL_CHANGED_EFFECTS,
31 WEAPONFL_CHANGED_BODY,
32 WEAPONFL_CHANGED_SCALE,
33 WEAPONFL_CHANGED_ENTITYDEF,
34 WEAPONFL_CHANGED_CLIP,
35 WEAPONFL_CHANGED_CHAIN,
36 WEAPONFL_CHANGED_STATE,
37 WEAPONFL_CHANGED_NEXTWEAPON,
38 WEAPONFL_CHANGED_PREVWEAPON,
39} nsweapon_changed_t;
40
41typedef enum
42{
43 WEAPONSTATE_IDLE,
44 WEAPONSTATE_COCK,
45 WEAPONSTATE_CHARGING,
46 WEAPONSTATE_FIRELOOP,
47 WEAPONSTATE_RELEASED,
48 WEAPONSTATE_OVERHEATED,
49 WEAPONSTATE_DRAW,
50 WEAPONSTATE_RELOAD_START,
51 WEAPONSTATE_RELOAD,
52 WEAPONSTATE_RELOAD_END,
53 WEAPONSTATE_BURSTFIRING
54} nsweapon_state_t;
55
56string nsweapon_state_s[] =
57{
58 "WEAPONSTATE_IDLE",
59 "WEAPONSTATE_RELOAD_START",
60 "WEAPONSTATE_RELOAD",
61 "WEAPONSTATE_RELOAD_END",
62 "WEAPONSTATE_CHARGING",
63 "WEAPONSTATE_FIRELOOP",
64 "WEAPONSTATE_RELEASED",
65 "WEAPONSTATE_OVERHEATED"
66};
67
68typedef enum
69{
70 WEPEVENT_FIRED,
71 WEPEVENT_RELEASED,
72 WEPEVENT_RELOADED
73} nsweapon_event_t;
74
75#define CHAN_LOOP 5
76
303class
305{
306public:
307 void ncWeapon(void);
308
309 virtual void InputFrame(void);
310 virtual void AddedToInventory(void);
311 virtual void RemovedFromInventory(void);
312
313 /* overrides */
314#ifdef SERVER
315 virtual void Spawned(void);
316 virtual void SpawnKey(string, string);
317 virtual void Save(float);
318 virtual void Restore(string, string);
319 virtual void EvaluateEntity(void);
320 virtual float SendEntity(entity,float);
321 virtual void RestoreComplete(void);
322
323 virtual void EjectBrass(void);
324 virtual void EjectCartridge(void);
325#endif
326
327 virtual bool TestFireAbility(string);
328
329#ifdef CLIENT
330 virtual void ClientFX(bool);
331 virtual void PredictPreFrame(void);
332 virtual void PredictPostFrame(void);
333 virtual void ReceiveEntity(float,float);
334 virtual void ReceiveEvent(float);
335#endif
336
337 virtual bool UsesSecondaryAmmo(void);
338 virtual bool IsEmpty(void);
339 virtual bool IsWeapon(void);
340 virtual bool HasReserveAmmo(void);
341
343 virtual void Draw(void);
345 virtual void Holster(void);
347 virtual void PrimaryAttack(void);
349 virtual void SecondaryAttack(void);
351 virtual void Reload(void);
353 virtual void Release(void);
355 virtual void Idle(void);
357 virtual void UpdateGUI(void);
358
359 nonvirtual void SetViewModel(string);
360 nonvirtual void SetWorldModel(string);
361 nonvirtual void SetPlayerModel(string);
362 nonvirtual void SetWeaponFrame(float);
363 nonvirtual void PlaySound(string, float, bool);
364
365 /* state */
366 nonvirtual nsweapon_state_t GetWeaponState(void);
367
368 virtual void SetAttackNext(float);
369 virtual void SetReloadNext(float);
370 virtual void SetIdleNext(float);
371 virtual bool CanFire(void);
372 virtual bool CanIdle(void);
373 virtual bool CanReload(void);
374 virtual bool UseAmmo(string);
375
377 virtual void WeaponStartedFiring(void);
379 virtual void WeaponStoppedFiring(void);
381 virtual void WeaponStartedReloading(void);
383 virtual void WeaponStoppedReloading(void);
384
386 virtual void FiredWeaponAttack(string);
388 virtual void ReleasedWeaponAttack(string);
389
391 virtual void SwitchedToWeapon(void);
393 virtual void SwitchedFromWeapon(void);
394
396 virtual void UpdateFireInfoCache(void);
398 virtual void FireInfoChanged(void);
399
401 nonvirtual bool WeaponIsFiring(void);
402
404 nonvirtual void SwitchFireInfo(string);
405 nonvirtual bool DetonateDef(string);
406 nonvirtual void Attack(string);
407
408 nonvirtual int GetClip(void);
409 nonvirtual int GetClipSize(void);
410 nonvirtual bool RequiresAmmo(void);
411 nonvirtual int FireInfoSelected(void);
412 nonvirtual float OverheatingProgress(void);
413 nonvirtual float PlayerSpeedMod(void);
414
416 virtual void ReloadCachedAttributes(void);
417
418private:
420 nonvirtual void _SetWeaponState(nsweapon_state_t);
422 nonvirtual void _SwitchedToCallback(void);
424 nonvirtual void _SwitchedFromCallback(void);
425 nonvirtual void _WeaponStartedFiring(void);
426 nonvirtual void _WeaponStoppedFiring(void);
427 nonvirtual void _PrimaryAttack(void);
428 nonvirtual void _SecondaryAttack(void);
429 nonvirtual void _SwitchedWeaponMode(void);
430 virtual void _AddedCallback(void);
431 virtual void _RemovedCallback(void);
432
434 nonvirtual ncWeapon GetNextWeapon(void);
436 nonvirtual ncWeapon GetPreviousWeapon(void);
438 nonvirtual void EmptySound(void);
440 nonvirtual void SetViewZoom(float);
441
442#ifdef CLIENT
443 virtual void HandleAnimEvent(float, int, string);
444#endif
445
446#ifdef SERVER
447 nonvirtual void _ReloadFinished(void);
448#endif
449
450 /* weapon related spawn keys */
451 string m_weaponTitle;
452 int m_weaponHUDSlot;
453 int m_weaponHUDSlotPos;
454 string m_weaponHUDIcon;
455 string m_weaponHUDIconSel;
456 string m_weaponViewModelPath;
457 string m_weaponPlayerModelPath;
458 string m_weaponScript;
459 string m_weaponAmmoType;
460 bool m_weaponRequiresAmmo;
461 int m_weaponClipStartSize;
462 string m_weaponDropsItem;
463
464 NETWORKED_INT(m_weaponClip)
465 NETWORKED_INT(m_weaponClipSize)
466 NETWORKED_FLOAT(m_weaponFireInfoValue)
467 NETWORKED_MODELINDEX(m_viewModel)
468 NETWORKED_MODELINDEX(m_worldModel)
469 NETWORKED_MODELINDEX(m_playerModel)
470 NETWORKED_FLOAT(m_weaponFireRate)
471 NETWORKED_FLOAT(m_weaponState)
472 NETWORKED_BOOL(m_weaponIsFiring)
473 NETWORKED_BOOL(m_weaponOverheating)
474 NETWORKED_FLOAT(m_burstCount)
475
476 /* cached variables. don't save - recalculate! */
477 string m_weaponLastFireInfo;
478 string m_primaryFireInfo;
479 string m_secondaryFireInfo;
480 int m_primaryAmmoType;
481 int m_secondaryAmmoType;
482 float m_jointTrailWorld;
483 float m_jointTrailView;
484 float m_weaponAmmoRegenTime;
485 float m_weaponAmmoDepleteTime;
486 string m_animPrefix;
487 bool m_altAlternates;
488
489 /* extra networking */
490 float m_nextWeapon_entnum;
491 float m_prevWeapon_entnum;
492 ncWeapon m_nextWeapon_net;
493 ncWeapon m_prevWeapon_net;
494
495 /* cached fireInfo */
496 string m_fiMuzzleFlashMaterial;
497 string m_fiMuzzleFlashModelPath;
498 vector m_fiMuzzleFlashColor;
499 float m_fiMuzzleFlashRadius;
500 string m_fiFXSmokeParticle;
501 bool m_fiFXSmokeContinous;
502 float m_fiFXTrail;
503 bool m_fiAmmoRequired;
504 bool m_fiCocks;
505 bool m_fiDrawAfterRelease;
506 bool m_fiFireUnderwater;
507 bool m_fiLoopingFire;
508 bool m_fiSemiAuto;
509 bool m_fiWillRelease;
510 float m_fiBrassDelay;
511 float m_fiCartridgeDelay;
512 float m_fiChargeTime;
513 float m_fiFireRate;
514 float m_fiOverheatLength;
515 float m_fiOverheatPoints;
516 float m_fiReloadTime;
517 int m_fiAmmoPerShot;
518 int m_fiAmmoType;
519 float m_fiPrimedFuse;
520 float m_fiZoomFOV;
521 bool m_fiPowerAmmo;
522 bool m_fiRemoveOnEmpty;
523 string m_fiBrassDef;
524 string m_fiCartridgeDef;
525 string m_fiDetonateOnFire;
526 string m_fiOnFire;
527 string m_fiOnRelease;
528 string m_fiSndCock;
529 string m_fiSndEmpty;
530 string m_fiSndFailed;
531 string m_fiSndFire;
532 string m_fiSndFireLast;
533 string m_fiSndFireLoop;
534 string m_fiSndFireLoop;
535 string m_fiSndFireStart;
536 string m_fiSndFireStop;
537 string m_fiSndRelease;
538 vector m_fiPunchAngle;
539 vector m_fiPunchSpring;
540 float m_fiSpeedMod;
541 bool m_fiAltModeSwitch;
542 bool m_fiBuggyIdleAnim;
543 int m_fiRegenAmmo;
544 float m_fiRegenRate;
545 int m_fiDepleteAmmo;
546 float m_fiDepleteRate;
547 float m_fiMaxBurst;
548 float m_fiBurstTime;
549 float m_fiKnockBack;
550 float m_fiKnockBackRelease;
551 float m_fiTestDistance;
552};
553
554.ncWeapon m_nextWeapon;
555.ncWeapon m_prevWeapon;
556
void ncItem(void)
Definition Item.qc:18
virtual void Restore(string, string)
Similar to ncIO::SpawnKey() but for save-game fields.
Definition Weapon.qc:399
virtual void InputFrame(void)
Definition Weapon.qc:1202
nonvirtual bool DetonateDef(string)
Definition Weapon.qc:1078
virtual bool UseAmmo(string)
Definition Weapon.qc:1013
nonvirtual void SetViewModel(string)
Definition Weapon.qc:2173
virtual void UpdateGUI(void)
Overridable: When the HUD is requested to be drawn.
Definition Weapon.qc:2165
nonvirtual float OverheatingProgress(void)
Definition Weapon.qc:2087
virtual void RestoreComplete(void)
Called when the entity has been successfully restored from a savegame file.
Definition Weapon.qc:304
virtual void SetReloadNext(float)
Definition Weapon.qc:2239
virtual void Spawned(void)
Called when the entity is fulled initialized.
Definition Weapon.qc:281
virtual bool TestFireAbility(string)
Definition Weapon.qc:1483
virtual void ReleasedWeaponAttack(string)
Overridable: Controls def_onRelease event.
Definition Weapon.qc:1208
virtual void RemovedFromInventory(void)
Called when an item was removed from someones inventory.
Definition Weapon.qc:89
virtual float SendEntity(entity, float)
Called by the engine whenever we need to send a client an update about this entity.
Definition Weapon.qc:491
nonvirtual int GetClipSize(void)
Definition Weapon.qc:2099
virtual void SecondaryAttack(void)
Overridable: On +attack2 execution.
Definition Weapon.qc:1752
virtual void WeaponStartedFiring(void)
Overridable: Called once when the weapon started firing.
Definition Weapon.qc:2071
virtual void PrimaryAttack(void)
Overridable: On +attack execution.
Definition Weapon.qc:1714
virtual void Idle(void)
Overridable: When the weapon is supposed to be doing something on its own.
Definition Weapon.qc:1515
virtual void ClientFX(bool)
Definition Weapon.qc:620
virtual void Reload(void)
Overridable: On +reload execution.
Definition Weapon.qc:1861
virtual void PredictPostFrame(void)
Definition Weapon.qc:761
virtual void FireInfoChanged(void)
Overridable: Called when the active fireInfo changed.
Definition Weapon.qc:262
nonvirtual void SetPlayerModel(string)
Definition Weapon.qc:2201
virtual void Holster(void)
Overridable: Called when we are about to switch to another weapon.
Definition Weapon.qc:995
virtual void Release(void)
Overridable: When no buttons are held, or you forcefully want to stop firing.
Definition Weapon.qc:2117
virtual bool IsEmpty(void)
Definition Weapon.qc:926
virtual void FiredWeaponAttack(string)
Overridable: Controls def_onFire event.
Definition Weapon.qc:1173
virtual void SetIdleNext(float)
Definition Weapon.qc:2251
virtual bool HasReserveAmmo(void)
Definition Weapon.qc:1964
nonvirtual nsweapon_state_t GetWeaponState(void)
Definition Weapon.qc:118
virtual void SpawnKey(string, string)
This method handles entity key/value pairs on map load.
Definition Weapon.qc:316
virtual bool UsesSecondaryAmmo(void)
Definition Weapon.qc:2324
virtual void WeaponStoppedFiring(void)
Overridable: Called once when the weapon stopped firing.
Definition Weapon.qc:2076
virtual void WeaponStoppedReloading(void)
Overridable: Called once when the weapon stopped reloading.
Definition Weapon.qc:1833
nonvirtual void SwitchFireInfo(string)
Set the active fire Info of the weapon to this one.
Definition Weapon.qc:267
virtual void ReceiveEntity(float, float)
Client: Handles network updates from the server for the associated entity.
Definition Weapon.qc:645
nonvirtual int GetClip(void)
Definition Weapon.qc:2093
virtual bool CanReload(void)
Definition Weapon.qc:2300
virtual void SetAttackNext(float)
Definition Weapon.qc:2226
virtual bool CanFire(void)
Definition Weapon.qc:2279
virtual bool CanIdle(void)
Definition Weapon.qc:2267
nonvirtual float PlayerSpeedMod(void)
Definition Weapon.qc:2081
virtual void PredictPreFrame(void)
Definition Weapon.qc:720
nonvirtual void SetWorldModel(string)
Definition Weapon.qc:2187
virtual void ReceiveEvent(float)
Definition Weapon.qc:710
virtual void UpdateFireInfoCache(void)
Overridable: Called when requesting to cache values from decl to attributes.
Definition Weapon.qc:124
virtual void EjectBrass(void)
Definition Weapon.qc:1097
nonvirtual void PlaySound(string, float, bool)
Definition Weapon.qc:1467
virtual void SwitchedToWeapon(void)
Overridable: Called when we've switched to this weapon successfully.
Definition Weapon.qc:94
nonvirtual int FireInfoSelected(void)
Definition Weapon.qc:2111
virtual void Draw(void)
Overridable: Called when we switch to this weapon from another.
Definition Weapon.qc:955
nonvirtual void Attack(string)
Definition Weapon.qc:1230
nonvirtual void SetWeaponFrame(float)
Definition Weapon.qc:2215
void ncWeapon(void)
Definition Weapon.qc:18
virtual void EjectCartridge(void)
Definition Weapon.qc:1134
virtual bool IsWeapon(void)
Definition Weapon.qc:920
virtual void AddedToInventory(void)
Called when an item was added to someones inventory.
Definition Weapon.qc:84
virtual void Save(float)
Handles saving a copy of this entity to a given filehandle.
Definition Weapon.qc:365
virtual void ReloadCachedAttributes(void)
Overriding this: Called to cache some entityDef values.
Definition Weapon.qc:812
virtual void EvaluateEntity(void)
Run each tic after physics are run to determine if we need to send updates over the network.
Definition Weapon.qc:553
nonvirtual bool RequiresAmmo(void)
Definition Weapon.qc:2105
nonvirtual bool WeaponIsFiring(void)
Returns whether the weapon is being actively fired by the owner.
Definition Weapon.qc:2065
virtual void SwitchedFromWeapon(void)
Overridable: Called when we've switched from this weapon successfully.
Definition Weapon.qc:99
virtual void WeaponStartedReloading(void)
Overridable: Called once when the weapon stopped reloading.
Definition Weapon.qc:1827