Nuclide
Software Development Kit for id Technology (BETA)
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} nsweapon_state_t;
54
55string nsweapon_state_s[] =
56{
57 "WEAPONSTATE_IDLE",
58 "WEAPONSTATE_RELOAD_START",
59 "WEAPONSTATE_RELOAD",
60 "WEAPONSTATE_RELOAD_END",
61 "WEAPONSTATE_CHARGING",
62 "WEAPONSTATE_FIRELOOP",
63 "WEAPONSTATE_RELEASED",
64 "WEAPONSTATE_OVERHEATED"
65};
66
67typedef enum
68{
69 WEPEVENT_FIRED,
70 WEPEVENT_RELEASED,
71 WEPEVENT_RELOADED
72} nsweapon_event_t;
73
74#define CHAN_LOOP 5
75
298class
300{
301public:
302 void ncWeapon(void);
303
304 virtual void InputFrame(void);
305 virtual void AddedToInventory(void);
306 virtual void RemovedFromInventory(void);
307
308 /* overrides */
309#ifdef SERVER
310 virtual void Spawned(void);
311 virtual void SpawnKey(string, string);
312 virtual void Save(float);
313 virtual void Restore(string, string);
314 virtual void EvaluateEntity(void);
315 virtual float SendEntity(entity,float);
316 virtual void RestoreComplete(void);
317#endif
318
319 virtual bool TestFireAbility(string);
320
321#ifdef CLIENT
322 virtual void ClientFX(bool);
323 virtual void PredictPreFrame(void);
324 virtual void PredictPostFrame(void);
325 virtual void ReceiveEntity(float,float);
326 virtual void ReceiveEvent(float);
327#endif
328
329 virtual bool UsesSecondaryAmmo(void);
330 virtual bool IsEmpty(void);
331 virtual bool IsWeapon(void);
332 virtual bool HasReserveAmmo(void);
333
335 virtual void Draw(void);
337 virtual void Holster(void);
339 virtual void PrimaryAttack(void);
341 virtual void SecondaryAttack(void);
343 virtual void Reload(void);
345 virtual void Release(void);
347 virtual void Idle(void);
349 virtual void UpdateGUI(void);
350
351 nonvirtual void SetViewModel(string);
352 nonvirtual void SetWorldModel(string);
353 nonvirtual void SetPlayerModel(string);
354 nonvirtual void SetWeaponFrame(float);
355 nonvirtual void PlaySound(string, float, bool);
356
357 /* state */
358 nonvirtual nsweapon_state_t GetWeaponState(void);
359
360 virtual void SetAttackNext(float);
361 virtual void SetReloadNext(float);
362 virtual void SetIdleNext(float);
363 virtual bool CanFire(void);
364 virtual bool CanIdle(void);
365 virtual bool CanReload(void);
366 virtual bool UseAmmo(string);
367
369 virtual void WeaponStartedFiring(void);
371 virtual void WeaponStoppedFiring(void);
372
374 nonvirtual bool WeaponIsFiring(void);
375
377 virtual void FiredWeaponAttack(string);
379 virtual void ReleasedWeaponAttack(string);
380
382 virtual void SwitchedToWeapon(void);
384 virtual void SwitchedFromWeapon(void);
385
387 virtual void UpdateFireInfoCache(void);
388
390 nonvirtual void SwitchFireInfo(string);
391 nonvirtual bool DetonateDef(string);
392 nonvirtual void Attack(string);
393
394 nonvirtual int GetClip(void);
395 nonvirtual int GetClipSize(void);
396 nonvirtual bool RequiresAmmo(void);
397 nonvirtual int FireInfoSelected(void);
398 nonvirtual float OverheatingProgress(void);
399 nonvirtual float PlayerSpeedMod(void);
400
402 virtual void ReloadCachedAttributes(void);
403
404private:
406 nonvirtual void _SetWeaponState(nsweapon_state_t);
408 nonvirtual void _SwitchedToCallback(void);
410 nonvirtual void _SwitchedFromCallback(void);
411 nonvirtual void _WeaponStartedFiring(void);
412 nonvirtual void _WeaponStoppedFiring(void);
413 nonvirtual void _PrimaryAttack(void);
414 nonvirtual void _SecondaryAttack(void);
415 nonvirtual void _SwitchedWeaponMode(void);
416 virtual void _AddedCallback(void);
417 virtual void _RemovedCallback(void);
418
420 nonvirtual ncWeapon GetNextWeapon(void);
422 nonvirtual ncWeapon GetPreviousWeapon(void);
424 nonvirtual void EmptySound(void);
426 nonvirtual void SetViewZoom(float);
427
428#ifdef CLIENT
429 virtual void HandleAnimEvent(float, int, string);
430#endif
431
432#ifdef SERVER
433 nonvirtual void _ReloadFinished(void);
434#endif
435
436 /* weapon related spawn keys */
437 string m_weaponTitle;
438 int m_weaponHUDSlot;
439 int m_weaponHUDSlotPos;
440 string m_weaponHUDIcon;
441 string m_weaponHUDIconSel;
442 string m_weaponViewModelPath;
443 string m_weaponPlayerModelPath;
444 string m_weaponScript;
445 string m_weaponAmmoType;
446 bool m_weaponRequiresAmmo;
447 int m_weaponClipStartSize;
448 string m_weaponDropsItem;
449
450 NETWORKED_INT(m_weaponClip)
451 NETWORKED_INT(m_weaponClipSize)
452 NETWORKED_FLOAT(m_weaponFireInfoValue)
453 NETWORKED_MODELINDEX(m_viewModel)
454 NETWORKED_MODELINDEX(m_worldModel)
455 NETWORKED_MODELINDEX(m_playerModel)
456 NETWORKED_FLOAT(m_weaponFireRate)
457 NETWORKED_FLOAT(m_weaponState)
458 NETWORKED_BOOL(m_weaponIsFiring)
459 NETWORKED_BOOL(m_weaponOverheating)
460
461 /* cached variables. don't save - recalculate! */
462 string m_weaponLastFireInfo;
463 string m_primaryFireInfo;
464 string m_secondaryFireInfo;
465 int m_primaryAmmoType;
466 int m_secondaryAmmoType;
467 float m_jointTrailWorld;
468 float m_jointTrailView;
469 float m_weaponAmmoRegenTime;
470 float m_weaponAmmoDepleteTime;
471 string m_animPrefix;
472
473 /* extra networking */
474 float m_nextWeapon_entnum;
475 float m_prevWeapon_entnum;
476 ncWeapon m_nextWeapon_net;
477 ncWeapon m_prevWeapon_net;
478
479 /* cached fireInfo */
480 string m_fiMuzzleFlashMaterial;
481 string m_fiMuzzleFlashModelPath;
482 vector m_fiMuzzleFlashColor;
483 float m_fiMuzzleFlashRadius;
484 string m_fiFXSmokeParticle;
485 bool m_fiFXSmokeContinous;
486 float m_fiFXTrail;
487 bool m_fiAmmoRequired;
488 bool m_fiCocks;
489 bool m_fiDrawAfterRelease;
490 bool m_fiFireUnderwater;
491 bool m_fiLoopingFire;
492 bool m_fiSemiAuto;
493 bool m_fiWillRelease;
494 float m_fiBrassDelay;
495 float m_fiChargeTime;
496 float m_fiFireRate;
497 float m_fiOverheatLength;
498 float m_fiOverheatPoints;
499 float m_fiReloadTime;
500 int m_fiAmmoPerShot;
501 int m_fiAmmoType;
502 float m_fiPrimedFuse;
503 float m_fiZoomFOV;
504 bool m_fiPowerAmmo;
505 bool m_fiRemoveOnEmpty;
506 string m_fiBrassDef;
507 string m_fiDetonateOnFire;
508 string m_fiOnFire;
509 string m_fiOnRelease;
510 string m_fiSndCock;
511 string m_fiSndEmpty;
512 string m_fiSndFailed;
513 string m_fiSndFire;
514 string m_fiSndFireLast;
515 string m_fiSndFireLoop;
516 string m_fiSndFireLoop;
517 string m_fiSndFireStart;
518 string m_fiSndFireStop;
519 string m_fiSndRelease;
520 vector m_fiPunchAngle;
521 vector m_fiPunchSpring;
522 float m_fiSpeedMod;
523 bool m_fiAltModeSwitch;
524 bool m_fiBuggyIdleAnim;
525 int m_fiRegenAmmo;
526 float m_fiRegenRate;
527 int m_fiDepleteAmmo;
528 float m_fiDepleteRate;
529};
530
531.ncWeapon m_nextWeapon;
532.ncWeapon m_prevWeapon;
533
This entity class represents inventory items, weapons.
Definition: Item.h:138
This entity class represents weapon based items.
Definition: Weapon.h:300
void ncWeapon(void)
Definition: Weapon.qc:18
typedef enumflags
Defines the valid alignment flags for text fields.
Definition: font.h:37