#pragma once
#include "Game/IW5/IW5.h"

namespace IW5
{
    inline cspField_t weapon_fields[]{
        {"displayName",                            offsetof(WeaponFullDef, weapCompleteDef.szDisplayName),                              CSPFT_STRING              },
        {"AIOverlayDescription",                   offsetof(WeaponFullDef, weapDef.szOverlayName),                                      CSPFT_STRING              },
        {"modeName",                               offsetof(WeaponFullDef, weapDef.szModeName),                                         CSPFT_STRING              },
        {"playerAnimType",                         offsetof(WeaponFullDef, weapDef.playerAnimType),                                     WFT_ANIMTYPE              },
        {"gunModel",                               offsetof(WeaponFullDef, gunXModel[0]),                                               CSPFT_XMODEL              },
        {"gunModel2",                              offsetof(WeaponFullDef, gunXModel[1]),                                               CSPFT_XMODEL              },
        {"gunModel3",                              offsetof(WeaponFullDef, gunXModel[2]),                                               CSPFT_XMODEL              },
        {"gunModel4",                              offsetof(WeaponFullDef, gunXModel[3]),                                               CSPFT_XMODEL              },
        {"gunModel5",                              offsetof(WeaponFullDef, gunXModel[4]),                                               CSPFT_XMODEL              },
        {"gunModel6",                              offsetof(WeaponFullDef, gunXModel[5]),                                               CSPFT_XMODEL              },
        {"gunModel7",                              offsetof(WeaponFullDef, gunXModel[6]),                                               CSPFT_XMODEL              },
        {"gunModel8",                              offsetof(WeaponFullDef, gunXModel[7]),                                               CSPFT_XMODEL              },
        {"gunModel9",                              offsetof(WeaponFullDef, gunXModel[8]),                                               CSPFT_XMODEL              },
        {"gunModel10",                             offsetof(WeaponFullDef, gunXModel[9]),                                               CSPFT_XMODEL              },
        {"gunModel11",                             offsetof(WeaponFullDef, gunXModel[10]),                                              CSPFT_XMODEL              },
        {"gunModel12",                             offsetof(WeaponFullDef, gunXModel[11]),                                              CSPFT_XMODEL              },
        {"gunModel13",                             offsetof(WeaponFullDef, gunXModel[12]),                                              CSPFT_XMODEL              },
        {"gunModel14",                             offsetof(WeaponFullDef, gunXModel[13]),                                              CSPFT_XMODEL              },
        {"gunModel15",                             offsetof(WeaponFullDef, gunXModel[14]),                                              CSPFT_XMODEL              },
        {"gunModel16",                             offsetof(WeaponFullDef, gunXModel[15]),                                              CSPFT_XMODEL              },
        {"handModel",                              offsetof(WeaponFullDef, weapDef.handXModel),                                         CSPFT_XMODEL              },
        {"hideTags",                               offsetof(WeaponFullDef, hideTags),                                                   WFT_HIDETAGS              },
        {"notetrackSoundMap",                      offsetof(WeaponFullDef, notetrackSoundMapKeys),                                      WFT_NOTETRACKSOUNDMAP     },
        {"notetrackRumbleMap",                     offsetof(WeaponFullDef, notetrackRumbleMapKeys),                                     WFT_NOTETRACKRUMBLEMAP    },
        {"idleAnim",                               offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_IDLE]),                                   WFT_ANIM_NAME             },
        {"emptyIdleAnim",                          offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_EMPTY_IDLE]),                             WFT_ANIM_NAME             },
        {"fireAnim",                               offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_FIRE]),                                   WFT_ANIM_NAME             },
        {"holdFireAnim",                           offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_HOLD_FIRE]),                              WFT_ANIM_NAME             },
        {"lastShotAnim",                           offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_LASTSHOT]),                               WFT_ANIM_NAME             },
        {"detonateAnim",                           offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_DETONATE]),                               WFT_ANIM_NAME             },
        {"rechamberAnim",                          offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_RECHAMBER]),                              WFT_ANIM_NAME             },
        {"meleeAnim",                              offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_MELEE]),                                  WFT_ANIM_NAME             },
        {"meleeChargeAnim",                        offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_MELEE_CHARGE]),                           WFT_ANIM_NAME             },
        {"reloadAnim",                             offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_RELOAD]),                                 WFT_ANIM_NAME             },
        {"reloadEmptyAnim",                        offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_RELOAD_EMPTY]),                           WFT_ANIM_NAME             },
        {"reloadStartAnim",                        offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_RELOAD_START]),                           WFT_ANIM_NAME             },
        {"reloadEndAnim",                          offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_RELOAD_END]),                             WFT_ANIM_NAME             },
        {"raiseAnim",                              offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_RAISE]),                                  WFT_ANIM_NAME             },
        {"dropAnim",                               offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_DROP]),                                   WFT_ANIM_NAME             },
        {"firstRaiseAnim",                         offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_FIRST_RAISE]),                            WFT_ANIM_NAME             },
        {"breachRaiseAnim",                        offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_BREACH_RAISE]),                           WFT_ANIM_NAME             },
        {"altRaiseAnim",                           offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_ALT_RAISE]),                              WFT_ANIM_NAME             },
        {"altDropAnim",                            offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_ALT_DROP]),                               WFT_ANIM_NAME             },
        {"quickRaiseAnim",                         offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_QUICK_RAISE]),                            WFT_ANIM_NAME             },
        {"quickDropAnim",                          offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_QUICK_DROP]),                             WFT_ANIM_NAME             },
        {"emptyRaiseAnim",                         offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_EMPTY_RAISE]),                            WFT_ANIM_NAME             },
        {"emptyDropAnim",                          offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_EMPTY_DROP]),                             WFT_ANIM_NAME             },
        {"sprintInAnim",                           offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_SPRINT_IN]),                              WFT_ANIM_NAME             },
        {"sprintLoopAnim",                         offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_SPRINT_LOOP]),                            WFT_ANIM_NAME             },
        {"sprintOutAnim",                          offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_SPRINT_OUT]),                             WFT_ANIM_NAME             },
        {"stunnedAnimStart",                       offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_STUNNED_START]),                          WFT_ANIM_NAME             },
        {"stunnedAnimLoop",                        offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_STUNNED_LOOP]),                           WFT_ANIM_NAME             },
        {"stunnedAnimEnd",                         offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_STUNNED_END]),                            WFT_ANIM_NAME             },
        {"nightVisionWearAnim",                    offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_NIGHTVISION_WEAR]),                       WFT_ANIM_NAME             },
        {"nightVisionRemoveAnim",                  offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_NIGHTVISION_REMOVE]),                     WFT_ANIM_NAME             },
        {"adsFireAnim",                            offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_ADS_FIRE]),                               WFT_ANIM_NAME             },
        {"adsLastShotAnim",                        offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_ADS_LASTSHOT]),                           WFT_ANIM_NAME             },
        {"adsRechamberAnim",                       offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_ADS_RECHAMBER]),                          WFT_ANIM_NAME             },
        {"blastFrontAnim",                         offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_BLAST_FRONT]),                            WFT_ANIM_NAME             },
        {"blastRightAnim",                         offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_BLAST_RIGHT]),                            WFT_ANIM_NAME             },
        {"blastBackAnim",                          offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_BLAST_BACK]),                             WFT_ANIM_NAME             },
        {"blastLeftAnim",                          offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_BLAST_LEFT]),                             WFT_ANIM_NAME             },
        {"adsUpAnim",                              offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_ADS_UP]),                                 WFT_ANIM_NAME             },
        {"adsDownAnim",                            offsetof(WeaponFullDef, szXAnims[WEAP_ANIM_ADS_DOWN]),                               WFT_ANIM_NAME             },
        {"altAdjustAnim",                          offsetof(WeaponFullDef, szXAnims[WEAP_ALT_ANIM_ADJUST]),                             WFT_ANIM_NAME             },
        {"idleAnimR",                              offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_IDLE]),                        WFT_ANIM_NAME             },
        {"emptyIdleAnimR",                         offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_EMPTY_IDLE]),                  WFT_ANIM_NAME             },
        {"fireAnimR",                              offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_FIRE]),                        WFT_ANIM_NAME             },
        {"holdFireAnimR",                          offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_HOLD_FIRE]),                   WFT_ANIM_NAME             },
        {"lastShotAnimR",                          offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_LASTSHOT]),                    WFT_ANIM_NAME             },
        {"detonateAnimR",                          offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_DETONATE]),                    WFT_ANIM_NAME             },
        {"rechamberAnimR",                         offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_RECHAMBER]),                   WFT_ANIM_NAME             },
        {"meleeAnimR",                             offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_MELEE]),                       WFT_ANIM_NAME             },
        {"meleeChargeAnimR",                       offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_MELEE_CHARGE]),                WFT_ANIM_NAME             },
        {"reloadAnimR",                            offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_RELOAD]),                      WFT_ANIM_NAME             },
        {"reloadEmptyAnimR",                       offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_RELOAD_EMPTY]),                WFT_ANIM_NAME             },
        {"reloadStartAnimR",                       offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_RELOAD_START]),                WFT_ANIM_NAME             },
        {"reloadEndAnimR",                         offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_RELOAD_END]),                  WFT_ANIM_NAME             },
        {"raiseAnimR",                             offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_RAISE]),                       WFT_ANIM_NAME             },
        {"dropAnimR",                              offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_DROP]),                        WFT_ANIM_NAME             },
        {"firstRaiseAnimR",                        offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_FIRST_RAISE]),                 WFT_ANIM_NAME             },
        {"breachRaiseAnimR",                       offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_BREACH_RAISE]),                WFT_ANIM_NAME             },
        {"altRaiseAnimR",                          offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_ALT_RAISE]),                   WFT_ANIM_NAME             },
        {"altDropAnimR",                           offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_ALT_DROP]),                    WFT_ANIM_NAME             },
        {"quickRaiseAnimR",                        offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_QUICK_RAISE]),                 WFT_ANIM_NAME             },
        {"quickDropAnimR",                         offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_QUICK_DROP]),                  WFT_ANIM_NAME             },
        {"emptyRaiseAnimR",                        offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_EMPTY_RAISE]),                 WFT_ANIM_NAME             },
        {"emptyDropAnimR",                         offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_EMPTY_DROP]),                  WFT_ANIM_NAME             },
        {"sprintInAnimR",                          offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_SPRINT_IN]),                   WFT_ANIM_NAME             },
        {"sprintLoopAnimR",                        offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_SPRINT_LOOP]),                 WFT_ANIM_NAME             },
        {"sprintOutAnimR",                         offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_SPRINT_OUT]),                  WFT_ANIM_NAME             },
        {"stunnedAnimStartR",                      offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_STUNNED_START]),               WFT_ANIM_NAME             },
        {"stunnedAnimLoopR",                       offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_STUNNED_LOOP]),                WFT_ANIM_NAME             },
        {"stunnedAnimEndR",                        offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_STUNNED_END]),                 WFT_ANIM_NAME             },
        {"nightVisionWearAnimR",                   offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_NIGHTVISION_WEAR]),            WFT_ANIM_NAME             },
        {"nightVisionRemoveAnimR",                 offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_NIGHTVISION_REMOVE]),          WFT_ANIM_NAME             },
        {"adsFireAnimR",                           offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_ADS_FIRE]),                    WFT_ANIM_NAME             },
        {"adsLastShotAnimR",                       offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_ADS_LASTSHOT]),                WFT_ANIM_NAME             },
        {"adsRechamberAnimR",                      offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_ADS_RECHAMBER]),               WFT_ANIM_NAME             },
        {"adsUpAnimR",                             offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_ADS_UP]),                      WFT_ANIM_NAME             },
        {"blastFrontAnimR",                        offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_BLAST_FRONT]),                 WFT_ANIM_NAME             },
        {"blastRightAnimR",                        offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_BLAST_RIGHT]),                 WFT_ANIM_NAME             },
        {"blastBackAnimR",                         offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_BLAST_BACK]),                  WFT_ANIM_NAME             },
        {"blastLeftAnimR",                         offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_BLAST_LEFT]),                  WFT_ANIM_NAME             },
        {"adsDownAnimR",                           offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ANIM_ADS_DOWN]),                    WFT_ANIM_NAME             },
        {"altAdjustAnimR",                         offsetof(WeaponFullDef, szXAnimsRightHanded[WEAP_ALT_ANIM_ADJUST]),                  WFT_ANIM_NAME             },
        {"idleAnimL",                              offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_IDLE]),                         WFT_ANIM_NAME             },
        {"emptyIdleAnimL",                         offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_EMPTY_IDLE]),                   WFT_ANIM_NAME             },
        {"fireAnimL",                              offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_FIRE]),                         WFT_ANIM_NAME             },
        {"holdFireAnimL",                          offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_HOLD_FIRE]),                    WFT_ANIM_NAME             },
        {"lastShotAnimL",                          offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_LASTSHOT]),                     WFT_ANIM_NAME             },
        {"detonateAnimL",                          offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_DETONATE]),                     WFT_ANIM_NAME             },
        {"rechamberAnimL",                         offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_RECHAMBER]),                    WFT_ANIM_NAME             },
        {"meleeAnimL",                             offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_MELEE]),                        WFT_ANIM_NAME             },
        {"meleeChargeAnimL",                       offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_MELEE_CHARGE]),                 WFT_ANIM_NAME             },
        {"reloadAnimL",                            offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_RELOAD]),                       WFT_ANIM_NAME             },
        {"reloadEmptyAnimL",                       offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_RELOAD_EMPTY]),                 WFT_ANIM_NAME             },
        {"reloadStartAnimL",                       offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_RELOAD_START]),                 WFT_ANIM_NAME             },
        {"reloadEndAnimL",                         offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_RELOAD_END]),                   WFT_ANIM_NAME             },
        {"raiseAnimL",                             offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_RAISE]),                        WFT_ANIM_NAME             },
        {"dropAnimL",                              offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_DROP]),                         WFT_ANIM_NAME             },
        {"firstRaiseAnimL",                        offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_FIRST_RAISE]),                  WFT_ANIM_NAME             },
        {"breachRaiseAnimL",                       offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_BREACH_RAISE]),                 WFT_ANIM_NAME             },
        {"altRaiseAnimL",                          offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_ALT_RAISE]),                    WFT_ANIM_NAME             },
        {"altDropAnimL",                           offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_ALT_DROP]),                     WFT_ANIM_NAME             },
        {"quickRaiseAnimL",                        offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_QUICK_RAISE]),                  WFT_ANIM_NAME             },
        {"quickDropAnimL",                         offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_QUICK_DROP]),                   WFT_ANIM_NAME             },
        {"emptyRaiseAnimL",                        offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_EMPTY_RAISE]),                  WFT_ANIM_NAME             },
        {"emptyDropAnimL",                         offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_EMPTY_DROP]),                   WFT_ANIM_NAME             },
        {"sprintInAnimL",                          offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_SPRINT_IN]),                    WFT_ANIM_NAME             },
        {"sprintLoopAnimL",                        offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_SPRINT_LOOP]),                  WFT_ANIM_NAME             },
        {"sprintOutAnimL",                         offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_SPRINT_OUT]),                   WFT_ANIM_NAME             },
        {"stunnedAnimStartL",                      offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_STUNNED_START]),                WFT_ANIM_NAME             },
        {"stunnedAnimLoopL",                       offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_STUNNED_LOOP]),                 WFT_ANIM_NAME             },
        {"stunnedAnimEndL",                        offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_STUNNED_END]),                  WFT_ANIM_NAME             },
        {"nightVisionWearAnimL",                   offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_NIGHTVISION_WEAR]),             WFT_ANIM_NAME             },
        {"nightVisionRemoveAnimL",                 offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_NIGHTVISION_REMOVE]),           WFT_ANIM_NAME             },
        {"adsFireAnimL",                           offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_ADS_FIRE]),                     WFT_ANIM_NAME             },
        {"adsLastShotAnimL",                       offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_ADS_LASTSHOT]),                 WFT_ANIM_NAME             },
        {"adsRechamberAnimL",                      offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_ADS_RECHAMBER]),                WFT_ANIM_NAME             },
        {"blastFrontAnimL",                        offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_BLAST_FRONT]),                  WFT_ANIM_NAME             },
        {"blastRightAnimL",                        offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_BLAST_RIGHT]),                  WFT_ANIM_NAME             },
        {"blastBackAnimL",                         offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_BLAST_BACK]),                   WFT_ANIM_NAME             },
        {"blastLeftAnimL",                         offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_BLAST_LEFT]),                   WFT_ANIM_NAME             },
        {"adsUpAnimL",                             offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_ADS_UP]),                       WFT_ANIM_NAME             },
        {"adsDownAnimL",                           offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ANIM_ADS_DOWN]),                     WFT_ANIM_NAME             },
        {"altAdjustAnimL",                         offsetof(WeaponFullDef, szXAnimsLeftHanded[WEAP_ALT_ANIM_ADJUST]),                   WFT_ANIM_NAME             },
        {"script",                                 offsetof(WeaponFullDef, weapDef.szScript),                                           CSPFT_STRING              },
        {"weaponType",                             offsetof(WeaponFullDef, weapDef.weapType),                                           WFT_WEAPONTYPE            },
        {"weaponClass",                            offsetof(WeaponFullDef, weapDef.weapClass),                                          WFT_WEAPONCLASS           },
        {"penetrateType",                          offsetof(WeaponFullDef, weapDef.penetrateType),                                      WFT_PENETRATE_TYPE        },
        {"penetrateMultiplier",                    offsetof(WeaponFullDef, weapCompleteDef.penetrateMultiplier),                        CSPFT_FLOAT               },
        {"impactType",                             offsetof(WeaponFullDef, weapCompleteDef.impactType),                                 WFT_IMPACT_TYPE           },
        {"inventoryType",                          offsetof(WeaponFullDef, weapDef.inventoryType),                                      WFT_INVENTORYTYPE         },
        {"fireType",                               offsetof(WeaponFullDef, weapDef.fireType),                                           WFT_FIRETYPE              },
        {"offhandClass",                           offsetof(WeaponFullDef, weapDef.offhandClass),                                       WFT_OFFHAND_CLASS         },
        {"viewFlashEffect",                        offsetof(WeaponFullDef, weapDef.viewFlashEffect),                                    CSPFT_FX                  },
        {"worldFlashEffect",                       offsetof(WeaponFullDef, weapDef.worldFlashEffect),                                   CSPFT_FX                  },
        {"pickupSound",                            offsetof(WeaponFullDef, weapDef.pickupSound),                                        CSPFT_SOUND               },
        {"pickupSoundPlayer",                      offsetof(WeaponFullDef, weapDef.pickupSoundPlayer),                                  CSPFT_SOUND               },
        {"ammoPickupSound",                        offsetof(WeaponFullDef, weapDef.ammoPickupSound),                                    CSPFT_SOUND               },
        {"ammoPickupSoundPlayer",                  offsetof(WeaponFullDef, weapDef.ammoPickupSoundPlayer),                              CSPFT_SOUND               },
        {"projectileSound",                        offsetof(WeaponFullDef, weapDef.projectileSound),                                    CSPFT_SOUND               },
        {"pullbackSound",                          offsetof(WeaponFullDef, weapDef.pullbackSound),                                      CSPFT_SOUND               },
        {"pullbackSoundPlayer",                    offsetof(WeaponFullDef, weapDef.pullbackSoundPlayer),                                CSPFT_SOUND               },
        {"fireSound",                              offsetof(WeaponFullDef, weapDef.fireSound),                                          CSPFT_SOUND               },
        {"fireSoundPlayer",                        offsetof(WeaponFullDef, weapDef.fireSoundPlayer),                                    CSPFT_SOUND               },
        {"fireSoundPlayerAkimbo",                  offsetof(WeaponFullDef, weapDef.fireSoundPlayerAkimbo),                              CSPFT_SOUND               },
        {"loopFireSound",                          offsetof(WeaponFullDef, weapDef.fireLoopSound),                                      CSPFT_SOUND               },
        {"loopFireSoundPlayer",                    offsetof(WeaponFullDef, weapDef.fireLoopSoundPlayer),                                CSPFT_SOUND               },
        {"stopFireSound",                          offsetof(WeaponFullDef, weapDef.fireStopSound),                                      CSPFT_SOUND               },
        {"stopFireSoundPlayer",                    offsetof(WeaponFullDef, weapDef.fireStopSoundPlayer),                                CSPFT_SOUND               },
        {"lastShotSound",                          offsetof(WeaponFullDef, weapDef.fireLastSound),                                      CSPFT_SOUND               },
        {"lastShotSoundPlayer",                    offsetof(WeaponFullDef, weapDef.fireLastSoundPlayer),                                CSPFT_SOUND               },
        {"emptyFireSound",                         offsetof(WeaponFullDef, weapDef.emptyFireSound),                                     CSPFT_SOUND               },
        {"emptyFireSoundPlayer",                   offsetof(WeaponFullDef, weapDef.emptyFireSoundPlayer),                               CSPFT_SOUND               },
        {"meleeSwipeSound",                        offsetof(WeaponFullDef, weapDef.meleeSwipeSound),                                    CSPFT_SOUND               },
        {"meleeSwipeSoundPlayer",                  offsetof(WeaponFullDef, weapDef.meleeSwipeSoundPlayer),                              CSPFT_SOUND               },
        {"meleeHitSound",                          offsetof(WeaponFullDef, weapDef.meleeHitSound),                                      CSPFT_SOUND               },
        {"meleeMissSound",                         offsetof(WeaponFullDef, weapDef.meleeMissSound),                                     CSPFT_SOUND               },
        {"rechamberSound",                         offsetof(WeaponFullDef, weapDef.rechamberSound),                                     CSPFT_SOUND               },
        {"rechamberSoundPlayer",                   offsetof(WeaponFullDef, weapDef.rechamberSoundPlayer),                               CSPFT_SOUND               },
        {"reloadSound",                            offsetof(WeaponFullDef, weapDef.reloadSound),                                        CSPFT_SOUND               },
        {"reloadSoundPlayer",                      offsetof(WeaponFullDef, weapDef.reloadSoundPlayer),                                  CSPFT_SOUND               },
        {"reloadEmptySound",                       offsetof(WeaponFullDef, weapDef.reloadEmptySound),                                   CSPFT_SOUND               },
        {"reloadEmptySoundPlayer",                 offsetof(WeaponFullDef, weapDef.reloadEmptySoundPlayer),                             CSPFT_SOUND               },
        {"reloadStartSound",                       offsetof(WeaponFullDef, weapDef.reloadStartSound),                                   CSPFT_SOUND               },
        {"reloadStartSoundPlayer",                 offsetof(WeaponFullDef, weapDef.reloadStartSoundPlayer),                             CSPFT_SOUND               },
        {"reloadEndSound",                         offsetof(WeaponFullDef, weapDef.reloadEndSound),                                     CSPFT_SOUND               },
        {"reloadEndSoundPlayer",                   offsetof(WeaponFullDef, weapDef.reloadEndSoundPlayer),                               CSPFT_SOUND               },
        {"detonateSound",                          offsetof(WeaponFullDef, weapDef.detonateSound),                                      CSPFT_SOUND               },
        {"detonateSoundPlayer",                    offsetof(WeaponFullDef, weapDef.detonateSoundPlayer),                                CSPFT_SOUND               },
        {"nightVisionWearSound",                   offsetof(WeaponFullDef, weapDef.nightVisionWearSound),                               CSPFT_SOUND               },
        {"nightVisionWearSoundPlayer",             offsetof(WeaponFullDef, weapDef.nightVisionWearSoundPlayer),                         CSPFT_SOUND               },
        {"nightVisionRemoveSound",                 offsetof(WeaponFullDef, weapDef.nightVisionRemoveSound),                             CSPFT_SOUND               },
        {"nightVisionRemoveSoundPlayer",           offsetof(WeaponFullDef, weapDef.nightVisionRemoveSoundPlayer),                       CSPFT_SOUND               },
        {"raiseSound",                             offsetof(WeaponFullDef, weapDef.raiseSound),                                         CSPFT_SOUND               },
        {"raiseSoundPlayer",                       offsetof(WeaponFullDef, weapDef.raiseSoundPlayer),                                   CSPFT_SOUND               },
        {"firstRaiseSound",                        offsetof(WeaponFullDef, weapDef.firstRaiseSound),                                    CSPFT_SOUND               },
        {"firstRaiseSoundPlayer",                  offsetof(WeaponFullDef, weapDef.firstRaiseSoundPlayer),                              CSPFT_SOUND               },
        {"altSwitchSound",                         offsetof(WeaponFullDef, weapDef.altSwitchSound),                                     CSPFT_SOUND               },
        {"altSwitchSoundPlayer",                   offsetof(WeaponFullDef, weapDef.altSwitchSoundPlayer),                               CSPFT_SOUND               },
        {"putawaySound",                           offsetof(WeaponFullDef, weapDef.putawaySound),                                       CSPFT_SOUND               },
        {"putawaySoundPlayer",                     offsetof(WeaponFullDef, weapDef.putawaySoundPlayer),                                 CSPFT_SOUND               },
        {"scanSound",                              offsetof(WeaponFullDef, weapDef.scanSound),                                          CSPFT_SOUND               },
        {"changeVariableZoomSound",                offsetof(WeaponFullDef, weapDef.changeVariableZoomSound),                            CSPFT_SOUND               },
        {"bounceSound",                            offsetof(WeaponFullDef, weapDef.bounceSound),                                        WFT_PER_SURFACE_TYPE_SOUND},
        {"rollingSound",                           offsetof(WeaponFullDef, weapDef.rollingSound),                                       WFT_PER_SURFACE_TYPE_SOUND},
        {"viewShellEjectEffect",                   offsetof(WeaponFullDef, weapDef.viewShellEjectEffect),                               CSPFT_FX                  },
        {"worldShellEjectEffect",                  offsetof(WeaponFullDef, weapDef.worldShellEjectEffect),                              CSPFT_FX                  },
        {"viewLastShotEjectEffect",                offsetof(WeaponFullDef, weapDef.viewLastShotEjectEffect),                            CSPFT_FX                  },
        {"worldLastShotEjectEffect",               offsetof(WeaponFullDef, weapDef.worldLastShotEjectEffect),                           CSPFT_FX                  },
        {"reticleCenter",                          offsetof(WeaponFullDef, weapDef.reticleCenter),                                      CSPFT_MATERIAL            },
        {"reticleSide",                            offsetof(WeaponFullDef, weapDef.reticleSide),                                        CSPFT_MATERIAL            },
        {"reticleCenterSize",                      offsetof(WeaponFullDef, weapDef.iReticleCenterSize),                                 CSPFT_INT                 },
        {"reticleSideSize",                        offsetof(WeaponFullDef, weapDef.iReticleSideSize),                                   CSPFT_INT                 },
        {"reticleMinOfs",                          offsetof(WeaponFullDef, weapDef.iReticleMinOfs),                                     CSPFT_INT                 },
        {"activeReticleType",                      offsetof(WeaponFullDef, weapDef.activeReticleType),                                  WFT_ACTIVE_RETICLE_TYPE   },
        {"standMoveF",                             offsetof(WeaponFullDef, weapDef.vStandMove[0]),                                      CSPFT_FLOAT               },
        {"standMoveR",                             offsetof(WeaponFullDef, weapDef.vStandMove[1]),                                      CSPFT_FLOAT               },
        {"standMoveU",                             offsetof(WeaponFullDef, weapDef.vStandMove[2]),                                      CSPFT_FLOAT               },
        {"standRotP",                              offsetof(WeaponFullDef, weapDef.vStandRot[0]),                                       CSPFT_FLOAT               },
        {"standRotY",                              offsetof(WeaponFullDef, weapDef.vStandRot[1]),                                       CSPFT_FLOAT               },
        {"standRotR",                              offsetof(WeaponFullDef, weapDef.vStandRot[2]),                                       CSPFT_FLOAT               },
        {"strafeMoveF",                            offsetof(WeaponFullDef, weapDef.strafeMove[0]),                                      CSPFT_FLOAT               },
        {"strafeMoveR",                            offsetof(WeaponFullDef, weapDef.strafeMove[1]),                                      CSPFT_FLOAT               },
        {"strafeMoveU",                            offsetof(WeaponFullDef, weapDef.strafeMove[2]),                                      CSPFT_FLOAT               },
        {"strafeRotP",                             offsetof(WeaponFullDef, weapDef.strafeRot[0]),                                       CSPFT_FLOAT               },
        {"strafeRotY",                             offsetof(WeaponFullDef, weapDef.strafeRot[1]),                                       CSPFT_FLOAT               },
        {"strafeRotR",                             offsetof(WeaponFullDef, weapDef.strafeRot[2]),                                       CSPFT_FLOAT               },
        {"duckedOfsF",                             offsetof(WeaponFullDef, weapDef.vDuckedOfs[0]),                                      CSPFT_FLOAT               },
        {"duckedOfsR",                             offsetof(WeaponFullDef, weapDef.vDuckedOfs[1]),                                      CSPFT_FLOAT               },
        {"duckedOfsU",                             offsetof(WeaponFullDef, weapDef.vDuckedOfs[2]),                                      CSPFT_FLOAT               },
        {"duckedMoveF",                            offsetof(WeaponFullDef, weapDef.vDuckedMove[0]),                                     CSPFT_FLOAT               },
        {"duckedMoveR",                            offsetof(WeaponFullDef, weapDef.vDuckedMove[1]),                                     CSPFT_FLOAT               },
        {"duckedMoveU",                            offsetof(WeaponFullDef, weapDef.vDuckedMove[2]),                                     CSPFT_FLOAT               },
        {"duckedRotP",                             offsetof(WeaponFullDef, weapDef.vDuckedRot[0]),                                      CSPFT_FLOAT               },
        {"duckedRotY",                             offsetof(WeaponFullDef, weapDef.vDuckedRot[1]),                                      CSPFT_FLOAT               },
        {"duckedRotR",                             offsetof(WeaponFullDef, weapDef.vDuckedRot[2]),                                      CSPFT_FLOAT               },
        {"proneOfsF",                              offsetof(WeaponFullDef, weapDef.vProneOfs[0]),                                       CSPFT_FLOAT               },
        {"proneOfsR",                              offsetof(WeaponFullDef, weapDef.vProneOfs[1]),                                       CSPFT_FLOAT               },
        {"proneOfsU",                              offsetof(WeaponFullDef, weapDef.vProneOfs[2]),                                       CSPFT_FLOAT               },
        {"proneMoveF",                             offsetof(WeaponFullDef, weapDef.vProneMove[0]),                                      CSPFT_FLOAT               },
        {"proneMoveR",                             offsetof(WeaponFullDef, weapDef.vProneMove[1]),                                      CSPFT_FLOAT               },
        {"proneMoveU",                             offsetof(WeaponFullDef, weapDef.vProneMove[2]),                                      CSPFT_FLOAT               },
        {"proneRotP",                              offsetof(WeaponFullDef, weapDef.vProneRot[0]),                                       CSPFT_FLOAT               },
        {"proneRotY",                              offsetof(WeaponFullDef, weapDef.vProneRot[1]),                                       CSPFT_FLOAT               },
        {"proneRotR",                              offsetof(WeaponFullDef, weapDef.vProneRot[2]),                                       CSPFT_FLOAT               },
        {"posMoveRate",                            offsetof(WeaponFullDef, weapDef.fPosMoveRate),                                       CSPFT_FLOAT               },
        {"posProneMoveRate",                       offsetof(WeaponFullDef, weapDef.fPosProneMoveRate),                                  CSPFT_FLOAT               },
        {"standMoveMinSpeed",                      offsetof(WeaponFullDef, weapDef.fStandMoveMinSpeed),                                 CSPFT_FLOAT               },
        {"duckedMoveMinSpeed",                     offsetof(WeaponFullDef, weapDef.fDuckedMoveMinSpeed),                                CSPFT_FLOAT               },
        {"proneMoveMinSpeed",                      offsetof(WeaponFullDef, weapDef.fProneMoveMinSpeed),                                 CSPFT_FLOAT               },
        {"posRotRate",                             offsetof(WeaponFullDef, weapDef.fPosRotRate),                                        CSPFT_FLOAT               },
        {"posProneRotRate",                        offsetof(WeaponFullDef, weapDef.fPosProneRotRate),                                   CSPFT_FLOAT               },
        {"standRotMinSpeed",                       offsetof(WeaponFullDef, weapDef.fStandRotMinSpeed),                                  CSPFT_FLOAT               },
        {"duckedRotMinSpeed",                      offsetof(WeaponFullDef, weapDef.fDuckedRotMinSpeed),                                 CSPFT_FLOAT               },
        {"proneRotMinSpeed",                       offsetof(WeaponFullDef, weapDef.fProneRotMinSpeed),                                  CSPFT_FLOAT               },
        {"worldModel",                             offsetof(WeaponFullDef, worldModel[0]),                                              CSPFT_XMODEL              },
        {"worldModel2",                            offsetof(WeaponFullDef, worldModel[1]),                                              CSPFT_XMODEL              },
        {"worldModel3",                            offsetof(WeaponFullDef, worldModel[2]),                                              CSPFT_XMODEL              },
        {"worldModel4",                            offsetof(WeaponFullDef, worldModel[3]),                                              CSPFT_XMODEL              },
        {"worldModel5",                            offsetof(WeaponFullDef, worldModel[4]),                                              CSPFT_XMODEL              },
        {"worldModel6",                            offsetof(WeaponFullDef, worldModel[5]),                                              CSPFT_XMODEL              },
        {"worldModel7",                            offsetof(WeaponFullDef, worldModel[6]),                                              CSPFT_XMODEL              },
        {"worldModel8",                            offsetof(WeaponFullDef, worldModel[7]),                                              CSPFT_XMODEL              },
        {"worldModel9",                            offsetof(WeaponFullDef, worldModel[8]),                                              CSPFT_XMODEL              },
        {"worldModel10",                           offsetof(WeaponFullDef, worldModel[9]),                                              CSPFT_XMODEL              },
        {"worldModel11",                           offsetof(WeaponFullDef, worldModel[10]),                                             CSPFT_XMODEL              },
        {"worldModel12",                           offsetof(WeaponFullDef, worldModel[11]),                                             CSPFT_XMODEL              },
        {"worldModel13",                           offsetof(WeaponFullDef, worldModel[12]),                                             CSPFT_XMODEL              },
        {"worldModel14",                           offsetof(WeaponFullDef, worldModel[13]),                                             CSPFT_XMODEL              },
        {"worldModel15",                           offsetof(WeaponFullDef, worldModel[14]),                                             CSPFT_XMODEL              },
        {"worldModel16",                           offsetof(WeaponFullDef, worldModel[15]),                                             CSPFT_XMODEL              },
        {"worldClipModel",                         offsetof(WeaponFullDef, weapDef.worldClipModel),                                     CSPFT_XMODEL              },
        {"rocketModel",                            offsetof(WeaponFullDef, weapDef.rocketModel),                                        CSPFT_XMODEL              },
        {"knifeModel",                             offsetof(WeaponFullDef, weapDef.knifeModel),                                         CSPFT_XMODEL              },
        {"worldKnifeModel",                        offsetof(WeaponFullDef, weapDef.worldKnifeModel),                                    CSPFT_XMODEL              },
        {"hudIcon",                                offsetof(WeaponFullDef, weapDef.hudIcon),                                            CSPFT_MATERIAL            },
        {"hudIconRatio",                           offsetof(WeaponFullDef, weapDef.hudIconRatio),                                       WFT_ICONRATIO_HUD         },
        {"pickupIcon",                             offsetof(WeaponFullDef, weapDef.pickupIcon),                                         CSPFT_MATERIAL            },
        {"pickupIconRatio",                        offsetof(WeaponFullDef, weapDef.pickupIconRatio),                                    WFT_ICONRATIO_PICKUP      },
        {"ammoCounterIcon",                        offsetof(WeaponFullDef, weapDef.ammoCounterIcon),                                    CSPFT_MATERIAL            },
        {"ammoCounterIconRatio",                   offsetof(WeaponFullDef, weapDef.ammoCounterIconRatio),                               WFT_ICONRATIO_AMMOCOUNTER },
        {"ammoCounterClip",                        offsetof(WeaponFullDef, weapDef.ammoCounterClip),                                    WFT_AMMOCOUNTER_CLIPTYPE  },
        {"startAmmo",                              offsetof(WeaponFullDef, weapDef.iStartAmmo),                                         CSPFT_INT                 },
        {"shareAmmo",                              offsetof(WeaponFullDef, weapDef.sharedAmmo),                                         CSPFT_BOOL                },
        {"ammoName",                               offsetof(WeaponFullDef, weapDef.szAmmoName),                                         CSPFT_STRING              },
        {"clipName",                               offsetof(WeaponFullDef, weapDef.szClipName),                                         CSPFT_STRING              },
        {"maxAmmo",                                offsetof(WeaponFullDef, weapDef.iMaxAmmo),                                           CSPFT_INT                 },
        {"clipSize",                               offsetof(WeaponFullDef, weapCompleteDef.iClipSize),                                  CSPFT_INT                 },
        {"shotCount",                              offsetof(WeaponFullDef, weapDef.shotCount),                                          CSPFT_INT                 },
        {"sharedAmmoCapName",                      offsetof(WeaponFullDef, weapDef.szSharedAmmoCapName),                                CSPFT_STRING              },
        {"sharedAmmoCap",                          offsetof(WeaponFullDef, weapDef.iSharedAmmoCap),                                     CSPFT_INT                 },
        {"damage",                                 offsetof(WeaponFullDef, weapDef.damage),                                             CSPFT_INT                 },
        {"playerDamage",                           offsetof(WeaponFullDef, weapDef.playerDamage),                                       CSPFT_INT                 },
        {"meleeDamage",                            offsetof(WeaponFullDef, weapDef.iMeleeDamage),                                       CSPFT_INT                 },
        {"minDamage",                              offsetof(WeaponFullDef, weapDef.minDamage),                                          CSPFT_INT                 },
        {"minPlayerDamage",                        offsetof(WeaponFullDef, weapDef.minPlayerDamage),                                    CSPFT_INT                 },
        {"maxDamageRange",                         offsetof(WeaponFullDef, weapDef.fMaxDamageRange),                                    CSPFT_FLOAT               },
        {"minDamageRange",                         offsetof(WeaponFullDef, weapDef.fMinDamageRange),                                    CSPFT_FLOAT               },
        {"destabilizationRateTime",                offsetof(WeaponFullDef, weapDef.destabilizationRateTime),                            CSPFT_FLOAT               },
        {"destabilizationCurvatureMax",            offsetof(WeaponFullDef, weapDef.destabilizationCurvatureMax),                        CSPFT_FLOAT               },
        {"destabilizeDistance",                    offsetof(WeaponFullDef, weapDef.destabilizeDistance),                                CSPFT_INT                 },
        {"fireTime",                               offsetof(WeaponFullDef, weapCompleteDef.iFireTime),                                  CSPFT_MILLISECONDS        },
        {"fireTimeAkimbo",                         offsetof(WeaponFullDef, weapCompleteDef.iFireTimeAkimbo),                            CSPFT_MILLISECONDS        },
        {"altRaiseTime",                           offsetof(WeaponFullDef, weapCompleteDef.iAltRaiseTime),                              CSPFT_MILLISECONDS        },
        {"altRaiseTimeAkimbo",                     offsetof(WeaponFullDef, weapCompleteDef.iAltRaiseTimeAkimbo),                        CSPFT_MILLISECONDS        },
        {"firstRaiseTime",                         offsetof(WeaponFullDef, weapCompleteDef.iFirstRaiseTime),                            CSPFT_MILLISECONDS        },
        {"firstRaiseTimeAkimbo",                   offsetof(WeaponFullDef, weapCompleteDef.iFirstRaiseTimeAkimbo),                      CSPFT_MILLISECONDS        },
        {"fireDelay",                              offsetof(WeaponFullDef, weapDef.stateTimers.iFireDelay),                             CSPFT_MILLISECONDS        },
        {"meleeDelay",                             offsetof(WeaponFullDef, weapDef.stateTimers.iMeleeDelay),                            CSPFT_MILLISECONDS        },
        {"meleeChargeDelay",                       offsetof(WeaponFullDef, weapDef.stateTimers.meleeChargeDelay),                       CSPFT_MILLISECONDS        },
        {"rechamberTime",                          offsetof(WeaponFullDef, weapDef.stateTimers.iRechamberTime),                         CSPFT_MILLISECONDS        },
        {"rechamberTimeOneHanded",                 offsetof(WeaponFullDef, weapDef.stateTimers.rechamberTimeOneHanded),                 CSPFT_MILLISECONDS        },
        {"rechamberBoltTime",                      offsetof(WeaponFullDef, weapDef.stateTimers.iRechamberBoltTime),                     CSPFT_MILLISECONDS        },
        {"holdFireTime",                           offsetof(WeaponFullDef, weapDef.stateTimers.iHoldFireTime),                          CSPFT_MILLISECONDS        },
        {"detonateTime",                           offsetof(WeaponFullDef, weapDef.stateTimers.iDetonateTime),                          CSPFT_MILLISECONDS        },
        {"detonateDelay",                          offsetof(WeaponFullDef, weapDef.stateTimers.iDetonateDelay),                         CSPFT_MILLISECONDS        },
        {"meleeTime",                              offsetof(WeaponFullDef, weapDef.stateTimers.iMeleeTime),                             CSPFT_MILLISECONDS        },
        {"meleeChargeTime",                        offsetof(WeaponFullDef, weapDef.stateTimers.meleeChargeTime),                        CSPFT_MILLISECONDS        },
        {"reloadTime",                             offsetof(WeaponFullDef, weapDef.stateTimers.iReloadTime),                            CSPFT_MILLISECONDS        },
        {"reloadShowRocketTime",                   offsetof(WeaponFullDef, weapDef.stateTimers.reloadShowRocketTime),                   CSPFT_MILLISECONDS        },
        {"reloadEmptyTime",                        offsetof(WeaponFullDef, weapDef.stateTimers.iReloadEmptyTime),                       CSPFT_MILLISECONDS        },
        {"reloadAddTime",                          offsetof(WeaponFullDef, weapDef.stateTimers.iReloadAddTime),                         CSPFT_MILLISECONDS        },
        {"reloadStartTime",                        offsetof(WeaponFullDef, weapDef.stateTimers.iReloadStartTime),                       CSPFT_MILLISECONDS        },
        {"reloadStartAddTime",                     offsetof(WeaponFullDef, weapDef.stateTimers.iReloadStartAddTime),                    CSPFT_MILLISECONDS        },
        {"reloadEndTime",                          offsetof(WeaponFullDef, weapDef.stateTimers.iReloadEndTime),                         CSPFT_MILLISECONDS        },
        {"dropTime",                               offsetof(WeaponFullDef, weapDef.stateTimers.iDropTime),                              CSPFT_MILLISECONDS        },
        {"raiseTime",                              offsetof(WeaponFullDef, weapDef.stateTimers.iRaiseTime),                             CSPFT_MILLISECONDS        },
        {"altDropTime",                            offsetof(WeaponFullDef, weapDef.stateTimers.iAltDropTime),                           CSPFT_MILLISECONDS        },
        {"quickDropTime",                          offsetof(WeaponFullDef, weapDef.stateTimers.quickDropTime),                          CSPFT_MILLISECONDS        },
        {"quickRaiseTime",                         offsetof(WeaponFullDef, weapDef.stateTimers.quickRaiseTime),                         CSPFT_MILLISECONDS        },
        {"breachRaiseTime",                        offsetof(WeaponFullDef, weapDef.stateTimers.iBreachRaiseTime),                       CSPFT_MILLISECONDS        },
        {"emptyRaiseTime",                         offsetof(WeaponFullDef, weapDef.stateTimers.iEmptyRaiseTime),                        CSPFT_MILLISECONDS        },
        {"emptyDropTime",                          offsetof(WeaponFullDef, weapDef.stateTimers.iEmptyDropTime),                         CSPFT_MILLISECONDS        },
        {"sprintInTime",                           offsetof(WeaponFullDef, weapDef.stateTimers.sprintInTime),                           CSPFT_MILLISECONDS        },
        {"sprintLoopTime",                         offsetof(WeaponFullDef, weapDef.stateTimers.sprintLoopTime),                         CSPFT_MILLISECONDS        },
        {"sprintOutTime",                          offsetof(WeaponFullDef, weapDef.stateTimers.sprintOutTime),                          CSPFT_MILLISECONDS        },
        {"stunnedTimeBegin",                       offsetof(WeaponFullDef, weapDef.stateTimers.stunnedTimeBegin),                       CSPFT_MILLISECONDS        },
        {"stunnedTimeLoop",                        offsetof(WeaponFullDef, weapDef.stateTimers.stunnedTimeLoop),                        CSPFT_MILLISECONDS        },
        {"stunnedTimeEnd",                         offsetof(WeaponFullDef, weapDef.stateTimers.stunnedTimeEnd),                         CSPFT_MILLISECONDS        },
        {"nightVisionWearTime",                    offsetof(WeaponFullDef, weapDef.stateTimers.nightVisionWearTime),                    CSPFT_MILLISECONDS        },
        {"nightVisionWearTimeFadeOutEnd",          offsetof(WeaponFullDef, weapDef.stateTimers.nightVisionWearTimeFadeOutEnd),          CSPFT_MILLISECONDS        },
        {"nightVisionWearTimePowerUp",             offsetof(WeaponFullDef, weapDef.stateTimers.nightVisionWearTimePowerUp),             CSPFT_MILLISECONDS        },
        {"nightVisionRemoveTime",                  offsetof(WeaponFullDef, weapDef.stateTimers.nightVisionRemoveTime),                  CSPFT_MILLISECONDS        },
        {"nightVisionRemoveTimePowerDown",         offsetof(WeaponFullDef, weapDef.stateTimers.nightVisionRemoveTimePowerDown),         CSPFT_MILLISECONDS        },
        {"nightVisionRemoveTimeFadeInStart",       offsetof(WeaponFullDef, weapDef.stateTimers.nightVisionRemoveTimeFadeInStart),       CSPFT_MILLISECONDS        },
        {"fuseTime",                               offsetof(WeaponFullDef, weapDef.stateTimers.fuseTime),                               CSPFT_MILLISECONDS        },
        {"aifuseTime",                             offsetof(WeaponFullDef, weapDef.stateTimers.aiFuseTime),                             CSPFT_MILLISECONDS        },
        {"blastFrontTime",                         offsetof(WeaponFullDef, weapDef.stateTimers.blastFrontTime),                         CSPFT_MILLISECONDS        },
        {"blastRightTime",                         offsetof(WeaponFullDef, weapDef.stateTimers.blastRightTime),                         CSPFT_MILLISECONDS        },
        {"blastBackTime",                          offsetof(WeaponFullDef, weapDef.stateTimers.blastBackTime),                          CSPFT_MILLISECONDS        },
        {"blastLeftTime",                          offsetof(WeaponFullDef, weapDef.stateTimers.blastLeftTime),                          CSPFT_MILLISECONDS        },
        {"raiseInterruptableTime",                 offsetof(WeaponFullDef, weapDef.stateTimers.raiseInterruptableTime),                 CSPFT_MILLISECONDS        },
        {"firstRaiseInterruptableTime",            offsetof(WeaponFullDef, weapDef.stateTimers.firstRaiseInterruptableTime),            CSPFT_MILLISECONDS        },
        {"reloadInterruptableTime",                offsetof(WeaponFullDef, weapDef.stateTimers.reloadInterruptableTime),                CSPFT_MILLISECONDS        },
        {"reloadEmptyInterruptableTime",           offsetof(WeaponFullDef, weapDef.stateTimers.reloadEmptyInterruptableTime),           CSPFT_MILLISECONDS        },
        {"fireInterruptableTime",                  offsetof(WeaponFullDef, weapDef.stateTimers.fireInterruptableTime),                  CSPFT_MILLISECONDS        },
        {"fireDelayAkimbo",                        offsetof(WeaponFullDef, weapDef.akimboStateTimers.iFireDelay),                       CSPFT_MILLISECONDS        },
        {"meleeDelayAkimbo",                       offsetof(WeaponFullDef, weapDef.akimboStateTimers.iMeleeDelay),                      CSPFT_MILLISECONDS        },
        {"meleeChargeDelayAkimbo",                 offsetof(WeaponFullDef, weapDef.akimboStateTimers.meleeChargeDelay),                 CSPFT_MILLISECONDS        },
        {"rechamberTimeAkimbo",                    offsetof(WeaponFullDef, weapDef.akimboStateTimers.iRechamberTime),                   CSPFT_MILLISECONDS        },
        {"rechamberTimeOneHandedAkimbo",           offsetof(WeaponFullDef, weapDef.akimboStateTimers.rechamberTimeOneHanded),           CSPFT_MILLISECONDS        },
        {"rechamberBoltTimeAkimbo",                offsetof(WeaponFullDef, weapDef.akimboStateTimers.iRechamberBoltTime),               CSPFT_MILLISECONDS        },
        {"holdFireTimeAkimbo",                     offsetof(WeaponFullDef, weapDef.akimboStateTimers.iHoldFireTime),                    CSPFT_MILLISECONDS        },
        {"detonateTimeAkimbo",                     offsetof(WeaponFullDef, weapDef.akimboStateTimers.iDetonateTime),                    CSPFT_MILLISECONDS        },
        {"detonateDelayAkimbo",                    offsetof(WeaponFullDef, weapDef.akimboStateTimers.iDetonateDelay),                   CSPFT_MILLISECONDS        },
        {"meleeTimeAkimbo",                        offsetof(WeaponFullDef, weapDef.akimboStateTimers.iMeleeTime),                       CSPFT_MILLISECONDS        },
        {"meleeChargeTimeAkimbo",                  offsetof(WeaponFullDef, weapDef.akimboStateTimers.meleeChargeTime),                  CSPFT_MILLISECONDS        },
        {"reloadTimeAkimbo",                       offsetof(WeaponFullDef, weapDef.akimboStateTimers.iReloadTime),                      CSPFT_MILLISECONDS        },
        {"reloadShowRocketTimeAkimbo",             offsetof(WeaponFullDef, weapDef.akimboStateTimers.reloadShowRocketTime),             CSPFT_MILLISECONDS        },
        {"reloadEmptyTimeAkimbo",                  offsetof(WeaponFullDef, weapDef.akimboStateTimers.iReloadEmptyTime),                 CSPFT_MILLISECONDS        },
        {"reloadAddTimeAkimbo",                    offsetof(WeaponFullDef, weapDef.akimboStateTimers.iReloadAddTime),                   CSPFT_MILLISECONDS        },
        {"reloadStartTimeAkimbo",                  offsetof(WeaponFullDef, weapDef.akimboStateTimers.iReloadStartTime),                 CSPFT_MILLISECONDS        },
        {"reloadStartAddTimeAkimbo",               offsetof(WeaponFullDef, weapDef.akimboStateTimers.iReloadStartAddTime),              CSPFT_MILLISECONDS        },
        {"reloadEndTimeAkimbo",                    offsetof(WeaponFullDef, weapDef.akimboStateTimers.iReloadEndTime),                   CSPFT_MILLISECONDS        },
        {"dropTimeAkimbo",                         offsetof(WeaponFullDef, weapDef.akimboStateTimers.iDropTime),                        CSPFT_MILLISECONDS        },
        {"raiseTimeAkimbo",                        offsetof(WeaponFullDef, weapDef.akimboStateTimers.iRaiseTime),                       CSPFT_MILLISECONDS        },
        {"altDropTimeAkimbo",                      offsetof(WeaponFullDef, weapDef.akimboStateTimers.iAltDropTime),                     CSPFT_MILLISECONDS        },
        {"quickDropTimeAkimbo",                    offsetof(WeaponFullDef, weapDef.akimboStateTimers.quickDropTime),                    CSPFT_MILLISECONDS        },
        {"quickRaiseTimeAkimbo",                   offsetof(WeaponFullDef, weapDef.akimboStateTimers.quickRaiseTime),                   CSPFT_MILLISECONDS        },
        {"breachRaiseTimeAkimbo",                  offsetof(WeaponFullDef, weapDef.akimboStateTimers.iBreachRaiseTime),                 CSPFT_MILLISECONDS        },
        {"emptyRaiseTimeAkimbo",                   offsetof(WeaponFullDef, weapDef.akimboStateTimers.iEmptyRaiseTime),                  CSPFT_MILLISECONDS        },
        {"emptyDropTimeAkimbo",                    offsetof(WeaponFullDef, weapDef.akimboStateTimers.iEmptyDropTime),                   CSPFT_MILLISECONDS        },
        {"sprintInTimeAkimbo",                     offsetof(WeaponFullDef, weapDef.akimboStateTimers.sprintInTime),                     CSPFT_MILLISECONDS        },
        {"sprintLoopTimeAkimbo",                   offsetof(WeaponFullDef, weapDef.akimboStateTimers.sprintLoopTime),                   CSPFT_MILLISECONDS        },
        {"sprintOutTimeAkimbo",                    offsetof(WeaponFullDef, weapDef.akimboStateTimers.sprintOutTime),                    CSPFT_MILLISECONDS        },
        {"stunnedTimeBeginAkimbo",                 offsetof(WeaponFullDef, weapDef.akimboStateTimers.stunnedTimeBegin),                 CSPFT_MILLISECONDS        },
        {"stunnedTimeLoopAkimbo",                  offsetof(WeaponFullDef, weapDef.akimboStateTimers.stunnedTimeLoop),                  CSPFT_MILLISECONDS        },
        {"stunnedTimeEndAkimbo",                   offsetof(WeaponFullDef, weapDef.akimboStateTimers.stunnedTimeEnd),                   CSPFT_MILLISECONDS        },
        {"nightVisionWearTimeAkimbo",              offsetof(WeaponFullDef, weapDef.akimboStateTimers.nightVisionWearTime),              CSPFT_MILLISECONDS        },
        {"nightVisionWearTimeFadeOutEndAkimbo",    offsetof(WeaponFullDef, weapDef.akimboStateTimers.nightVisionWearTimeFadeOutEnd),    CSPFT_MILLISECONDS        },
        {"nightVisionWearTimePowerUpAkimbo",       offsetof(WeaponFullDef, weapDef.akimboStateTimers.nightVisionWearTimePowerUp),       CSPFT_MILLISECONDS        },
        {"nightVisionRemoveTimeAkimbo",            offsetof(WeaponFullDef, weapDef.akimboStateTimers.nightVisionRemoveTime),            CSPFT_MILLISECONDS        },
        {"nightVisionRemoveTimePowerDownAkimbo",   offsetof(WeaponFullDef, weapDef.akimboStateTimers.nightVisionRemoveTimePowerDown),   CSPFT_MILLISECONDS        },
        {"nightVisionRemoveTimeFadeInStartAkimbo", offsetof(WeaponFullDef, weapDef.akimboStateTimers.nightVisionRemoveTimeFadeInStart), CSPFT_MILLISECONDS        },
        {"fuseTimeAkimbo",                         offsetof(WeaponFullDef, weapDef.akimboStateTimers.fuseTime),                         CSPFT_MILLISECONDS        },
        {"aifuseTimeAkimbo",                       offsetof(WeaponFullDef, weapDef.akimboStateTimers.aiFuseTime),                       CSPFT_MILLISECONDS        },
        {"blastFrontTimeAkimbo",                   offsetof(WeaponFullDef, weapDef.akimboStateTimers.blastFrontTime),                   CSPFT_MILLISECONDS        },
        {"blastRightTimeAkimbo",                   offsetof(WeaponFullDef, weapDef.akimboStateTimers.blastRightTime),                   CSPFT_MILLISECONDS        },
        {"blastBackTimeAkimbo",                    offsetof(WeaponFullDef, weapDef.akimboStateTimers.blastBackTime),                    CSPFT_MILLISECONDS        },
        {"blastLeftTimeAkimbo",                    offsetof(WeaponFullDef, weapDef.akimboStateTimers.blastLeftTime),                    CSPFT_MILLISECONDS        },
        {"raiseInterruptableTimeAkimbo",           offsetof(WeaponFullDef, weapDef.akimboStateTimers.raiseInterruptableTime),           CSPFT_MILLISECONDS        },
        {"firstRaiseInterruptableTimeAkimbo",      offsetof(WeaponFullDef, weapDef.akimboStateTimers.firstRaiseInterruptableTime),      CSPFT_MILLISECONDS        },
        {"reloadInterruptableTimeAkimbo",          offsetof(WeaponFullDef, weapDef.akimboStateTimers.reloadInterruptableTime),          CSPFT_MILLISECONDS        },
        {"reloadEmptyInterruptableTimeAkimbo",     offsetof(WeaponFullDef, weapDef.akimboStateTimers.reloadEmptyInterruptableTime),     CSPFT_MILLISECONDS        },
        {"fireInterruptableTimeAkimbo",            offsetof(WeaponFullDef, weapDef.akimboStateTimers.fireInterruptableTime),            CSPFT_MILLISECONDS        },
        {"lockonSupported",                        offsetof(WeaponFullDef, weapDef.lockonSupported),                                    CSPFT_BOOL                },
        {"requireLockonToFire",                    offsetof(WeaponFullDef, weapDef.requireLockonToFire),                                CSPFT_BOOL                },
        {"isAirburstWeapon",                       offsetof(WeaponFullDef, weapDef.isAirburstWeapon),                                   CSPFT_BOOL                },
        {"bigExplosion",                           offsetof(WeaponFullDef, weapDef.bigExplosion),                                       CSPFT_BOOL                },
        {"noAdsWhenMagEmpty",                      offsetof(WeaponFullDef, weapDef.noAdsWhenMagEmpty),                                  CSPFT_BOOL                },
        {"inheritsPerks",                          offsetof(WeaponFullDef, weapDef.inheritsPerks),                                      CSPFT_BOOL                },
        {"avoidDropCleanup",                       offsetof(WeaponFullDef, weapDef.avoidDropCleanup),                                   CSPFT_BOOL                },
        {"autoAimRange",                           offsetof(WeaponFullDef, weapDef.autoAimRange),                                       CSPFT_FLOAT               },
        {"aimAssistRange",                         offsetof(WeaponFullDef, weapDef.aimAssistRange),                                     CSPFT_FLOAT               },
        {"aimAssistRangeAds",                      offsetof(WeaponFullDef, weapDef.aimAssistRangeAds),                                  CSPFT_FLOAT               },
        {"aimPadding",                             offsetof(WeaponFullDef, weapDef.aimPadding),                                         CSPFT_FLOAT               },
        {"enemyCrosshairRange",                    offsetof(WeaponFullDef, weapDef.enemyCrosshairRange),                                CSPFT_FLOAT               },
        {"crosshairColorChange",                   offsetof(WeaponFullDef, weapDef.crosshairColorChange),                               CSPFT_BOOL                },
        {"moveSpeedScale",                         offsetof(WeaponFullDef, weapDef.moveSpeedScale),                                     CSPFT_FLOAT               },
        {"adsMoveSpeedScale",                      offsetof(WeaponFullDef, weapDef.adsMoveSpeedScale),                                  CSPFT_FLOAT               },
        {"sprintDurationScale",                    offsetof(WeaponFullDef, weapDef.sprintDurationScale),                                CSPFT_FLOAT               },
        {"idleCrouchFactor",                       offsetof(WeaponFullDef, weapDef.fIdleCrouchFactor),                                  CSPFT_FLOAT               },
        {"idleProneFactor",                        offsetof(WeaponFullDef, weapDef.fIdleProneFactor),                                   CSPFT_FLOAT               },
        {"gunMaxPitch",                            offsetof(WeaponFullDef, weapDef.fGunMaxPitch),                                       CSPFT_FLOAT               },
        {"gunMaxYaw",                              offsetof(WeaponFullDef, weapDef.fGunMaxYaw),                                         CSPFT_FLOAT               },
        {"adsIdleLerpStartTime",                   offsetof(WeaponFullDef, weapDef.adsIdleLerpStartTime),                               CSPFT_FLOAT               },
        {"adsIdleLerpTime",                        offsetof(WeaponFullDef, weapDef.adsIdleLerpTime),                                    CSPFT_FLOAT               },
        {"swayMaxAngle",                           offsetof(WeaponFullDef, weapDef.swayMaxAngle),                                       CSPFT_FLOAT               },
        {"swayLerpSpeed",                          offsetof(WeaponFullDef, weapDef.swayLerpSpeed),                                      CSPFT_FLOAT               },
        {"swayPitchScale",                         offsetof(WeaponFullDef, weapDef.swayPitchScale),                                     CSPFT_FLOAT               },
        {"swayYawScale",                           offsetof(WeaponFullDef, weapDef.swayYawScale),                                       CSPFT_FLOAT               },
        {"swayHorizScale",                         offsetof(WeaponFullDef, weapDef.swayHorizScale),                                     CSPFT_FLOAT               },
        {"swayVertScale",                          offsetof(WeaponFullDef, weapDef.swayVertScale),                                      CSPFT_FLOAT               },
        {"swayShellShockScale",                    offsetof(WeaponFullDef, weapDef.swayShellShockScale),                                CSPFT_FLOAT               },
        {"adsSwayMaxAngle",                        offsetof(WeaponFullDef, weapDef.adsSwayMaxAngle),                                    CSPFT_FLOAT               },
        {"adsSwayLerpSpeed",                       offsetof(WeaponFullDef, weapDef.adsSwayLerpSpeed),                                   CSPFT_FLOAT               },
        {"adsSwayPitchScale",                      offsetof(WeaponFullDef, weapDef.adsSwayPitchScale),                                  CSPFT_FLOAT               },
        {"adsSwayYawScale",                        offsetof(WeaponFullDef, weapDef.adsSwayYawScale),                                    CSPFT_FLOAT               },
        {"adsSwayHorizScale",                      offsetof(WeaponFullDef, weapDef.adsSwayHorizScale),                                  CSPFT_FLOAT               },
        {"adsSwayVertScale",                       offsetof(WeaponFullDef, weapDef.adsSwayVertScale),                                   CSPFT_FLOAT               },
        {"rifleBullet",                            offsetof(WeaponFullDef, weapDef.bRifleBullet),                                       CSPFT_BOOL                },
        {"armorPiercing",                          offsetof(WeaponFullDef, weapDef.armorPiercing),                                      CSPFT_BOOL                },
        {"boltAction",                             offsetof(WeaponFullDef, weapDef.bBoltAction),                                        CSPFT_BOOL                },
        {"aimDownSight",                           offsetof(WeaponFullDef, weapDef.aimDownSight),                                       CSPFT_BOOL                },
        {"canHoldBreath",                          offsetof(WeaponFullDef, weapDef.canHoldBreath),                                      CSPFT_BOOL                },
        {"canVariableZoom",                        offsetof(WeaponFullDef, weapDef.canVariableZoom),                                    CSPFT_BOOL                },
        {"rechamberWhileAds",                      offsetof(WeaponFullDef, weapDef.bRechamberWhileAds),                                 CSPFT_BOOL                },
        {"bBulletExplosiveDamage",                 offsetof(WeaponFullDef, weapDef.bBulletExplosiveDamage),                             CSPFT_BOOL                },
        {"adsViewErrorMin",                        offsetof(WeaponFullDef, weapDef.adsViewErrorMin),                                    CSPFT_FLOAT               },
        {"adsViewErrorMax",                        offsetof(WeaponFullDef, weapDef.adsViewErrorMax),                                    CSPFT_FLOAT               },
        {"clipOnly",                               offsetof(WeaponFullDef, weapDef.bClipOnly),                                          CSPFT_BOOL                },
        {"noAmmoPickup",                           offsetof(WeaponFullDef, weapDef.noAmmoPickup),                                       CSPFT_BOOL                },
        {"cookOffHold",                            offsetof(WeaponFullDef, weapDef.bCookOffHold),                                       CSPFT_BOOL                },
        {"adsFire",                                offsetof(WeaponFullDef, weapDef.adsFireOnly),                                        CSPFT_BOOL                },
        {"cancelAutoHolsterWhenEmpty",             offsetof(WeaponFullDef, weapDef.cancelAutoHolsterWhenEmpty),                         CSPFT_BOOL                },
        {"disableSwitchToWhenEmpty",               offsetof(WeaponFullDef, weapDef.disableSwitchToWhenEmpty),                           CSPFT_BOOL                },
        {"suppressAmmoReserveDisplay",             offsetof(WeaponFullDef, weapDef.suppressAmmoReserveDisplay),                         CSPFT_BOOL                },
        {"enhanced",                               offsetof(WeaponFullDef, weapCompleteDef.enhanced),                                   CSPFT_BOOL                },
        {"motionTracker",                          offsetof(WeaponFullDef, weapCompleteDef.motionTracker),                              CSPFT_BOOL                },
        {"laserSightDuringNightvision",            offsetof(WeaponFullDef, weapDef.laserSightDuringNightvision),                        CSPFT_BOOL                },
        {"markableViewmodel",                      offsetof(WeaponFullDef, weapDef.markableViewmodel),                                  CSPFT_BOOL                },
        {"physCollmap",                            offsetof(WeaponFullDef, weapDef.physCollmap),                                        CSPFT_PHYS_COLLMAP        },
        {"noDualWield",                            offsetof(WeaponFullDef, weapDef.noDualWield),                                        CSPFT_BOOL                },
        {"dualWieldViewModelOffset",               offsetof(WeaponFullDef, weapDef.dualWieldViewModelOffset),                           CSPFT_FLOAT               },
        {"killIcon",                               offsetof(WeaponFullDef, weapCompleteDef.killIcon),                                   CSPFT_MATERIAL            },
        {"killIconRatio",                          offsetof(WeaponFullDef, weapDef.killIconRatio),                                      WFT_ICONRATIO_KILL        },
        {"flipKillIcon",                           offsetof(WeaponFullDef, weapDef.flipKillIcon),                                       CSPFT_BOOL                },
        {"dpadIcon",                               offsetof(WeaponFullDef, weapCompleteDef.dpadIcon),                                   CSPFT_MATERIAL            },
        {"dpadIconRatio",                          offsetof(WeaponFullDef, weapCompleteDef.dpadIconRatio),                              WFT_ICONRATIO_DPAD        },
        {"dpadIconShowsAmmo",                      offsetof(WeaponFullDef, weapCompleteDef.dpadIconShowsAmmo),                          CSPFT_BOOL                },
        {"noPartialReload",                        offsetof(WeaponFullDef, weapDef.bNoPartialReload),                                   CSPFT_BOOL                },
        {"segmentedReload",                        offsetof(WeaponFullDef, weapDef.bSegmentedReload),                                   CSPFT_BOOL                },
        {"reloadAmmoAdd",                          offsetof(WeaponFullDef, weapDef.iReloadAmmoAdd),                                     CSPFT_INT                 },
        {"reloadStartAdd",                         offsetof(WeaponFullDef, weapDef.iReloadStartAdd),                                    CSPFT_INT                 },
        {"altWeapon",                              offsetof(WeaponFullDef, weapCompleteDef.szAltWeaponName),                            CSPFT_STRING              },
        {"dropAmmoMin",                            offsetof(WeaponFullDef, weapDef.ammoDropStockMin),                                   CSPFT_INT                 },
        {"dropAmmoMax",                            offsetof(WeaponFullDef, weapCompleteDef.ammoDropStockMax),                           CSPFT_INT                 },
        {"ammoDropClipPercentMin",                 offsetof(WeaponFullDef, weapDef.ammoDropClipPercentMin),                             CSPFT_INT                 },
        {"ammoDropClipPercentMax",                 offsetof(WeaponFullDef, weapDef.ammoDropClipPercentMax),                             CSPFT_INT                 },
        {"blocksProne",                            offsetof(WeaponFullDef, weapDef.blocksProne),                                        CSPFT_BOOL                },
        {"silenced",                               offsetof(WeaponFullDef, weapDef.silenced),                                           CSPFT_BOOL                },
        {"isRollingGrenade",                       offsetof(WeaponFullDef, weapDef.isRollingGrenade),                                   CSPFT_BOOL                },
        {"explosionRadius",                        offsetof(WeaponFullDef, weapDef.iExplosionRadius),                                   CSPFT_INT                 },
        {"explosionRadiusMin",                     offsetof(WeaponFullDef, weapDef.iExplosionRadiusMin),                                CSPFT_INT                 },
        {"explosionInnerDamage",                   offsetof(WeaponFullDef, weapDef.iExplosionInnerDamage),                              CSPFT_INT                 },
        {"explosionOuterDamage",                   offsetof(WeaponFullDef, weapDef.iExplosionOuterDamage),                              CSPFT_INT                 },
        {"damageConeAngle",                        offsetof(WeaponFullDef, weapDef.damageConeAngle),                                    CSPFT_FLOAT               },
        {"bulletExplDmgMult",                      offsetof(WeaponFullDef, weapDef.bulletExplDmgMult),                                  CSPFT_FLOAT               },
        {"bulletExplRadiusMult",                   offsetof(WeaponFullDef, weapDef.bulletExplRadiusMult),                               CSPFT_FLOAT               },
        {"projectileSpeed",                        offsetof(WeaponFullDef, weapDef.iProjectileSpeed),                                   CSPFT_INT                 },
        {"projectileSpeedUp",                      offsetof(WeaponFullDef, weapDef.iProjectileSpeedUp),                                 CSPFT_INT                 },
        {"projectileSpeedForward",                 offsetof(WeaponFullDef, weapDef.iProjectileSpeedForward),                            CSPFT_INT                 },
        {"projectileActivateDist",                 offsetof(WeaponFullDef, weapDef.iProjectileActivateDist),                            CSPFT_INT                 },
        {"projectileLifetime",                     offsetof(WeaponFullDef, weapDef.projLifetime),                                       CSPFT_FLOAT               },
        {"timeToAccelerate",                       offsetof(WeaponFullDef, weapDef.timeToAccelerate),                                   CSPFT_FLOAT               },
        {"projectileCurvature",                    offsetof(WeaponFullDef, weapDef.projectileCurvature),                                CSPFT_FLOAT               },
        {"projectileModel",                        offsetof(WeaponFullDef, weapDef.projectileModel),                                    CSPFT_XMODEL              },
        {"projExplosionType",                      offsetof(WeaponFullDef, weapDef.projExplosion),                                      WFT_PROJ_EXPLOSION        },
        {"projExplosionEffect",                    offsetof(WeaponFullDef, weapDef.projExplosionEffect),                                CSPFT_FX                  },
        {"projExplosionEffectForceNormalUp",       offsetof(WeaponFullDef, weapDef.projExplosionEffectForceNormalUp),                   CSPFT_BOOL                },
        {"projExplosionSound",                     offsetof(WeaponFullDef, weapDef.projExplosionSound),                                 CSPFT_SOUND               },
        {"projDudEffect",                          offsetof(WeaponFullDef, weapDef.projDudEffect),                                      CSPFT_FX                  },
        {"projDudSound",                           offsetof(WeaponFullDef, weapDef.projDudSound),                                       CSPFT_SOUND               },
        {"projImpactExplode",                      offsetof(WeaponFullDef, weapDef.bProjImpactExplode),                                 CSPFT_BOOL                },
        {"stickiness",                             offsetof(WeaponFullDef, weapDef.stickiness),                                         WFT_STICKINESS            },
        {"stickToPlayers",                         offsetof(WeaponFullDef, weapDef.stickToPlayers),                                     CSPFT_BOOL                },
        {"stickToVehicles",                        offsetof(WeaponFullDef, weapDef.stickToVehicles),                                    CSPFT_BOOL                },
        {"stickToTurrets",                         offsetof(WeaponFullDef, weapDef.stickToTurrets),                                     CSPFT_BOOL                },
        {"hasDetonator",                           offsetof(WeaponFullDef, weapDef.hasDetonator),                                       CSPFT_BOOL                },
        {"disableFiring",                          offsetof(WeaponFullDef, weapDef.disableFiring),                                      CSPFT_BOOL                },
        {"timedDetonation",                        offsetof(WeaponFullDef, weapDef.timedDetonation),                                    CSPFT_BOOL                },
        {"rotate",                                 offsetof(WeaponFullDef, weapDef.rotate),                                             CSPFT_BOOL                },
        {"holdButtonToThrow",                      offsetof(WeaponFullDef, weapDef.holdButtonToThrow),                                  CSPFT_BOOL                },
        {"freezeMovementWhenFiring",               offsetof(WeaponFullDef, weapDef.freezeMovementWhenFiring),                           CSPFT_BOOL                },
        {"lowAmmoWarningThreshold",                offsetof(WeaponFullDef, weapDef.lowAmmoWarningThreshold),                            CSPFT_FLOAT               },
        {"ricochetChance",                         offsetof(WeaponFullDef, weapDef.ricochetChance),                                     CSPFT_FLOAT               },
        {"riotShieldEnableDamage",                 offsetof(WeaponFullDef, weapDef.riotShieldEnableDamage),                             CSPFT_BOOL                },
        {"riotShieldHealth",                       offsetof(WeaponFullDef, weapDef.riotShieldHealth),                                   CSPFT_INT                 },
        {"riotShieldDamageMult",                   offsetof(WeaponFullDef, weapDef.riotShieldDamageMult),                               CSPFT_FLOAT               },
        {"offhandHoldIsCancelable",                offsetof(WeaponFullDef, weapDef.offhandHoldIsCancelable),                            CSPFT_BOOL                },
        {"doNotAllowAttachmentsToOverrideSpread",  offsetof(WeaponFullDef, weapDef.doNotAllowAttachmentsToOverrideSpread),              CSPFT_BOOL                },
        {"parallelDefaultBounce",                  offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_DEFAULT]),                          CSPFT_FLOAT               },
        {"parallelBarkBounce",                     offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_BARK]),                             CSPFT_FLOAT               },
        {"parallelBrickBounce",                    offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_BRICK]),                            CSPFT_FLOAT               },
        {"parallelCarpetBounce",                   offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_CARPET]),                           CSPFT_FLOAT               },
        {"parallelClothBounce",                    offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_CLOTH]),                            CSPFT_FLOAT               },
        {"parallelConcreteBounce",                 offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_CONCRETE]),                         CSPFT_FLOAT               },
        {"parallelDirtBounce",                     offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_DIRT]),                             CSPFT_FLOAT               },
        {"parallelFleshBounce",                    offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_FLESH]),                            CSPFT_FLOAT               },
        {"parallelFoliageBounce",                  offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_FOLIAGE]),                          CSPFT_FLOAT               },
        {"parallelGlassBounce",                    offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_GLASS]),                            CSPFT_FLOAT               },
        {"parallelGrassBounce",                    offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_GRASS]),                            CSPFT_FLOAT               },
        {"parallelGravelBounce",                   offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_GRAVEL]),                           CSPFT_FLOAT               },
        {"parallelIceBounce",                      offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_ICE]),                              CSPFT_FLOAT               },
        {"parallelMetalBounce",                    offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_METAL]),                            CSPFT_FLOAT               },
        {"parallelMudBounce",                      offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_MUD]),                              CSPFT_FLOAT               },
        {"parallelPaperBounce",                    offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_PAPER]),                            CSPFT_FLOAT               },
        {"parallelPlasterBounce",                  offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_PLASTER]),                          CSPFT_FLOAT               },
        {"parallelRockBounce",                     offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_ROCK]),                             CSPFT_FLOAT               },
        {"parallelSandBounce",                     offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_SAND]),                             CSPFT_FLOAT               },
        {"parallelSnowBounce",                     offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_SNOW]),                             CSPFT_FLOAT               },
        {"parallelWaterBounce",                    offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_WATER]),                            CSPFT_FLOAT               },
        {"parallelWoodBounce",                     offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_WOOD]),                             CSPFT_FLOAT               },
        {"parallelAsphaltBounce",                  offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_ASPHALT]),                          CSPFT_FLOAT               },
        {"parallelCeramicBounce",                  offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_CERAMIC]),                          CSPFT_FLOAT               },
        {"parallelPlasticBounce",                  offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_PLASTIC]),                          CSPFT_FLOAT               },
        {"parallelRubberBounce",                   offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_RUBBER]),                           CSPFT_FLOAT               },
        {"parallelCushionBounce",                  offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_CUSHION]),                          CSPFT_FLOAT               },
        {"parallelFruitBounce",                    offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_FRUIT]),                            CSPFT_FLOAT               },
        {"parallelPaintedMetalBounce",             offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_PAINTED_METAL]),                    CSPFT_FLOAT               },
        {"parallelRiotShieldBounce",               offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_RIOT_SHIELD]),                      CSPFT_FLOAT               },
        {"parallelSlushBounce",                    offsetof(WeaponFullDef, parallelBounce[SURF_TYPE_SLUSH]),                            CSPFT_FLOAT               },
        {"perpendicularDefaultBounce",             offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_DEFAULT]),                     CSPFT_FLOAT               },
        {"perpendicularBarkBounce",                offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_BARK]),                        CSPFT_FLOAT               },
        {"perpendicularBrickBounce",               offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_BRICK]),                       CSPFT_FLOAT               },
        {"perpendicularCarpetBounce",              offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_CARPET]),                      CSPFT_FLOAT               },
        {"perpendicularClothBounce",               offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_CLOTH]),                       CSPFT_FLOAT               },
        {"perpendicularConcreteBounce",            offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_CONCRETE]),                    CSPFT_FLOAT               },
        {"perpendicularDirtBounce",                offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_DIRT]),                        CSPFT_FLOAT               },
        {"perpendicularFleshBounce",               offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_FLESH]),                       CSPFT_FLOAT               },
        {"perpendicularFoliageBounce",             offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_FOLIAGE]),                     CSPFT_FLOAT               },
        {"perpendicularGlassBounce",               offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_GLASS]),                       CSPFT_FLOAT               },
        {"perpendicularGrassBounce",               offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_GRASS]),                       CSPFT_FLOAT               },
        {"perpendicularGravelBounce",              offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_GRAVEL]),                      CSPFT_FLOAT               },
        {"perpendicularIceBounce",                 offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_ICE]),                         CSPFT_FLOAT               },
        {"perpendicularMetalBounce",               offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_METAL]),                       CSPFT_FLOAT               },
        {"perpendicularMudBounce",                 offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_MUD]),                         CSPFT_FLOAT               },
        {"perpendicularPaperBounce",               offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_PAPER]),                       CSPFT_FLOAT               },
        {"perpendicularPlasterBounce",             offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_PLASTER]),                     CSPFT_FLOAT               },
        {"perpendicularRockBounce",                offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_ROCK]),                        CSPFT_FLOAT               },
        {"perpendicularSandBounce",                offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_SAND]),                        CSPFT_FLOAT               },
        {"perpendicularSnowBounce",                offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_SNOW]),                        CSPFT_FLOAT               },
        {"perpendicularWaterBounce",               offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_WATER]),                       CSPFT_FLOAT               },
        {"perpendicularWoodBounce",                offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_WOOD]),                        CSPFT_FLOAT               },
        {"perpendicularAsphaltBounce",             offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_ASPHALT]),                     CSPFT_FLOAT               },
        {"perpendicularCeramicBounce",             offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_CERAMIC]),                     CSPFT_FLOAT               },
        {"perpendicularPlasticBounce",             offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_PLASTIC]),                     CSPFT_FLOAT               },
        {"perpendicularRubberBounce",              offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_RUBBER]),                      CSPFT_FLOAT               },
        {"perpendicularCushionBounce",             offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_CUSHION]),                     CSPFT_FLOAT               },
        {"perpendicularFruitBounce",               offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_FRUIT]),                       CSPFT_FLOAT               },
        {"perpendicularPaintedMetalBounce",        offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_PAINTED_METAL]),               CSPFT_FLOAT               },
        {"perpendicularRiotShieldBounce",          offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_RIOT_SHIELD]),                 CSPFT_FLOAT               },
        {"perpendicularSlushBounce",               offsetof(WeaponFullDef, perpendicularBounce[SURF_TYPE_SLUSH]),                       CSPFT_FLOAT               },
        {"projTrailEffect",                        offsetof(WeaponFullDef, weapDef.projTrailEffect),                                    CSPFT_FX                  },
        {"projBeaconEffect",                       offsetof(WeaponFullDef, weapDef.projBeaconEffect),                                   CSPFT_FX                  },
        {"projectileRed",                          offsetof(WeaponFullDef, weapDef.vProjectileColor[0]),                                CSPFT_FLOAT               },
        {"projectileGreen",                        offsetof(WeaponFullDef, weapDef.vProjectileColor[1]),                                CSPFT_FLOAT               },
        {"projectileBlue",                         offsetof(WeaponFullDef, weapDef.vProjectileColor[2]),                                CSPFT_FLOAT               },
        {"guidedMissileType",                      offsetof(WeaponFullDef, weapDef.guidedMissileType),                                  WFT_GUIDED_MISSILE_TYPE   },
        {"maxSteeringAccel",                       offsetof(WeaponFullDef, weapDef.maxSteeringAccel),                                   CSPFT_FLOAT               },
        {"projIgnitionDelay",                      offsetof(WeaponFullDef, weapDef.projIgnitionDelay),                                  CSPFT_INT                 },
        {"projIgnitionEffect",                     offsetof(WeaponFullDef, weapDef.projIgnitionEffect),                                 CSPFT_FX                  },
        {"projIgnitionSound",                      offsetof(WeaponFullDef, weapDef.projIgnitionSound),                                  CSPFT_SOUND               },
        {"adsTransInTime",                         offsetof(WeaponFullDef, weapCompleteDef.iAdsTransInTime),                            CSPFT_MILLISECONDS        },
        {"adsTransOutTime",                        offsetof(WeaponFullDef, weapCompleteDef.iAdsTransOutTime),                           CSPFT_MILLISECONDS        },
        {"adsIdleAmount",                          offsetof(WeaponFullDef, weapDef.fAdsIdleAmount),                                     CSPFT_FLOAT               },
        {"adsIdleSpeed",                           offsetof(WeaponFullDef, weapDef.adsIdleSpeed),                                       CSPFT_FLOAT               },
        {"adsZoomFov",                             offsetof(WeaponFullDef, weapCompleteDef.fAdsZoomFov),                                CSPFT_FLOAT               },
        {"adsZoomInFrac",                          offsetof(WeaponFullDef, weapDef.fAdsZoomInFrac),                                     CSPFT_FLOAT               },
        {"adsZoomOutFrac",                         offsetof(WeaponFullDef, weapDef.fAdsZoomOutFrac),                                    CSPFT_FLOAT               },
        {"adsOverlayShader",                       offsetof(WeaponFullDef, weapDef.overlay.shader),                                     CSPFT_MATERIAL            },
        {"adsOverlayShaderLowRes",                 offsetof(WeaponFullDef, weapDef.overlay.shaderLowRes),                               CSPFT_MATERIAL            },
        {"adsOverlayShaderEMP",                    offsetof(WeaponFullDef, weapDef.overlay.shaderEMP),                                  CSPFT_MATERIAL            },
        {"adsOverlayShaderEMPLowRes",              offsetof(WeaponFullDef, weapDef.overlay.shaderEMPLowRes),                            CSPFT_MATERIAL            },
        {"adsOverlayReticle",                      offsetof(WeaponFullDef, weapDef.overlay.reticle),                                    WFT_OVERLAYRETICLE        },
        {"adsOverlayInterface",                    offsetof(WeaponFullDef, weapDef.overlayInterface),                                   WFT_OVERLAYINTERFACE      },
        {"adsOverlayWidth",                        offsetof(WeaponFullDef, weapDef.overlay.width),                                      CSPFT_FLOAT               },
        {"adsOverlayHeight",                       offsetof(WeaponFullDef, weapDef.overlay.height),                                     CSPFT_FLOAT               },
        {"adsOverlayWidthSplitscreen",             offsetof(WeaponFullDef, weapDef.overlay.widthSplitscreen),                           CSPFT_FLOAT               },
        {"adsOverlayHeightSplitscreen",            offsetof(WeaponFullDef, weapDef.overlay.heightSplitscreen),                          CSPFT_FLOAT               },
        {"adsBobFactor",                           offsetof(WeaponFullDef, weapDef.fAdsBobFactor),                                      CSPFT_FLOAT               },
        {"adsViewBobMult",                         offsetof(WeaponFullDef, weapDef.fAdsViewBobMult),                                    CSPFT_FLOAT               },
        {"adsAimPitch",                            offsetof(WeaponFullDef, weapDef.fAdsAimPitch),                                       CSPFT_FLOAT               },
        {"adsCrosshairInFrac",                     offsetof(WeaponFullDef, weapDef.fAdsCrosshairInFrac),                                CSPFT_FLOAT               },
        {"adsCrosshairOutFrac",                    offsetof(WeaponFullDef, weapDef.fAdsCrosshairOutFrac),                               CSPFT_FLOAT               },
        {"adsReloadTransTime",                     offsetof(WeaponFullDef, weapDef.iPositionReloadTransTime),                           CSPFT_MILLISECONDS        },
        {"adsGunKickReducedKickBullets",           offsetof(WeaponFullDef, weapDef.adsGunKickReducedKickBullets),                       CSPFT_INT                 },
        {"adsGunKickReducedKickPercent",           offsetof(WeaponFullDef, weapDef.adsGunKickReducedKickPercent),                       CSPFT_FLOAT               },
        {"adsGunKickPitchMin",                     offsetof(WeaponFullDef, weapDef.fAdsGunKickPitchMin),                                CSPFT_FLOAT               },
        {"adsGunKickPitchMax",                     offsetof(WeaponFullDef, weapDef.fAdsGunKickPitchMax),                                CSPFT_FLOAT               },
        {"adsGunKickYawMin",                       offsetof(WeaponFullDef, weapDef.fAdsGunKickYawMin),                                  CSPFT_FLOAT               },
        {"adsGunKickYawMax",                       offsetof(WeaponFullDef, weapDef.fAdsGunKickYawMax),                                  CSPFT_FLOAT               },
        {"adsGunKickAccel",                        offsetof(WeaponFullDef, weapDef.fAdsGunKickAccel),                                   CSPFT_FLOAT               },
        {"adsGunKickSpeedMax",                     offsetof(WeaponFullDef, weapDef.fAdsGunKickSpeedMax),                                CSPFT_FLOAT               },
        {"adsGunKickSpeedDecay",                   offsetof(WeaponFullDef, weapDef.fAdsGunKickSpeedDecay),                              CSPFT_FLOAT               },
        {"adsGunKickStaticDecay",                  offsetof(WeaponFullDef, weapDef.fAdsGunKickStaticDecay),                             CSPFT_FLOAT               },
        {"adsViewKickPitchMin",                    offsetof(WeaponFullDef, weapDef.fAdsViewKickPitchMin),                               CSPFT_FLOAT               },
        {"adsViewKickPitchMax",                    offsetof(WeaponFullDef, weapDef.fAdsViewKickPitchMax),                               CSPFT_FLOAT               },
        {"adsViewKickYawMin",                      offsetof(WeaponFullDef, weapDef.fAdsViewKickYawMin),                                 CSPFT_FLOAT               },
        {"adsViewKickYawMax",                      offsetof(WeaponFullDef, weapDef.fAdsViewKickYawMax),                                 CSPFT_FLOAT               },
        {"adsViewKickCenterSpeed",                 offsetof(WeaponFullDef, weapCompleteDef.fAdsViewKickCenterSpeed),                    CSPFT_FLOAT               },
        {"adsSpread",                              offsetof(WeaponFullDef, weapDef.fAdsSpread),                                         CSPFT_FLOAT               },
        {"guidedMissileType",                      offsetof(WeaponFullDef, weapDef.guidedMissileType),                                  WFT_GUIDED_MISSILE_TYPE   },
        {"hipSpreadStandMin",                      offsetof(WeaponFullDef, weapDef.fHipSpreadStandMin),                                 CSPFT_FLOAT               },
        {"hipSpreadDuckedMin",                     offsetof(WeaponFullDef, weapDef.fHipSpreadDuckedMin),                                CSPFT_FLOAT               },
        {"hipSpreadProneMin",                      offsetof(WeaponFullDef, weapDef.fHipSpreadProneMin),                                 CSPFT_FLOAT               },
        {"hipSpreadMax",                           offsetof(WeaponFullDef, weapDef.hipSpreadStandMax),                                  CSPFT_FLOAT               },
        {"hipSpreadDuckedMax",                     offsetof(WeaponFullDef, weapDef.hipSpreadDuckedMax),                                 CSPFT_FLOAT               },
        {"hipSpreadProneMax",                      offsetof(WeaponFullDef, weapDef.hipSpreadProneMax),                                  CSPFT_FLOAT               },
        {"hipSpreadDecayRate",                     offsetof(WeaponFullDef, weapDef.fHipSpreadDecayRate),                                CSPFT_FLOAT               },
        {"hipSpreadFireAdd",                       offsetof(WeaponFullDef, weapDef.fHipSpreadFireAdd),                                  CSPFT_FLOAT               },
        {"hipSpreadTurnAdd",                       offsetof(WeaponFullDef, weapDef.fHipSpreadTurnAdd),                                  CSPFT_FLOAT               },
        {"hipSpreadMoveAdd",                       offsetof(WeaponFullDef, weapDef.fHipSpreadMoveAdd),                                  CSPFT_FLOAT               },
        {"hipSpreadDuckedDecay",                   offsetof(WeaponFullDef, weapDef.fHipSpreadDuckedDecay),                              CSPFT_FLOAT               },
        {"hipSpreadProneDecay",                    offsetof(WeaponFullDef, weapDef.fHipSpreadProneDecay),                               CSPFT_FLOAT               },
        {"hipReticleSidePos",                      offsetof(WeaponFullDef, weapDef.fHipReticleSidePos),                                 CSPFT_FLOAT               },
        {"hipIdleAmount",                          offsetof(WeaponFullDef, weapDef.fHipIdleAmount),                                     CSPFT_FLOAT               },
        {"hipIdleSpeed",                           offsetof(WeaponFullDef, weapDef.hipIdleSpeed),                                       CSPFT_FLOAT               },
        {"hipGunKickReducedKickBullets",           offsetof(WeaponFullDef, weapDef.hipGunKickReducedKickBullets),                       CSPFT_INT                 },
        {"hipGunKickReducedKickPercent",           offsetof(WeaponFullDef, weapDef.hipGunKickReducedKickPercent),                       CSPFT_FLOAT               },
        {"hipGunKickPitchMin",                     offsetof(WeaponFullDef, weapDef.fHipGunKickPitchMin),                                CSPFT_FLOAT               },
        {"hipGunKickPitchMax",                     offsetof(WeaponFullDef, weapDef.fHipGunKickPitchMax),                                CSPFT_FLOAT               },
        {"hipGunKickYawMin",                       offsetof(WeaponFullDef, weapDef.fHipGunKickYawMin),                                  CSPFT_FLOAT               },
        {"hipGunKickYawMax",                       offsetof(WeaponFullDef, weapDef.fHipGunKickYawMax),                                  CSPFT_FLOAT               },
        {"hipGunKickAccel",                        offsetof(WeaponFullDef, weapDef.fHipGunKickAccel),                                   CSPFT_FLOAT               },
        {"hipGunKickSpeedMax",                     offsetof(WeaponFullDef, weapDef.fHipGunKickSpeedMax),                                CSPFT_FLOAT               },
        {"hipGunKickSpeedDecay",                   offsetof(WeaponFullDef, weapDef.fHipGunKickSpeedDecay),                              CSPFT_FLOAT               },
        {"hipGunKickStaticDecay",                  offsetof(WeaponFullDef, weapDef.fHipGunKickStaticDecay),                             CSPFT_FLOAT               },
        {"hipViewKickPitchMin",                    offsetof(WeaponFullDef, weapDef.fHipViewKickPitchMin),                               CSPFT_FLOAT               },
        {"hipViewKickPitchMax",                    offsetof(WeaponFullDef, weapDef.fHipViewKickPitchMax),                               CSPFT_FLOAT               },
        {"hipViewKickYawMin",                      offsetof(WeaponFullDef, weapDef.fHipViewKickYawMin),                                 CSPFT_FLOAT               },
        {"hipViewKickYawMax",                      offsetof(WeaponFullDef, weapDef.fHipViewKickYawMax),                                 CSPFT_FLOAT               },
        {"hipViewKickCenterSpeed",                 offsetof(WeaponFullDef, weapCompleteDef.fHipViewKickCenterSpeed),                    CSPFT_FLOAT               },
        {"leftArc",                                offsetof(WeaponFullDef, weapDef.leftArc),                                            CSPFT_FLOAT               },
        {"rightArc",                               offsetof(WeaponFullDef, weapDef.rightArc),                                           CSPFT_FLOAT               },
        {"topArc",                                 offsetof(WeaponFullDef, weapDef.topArc),                                             CSPFT_FLOAT               },
        {"bottomArc",                              offsetof(WeaponFullDef, weapDef.bottomArc),                                          CSPFT_FLOAT               },
        {"accuracy",                               offsetof(WeaponFullDef, weapDef.accuracy),                                           CSPFT_FLOAT               },
        {"aiSpread",                               offsetof(WeaponFullDef, weapDef.aiSpread),                                           CSPFT_FLOAT               },
        {"playerSpread",                           offsetof(WeaponFullDef, weapDef.playerSpread),                                       CSPFT_FLOAT               },
        {"maxVertTurnSpeed",                       offsetof(WeaponFullDef, weapDef.maxTurnSpeed[0]),                                    CSPFT_FLOAT               },
        {"maxHorTurnSpeed",                        offsetof(WeaponFullDef, weapDef.maxTurnSpeed[1]),                                    CSPFT_FLOAT               },
        {"minVertTurnSpeed",                       offsetof(WeaponFullDef, weapDef.minTurnSpeed[0]),                                    CSPFT_FLOAT               },
        {"minHorTurnSpeed",                        offsetof(WeaponFullDef, weapDef.minTurnSpeed[1]),                                    CSPFT_FLOAT               },
        {"pitchConvergenceTime",                   offsetof(WeaponFullDef, weapDef.pitchConvergenceTime),                               CSPFT_FLOAT               },
        {"yawConvergenceTime",                     offsetof(WeaponFullDef, weapDef.yawConvergenceTime),                                 CSPFT_FLOAT               },
        {"suppressionTime",                        offsetof(WeaponFullDef, weapDef.suppressTime),                                       CSPFT_FLOAT               },
        {"maxRange",                               offsetof(WeaponFullDef, weapDef.maxRange),                                           CSPFT_FLOAT               },
        {"animHorRotateInc",                       offsetof(WeaponFullDef, weapDef.fAnimHorRotateInc),                                  CSPFT_FLOAT               },
        {"playerPositionDist",                     offsetof(WeaponFullDef, weapDef.fPlayerPositionDist),                                CSPFT_FLOAT               },
        {"stance",                                 offsetof(WeaponFullDef, weapDef.stance),                                             WFT_STANCE                },
        {"useHintString",                          offsetof(WeaponFullDef, weapDef.szUseHintString),                                    CSPFT_STRING              },
        {"dropHintString",                         offsetof(WeaponFullDef, weapDef.dropHintString),                                     CSPFT_STRING              },
        {"horizViewJitter",                        offsetof(WeaponFullDef, weapDef.horizViewJitter),                                    CSPFT_FLOAT               },
        {"vertViewJitter",                         offsetof(WeaponFullDef, weapDef.vertViewJitter),                                     CSPFT_FLOAT               },
        {"scanSpeed",                              offsetof(WeaponFullDef, weapDef.scanSpeed),                                          CSPFT_FLOAT               },
        {"scanAccel",                              offsetof(WeaponFullDef, weapDef.scanAccel),                                          CSPFT_FLOAT               },
        {"scanPauseTime",                          offsetof(WeaponFullDef, weapDef.scanPauseTime),                                      CSPFT_MILLISECONDS        },
        {"fightDist",                              offsetof(WeaponFullDef, weapDef.fightDist),                                          CSPFT_FLOAT               },
        {"maxDist",                                offsetof(WeaponFullDef, weapDef.maxDist),                                            CSPFT_FLOAT               },
        {"aiVsAiAccuracyGraph",                    offsetof(WeaponFullDef, weapDef.aiVsAiAccuracyGraphName),                            CSPFT_STRING              },
        {"aiVsPlayerAccuracyGraph",                offsetof(WeaponFullDef, weapDef.aiVsPlayerAccuracyGraphName),                        CSPFT_STRING              },
        {"locNone",                                offsetof(WeaponFullDef, locationDamageMultipliers[HITLOC_NONE]),                     CSPFT_FLOAT               },
        {"locHelmet",                              offsetof(WeaponFullDef, locationDamageMultipliers[HITLOC_HELMET]),                   CSPFT_FLOAT               },
        {"locHead",                                offsetof(WeaponFullDef, locationDamageMultipliers[HITLOC_HEAD]),                     CSPFT_FLOAT               },
        {"locNeck",                                offsetof(WeaponFullDef, locationDamageMultipliers[HITLOC_NECK]),                     CSPFT_FLOAT               },
        {"locTorsoUpper",                          offsetof(WeaponFullDef, locationDamageMultipliers[HITLOC_TORSO_UPR]),                CSPFT_FLOAT               },
        {"locTorsoLower",                          offsetof(WeaponFullDef, locationDamageMultipliers[HITLOC_TORSO_LWR]),                CSPFT_FLOAT               },
        {"locRightArmUpper",                       offsetof(WeaponFullDef, locationDamageMultipliers[HITLOC_R_ARM_UPR]),                CSPFT_FLOAT               },
        {"locRightArmLower",                       offsetof(WeaponFullDef, locationDamageMultipliers[HITLOC_R_ARM_LWR]),                CSPFT_FLOAT               },
        {"locRightHand",                           offsetof(WeaponFullDef, locationDamageMultipliers[HITLOC_R_HAND]),                   CSPFT_FLOAT               },
        {"locLeftArmUpper",                        offsetof(WeaponFullDef, locationDamageMultipliers[HITLOC_L_ARM_UPR]),                CSPFT_FLOAT               },
        {"locLeftArmLower",                        offsetof(WeaponFullDef, locationDamageMultipliers[HITLOC_L_ARM_LWR]),                CSPFT_FLOAT               },
        {"locLeftHand",                            offsetof(WeaponFullDef, locationDamageMultipliers[HITLOC_L_HAND]),                   CSPFT_FLOAT               },
        {"locRightLegUpper",                       offsetof(WeaponFullDef, locationDamageMultipliers[HITLOC_R_LEG_UPR]),                CSPFT_FLOAT               },
        {"locRightLegLower",                       offsetof(WeaponFullDef, locationDamageMultipliers[HITLOC_R_LEG_LWR]),                CSPFT_FLOAT               },
        {"locRightFoot",                           offsetof(WeaponFullDef, locationDamageMultipliers[HITLOC_R_FOOT]),                   CSPFT_FLOAT               },
        {"locLeftLegUpper",                        offsetof(WeaponFullDef, locationDamageMultipliers[HITLOC_L_LEG_UPR]),                CSPFT_FLOAT               },
        {"locLeftLegLower",                        offsetof(WeaponFullDef, locationDamageMultipliers[HITLOC_L_LEG_LWR]),                CSPFT_FLOAT               },
        {"locLeftFoot",                            offsetof(WeaponFullDef, locationDamageMultipliers[HITLOC_L_FOOT]),                   CSPFT_FLOAT               },
        {"locGun",                                 offsetof(WeaponFullDef, locationDamageMultipliers[HITLOC_GUN]),                      CSPFT_FLOAT               },
        {"fireRumble",                             offsetof(WeaponFullDef, weapDef.fireRumble),                                         CSPFT_STRING              },
        {"meleeImpactRumble",                      offsetof(WeaponFullDef, weapDef.meleeImpactRumble),                                  CSPFT_STRING              },
        {"tracerType",                             offsetof(WeaponFullDef, weapDef.tracerType),                                         CSPFT_TRACER              },
        {"adsDofStart",                            offsetof(WeaponFullDef, weapCompleteDef.adsDofStart),                                CSPFT_FLOAT               },
        {"adsDofEnd",                              offsetof(WeaponFullDef, weapCompleteDef.adsDofEnd),                                  CSPFT_FLOAT               },
        {"turretADSEnabled",                       offsetof(WeaponFullDef, weapDef.turretADSEnabled),                                   CSPFT_BOOL                },
        {"turretADSTime",                          offsetof(WeaponFullDef, weapDef.turretADSTime),                                      CSPFT_FLOAT               },
        {"turretFov",                              offsetof(WeaponFullDef, weapDef.turretFov),                                          CSPFT_FLOAT               },
        {"turretFovADS",                           offsetof(WeaponFullDef, weapDef.turretFovADS),                                       CSPFT_FLOAT               },
        {"turretScopeZoomRate",                    offsetof(WeaponFullDef, weapDef.turretScopeZoomRate),                                CSPFT_FLOAT               },
        {"turretScopeZoomMin",                     offsetof(WeaponFullDef, weapDef.turretScopeZoomMin),                                 CSPFT_FLOAT               },
        {"turretScopeZoomMax",                     offsetof(WeaponFullDef, weapDef.turretScopeZoomMax),                                 CSPFT_FLOAT               },
        {"thermalScope",                           offsetof(WeaponFullDef, weapDef.thermalScope),                                       CSPFT_BOOL                },
        {"altModeSameWeapon",                      offsetof(WeaponFullDef, weapDef.altModeSameWeapon),                                  CSPFT_BOOL                },
        {"turretOverheatUpRate",                   offsetof(WeaponFullDef, weapDef.turretOverheatUpRate),                               CSPFT_FLOAT               },
        {"turretOverheatDownRate",                 offsetof(WeaponFullDef, weapDef.turretOverheatDownRate),                             CSPFT_FLOAT               },
        {"turretOverheatPenalty",                  offsetof(WeaponFullDef, weapDef.turretOverheatPenalty),                              CSPFT_FLOAT               },
        {"turretOverheatSound",                    offsetof(WeaponFullDef, weapDef.turretOverheatSound),                                CSPFT_SOUND               },
        {"turretOverheatEffect",                   offsetof(WeaponFullDef, weapDef.turretOverheatEffect),                               CSPFT_FX                  },
        {"turretBarrelSpinEnabled",                offsetof(WeaponFullDef, weapDef.turretBarrelSpinEnabled),                            CSPFT_BOOL                },
        {"turretBarrelSpinUpTime",                 offsetof(WeaponFullDef, weapDef.turretBarrelSpinUpTime),                             CSPFT_FLOAT               },
        {"turretBarrelSpinDownTime",               offsetof(WeaponFullDef, weapDef.turretBarrelSpinDownTime),                           CSPFT_FLOAT               },
        {"turretBarrelSpinRumble",                 offsetof(WeaponFullDef, weapDef.turretBarrelSpinRumble),                             CSPFT_STRING              },
        {"turretBarrelSpinSpeed",                  offsetof(WeaponFullDef, weapDef.turretBarrelSpinSpeed),                              CSPFT_FLOAT               },
        {"turretBarrelSpinMaxSnd",                 offsetof(WeaponFullDef, weapDef.turretBarrelSpinMaxSnd),                             CSPFT_SOUND               },
        {"turretBarrelSpinUpSnd1",                 offsetof(WeaponFullDef, weapDef.turretBarrelSpinUpSnd[0]),                           CSPFT_SOUND               },
        {"turretBarrelSpinUpSnd2",                 offsetof(WeaponFullDef, weapDef.turretBarrelSpinUpSnd[1]),                           CSPFT_SOUND               },
        {"turretBarrelSpinUpSnd3",                 offsetof(WeaponFullDef, weapDef.turretBarrelSpinUpSnd[2]),                           CSPFT_SOUND               },
        {"turretBarrelSpinUpSnd4",                 offsetof(WeaponFullDef, weapDef.turretBarrelSpinUpSnd[3]),                           CSPFT_SOUND               },
        {"turretBarrelSpinDownSnd1",               offsetof(WeaponFullDef, weapDef.turretBarrelSpinDownSnd[0]),                         CSPFT_SOUND               },
        {"turretBarrelSpinDownSnd2",               offsetof(WeaponFullDef, weapDef.turretBarrelSpinDownSnd[1]),                         CSPFT_SOUND               },
        {"turretBarrelSpinDownSnd3",               offsetof(WeaponFullDef, weapDef.turretBarrelSpinDownSnd[2]),                         CSPFT_SOUND               },
        {"turretBarrelSpinDownSnd4",               offsetof(WeaponFullDef, weapDef.turretBarrelSpinDownSnd[3]),                         CSPFT_SOUND               },
        {"missileConeSoundEnabled",                offsetof(WeaponFullDef, weapDef.missileConeSoundEnabled),                            CSPFT_BOOL                },
        {"missileConeSoundAlias",                  offsetof(WeaponFullDef, weapDef.missileConeSoundAlias),                              CSPFT_SOUND               },
        {"missileConeSoundAliasAtBase",            offsetof(WeaponFullDef, weapDef.missileConeSoundAliasAtBase),                        CSPFT_SOUND               },
        {"missileConeSoundRadiusAtTop",            offsetof(WeaponFullDef, weapDef.missileConeSoundRadiusAtTop),                        CSPFT_FLOAT               },
        {"missileConeSoundRadiusAtBase",           offsetof(WeaponFullDef, weapDef.missileConeSoundRadiusAtBase),                       CSPFT_FLOAT               },
        {"missileConeSoundHeight",                 offsetof(WeaponFullDef, weapDef.missileConeSoundHeight),                             CSPFT_FLOAT               },
        {"missileConeSoundOriginOffset",           offsetof(WeaponFullDef, weapDef.missileConeSoundOriginOffset),                       CSPFT_FLOAT               },
        {"missileConeSoundVolumescaleAtCore",      offsetof(WeaponFullDef, weapDef.missileConeSoundVolumescaleAtCore),                  CSPFT_FLOAT               },
        {"missileConeSoundVolumescaleAtEdge",      offsetof(WeaponFullDef, weapDef.missileConeSoundVolumescaleAtEdge),                  CSPFT_FLOAT               },
        {"missileConeSoundVolumescaleCoreSize",    offsetof(WeaponFullDef, weapDef.missileConeSoundVolumescaleCoreSize),                CSPFT_FLOAT               },
        {"missileConeSoundPitchshiftEnabled",      offsetof(WeaponFullDef, weapDef.missileConeSoundPitchshiftEnabled),                  CSPFT_BOOL                },
        {"missileConeSoundPitchAtTop",             offsetof(WeaponFullDef, weapDef.missileConeSoundPitchAtTop),                         CSPFT_FLOAT               },
        {"missileConeSoundPitchAtBottom",          offsetof(WeaponFullDef, weapDef.missileConeSoundPitchAtBottom),                      CSPFT_FLOAT               },
        {"missileConeSoundPitchTopSize",           offsetof(WeaponFullDef, weapDef.missileConeSoundPitchTopSize),                       CSPFT_FLOAT               },
        {"missileConeSoundPitchBottomSize",        offsetof(WeaponFullDef, weapDef.missileConeSoundPitchBottomSize),                    CSPFT_FLOAT               },
        {"missileConeSoundCrossfadeEnabled",       offsetof(WeaponFullDef, weapDef.missileConeSoundCrossfadeEnabled),                   CSPFT_BOOL                },
        {"missileConeSoundCrossfadeTopSize",       offsetof(WeaponFullDef, weapDef.missileConeSoundCrossfadeTopSize),                   CSPFT_FLOAT               },
        {"missileConeSoundCrossfadeBottomSize",    offsetof(WeaponFullDef, weapDef.missileConeSoundCrossfadeBottomSize),                CSPFT_FLOAT               },
        {"stowTag",                                offsetof(WeaponFullDef, weapDef.stowTag),                                            CSPFT_SCRIPT_STRING       },
        {"stowOffsetModel",                        offsetof(WeaponFullDef, weapDef.stowOffsetModel),                                    CSPFT_XMODEL              },
        {"attachments",                            offsetof(WeaponFullDef, scopes),                                                     WFT_ATTACHMENT            },
        {"animOverrides",                          offsetof(WeaponFullDef, weapCompleteDef.animOverrides),                              WFT_ANIM_OVERRIDES        },
        {"soundOverrides",                         offsetof(WeaponFullDef, weapCompleteDef.soundOverrides),                             WFT_SOUND_OVERRIDES       },
        {"fxOverrides",                            offsetof(WeaponFullDef, weapCompleteDef.fxOverrides),                                WFT_FX_OVERRIDES          },
        {"reloadOverrides",                        offsetof(WeaponFullDef, weapCompleteDef.reloadOverrides),                            WFT_RELOAD_OVERRIDES      },
        {"notetrackOverrides",                     offsetof(WeaponFullDef, weapCompleteDef.notetrackOverrides),                         WFT_NOTETRACK_OVERRIDES   },
    };

    inline const char* szWeapTypeNames[]{
        "none",
        "bullet",
        "grenade",
        "projectile",
        "riotshield",
    };
    static_assert(std::extent_v<decltype(szWeapTypeNames)> == WEAPTYPE_COUNT);

    inline const char* szWeapClassNames[]{
        "rifle",
        "sniper",
        "mg",
        "smg",
        "spread",
        "pistol",
        "grenade",
        "rocketlauncher",
        "turret",
        "throwingknife",
        "non-player",
        "item",
    };
    static_assert(std::extent_v<decltype(szWeapClassNames)> == WEAPCLASS_COUNT);

    inline const char* szWeapOverlayReticleNames[]{
        "none",
        "crosshair",
    };
    static_assert(std::extent_v<decltype(szWeapOverlayReticleNames)> == WEAPOVERLAYRETICLE_COUNT);

    inline const char* szWeapInventoryTypeNames[]{
        "primary",
        "offhand",
        "item",
        "altmode",
        "exclusive",
        "scavenger",
    };
    static_assert(std::extent_v<decltype(szWeapInventoryTypeNames)> == WEAPINVENTORY_COUNT);

    inline const char* szWeapFireTypeNames[]{
        "Full Auto",
        "Single Shot",
        "2-Round Burst",
        "3-Round Burst",
        "4-Round Burst",
        "Double Barrel",
    };
    static_assert(std::extent_v<decltype(szWeapFireTypeNames)> == WEAPON_FIRETYPE_COUNT);

    inline const char* penetrateTypeNames[]{
        "none",
        "small",
        "medium",
        "large",
    };
    static_assert(std::extent_v<decltype(penetrateTypeNames)> == PENETRATE_TYPE_COUNT);

    inline const char* impactTypeNames[]{
        "none",
        "bullet_small",
        "bullet_large",
        "bullet_ap",
        "bullet_explode",
        "shotgun",
        "shotgun_explode",
        "grenade_bounce",
        "grenade_explode",
        "rocket_explode",
        "projectile_dud",
    };
    static_assert(std::extent_v<decltype(impactTypeNames)> == IMPACT_TYPE_COUNT);

    inline const char* szWeapStanceNames[]{
        "stand",
        "duck",
        "prone",
    };
    static_assert(std::extent_v<decltype(szWeapStanceNames)> == WEAPSTANCE_COUNT);

    inline const char* szProjectileExplosionNames[]{
        "grenade",
        "rocket",
        "flashbang",
        "none",
        "dud",
        "smoke",
        "heavy explosive",
    };
    static_assert(std::extent_v<decltype(szProjectileExplosionNames)> == WEAPPROJEXP_COUNT);

    inline const char* offhandClassNames[]{
        "None",
        "Frag Grenade",
        "Smoke Grenade",
        "Flash Grenade",
        "Throwing Knife",
        "Other",
    };
    static_assert(std::extent_v<decltype(offhandClassNames)> == OFFHAND_CLASS_COUNT);

    inline const char* playerAnimTypeNames[]{
        "none",
        "other",
        "pistol",
        "smg",
        "autorifle",
        "mg",
        "sniper",
        "rocketlauncher",
        "explosive",
        "grenade",
        "turret",
        "c4",
        "m203",
        "hold",
        "briefcase",
        "riotshield",
        "laptop",
        "throwingknife",
    };

    inline const char* activeReticleNames[]{
        "None",
        "Pip-On-A-Stick",
        "Bouncing diamond",
    };
    static_assert(std::extent_v<decltype(activeReticleNames)> == VEH_ACTIVE_RETICLE_COUNT);

    inline const char* guidedMissileNames[]{
        "None",
        "Sidewinder",
        "Hellfire",
        "Javelin",
    };
    static_assert(std::extent_v<decltype(guidedMissileNames)> == MISSILE_GUIDANCE_COUNT);

    inline const char* stickinessNames[]{
        "Don't stick",
        "Stick to all",
        "Stick to all, orient to surface",
        "Stick to ground",
        "Stick to ground, maintain yaw",
        "Knife",
    };
    static_assert(std::extent_v<decltype(stickinessNames)> == WEAPSTICKINESS_COUNT);

    inline const char* overlayInterfaceNames[]{
        "None",
        "Javelin",
        "Turret Scope",
    };
    static_assert(std::extent_v<decltype(overlayInterfaceNames)> == WEAPOVERLAYINTERFACE_COUNT);

    inline const char* ammoCounterClipNames[]{
        "None",
        "Magazine",
        "ShortMagazine",
        "Shotgun",
        "Rocket",
        "Beltfed",
        "AltWeapon",
    };
    static_assert(std::extent_v<decltype(ammoCounterClipNames)> == AMMO_COUNTER_CLIP_COUNT);

    inline const char* weapIconRatioNames[]{
        "1:1",
        "2:1",
        "4:1",
    };
    static_assert(std::extent_v<decltype(weapIconRatioNames)> == WEAPON_ICON_RATIO_COUNT);

    inline const char* surfaceTypeSoundSuffixes[]{
        "_default", "_bark",    "_brick",   "_carpet", "_cloth",   "_concrete", "_dirt",          "_flesh",       "_foliage", "_glass", "_grass",
        "_gravel",  "_ice",     "_metal",   "_mud",    "_paper",   "_plaster",  "_rock",          "_sand",        "_snow",    "_water", "_wood",
        "_asphalt", "_ceramic", "_plastic", "_rubber", "_cushion", "_fruit",    "_painted_metal", "_riot_shield", "_slush",
    };
    static_assert(std::extent_v<decltype(surfaceTypeSoundSuffixes)> == SURF_TYPE_COUNT);

    inline const char* weapAnimFilesNames[]{
        "root",         "idle",         "empty_idle",    "fire",         "hold_fire",   "lastshot",    "rechamber",        "melee",
        "melee_charge", "reload",       "reload_empty",  "reload_start", "reload_end",  "raise",       "first_raise",      "breach_raise",
        "drop",         "alt_raise",    "alt_drop",      "quick_raise",  "quick_drop",  "empty_raise", "empty_drop",       "sprint_in",
        "sprint_loop",  "sprint_out",   "stunned_start", "stunned_loop", "stunned_end", "detonate",    "nightvision_wear", "nightvision_remove",
        "ads_fire",     "ads_lastshot", "ads_rechamber", "blast_front",  "blast_right", "blast_back",  "blast_left",       "ads_up",
        "ads_down",     "alt_adjust",
    };
    static_assert(std::extent_v<decltype(weapAnimFilesNames)> == WEAP_ANIM_COUNT);

    inline const char* soundOverrideTypeNames[]{
        "none",
        "fire",
        "player_fire",
        "player_akimbo",
        "player_lastshot",
    };
    static_assert(std::extent_v<decltype(soundOverrideTypeNames)> == SNDTYPE_PLAYER_COUNT);

    inline const char* fxOverrideTypeNames[]{
        "none",
        "view_flash",
        "world_flash",
        "view_shell_eject",
        "world_shell_eject",
    };
    static_assert(std::extent_v<decltype(fxOverrideTypeNames)> == FXTYPE_COUNT);
} // namespace IW5
