#pragma once

#include "Game/T4/T4.h"

#include <cstddef>

namespace T4
{
    inline cspField_t weapon_fields[]{
        {"displayName",                      offsetof(WeaponDef, szDisplayName),                                CSPFT_STRING             },
        {"AIOverlayDescription",             offsetof(WeaponDef, szOverlayName),                                CSPFT_STRING             },
        {"modeName",                         offsetof(WeaponDef, szModeName),                                   CSPFT_STRING             },
        {"playerAnimType",                   offsetof(WeaponDef, playerAnimType),                               WFT_ANIMTYPE             },
        {"gunModel",                         offsetof(WeaponDef, gunXModel[0]),                                 CSPFT_XMODEL             },
        {"gunModel2",                        offsetof(WeaponDef, gunXModel[1]),                                 CSPFT_XMODEL             },
        {"gunModel3",                        offsetof(WeaponDef, gunXModel[2]),                                 CSPFT_XMODEL             },
        {"gunModel4",                        offsetof(WeaponDef, gunXModel[3]),                                 CSPFT_XMODEL             },
        {"gunModel5",                        offsetof(WeaponDef, gunXModel[4]),                                 CSPFT_XMODEL             },
        {"gunModel6",                        offsetof(WeaponDef, gunXModel[5]),                                 CSPFT_XMODEL             },
        {"gunModel7",                        offsetof(WeaponDef, gunXModel[6]),                                 CSPFT_XMODEL             },
        {"gunModel8",                        offsetof(WeaponDef, gunXModel[7]),                                 CSPFT_XMODEL             },
        {"gunModel9",                        offsetof(WeaponDef, gunXModel[8]),                                 CSPFT_XMODEL             },
        {"gunModel10",                       offsetof(WeaponDef, gunXModel[9]),                                 CSPFT_XMODEL             },
        {"gunModel11",                       offsetof(WeaponDef, gunXModel[10]),                                CSPFT_XMODEL             },
        {"gunModel12",                       offsetof(WeaponDef, gunXModel[11]),                                CSPFT_XMODEL             },
        {"gunModel13",                       offsetof(WeaponDef, gunXModel[12]),                                CSPFT_XMODEL             },
        {"gunModel14",                       offsetof(WeaponDef, gunXModel[13]),                                CSPFT_XMODEL             },
        {"gunModel15",                       offsetof(WeaponDef, gunXModel[14]),                                CSPFT_XMODEL             },
        {"gunModel16",                       offsetof(WeaponDef, gunXModel[15]),                                CSPFT_XMODEL             },
        {"handModel",                        offsetof(WeaponDef, handXModel),                                   CSPFT_XMODEL             },
        {"hideTags",                         offsetof(WeaponDef, hideTags),                                     WFT_HIDETAGS             },
        {"notetrackSoundMap",                offsetof(WeaponDef, notetrackSoundMapKeys),                        WFT_NOTETRACKSOUNDMAP    },
        {"idleAnim",                         offsetof(WeaponDef, szXAnims[WEAP_ANIM_IDLE]),                     WFT_ANIM_NAME            },
        {"emptyIdleAnim",                    offsetof(WeaponDef, szXAnims[WEAP_ANIM_EMPTY_IDLE]),               WFT_ANIM_NAME            },
        {"fireAnim",                         offsetof(WeaponDef, szXAnims[WEAP_ANIM_FIRE]),                     WFT_ANIM_NAME            },
        {"holdFireAnim",                     offsetof(WeaponDef, szXAnims[WEAP_ANIM_HOLD_FIRE]),                WFT_ANIM_NAME            },
        {"lastShotAnim",                     offsetof(WeaponDef, szXAnims[WEAP_ANIM_LASTSHOT]),                 WFT_ANIM_NAME            },
        {"detonateAnim",                     offsetof(WeaponDef, szXAnims[WEAP_ANIM_DETONATE]),                 WFT_ANIM_NAME            },
        {"rechamberAnim",                    offsetof(WeaponDef, szXAnims[WEAP_ANIM_RECHAMBER]),                WFT_ANIM_NAME            },
        {"meleeAnim",                        offsetof(WeaponDef, szXAnims[WEAP_ANIM_MELEE]),                    WFT_ANIM_NAME            },
        {"meleeChargeAnim",                  offsetof(WeaponDef, szXAnims[WEAP_ANIM_MELEE_CHARGE]),             WFT_ANIM_NAME            },
        {"reloadAnim",                       offsetof(WeaponDef, szXAnims[WEAP_ANIM_RELOAD]),                   WFT_ANIM_NAME            },
        {"reloadEmptyAnim",                  offsetof(WeaponDef, szXAnims[WEAP_ANIM_RELOAD_EMPTY]),             WFT_ANIM_NAME            },
        {"reloadStartAnim",                  offsetof(WeaponDef, szXAnims[WEAP_ANIM_RELOAD_START]),             WFT_ANIM_NAME            },
        {"reloadEndAnim",                    offsetof(WeaponDef, szXAnims[WEAP_ANIM_RELOAD_END]),               WFT_ANIM_NAME            },
        {"raiseAnim",                        offsetof(WeaponDef, szXAnims[WEAP_ANIM_RAISE]),                    WFT_ANIM_NAME            },
        {"dropAnim",                         offsetof(WeaponDef, szXAnims[WEAP_ANIM_DROP]),                     WFT_ANIM_NAME            },
        {"firstRaiseAnim",                   offsetof(WeaponDef, szXAnims[WEAP_ANIM_FIRST_RAISE]),              WFT_ANIM_NAME            },
        {"altRaiseAnim",                     offsetof(WeaponDef, szXAnims[WEAP_ANIM_ALT_RAISE]),                WFT_ANIM_NAME            },
        {"altDropAnim",                      offsetof(WeaponDef, szXAnims[WEAP_ANIM_ALT_DROP]),                 WFT_ANIM_NAME            },
        {"quickRaiseAnim",                   offsetof(WeaponDef, szXAnims[WEAP_ANIM_QUICK_RAISE]),              WFT_ANIM_NAME            },
        {"quickDropAnim",                    offsetof(WeaponDef, szXAnims[WEAP_ANIM_QUICK_DROP]),               WFT_ANIM_NAME            },
        {"emptyRaiseAnim",                   offsetof(WeaponDef, szXAnims[WEAP_ANIM_EMPTY_RAISE]),              WFT_ANIM_NAME            },
        {"emptyDropAnim",                    offsetof(WeaponDef, szXAnims[WEAP_ANIM_EMPTY_DROP]),               WFT_ANIM_NAME            },
        {"sprintInAnim",                     offsetof(WeaponDef, szXAnims[WEAP_ANIM_SPRINT_IN]),                WFT_ANIM_NAME            },
        {"sprintLoopAnim",                   offsetof(WeaponDef, szXAnims[WEAP_ANIM_SPRINT_LOOP]),              WFT_ANIM_NAME            },
        {"sprintOutAnim",                    offsetof(WeaponDef, szXAnims[WEAP_ANIM_SPRINT_OUT]),               WFT_ANIM_NAME            },
        {"deployAnim",                       offsetof(WeaponDef, szXAnims[WEAP_ANIM_DEPLOY]),                   WFT_ANIM_NAME            },
        {"breakdownAnim",                    offsetof(WeaponDef, szXAnims[WEAP_ANIM_BREAKDOWN]),                WFT_ANIM_NAME            },
        {"nightVisionWearAnim",              offsetof(WeaponDef, szXAnims[WEAP_ANIM_NIGHTVISION_WEAR]),         WFT_ANIM_NAME            },
        {"nightVisionRemoveAnim",            offsetof(WeaponDef, szXAnims[WEAP_ANIM_NIGHTVISION_REMOVE]),       WFT_ANIM_NAME            },
        {"adsFireAnim",                      offsetof(WeaponDef, szXAnims[WEAP_ANIM_ADS_FIRE]),                 WFT_ANIM_NAME            },
        {"adsLastShotAnim",                  offsetof(WeaponDef, szXAnims[WEAP_ANIM_ADS_LASTSHOT]),             WFT_ANIM_NAME            },
        {"adsRechamberAnim",                 offsetof(WeaponDef, szXAnims[WEAP_ANIM_ADS_RECHAMBER]),            WFT_ANIM_NAME            },
        {"adsUpAnim",                        offsetof(WeaponDef, szXAnims[WEAP_ANIM_ADS_UP]),                   WFT_ANIM_NAME            },
        {"adsDownAnim",                      offsetof(WeaponDef, szXAnims[WEAP_ANIM_ADS_DOWN]),                 WFT_ANIM_NAME            },
        {"script",                           offsetof(WeaponDef, szScript),                                     CSPFT_STRING             },
        {"weaponType",                       offsetof(WeaponDef, weapType),                                     WFT_WEAPONTYPE           },
        {"weaponClass",                      offsetof(WeaponDef, weapClass),                                    WFT_WEAPONCLASS          },
        {"penetrateType",                    offsetof(WeaponDef, penetrateType),                                WFT_PENETRATE_TYPE       },
        {"impactType",                       offsetof(WeaponDef, impactType),                                   WFT_IMPACT_TYPE          },
        {"inventoryType",                    offsetof(WeaponDef, inventoryType),                                WFT_INVENTORYTYPE        },
        {"fireType",                         offsetof(WeaponDef, fireType),                                     WFT_FIRETYPE             },
        {"clipType",                         offsetof(WeaponDef, clipType),                                     WFT_CLIPTYPE             },
        {"offhandClass",                     offsetof(WeaponDef, offhandClass),                                 WFT_OFFHAND_CLASS        },
        {"viewFlashEffect",                  offsetof(WeaponDef, viewFlashEffect),                              CSPFT_FX                 },
        {"worldFlashEffect",                 offsetof(WeaponDef, worldFlashEffect),                             CSPFT_FX                 },
        {"pickupSound",                      offsetof(WeaponDef, pickupSound),                                  CSPFT_SOUND              },
        {"pickupSoundPlayer",                offsetof(WeaponDef, pickupSoundPlayer),                            CSPFT_SOUND              },
        {"ammoPickupSound",                  offsetof(WeaponDef, ammoPickupSound),                              CSPFT_SOUND              },
        {"ammoPickupSoundPlayer",            offsetof(WeaponDef, ammoPickupSoundPlayer),                        CSPFT_SOUND              },
        {"projectileSound",                  offsetof(WeaponDef, projectileSound),                              CSPFT_SOUND              },
        {"pullbackSound",                    offsetof(WeaponDef, pullbackSound),                                CSPFT_SOUND              },
        {"pullbackSoundPlayer",              offsetof(WeaponDef, pullbackSoundPlayer),                          CSPFT_SOUND              },
        {"fireSound",                        offsetof(WeaponDef, fireSound),                                    CSPFT_SOUND              },
        {"crackSound",                       offsetof(WeaponDef, crackSound),                                   CSPFT_SOUND              },
        {"whizbySound",                      offsetof(WeaponDef, whizbySound),                                  CSPFT_SOUND              },
        {"fireSoundPlayer",                  offsetof(WeaponDef, fireSoundPlayer),                              CSPFT_SOUND              },
        {"loopFireSound",                    offsetof(WeaponDef, fireLoopSound),                                CSPFT_SOUND              },
        {"loopFireSoundPlayer",              offsetof(WeaponDef, fireLoopSoundPlayer),                          CSPFT_SOUND              },
        {"stopFireSound",                    offsetof(WeaponDef, fireStopSound),                                CSPFT_SOUND              },
        {"stopFireSoundPlayer",              offsetof(WeaponDef, fireStopSoundPlayer),                          CSPFT_SOUND              },
        {"lastShotSound",                    offsetof(WeaponDef, fireLastSound),                                CSPFT_SOUND              },
        {"lastShotSoundPlayer",              offsetof(WeaponDef, fireLastSoundPlayer),                          CSPFT_SOUND              },
        {"emptyFireSound",                   offsetof(WeaponDef, emptyFireSound),                               CSPFT_SOUND              },
        {"emptyFireSoundPlayer",             offsetof(WeaponDef, emptyFireSoundPlayer),                         CSPFT_SOUND              },
        {"meleeSwipeSound",                  offsetof(WeaponDef, meleeSwipeSound),                              CSPFT_SOUND              },
        {"meleeSwipeSoundPlayer",            offsetof(WeaponDef, meleeSwipeSoundPlayer),                        CSPFT_SOUND              },
        {"meleeHitSound",                    offsetof(WeaponDef, meleeHitSound),                                CSPFT_SOUND              },
        {"meleeMissSound",                   offsetof(WeaponDef, meleeMissSound),                               CSPFT_SOUND              },
        {"rechamberSound",                   offsetof(WeaponDef, rechamberSound),                               CSPFT_SOUND              },
        {"rechamberSoundPlayer",             offsetof(WeaponDef, rechamberSoundPlayer),                         CSPFT_SOUND              },
        {"reloadSound",                      offsetof(WeaponDef, reloadSound),                                  CSPFT_SOUND              },
        {"reloadSoundPlayer",                offsetof(WeaponDef, reloadSoundPlayer),                            CSPFT_SOUND              },
        {"reloadEmptySound",                 offsetof(WeaponDef, reloadEmptySound),                             CSPFT_SOUND              },
        {"reloadEmptySoundPlayer",           offsetof(WeaponDef, reloadEmptySoundPlayer),                       CSPFT_SOUND              },
        {"reloadStartSound",                 offsetof(WeaponDef, reloadStartSound),                             CSPFT_SOUND              },
        {"reloadStartSoundPlayer",           offsetof(WeaponDef, reloadStartSoundPlayer),                       CSPFT_SOUND              },
        {"reloadEndSound",                   offsetof(WeaponDef, reloadEndSound),                               CSPFT_SOUND              },
        {"reloadEndSoundPlayer",             offsetof(WeaponDef, reloadEndSoundPlayer),                         CSPFT_SOUND              },
        {"rotateLoopSound",                  offsetof(WeaponDef, rotateLoopSound),                              CSPFT_SOUND              },
        {"rotateLoopSoundPlayer",            offsetof(WeaponDef, rotateLoopSoundPlayer),                        CSPFT_SOUND              },
        {"deploySound",                      offsetof(WeaponDef, deploySound),                                  CSPFT_SOUND              },
        {"deploySoundPlayer",                offsetof(WeaponDef, deploySoundPlayer),                            CSPFT_SOUND              },
        {"finishDeploySound",                offsetof(WeaponDef, finishDeploySound),                            CSPFT_SOUND              },
        {"finishDeploySoundPlayer",          offsetof(WeaponDef, finishDeploySoundPlayer),                      CSPFT_SOUND              },
        {"breakdownSound",                   offsetof(WeaponDef, breakdownSound),                               CSPFT_SOUND              },
        {"breakdownSoundPlayer",             offsetof(WeaponDef, breakdownSoundPlayer),                         CSPFT_SOUND              },
        {"finishBreakdownSound",             offsetof(WeaponDef, finishBreakdownSound),                         CSPFT_SOUND              },
        {"finishBreakdownSoundPlayer",       offsetof(WeaponDef, finishBreakdownSoundPlayer),                   CSPFT_SOUND              },
        {"detonateSound",                    offsetof(WeaponDef, detonateSound),                                CSPFT_SOUND              },
        {"detonateSoundPlayer",              offsetof(WeaponDef, detonateSoundPlayer),                          CSPFT_SOUND              },
        {"nightVisionWearSound",             offsetof(WeaponDef, nightVisionWearSound),                         CSPFT_SOUND              },
        {"nightVisionWearSoundPlayer",       offsetof(WeaponDef, nightVisionWearSoundPlayer),                   CSPFT_SOUND              },
        {"nightVisionRemoveSound",           offsetof(WeaponDef, nightVisionRemoveSound),                       CSPFT_SOUND              },
        {"nightVisionRemoveSoundPlayer",     offsetof(WeaponDef, nightVisionRemoveSoundPlayer),                 CSPFT_SOUND              },
        {"raiseSound",                       offsetof(WeaponDef, raiseSound),                                   CSPFT_SOUND              },
        {"raiseSoundPlayer",                 offsetof(WeaponDef, raiseSoundPlayer),                             CSPFT_SOUND              },
        {"firstRaiseSound",                  offsetof(WeaponDef, firstRaiseSound),                              CSPFT_SOUND              },
        {"firstRaiseSoundPlayer",            offsetof(WeaponDef, firstRaiseSoundPlayer),                        CSPFT_SOUND              },
        {"altSwitchSound",                   offsetof(WeaponDef, altSwitchSound),                               CSPFT_SOUND              },
        {"altSwitchSoundPlayer",             offsetof(WeaponDef, altSwitchSoundPlayer),                         CSPFT_SOUND              },
        {"putawaySound",                     offsetof(WeaponDef, putawaySound),                                 CSPFT_SOUND              },
        {"putawaySoundPlayer",               offsetof(WeaponDef, putawaySoundPlayer),                           CSPFT_SOUND              },
        {"overheatSound",                    offsetof(WeaponDef, overheatSound),                                CSPFT_SOUND              },
        {"overheatSoundPlayer",              offsetof(WeaponDef, overheatSoundPlayer),                          CSPFT_SOUND              },
        {"bounceSound",                      offsetof(WeaponDef, bounceSound),                                  WFT_BOUNCE_SOUND         },
        {"standMountedWeapdef",              offsetof(WeaponDef, standMountedWeapdef),                          CSPFT_STRING             },
        {"crouchMountedWeapdef",             offsetof(WeaponDef, crouchMountedWeapdef),                         CSPFT_STRING             },
        {"proneMountedWeapdef",              offsetof(WeaponDef, proneMountedWeapdef),                          CSPFT_STRING             },
        {"viewShellEjectEffect",             offsetof(WeaponDef, viewShellEjectEffect),                         CSPFT_FX                 },
        {"worldShellEjectEffect",            offsetof(WeaponDef, worldShellEjectEffect),                        CSPFT_FX                 },
        {"viewLastShotEjectEffect",          offsetof(WeaponDef, viewLastShotEjectEffect),                      CSPFT_FX                 },
        {"worldLastShotEjectEffect",         offsetof(WeaponDef, worldLastShotEjectEffect),                     CSPFT_FX                 },
        {"reticleCenter",                    offsetof(WeaponDef, reticleCenter),                                CSPFT_MATERIAL           },
        {"reticleSide",                      offsetof(WeaponDef, reticleSide),                                  CSPFT_MATERIAL           },
        {"reticleCenterSize",                offsetof(WeaponDef, iReticleCenterSize),                           CSPFT_INT                },
        {"reticleSideSize",                  offsetof(WeaponDef, iReticleSideSize),                             CSPFT_INT                },
        {"reticleMinOfs",                    offsetof(WeaponDef, iReticleMinOfs),                               CSPFT_INT                },
        {"activeReticleType",                offsetof(WeaponDef, activeReticleType),                            WFT_ACTIVE_RETICLE_TYPE  },
        {"standMoveF",                       offsetof(WeaponDef, vStandMove[0]),                                CSPFT_FLOAT              },
        {"standMoveR",                       offsetof(WeaponDef, vStandMove[1]),                                CSPFT_FLOAT              },
        {"standMoveU",                       offsetof(WeaponDef, vStandMove[2]),                                CSPFT_FLOAT              },
        {"standRotP",                        offsetof(WeaponDef, vStandRot[0]),                                 CSPFT_FLOAT              },
        {"standRotY",                        offsetof(WeaponDef, vStandRot[1]),                                 CSPFT_FLOAT              },
        {"standRotR",                        offsetof(WeaponDef, vStandRot[2]),                                 CSPFT_FLOAT              },
        {"duckedOfsF",                       offsetof(WeaponDef, vDuckedOfs[0]),                                CSPFT_FLOAT              },
        {"duckedOfsR",                       offsetof(WeaponDef, vDuckedOfs[1]),                                CSPFT_FLOAT              },
        {"duckedOfsU",                       offsetof(WeaponDef, vDuckedOfs[2]),                                CSPFT_FLOAT              },
        {"duckedMoveF",                      offsetof(WeaponDef, vDuckedMove[0]),                               CSPFT_FLOAT              },
        {"duckedMoveR",                      offsetof(WeaponDef, vDuckedMove[1]),                               CSPFT_FLOAT              },
        {"duckedMoveU",                      offsetof(WeaponDef, vDuckedMove[2]),                               CSPFT_FLOAT              },
        {"duckedSprintOfsF",                 offsetof(WeaponDef, duckedSprintOfs[0]),                           CSPFT_FLOAT              },
        {"duckedSprintOfsR",                 offsetof(WeaponDef, duckedSprintOfs[1]),                           CSPFT_FLOAT              },
        {"duckedSprintOfsU",                 offsetof(WeaponDef, duckedSprintOfs[2]),                           CSPFT_FLOAT              },
        {"duckedSprintRotP",                 offsetof(WeaponDef, duckedSprintRot[0]),                           CSPFT_FLOAT              },
        {"duckedSprintRotY",                 offsetof(WeaponDef, duckedSprintRot[1]),                           CSPFT_FLOAT              },
        {"duckedSprintRotR",                 offsetof(WeaponDef, duckedSprintRot[2]),                           CSPFT_FLOAT              },
        {"duckedSprintBobH",                 offsetof(WeaponDef, duckedSprintBob[0]),                           CSPFT_FLOAT              },
        {"duckedSprintBobV",                 offsetof(WeaponDef, duckedSprintBob[1]),                           CSPFT_FLOAT              },
        {"duckedSprintScale",                offsetof(WeaponDef, duckedSprintScale),                            CSPFT_FLOAT              },
        {"sprintOfsF",                       offsetof(WeaponDef, sprintOfs[0]),                                 CSPFT_FLOAT              },
        {"sprintOfsR",                       offsetof(WeaponDef, sprintOfs[1]),                                 CSPFT_FLOAT              },
        {"sprintOfsU",                       offsetof(WeaponDef, sprintOfs[2]),                                 CSPFT_FLOAT              },
        {"sprintRotP",                       offsetof(WeaponDef, sprintRot[0]),                                 CSPFT_FLOAT              },
        {"sprintRotY",                       offsetof(WeaponDef, sprintRot[1]),                                 CSPFT_FLOAT              },
        {"sprintRotR",                       offsetof(WeaponDef, sprintRot[2]),                                 CSPFT_FLOAT              },
        {"sprintBobH",                       offsetof(WeaponDef, sprintBob[0]),                                 CSPFT_FLOAT              },
        {"sprintBobV",                       offsetof(WeaponDef, sprintBob[1]),                                 CSPFT_FLOAT              },
        {"sprintScale",                      offsetof(WeaponDef, sprintScale),                                  CSPFT_FLOAT              },
        {"duckedRotP",                       offsetof(WeaponDef, vDuckedRot[0]),                                CSPFT_FLOAT              },
        {"duckedRotY",                       offsetof(WeaponDef, vDuckedRot[1]),                                CSPFT_FLOAT              },
        {"duckedRotR",                       offsetof(WeaponDef, vDuckedRot[2]),                                CSPFT_FLOAT              },
        {"proneOfsF",                        offsetof(WeaponDef, vProneOfs[0]),                                 CSPFT_FLOAT              },
        {"proneOfsR",                        offsetof(WeaponDef, vProneOfs[1]),                                 CSPFT_FLOAT              },
        {"proneOfsU",                        offsetof(WeaponDef, vProneOfs[2]),                                 CSPFT_FLOAT              },
        {"proneMoveF",                       offsetof(WeaponDef, vProneMove[0]),                                CSPFT_FLOAT              },
        {"proneMoveR",                       offsetof(WeaponDef, vProneMove[1]),                                CSPFT_FLOAT              },
        {"proneMoveU",                       offsetof(WeaponDef, vProneMove[2]),                                CSPFT_FLOAT              },
        {"proneRotP",                        offsetof(WeaponDef, vProneRot[0]),                                 CSPFT_FLOAT              },
        {"proneRotY",                        offsetof(WeaponDef, vProneRot[1]),                                 CSPFT_FLOAT              },
        {"proneRotR",                        offsetof(WeaponDef, vProneRot[2]),                                 CSPFT_FLOAT              },
        {"posMoveRate",                      offsetof(WeaponDef, fPosMoveRate),                                 CSPFT_FLOAT              },
        {"posProneMoveRate",                 offsetof(WeaponDef, fPosProneMoveRate),                            CSPFT_FLOAT              },
        {"standMoveMinSpeed",                offsetof(WeaponDef, fStandMoveMinSpeed),                           CSPFT_FLOAT              },
        {"duckedMoveMinSpeed",               offsetof(WeaponDef, fDuckedMoveMinSpeed),                          CSPFT_FLOAT              },
        {"proneMoveMinSpeed",                offsetof(WeaponDef, fProneMoveMinSpeed),                           CSPFT_FLOAT              },
        {"posRotRate",                       offsetof(WeaponDef, fPosRotRate),                                  CSPFT_FLOAT              },
        {"posProneRotRate",                  offsetof(WeaponDef, fPosProneRotRate),                             CSPFT_FLOAT              },
        {"standRotMinSpeed",                 offsetof(WeaponDef, fStandRotMinSpeed),                            CSPFT_FLOAT              },
        {"duckedRotMinSpeed",                offsetof(WeaponDef, fDuckedRotMinSpeed),                           CSPFT_FLOAT              },
        {"proneRotMinSpeed",                 offsetof(WeaponDef, fProneRotMinSpeed),                            CSPFT_FLOAT              },
        {"worldModel",                       offsetof(WeaponDef, worldModel[0]),                                CSPFT_XMODEL             },
        {"worldModel2",                      offsetof(WeaponDef, worldModel[1]),                                CSPFT_XMODEL             },
        {"worldModel3",                      offsetof(WeaponDef, worldModel[2]),                                CSPFT_XMODEL             },
        {"worldModel4",                      offsetof(WeaponDef, worldModel[3]),                                CSPFT_XMODEL             },
        {"worldModel5",                      offsetof(WeaponDef, worldModel[4]),                                CSPFT_XMODEL             },
        {"worldModel6",                      offsetof(WeaponDef, worldModel[5]),                                CSPFT_XMODEL             },
        {"worldModel7",                      offsetof(WeaponDef, worldModel[6]),                                CSPFT_XMODEL             },
        {"worldModel8",                      offsetof(WeaponDef, worldModel[7]),                                CSPFT_XMODEL             },
        {"worldModel9",                      offsetof(WeaponDef, worldModel[8]),                                CSPFT_XMODEL             },
        {"worldModel10",                     offsetof(WeaponDef, worldModel[9]),                                CSPFT_XMODEL             },
        {"worldModel11",                     offsetof(WeaponDef, worldModel[10]),                               CSPFT_XMODEL             },
        {"worldModel12",                     offsetof(WeaponDef, worldModel[11]),                               CSPFT_XMODEL             },
        {"worldModel13",                     offsetof(WeaponDef, worldModel[12]),                               CSPFT_XMODEL             },
        {"worldModel14",                     offsetof(WeaponDef, worldModel[13]),                               CSPFT_XMODEL             },
        {"worldModel15",                     offsetof(WeaponDef, worldModel[14]),                               CSPFT_XMODEL             },
        {"worldModel16",                     offsetof(WeaponDef, worldModel[15]),                               CSPFT_XMODEL             },
        {"worldClipModel",                   offsetof(WeaponDef, worldClipModel),                               CSPFT_XMODEL             },
        {"rocketModel",                      offsetof(WeaponDef, rocketModel),                                  CSPFT_XMODEL             },
        {"knifeModel",                       offsetof(WeaponDef, knifeModel),                                   CSPFT_XMODEL             },
        {"worldKnifeModel",                  offsetof(WeaponDef, worldKnifeModel),                              CSPFT_XMODEL             },
        {"mountedModel",                     offsetof(WeaponDef, mountedModel),                                 CSPFT_XMODEL             },
        {"hudIcon",                          offsetof(WeaponDef, hudIcon),                                      CSPFT_MATERIAL           },
        {"hudIconRatio",                     offsetof(WeaponDef, hudIconRatio),                                 WFT_ICONRATIO_HUD        },
        {"ammoCounterIcon",                  offsetof(WeaponDef, ammoCounterIcon),                              CSPFT_MATERIAL           },
        {"ammoCounterIconRatio",             offsetof(WeaponDef, ammoCounterIconRatio),                         WFT_ICONRATIO_AMMOCOUNTER},
        {"ammoCounterClip",                  offsetof(WeaponDef, ammoCounterClip),                              WFT_AMMOCOUNTER_CLIPTYPE },
        {"startAmmo",                        offsetof(WeaponDef, iStartAmmo),                                   CSPFT_INT                },
        {"ammoName",                         offsetof(WeaponDef, szAmmoName),                                   CSPFT_STRING             },
        {"clipName",                         offsetof(WeaponDef, szClipName),                                   CSPFT_STRING             },
        {"maxAmmo",                          offsetof(WeaponDef, iMaxAmmo),                                     CSPFT_INT                },
        {"clipSize",                         offsetof(WeaponDef, iClipSize),                                    CSPFT_INT                },
        {"shotCount",                        offsetof(WeaponDef, shotCount),                                    CSPFT_INT                },
        {"sharedAmmoCapName",                offsetof(WeaponDef, szSharedAmmoCapName),                          CSPFT_STRING             },
        {"sharedAmmoCap",                    offsetof(WeaponDef, iSharedAmmoCap),                               CSPFT_INT                },
        {"unlimitedAmmo",                    offsetof(WeaponDef, unlimitedAmmo),                                CSPFT_INT                },
        {"overheatWeapon",                   offsetof(WeaponDef, overheatWeapon),                               CSPFT_INT                },
        {"overheatRate",                     offsetof(WeaponDef, overheatRate),                                 CSPFT_FLOAT              },
        {"cooldownRate",                     offsetof(WeaponDef, cooldownRate),                                 CSPFT_FLOAT              },
        {"overheatEndVal",                   offsetof(WeaponDef, overheatEndVal),                               CSPFT_FLOAT              },
        {"coolWhileFiring",                  offsetof(WeaponDef, coolWhileFiring),                              CSPFT_INT                },
        {"damage",                           offsetof(WeaponDef, damage),                                       CSPFT_INT                },
        {"damageDuration",                   offsetof(WeaponDef, damageDuration),                               CSPFT_FLOAT              },
        {"damageInterval",                   offsetof(WeaponDef, damageInterval),                               CSPFT_FLOAT              },
        {"playerDamage",                     offsetof(WeaponDef, playerDamage),                                 CSPFT_INT                },
        {"meleeDamage",                      offsetof(WeaponDef, iMeleeDamage),                                 CSPFT_INT                },
        {"minDamage",                        offsetof(WeaponDef, minDamage),                                    CSPFT_INT                },
        {"minPlayerDamage",                  offsetof(WeaponDef, minPlayerDamage),                              CSPFT_INT                },
        {"maxDamageRange",                   offsetof(WeaponDef, fMaxDamageRange),                              CSPFT_FLOAT              },
        {"minDamageRange",                   offsetof(WeaponDef, fMinDamageRange),                              CSPFT_FLOAT              },
        {"destabilizationRateTime",          offsetof(WeaponDef, destabilizationRateTime),                      CSPFT_FLOAT              },
        {"destabilizationCurvatureMax",      offsetof(WeaponDef, destabilizationCurvatureMax),                  CSPFT_FLOAT              },
        {"destabilizeDistance",              offsetof(WeaponDef, destabilizeDistance),                          CSPFT_INT                },
        {"fireDelay",                        offsetof(WeaponDef, iFireDelay),                                   CSPFT_MILLISECONDS       },
        {"meleeDelay",                       offsetof(WeaponDef, iMeleeDelay),                                  CSPFT_MILLISECONDS       },
        {"meleeChargeDelay",                 offsetof(WeaponDef, meleeChargeDelay),                             CSPFT_MILLISECONDS       },
        {"fireTime",                         offsetof(WeaponDef, iFireTime),                                    CSPFT_MILLISECONDS       },
        {"rechamberTime",                    offsetof(WeaponDef, iRechamberTime),                               CSPFT_MILLISECONDS       },
        {"rechamberBoltTime",                offsetof(WeaponDef, iRechamberBoltTime),                           CSPFT_MILLISECONDS       },
        {"holdFireTime",                     offsetof(WeaponDef, iHoldFireTime),                                CSPFT_MILLISECONDS       },
        {"detonateTime",                     offsetof(WeaponDef, iDetonateTime),                                CSPFT_MILLISECONDS       },
        {"detonateDelay",                    offsetof(WeaponDef, iDetonateDelay),                               CSPFT_MILLISECONDS       },
        {"meleeTime",                        offsetof(WeaponDef, iMeleeTime),                                   CSPFT_MILLISECONDS       },
        {"meleeChargeTime",                  offsetof(WeaponDef, meleeChargeTime),                              CSPFT_MILLISECONDS       },
        {"reloadTime",                       offsetof(WeaponDef, iReloadTime),                                  CSPFT_MILLISECONDS       },
        {"reloadShowRocketTime",             offsetof(WeaponDef, reloadShowRocketTime),                         CSPFT_MILLISECONDS       },
        {"reloadEmptyTime",                  offsetof(WeaponDef, iReloadEmptyTime),                             CSPFT_MILLISECONDS       },
        {"reloadAddTime",                    offsetof(WeaponDef, iReloadAddTime),                               CSPFT_MILLISECONDS       },
        {"reloadEmptyAddTime",               offsetof(WeaponDef, reloadEmptyAddTime),                           CSPFT_MILLISECONDS       },
        {"reloadStartTime",                  offsetof(WeaponDef, iReloadStartTime),                             CSPFT_MILLISECONDS       },
        {"reloadStartAddTime",               offsetof(WeaponDef, iReloadStartAddTime),                          CSPFT_MILLISECONDS       },
        {"reloadEndTime",                    offsetof(WeaponDef, iReloadEndTime),                               CSPFT_MILLISECONDS       },
        {"dropTime",                         offsetof(WeaponDef, iDropTime),                                    CSPFT_MILLISECONDS       },
        {"raiseTime",                        offsetof(WeaponDef, iRaiseTime),                                   CSPFT_MILLISECONDS       },
        {"altDropTime",                      offsetof(WeaponDef, iAltDropTime),                                 CSPFT_MILLISECONDS       },
        {"altRaiseTime",                     offsetof(WeaponDef, iAltRaiseTime),                                CSPFT_MILLISECONDS       },
        {"quickDropTime",                    offsetof(WeaponDef, quickDropTime),                                CSPFT_MILLISECONDS       },
        {"quickRaiseTime",                   offsetof(WeaponDef, quickRaiseTime),                               CSPFT_MILLISECONDS       },
        {"firstRaiseTime",                   offsetof(WeaponDef, iFirstRaiseTime),                              CSPFT_MILLISECONDS       },
        {"emptyRaiseTime",                   offsetof(WeaponDef, iEmptyRaiseTime),                              CSPFT_MILLISECONDS       },
        {"emptyDropTime",                    offsetof(WeaponDef, iEmptyDropTime),                               CSPFT_MILLISECONDS       },
        {"sprintInTime",                     offsetof(WeaponDef, sprintInTime),                                 CSPFT_MILLISECONDS       },
        {"sprintLoopTime",                   offsetof(WeaponDef, sprintLoopTime),                               CSPFT_MILLISECONDS       },
        {"sprintOutTime",                    offsetof(WeaponDef, sprintOutTime),                                CSPFT_MILLISECONDS       },
        {"deployTime",                       offsetof(WeaponDef, deployTime),                                   CSPFT_MILLISECONDS       },
        {"breakdownTime",                    offsetof(WeaponDef, breakdownTime),                                CSPFT_MILLISECONDS       },
        {"nightVisionWearTime",              offsetof(WeaponDef, nightVisionWearTime),                          CSPFT_MILLISECONDS       },
        {"nightVisionWearTimeFadeOutEnd",    offsetof(WeaponDef, nightVisionWearTimeFadeOutEnd),                CSPFT_MILLISECONDS       },
        {"nightVisionWearTimePowerUp",       offsetof(WeaponDef, nightVisionWearTimePowerUp),                   CSPFT_MILLISECONDS       },
        {"nightVisionRemoveTime",            offsetof(WeaponDef, nightVisionRemoveTime),                        CSPFT_MILLISECONDS       },
        {"nightVisionRemoveTimePowerDown",   offsetof(WeaponDef, nightVisionRemoveTimePowerDown),               CSPFT_MILLISECONDS       },
        {"nightVisionRemoveTimeFadeInStart", offsetof(WeaponDef, nightVisionRemoveTimeFadeInStart),             CSPFT_MILLISECONDS       },
        {"fuseTime",                         offsetof(WeaponDef, fuseTime),                                     CSPFT_MILLISECONDS       },
        {"aifuseTime",                       offsetof(WeaponDef, aiFuseTime),                                   CSPFT_MILLISECONDS       },
        {"requireLockonToFire",              offsetof(WeaponDef, requireLockonToFire),                          CSPFT_BOOL               },
        {"noAdsWhenMagEmpty",                offsetof(WeaponDef, noAdsWhenMagEmpty),                            CSPFT_BOOL               },
        {"avoidDropCleanup",                 offsetof(WeaponDef, avoidDropCleanup),                             CSPFT_BOOL               },
        {"autoAimRange",                     offsetof(WeaponDef, autoAimRange),                                 CSPFT_FLOAT              },
        {"aimAssistRange",                   offsetof(WeaponDef, aimAssistRange),                               CSPFT_FLOAT              },
        {"aimAssistRangeAds",                offsetof(WeaponDef, aimAssistRangeAds),                            CSPFT_FLOAT              },
        {"mountableWeapon",                  offsetof(WeaponDef, mountableWeapon),                              CSPFT_BOOL               },
        {"aimPadding",                       offsetof(WeaponDef, aimPadding),                                   CSPFT_FLOAT              },
        {"enemyCrosshairRange",              offsetof(WeaponDef, enemyCrosshairRange),                          CSPFT_FLOAT              },
        {"crosshairColorChange",             offsetof(WeaponDef, crosshairColorChange),                         CSPFT_BOOL               },
        {"moveSpeedScale",                   offsetof(WeaponDef, moveSpeedScale),                               CSPFT_FLOAT              },
        {"adsMoveSpeedScale",                offsetof(WeaponDef, adsMoveSpeedScale),                            CSPFT_FLOAT              },
        {"sprintDurationScale",              offsetof(WeaponDef, sprintDurationScale),                          CSPFT_FLOAT              },
        {"idleCrouchFactor",                 offsetof(WeaponDef, fIdleCrouchFactor),                            CSPFT_FLOAT              },
        {"idleProneFactor",                  offsetof(WeaponDef, fIdleProneFactor),                             CSPFT_FLOAT              },
        {"gunMaxPitch",                      offsetof(WeaponDef, fGunMaxPitch),                                 CSPFT_FLOAT              },
        {"gunMaxYaw",                        offsetof(WeaponDef, fGunMaxYaw),                                   CSPFT_FLOAT              },
        {"swayMaxAngle",                     offsetof(WeaponDef, swayMaxAngle),                                 CSPFT_FLOAT              },
        {"swayLerpSpeed",                    offsetof(WeaponDef, swayLerpSpeed),                                CSPFT_FLOAT              },
        {"swayPitchScale",                   offsetof(WeaponDef, swayPitchScale),                               CSPFT_FLOAT              },
        {"swayYawScale",                     offsetof(WeaponDef, swayYawScale),                                 CSPFT_FLOAT              },
        {"swayHorizScale",                   offsetof(WeaponDef, swayHorizScale),                               CSPFT_FLOAT              },
        {"swayVertScale",                    offsetof(WeaponDef, swayVertScale),                                CSPFT_FLOAT              },
        {"swayShellShockScale",              offsetof(WeaponDef, swayShellShockScale),                          CSPFT_FLOAT              },
        {"adsSwayMaxAngle",                  offsetof(WeaponDef, adsSwayMaxAngle),                              CSPFT_FLOAT              },
        {"adsSwayLerpSpeed",                 offsetof(WeaponDef, adsSwayLerpSpeed),                             CSPFT_FLOAT              },
        {"adsSwayPitchScale",                offsetof(WeaponDef, adsSwayPitchScale),                            CSPFT_FLOAT              },
        {"adsSwayYawScale",                  offsetof(WeaponDef, adsSwayYawScale),                              CSPFT_FLOAT              },
        {"adsSwayHorizScale",                offsetof(WeaponDef, adsSwayHorizScale),                            CSPFT_FLOAT              },
        {"adsSwayVertScale",                 offsetof(WeaponDef, adsSwayVertScale),                             CSPFT_FLOAT              },
        {"rifleBullet",                      offsetof(WeaponDef, bRifleBullet),                                 CSPFT_BOOL               },
        {"armorPiercing",                    offsetof(WeaponDef, armorPiercing),                                CSPFT_BOOL               },
        {"boltAction",                       offsetof(WeaponDef, bBoltAction),                                  CSPFT_BOOL               },
        {"aimDownSight",                     offsetof(WeaponDef, aimDownSight),                                 CSPFT_BOOL               },
        {"rechamberWhileAds",                offsetof(WeaponDef, bRechamberWhileAds),                           CSPFT_BOOL               },
        {"adsViewErrorMin",                  offsetof(WeaponDef, adsViewErrorMin),                              CSPFT_FLOAT              },
        {"adsViewErrorMax",                  offsetof(WeaponDef, adsViewErrorMax),                              CSPFT_FLOAT              },
        {"clipOnly",                         offsetof(WeaponDef, bClipOnly),                                    CSPFT_BOOL               },
        {"canUseInVehicle",                  offsetof(WeaponDef, canUseInVehicle),                              CSPFT_BOOL               },
        {"noDropsOrRaises",                  offsetof(WeaponDef, noDropsOrRaises),                              CSPFT_BOOL               },
        {"cookOffHold",                      offsetof(WeaponDef, bCookOffHold),                                 CSPFT_BOOL               },
        {"adsFire",                          offsetof(WeaponDef, adsFireOnly),                                  CSPFT_BOOL               },
        {"cancelAutoHolsterWhenEmpty",       offsetof(WeaponDef, cancelAutoHolsterWhenEmpty),                   CSPFT_BOOL               },
        {"suppressAmmoReserveDisplay",       offsetof(WeaponDef, suppressAmmoReserveDisplay),                   CSPFT_BOOL               },
        {"enhanced",                         offsetof(WeaponDef, enhanced),                                     CSPFT_BOOL               },
        {"laserSightDuringNightvision",      offsetof(WeaponDef, laserSightDuringNightvision),                  CSPFT_BOOL               },
        {"bayonet",                          offsetof(WeaponDef, bayonet),                                      CSPFT_BOOL               },
        {"killIcon",                         offsetof(WeaponDef, killIcon),                                     CSPFT_MATERIAL           },
        {"killIconRatio",                    offsetof(WeaponDef, killIconRatio),                                WFT_ICONRATIO_KILL       },
        {"flipKillIcon",                     offsetof(WeaponDef, flipKillIcon),                                 CSPFT_BOOL               },
        {"dpadIcon",                         offsetof(WeaponDef, dpadIcon),                                     CSPFT_MATERIAL           },
        {"dpadIconRatio",                    offsetof(WeaponDef, dpadIconRatio),                                WFT_ICONRATIO_DPAD       },
        {"noPartialReload",                  offsetof(WeaponDef, bNoPartialReload),                             CSPFT_BOOL               },
        {"segmentedReload",                  offsetof(WeaponDef, bSegmentedReload),                             CSPFT_BOOL               },
        {"noADSAutoReload",                  offsetof(WeaponDef, noADSAutoReload),                              CSPFT_BOOL               },
        {"reloadAmmoAdd",                    offsetof(WeaponDef, iReloadAmmoAdd),                               CSPFT_INT                },
        {"reloadStartAdd",                   offsetof(WeaponDef, iReloadStartAdd),                              CSPFT_INT                },
        {"altWeapon",                        offsetof(WeaponDef, szAltWeaponName),                              CSPFT_STRING             },
        {"dropAmmoMin",                      offsetof(WeaponDef, iDropAmmoMin),                                 CSPFT_INT                },
        {"dropAmmoMax",                      offsetof(WeaponDef, iDropAmmoMax),                                 CSPFT_INT                },
        {"blocksProne",                      offsetof(WeaponDef, blocksProne),                                  CSPFT_BOOL               },
        {"silenced",                         offsetof(WeaponDef, silenced),                                     CSPFT_BOOL               },
        {"explosionRadius",                  offsetof(WeaponDef, iExplosionRadius),                             CSPFT_INT                },
        {"explosionRadiusMin",               offsetof(WeaponDef, iExplosionRadiusMin),                          CSPFT_INT                },
        {"explosionInnerDamage",             offsetof(WeaponDef, iExplosionInnerDamage),                        CSPFT_INT                },
        {"explosionOuterDamage",             offsetof(WeaponDef, iExplosionOuterDamage),                        CSPFT_INT                },
        {"damageConeAngle",                  offsetof(WeaponDef, damageConeAngle),                              CSPFT_FLOAT              },
        {"projectileSpeed",                  offsetof(WeaponDef, iProjectileSpeed),                             CSPFT_INT                },
        {"projectileSpeedUp",                offsetof(WeaponDef, iProjectileSpeedUp),                           CSPFT_INT                },
        {"projectileSpeedForward",           offsetof(WeaponDef, iProjectileSpeedForward),                      CSPFT_INT                },
        {"projectileActivateDist",           offsetof(WeaponDef, iProjectileActivateDist),                      CSPFT_INT                },
        {"projectileLifetime",               offsetof(WeaponDef, projLifetime),                                 CSPFT_FLOAT              },
        {"timeToAccelerate",                 offsetof(WeaponDef, timeToAccelerate),                             CSPFT_FLOAT              },
        {"projectileCurvature",              offsetof(WeaponDef, projectileCurvature),                          CSPFT_FLOAT              },
        {"projectileModel",                  offsetof(WeaponDef, projectileModel),                              CSPFT_XMODEL             },
        {"projExplosionType",                offsetof(WeaponDef, projExplosion),                                WFT_PROJ_EXPLOSION       },
        {"projExplosionEffect",              offsetof(WeaponDef, projExplosionEffect),                          CSPFT_FX                 },
        {"projExplosionEffectForceNormalUp", offsetof(WeaponDef, projExplosionEffectForceNormalUp),             CSPFT_BOOL               },
        {"projExplosionSound",               offsetof(WeaponDef, projExplosionSound),                           CSPFT_SOUND              },
        {"projDudEffect",                    offsetof(WeaponDef, projDudEffect),                                CSPFT_FX                 },
        {"projDudSound",                     offsetof(WeaponDef, projDudSound),                                 CSPFT_SOUND              },
        {"projImpactExplode",                offsetof(WeaponDef, bProjImpactExplode),                           CSPFT_BOOL               },
        {"mortarShellSound",                 offsetof(WeaponDef, mortarShellSound),                             CSPFT_SOUND              },
        {"tankShellSound",                   offsetof(WeaponDef, tankShellSound),                               CSPFT_SOUND              },
        {"stickiness",                       offsetof(WeaponDef, stickiness),                                   WFT_STICKINESS           },
        {"hasDetonator",                     offsetof(WeaponDef, hasDetonator),                                 CSPFT_BOOL               },
        {"timedDetonation",                  offsetof(WeaponDef, timedDetonation),                              CSPFT_BOOL               },
        {"rotate",                           offsetof(WeaponDef, rotate),                                       CSPFT_BOOL               },
        {"holdButtonToThrow",                offsetof(WeaponDef, holdButtonToThrow),                            CSPFT_BOOL               },
        {"freezeMovementWhenFiring",         offsetof(WeaponDef, freezeMovementWhenFiring),                     CSPFT_BOOL               },
        {"lowAmmoWarningThreshold",          offsetof(WeaponDef, lowAmmoWarningThreshold),                      CSPFT_FLOAT              },
        {"parallelDefaultBounce",            offsetof(WeaponDef, parallelBounce[SURF_TYPE_DEFAULT]),            CSPFT_FLOAT              },
        {"parallelBarkBounce",               offsetof(WeaponDef, parallelBounce[SURF_TYPE_BARK]),               CSPFT_FLOAT              },
        {"parallelBrickBounce",              offsetof(WeaponDef, parallelBounce[SURF_TYPE_BRICK]),              CSPFT_FLOAT              },
        {"parallelCarpetBounce",             offsetof(WeaponDef, parallelBounce[SURF_TYPE_CARPET]),             CSPFT_FLOAT              },
        {"parallelClothBounce",              offsetof(WeaponDef, parallelBounce[SURF_TYPE_CLOTH]),              CSPFT_FLOAT              },
        {"parallelConcreteBounce",           offsetof(WeaponDef, parallelBounce[SURF_TYPE_CONCRETE]),           CSPFT_FLOAT              },
        {"parallelDirtBounce",               offsetof(WeaponDef, parallelBounce[SURF_TYPE_DIRT]),               CSPFT_FLOAT              },
        {"parallelFleshBounce",              offsetof(WeaponDef, parallelBounce[SURF_TYPE_FLESH]),              CSPFT_FLOAT              },
        {"parallelFoliageBounce",            offsetof(WeaponDef, parallelBounce[SURF_TYPE_FOLIAGE]),            CSPFT_FLOAT              },
        {"parallelGlassBounce",              offsetof(WeaponDef, parallelBounce[SURF_TYPE_GLASS]),              CSPFT_FLOAT              },
        {"parallelGrassBounce",              offsetof(WeaponDef, parallelBounce[SURF_TYPE_GRASS]),              CSPFT_FLOAT              },
        {"parallelGravelBounce",             offsetof(WeaponDef, parallelBounce[SURF_TYPE_GRAVEL]),             CSPFT_FLOAT              },
        {"parallelIceBounce",                offsetof(WeaponDef, parallelBounce[SURF_TYPE_ICE]),                CSPFT_FLOAT              },
        {"parallelMetalBounce",              offsetof(WeaponDef, parallelBounce[SURF_TYPE_METAL]),              CSPFT_FLOAT              },
        {"parallelMudBounce",                offsetof(WeaponDef, parallelBounce[SURF_TYPE_MUD]),                CSPFT_FLOAT              },
        {"parallelPaperBounce",              offsetof(WeaponDef, parallelBounce[SURF_TYPE_PAPER]),              CSPFT_FLOAT              },
        {"parallelPlasterBounce",            offsetof(WeaponDef, parallelBounce[SURF_TYPE_PLASTER]),            CSPFT_FLOAT              },
        {"parallelRockBounce",               offsetof(WeaponDef, parallelBounce[SURF_TYPE_ROCK]),               CSPFT_FLOAT              },
        {"parallelSandBounce",               offsetof(WeaponDef, parallelBounce[SURF_TYPE_SAND]),               CSPFT_FLOAT              },
        {"parallelSnowBounce",               offsetof(WeaponDef, parallelBounce[SURF_TYPE_SNOW]),               CSPFT_FLOAT              },
        {"parallelWaterBounce",              offsetof(WeaponDef, parallelBounce[SURF_TYPE_WATER]),              CSPFT_FLOAT              },
        {"parallelWoodBounce",               offsetof(WeaponDef, parallelBounce[SURF_TYPE_WOOD]),               CSPFT_FLOAT              },
        {"parallelAsphaltBounce",            offsetof(WeaponDef, parallelBounce[SURF_TYPE_ASPHALT]),            CSPFT_FLOAT              },
        {"parallelCeramicBounce",            offsetof(WeaponDef, parallelBounce[SURF_TYPE_CERAMIC]),            CSPFT_FLOAT              },
        {"parallelPlasticBounce",            offsetof(WeaponDef, parallelBounce[SURF_TYPE_PLASTIC]),            CSPFT_FLOAT              },
        {"parallelRubberBounce",             offsetof(WeaponDef, parallelBounce[SURF_TYPE_RUBBER]),             CSPFT_FLOAT              },
        {"parallelCushionBounce",            offsetof(WeaponDef, parallelBounce[SURF_TYPE_CUSHION]),            CSPFT_FLOAT              },
        {"parallelFruitBounce",              offsetof(WeaponDef, parallelBounce[SURF_TYPE_FRUIT]),              CSPFT_FLOAT              },
        {"parallelPaintedMetalBounce",       offsetof(WeaponDef, parallelBounce[SURF_TYPE_PAINTED_METAL]),      CSPFT_FLOAT              },
        {"perpendicularDefaultBounce",       offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_DEFAULT]),       CSPFT_FLOAT              },
        {"perpendicularBarkBounce",          offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_BARK]),          CSPFT_FLOAT              },
        {"perpendicularBrickBounce",         offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_BRICK]),         CSPFT_FLOAT              },
        {"perpendicularCarpetBounce",        offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_CARPET]),        CSPFT_FLOAT              },
        {"perpendicularClothBounce",         offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_CLOTH]),         CSPFT_FLOAT              },
        {"perpendicularConcreteBounce",      offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_CONCRETE]),      CSPFT_FLOAT              },
        {"perpendicularDirtBounce",          offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_DIRT]),          CSPFT_FLOAT              },
        {"perpendicularFleshBounce",         offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_FLESH]),         CSPFT_FLOAT              },
        {"perpendicularFoliageBounce",       offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_FOLIAGE]),       CSPFT_FLOAT              },
        {"perpendicularGlassBounce",         offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_GLASS]),         CSPFT_FLOAT              },
        {"perpendicularGrassBounce",         offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_GRASS]),         CSPFT_FLOAT              },
        {"perpendicularGravelBounce",        offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_GRAVEL]),        CSPFT_FLOAT              },
        {"perpendicularIceBounce",           offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_ICE]),           CSPFT_FLOAT              },
        {"perpendicularMetalBounce",         offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_METAL]),         CSPFT_FLOAT              },
        {"perpendicularMudBounce",           offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_MUD]),           CSPFT_FLOAT              },
        {"perpendicularPaperBounce",         offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_PAPER]),         CSPFT_FLOAT              },
        {"perpendicularPlasterBounce",       offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_PLASTER]),       CSPFT_FLOAT              },
        {"perpendicularRockBounce",          offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_ROCK]),          CSPFT_FLOAT              },
        {"perpendicularSandBounce",          offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_SAND]),          CSPFT_FLOAT              },
        {"perpendicularSnowBounce",          offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_SNOW]),          CSPFT_FLOAT              },
        {"perpendicularWaterBounce",         offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_WATER]),         CSPFT_FLOAT              },
        {"perpendicularWoodBounce",          offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_WOOD]),          CSPFT_FLOAT              },
        {"perpendicularAsphaltBounce",       offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_ASPHALT]),       CSPFT_FLOAT              },
        {"perpendicularCeramicBounce",       offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_CERAMIC]),       CSPFT_FLOAT              },
        {"perpendicularPlasticBounce",       offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_PLASTIC]),       CSPFT_FLOAT              },
        {"perpendicularRubberBounce",        offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_RUBBER]),        CSPFT_FLOAT              },
        {"perpendicularCushionBounce",       offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_CUSHION]),       CSPFT_FLOAT              },
        {"perpendicularFruitBounce",         offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_FRUIT]),         CSPFT_FLOAT              },
        {"perpendicularPaintedMetalBounce",  offsetof(WeaponDef, perpendicularBounce[SURF_TYPE_PAINTED_METAL]), CSPFT_FLOAT              },
        {"projTrailEffect",                  offsetof(WeaponDef, projTrailEffect),                              CSPFT_FX                 },
        {"projectileRed",                    offsetof(WeaponDef, vProjectileColor[0]),                          CSPFT_FLOAT              },
        {"projectileGreen",                  offsetof(WeaponDef, vProjectileColor[1]),                          CSPFT_FLOAT              },
        {"projectileBlue",                   offsetof(WeaponDef, vProjectileColor[2]),                          CSPFT_FLOAT              },
        {"guidedMissileType",                offsetof(WeaponDef, guidedMissileType),                            WFT_GUIDED_MISSILE_TYPE  },
        {"maxSteeringAccel",                 offsetof(WeaponDef, maxSteeringAccel),                             CSPFT_FLOAT              },
        {"projIgnitionDelay",                offsetof(WeaponDef, projIgnitionDelay),                            CSPFT_INT                },
        {"projIgnitionEffect",               offsetof(WeaponDef, projIgnitionEffect),                           CSPFT_FX                 },
        {"projIgnitionSound",                offsetof(WeaponDef, projIgnitionSound),                            CSPFT_SOUND              },
        {"tagFx_preparationEffect",          offsetof(WeaponDef, tagFx_preparationEffect),                      CSPFT_FX                 },
        {"tagFlash_preparationEffect",       offsetof(WeaponDef, tagFlash_preparationEffect),                   CSPFT_FX                 },
        {"adsTransInTime",                   offsetof(WeaponDef, iAdsTransInTime),                              CSPFT_MILLISECONDS       },
        {"adsTransOutTime",                  offsetof(WeaponDef, iAdsTransOutTime),                             CSPFT_MILLISECONDS       },
        {"adsIdleAmount",                    offsetof(WeaponDef, fAdsIdleAmount),                               CSPFT_FLOAT              },
        {"adsIdleSpeed",                     offsetof(WeaponDef, adsIdleSpeed),                                 CSPFT_FLOAT              },
        {"adsZoomFov",                       offsetof(WeaponDef, fAdsZoomFov),                                  CSPFT_FLOAT              },
        {"adsZoomInFrac",                    offsetof(WeaponDef, fAdsZoomInFrac),                               CSPFT_FLOAT              },
        {"adsZoomOutFrac",                   offsetof(WeaponDef, fAdsZoomOutFrac),                              CSPFT_FLOAT              },
        {"adsOverlayShader",                 offsetof(WeaponDef, overlayMaterial),                              CSPFT_MATERIAL           },
        {"adsOverlayShaderLowRes",           offsetof(WeaponDef, overlayMaterialLowRes),                        CSPFT_MATERIAL           },
        {"adsOverlayReticle",                offsetof(WeaponDef, overlayReticle),                               WFT_OVERLAYRETICLE       },
        {"adsOverlayInterface",              offsetof(WeaponDef, overlayInterface),                             WFT_OVERLAYINTERFACE     },
        {"adsOverlayWidth",                  offsetof(WeaponDef, overlayWidth),                                 CSPFT_FLOAT              },
        {"adsOverlayHeight",                 offsetof(WeaponDef, overlayHeight),                                CSPFT_FLOAT              },
        {"adsBobFactor",                     offsetof(WeaponDef, fAdsBobFactor),                                CSPFT_FLOAT              },
        {"adsViewBobMult",                   offsetof(WeaponDef, fAdsViewBobMult),                              CSPFT_FLOAT              },
        {"adsAimPitch",                      offsetof(WeaponDef, fAdsAimPitch),                                 CSPFT_FLOAT              },
        {"adsCrosshairInFrac",               offsetof(WeaponDef, fAdsCrosshairInFrac),                          CSPFT_FLOAT              },
        {"adsCrosshairOutFrac",              offsetof(WeaponDef, fAdsCrosshairOutFrac),                         CSPFT_FLOAT              },
        {"adsReloadTransTime",               offsetof(WeaponDef, iPositionReloadTransTime),                     CSPFT_MILLISECONDS       },
        {"adsGunKickReducedKickBullets",     offsetof(WeaponDef, adsGunKickReducedKickBullets),                 CSPFT_INT                },
        {"adsGunKickReducedKickPercent",     offsetof(WeaponDef, adsGunKickReducedKickPercent),                 CSPFT_FLOAT              },
        {"adsGunKickPitchMin",               offsetof(WeaponDef, fAdsGunKickPitchMin),                          CSPFT_FLOAT              },
        {"adsGunKickPitchMax",               offsetof(WeaponDef, fAdsGunKickPitchMax),                          CSPFT_FLOAT              },
        {"adsGunKickYawMin",                 offsetof(WeaponDef, fAdsGunKickYawMin),                            CSPFT_FLOAT              },
        {"adsGunKickYawMax",                 offsetof(WeaponDef, fAdsGunKickYawMax),                            CSPFT_FLOAT              },
        {"adsGunKickAccel",                  offsetof(WeaponDef, fAdsGunKickAccel),                             CSPFT_FLOAT              },
        {"adsGunKickSpeedMax",               offsetof(WeaponDef, fAdsGunKickSpeedMax),                          CSPFT_FLOAT              },
        {"adsGunKickSpeedDecay",             offsetof(WeaponDef, fAdsGunKickSpeedDecay),                        CSPFT_FLOAT              },
        {"adsGunKickStaticDecay",            offsetof(WeaponDef, fAdsGunKickStaticDecay),                       CSPFT_FLOAT              },
        {"adsViewKickPitchMin",              offsetof(WeaponDef, fAdsViewKickPitchMin),                         CSPFT_FLOAT              },
        {"adsViewKickPitchMax",              offsetof(WeaponDef, fAdsViewKickPitchMax),                         CSPFT_FLOAT              },
        {"adsViewKickYawMin",                offsetof(WeaponDef, fAdsViewKickYawMin),                           CSPFT_FLOAT              },
        {"adsViewKickYawMax",                offsetof(WeaponDef, fAdsViewKickYawMax),                           CSPFT_FLOAT              },
        {"adsViewKickCenterSpeed",           offsetof(WeaponDef, fAdsViewKickCenterSpeed),                      CSPFT_FLOAT              },
        {"adsSpread",                        offsetof(WeaponDef, fAdsSpread),                                   CSPFT_FLOAT              },
        {"hipSpreadStandMin",                offsetof(WeaponDef, fHipSpreadStandMin),                           CSPFT_FLOAT              },
        {"hipSpreadDuckedMin",               offsetof(WeaponDef, fHipSpreadDuckedMin),                          CSPFT_FLOAT              },
        {"hipSpreadProneMin",                offsetof(WeaponDef, fHipSpreadProneMin),                           CSPFT_FLOAT              },
        {"hipSpreadMax",                     offsetof(WeaponDef, hipSpreadStandMax),                            CSPFT_FLOAT              },
        {"hipSpreadDuckedMax",               offsetof(WeaponDef, hipSpreadDuckedMax),                           CSPFT_FLOAT              },
        {"hipSpreadProneMax",                offsetof(WeaponDef, hipSpreadProneMax),                            CSPFT_FLOAT              },
        {"hipSpreadDecayRate",               offsetof(WeaponDef, fHipSpreadDecayRate),                          CSPFT_FLOAT              },
        {"hipSpreadFireAdd",                 offsetof(WeaponDef, fHipSpreadFireAdd),                            CSPFT_FLOAT              },
        {"hipSpreadTurnAdd",                 offsetof(WeaponDef, fHipSpreadTurnAdd),                            CSPFT_FLOAT              },
        {"hipSpreadMoveAdd",                 offsetof(WeaponDef, fHipSpreadMoveAdd),                            CSPFT_FLOAT              },
        {"hipSpreadDuckedDecay",             offsetof(WeaponDef, fHipSpreadDuckedDecay),                        CSPFT_FLOAT              },
        {"hipSpreadProneDecay",              offsetof(WeaponDef, fHipSpreadProneDecay),                         CSPFT_FLOAT              },
        {"hipReticleSidePos",                offsetof(WeaponDef, fHipReticleSidePos),                           CSPFT_FLOAT              },
        {"hipIdleAmount",                    offsetof(WeaponDef, fHipIdleAmount),                               CSPFT_FLOAT              },
        {"hipIdleSpeed",                     offsetof(WeaponDef, hipIdleSpeed),                                 CSPFT_FLOAT              },
        {"hipGunKickReducedKickBullets",     offsetof(WeaponDef, hipGunKickReducedKickBullets),                 CSPFT_INT                },
        {"hipGunKickReducedKickPercent",     offsetof(WeaponDef, hipGunKickReducedKickPercent),                 CSPFT_FLOAT              },
        {"hipGunKickPitchMin",               offsetof(WeaponDef, fHipGunKickPitchMin),                          CSPFT_FLOAT              },
        {"hipGunKickPitchMax",               offsetof(WeaponDef, fHipGunKickPitchMax),                          CSPFT_FLOAT              },
        {"hipGunKickYawMin",                 offsetof(WeaponDef, fHipGunKickYawMin),                            CSPFT_FLOAT              },
        {"hipGunKickYawMax",                 offsetof(WeaponDef, fHipGunKickYawMax),                            CSPFT_FLOAT              },
        {"hipGunKickAccel",                  offsetof(WeaponDef, fHipGunKickAccel),                             CSPFT_FLOAT              },
        {"hipGunKickSpeedMax",               offsetof(WeaponDef, fHipGunKickSpeedMax),                          CSPFT_FLOAT              },
        {"hipGunKickSpeedDecay",             offsetof(WeaponDef, fHipGunKickSpeedDecay),                        CSPFT_FLOAT              },
        {"hipGunKickStaticDecay",            offsetof(WeaponDef, fHipGunKickStaticDecay),                       CSPFT_FLOAT              },
        {"hipViewKickPitchMin",              offsetof(WeaponDef, fHipViewKickPitchMin),                         CSPFT_FLOAT              },
        {"hipViewKickPitchMax",              offsetof(WeaponDef, fHipViewKickPitchMax),                         CSPFT_FLOAT              },
        {"hipViewKickYawMin",                offsetof(WeaponDef, fHipViewKickYawMin),                           CSPFT_FLOAT              },
        {"hipViewKickYawMax",                offsetof(WeaponDef, fHipViewKickYawMax),                           CSPFT_FLOAT              },
        {"hipViewKickCenterSpeed",           offsetof(WeaponDef, fHipViewKickCenterSpeed),                      CSPFT_FLOAT              },
        {"leftArc",                          offsetof(WeaponDef, leftArc),                                      CSPFT_FLOAT              },
        {"rightArc",                         offsetof(WeaponDef, rightArc),                                     CSPFT_FLOAT              },
        {"topArc",                           offsetof(WeaponDef, topArc),                                       CSPFT_FLOAT              },
        {"bottomArc",                        offsetof(WeaponDef, bottomArc),                                    CSPFT_FLOAT              },
        {"accuracy",                         offsetof(WeaponDef, accuracy),                                     CSPFT_FLOAT              },
        {"aiSpread",                         offsetof(WeaponDef, aiSpread),                                     CSPFT_FLOAT              },
        {"playerSpread",                     offsetof(WeaponDef, playerSpread),                                 CSPFT_FLOAT              },
        {"maxVertTurnSpeed",                 offsetof(WeaponDef, maxTurnSpeed[0]),                              CSPFT_FLOAT              },
        {"maxHorTurnSpeed",                  offsetof(WeaponDef, maxTurnSpeed[1]),                              CSPFT_FLOAT              },
        {"minVertTurnSpeed",                 offsetof(WeaponDef, minTurnSpeed[0]),                              CSPFT_FLOAT              },
        {"minHorTurnSpeed",                  offsetof(WeaponDef, minTurnSpeed[1]),                              CSPFT_FLOAT              },
        {"pitchConvergenceTime",             offsetof(WeaponDef, pitchConvergenceTime),                         CSPFT_FLOAT              },
        {"yawConvergenceTime",               offsetof(WeaponDef, yawConvergenceTime),                           CSPFT_FLOAT              },
        {"suppressionTime",                  offsetof(WeaponDef, suppressTime),                                 CSPFT_FLOAT              },
        {"maxRange",                         offsetof(WeaponDef, maxRange),                                     CSPFT_FLOAT              },
        {"animHorRotateInc",                 offsetof(WeaponDef, fAnimHorRotateInc),                            CSPFT_FLOAT              },
        {"playerPositionDist",               offsetof(WeaponDef, fPlayerPositionDist),                          CSPFT_FLOAT              },
        {"stance",                           offsetof(WeaponDef, stance),                                       WFT_STANCE               },
        {"useHintString",                    offsetof(WeaponDef, szUseHintString),                              CSPFT_STRING             },
        {"dropHintString",                   offsetof(WeaponDef, dropHintString),                               CSPFT_STRING             },
        {"horizViewJitter",                  offsetof(WeaponDef, horizViewJitter),                              CSPFT_FLOAT              },
        {"vertViewJitter",                   offsetof(WeaponDef, vertViewJitter),                               CSPFT_FLOAT              },
        {"fightDist",                        offsetof(WeaponDef, fightDist),                                    CSPFT_FLOAT              },
        {"maxDist",                          offsetof(WeaponDef, maxDist),                                      CSPFT_FLOAT              },
        {"aiVsAiAccuracyGraph",              offsetof(WeaponDef, aiVsAiAccuracyGraphName),                      CSPFT_STRING             },
        {"aiVsPlayerAccuracyGraph",          offsetof(WeaponDef, aiVsPlayerAccuracyGraphName),                  CSPFT_STRING             },
        {"locNone",                          offsetof(WeaponDef, locationDamageMultipliers[HITLOC_NONE]),       CSPFT_FLOAT              },
        {"locHelmet",                        offsetof(WeaponDef, locationDamageMultipliers[HITLOC_HELMET]),     CSPFT_FLOAT              },
        {"locHead",                          offsetof(WeaponDef, locationDamageMultipliers[HITLOC_HEAD]),       CSPFT_FLOAT              },
        {"locNeck",                          offsetof(WeaponDef, locationDamageMultipliers[HITLOC_NECK]),       CSPFT_FLOAT              },
        {"locTorsoUpper",                    offsetof(WeaponDef, locationDamageMultipliers[HITLOC_TORSO_UPR]),  CSPFT_FLOAT              },
        {"locTorsoLower",                    offsetof(WeaponDef, locationDamageMultipliers[HITLOC_TORSO_LWR]),  CSPFT_FLOAT              },
        {"locRightArmUpper",                 offsetof(WeaponDef, locationDamageMultipliers[HITLOC_R_ARM_UPR]),  CSPFT_FLOAT              },
        {"locRightArmLower",                 offsetof(WeaponDef, locationDamageMultipliers[HITLOC_R_ARM_LWR]),  CSPFT_FLOAT              },
        {"locRightHand",                     offsetof(WeaponDef, locationDamageMultipliers[HITLOC_R_HAND]),     CSPFT_FLOAT              },
        {"locLeftArmUpper",                  offsetof(WeaponDef, locationDamageMultipliers[HITLOC_L_ARM_UPR]),  CSPFT_FLOAT              },
        {"locLeftArmLower",                  offsetof(WeaponDef, locationDamageMultipliers[HITLOC_L_ARM_LWR]),  CSPFT_FLOAT              },
        {"locLeftHand",                      offsetof(WeaponDef, locationDamageMultipliers[HITLOC_L_HAND]),     CSPFT_FLOAT              },
        {"locRightLegUpper",                 offsetof(WeaponDef, locationDamageMultipliers[HITLOC_R_LEG_UPR]),  CSPFT_FLOAT              },
        {"locRightLegLower",                 offsetof(WeaponDef, locationDamageMultipliers[HITLOC_R_LEG_LWR]),  CSPFT_FLOAT              },
        {"locRightFoot",                     offsetof(WeaponDef, locationDamageMultipliers[HITLOC_R_FOOT]),     CSPFT_FLOAT              },
        {"locLeftLegUpper",                  offsetof(WeaponDef, locationDamageMultipliers[HITLOC_L_LEG_UPR]),  CSPFT_FLOAT              },
        {"locLeftLegLower",                  offsetof(WeaponDef, locationDamageMultipliers[HITLOC_L_LEG_LWR]),  CSPFT_FLOAT              },
        {"locLeftFoot",                      offsetof(WeaponDef, locationDamageMultipliers[HITLOC_L_FOOT]),     CSPFT_FLOAT              },
        {"locGun",                           offsetof(WeaponDef, locationDamageMultipliers[HITLOC_GUN]),        CSPFT_FLOAT              },
        {"fireRumble",                       offsetof(WeaponDef, fireRumble),                                   CSPFT_STRING             },
        {"meleeImpactRumble",                offsetof(WeaponDef, meleeImpactRumble),                            CSPFT_STRING             },
        {"adsDofStart",                      offsetof(WeaponDef, adsDofStart),                                  CSPFT_FLOAT              },
        {"adsDofEnd",                        offsetof(WeaponDef, adsDofEnd),                                    CSPFT_FLOAT              },
        {"flameTableFirstPerson",            offsetof(WeaponDef, flameTableFirstPerson),                        CSPFT_STRING             },
        {"flameTableThirdPerson",            offsetof(WeaponDef, flameTableThirdPerson),                        CSPFT_STRING             },
    };
} // namespace T4
