From 30d2d498bd8e3f2401037b24f3db6f96d39554c4 Mon Sep 17 00:00:00 2001 From: mo Date: Sun, 18 Oct 2026 19:12:17 +0100 Subject: [PATCH] refactor: use enum counts for game struct arrays (#1034) * refactor: use enum counts for game struct arrays * refactor: name flesh impact effect counts * refactor: name weapon model and dynamic entity counts * refactor: add missing enum counts as array sizes * refactor: add dynentitydrawtype and dynentitycolltype to QOS and refactor GfxWorld to use them --------- Co-authored-by: Jan Laupetin --- src/Common/Game/IW3/IW3_Assets.h | 87 ++++++++++++---- src/Common/Game/IW4/IW4_Assets.h | 91 ++++++++++++---- src/Common/Game/IW5/IW5_Assets.h | 95 ++++++++++++----- src/Common/Game/QOS/QOS_Assets.h | 115 +++++++++++++++------ src/Common/Game/T4/T4_Assets.h | 48 +++++++-- src/Common/Game/T5/T5_Assets.h | 92 +++++++++++++---- src/Common/Game/T6/T6_Assets.h | 58 ++++++++--- src/ZoneCode/Game/QOS/XAssets/GfxWorld.txt | 86 ++++++--------- src/ZoneCode/Game/T5/XAssets/GfxWorld.txt | 4 +- 9 files changed, 485 insertions(+), 191 deletions(-) diff --git a/src/Common/Game/IW3/IW3_Assets.h b/src/Common/Game/IW3/IW3_Assets.h index 02a0753f..112f417a 100644 --- a/src/Common/Game/IW3/IW3_Assets.h +++ b/src/Common/Game/IW3/IW3_Assets.h @@ -1444,7 +1444,7 @@ namespace IW3 bool hasBeenUploaded; char unused[1]; MaterialTechniqueSet* remappedTechniqueSet; - MaterialTechnique* techniques[34]; + MaterialTechnique* techniques[TECHNIQUE_COUNT]; }; struct CardMemory @@ -1772,6 +1772,23 @@ namespace IW3 float origin[3]; }; + enum DynEntityDrawType + { + DYNENT_DRAW_MODEL = 0x0, + DYNENT_DRAW_BRUSH = 0x1, + + DYNENT_DRAW_COUNT, + }; + + enum DynEntityCollType + { + DYNENT_COLL_CLIENT_FIRST = 0x0, + DYNENT_COLL_CLIENT_MODEL = 0x0, + DYNENT_COLL_CLIENT_BRUSH = 0x1, + + DYNENT_COLL_COUNT, + }; + enum DynEntityType { DYNENT_TYPE_INVALID = 0x0, @@ -1867,11 +1884,11 @@ namespace IW3 MapEnts* mapEnts; cbrush_t* box_brush; cmodel_t box_model; - uint16_t dynEntCount[2]; - DynEntityDef* dynEntDefList[2]; - DynEntityPose* dynEntPoseList[2]; - DynEntityClient* dynEntClientList[2]; - DynEntityColl* dynEntCollList[2]; + uint16_t dynEntCount[DYNENT_COLL_COUNT]; + DynEntityDef* dynEntDefList[DYNENT_DRAW_COUNT]; + DynEntityPose* dynEntPoseList[DYNENT_DRAW_COUNT]; + DynEntityClient* dynEntClientList[DYNENT_DRAW_COUNT]; + DynEntityColl* dynEntCollList[DYNENT_COLL_COUNT]; unsigned int checksum; }; @@ -2402,10 +2419,10 @@ namespace IW3 struct GfxWorldDpvsDynamic { - unsigned int dynEntClientWordCount[2]; - unsigned int dynEntClientCount[2]; - unsigned int* dynEntCellBits[2]; - raw_byte16* dynEntVisData[2][3]; + unsigned int dynEntClientWordCount[DYNENT_DRAW_COUNT]; + unsigned int dynEntClientCount[DYNENT_DRAW_COUNT]; + unsigned int* dynEntCellBits[DYNENT_DRAW_COUNT]; + raw_byte16* dynEntVisData[DYNENT_DRAW_COUNT][3]; }; struct GfxWorldStreamInfo @@ -2464,7 +2481,7 @@ namespace IW3 GfxSceneDynModel4* sceneDynModel; GfxSceneDynBrush* sceneDynBrush; unsigned int* primaryLightEntityShadowVis; - unsigned int* primaryLightDynEntShadowVis[2]; + unsigned int* primaryLightDynEntShadowVis[DYNENT_DRAW_COUNT]; char* nonSunPrimaryLightForModelDynEnt; GfxShadowGeometry* shadowGeom; GfxLightRegion* lightRegion; @@ -3129,14 +3146,36 @@ namespace IW3 snd_alias_list_t* sound; }; + enum weaponAltModel_t + { + WEAP_ALT_MODEL0 = 0x0, + WEAP_ALT_MODEL1 = 0x1, + WEAP_ALT_MODEL2 = 0x2, + WEAP_ALT_MODEL3 = 0x3, + WEAP_ALT_MODEL4 = 0x4, + WEAP_ALT_MODEL5 = 0x5, + WEAP_ALT_MODEL6 = 0x6, + WEAP_ALT_MODEL7 = 0x7, + WEAP_ALT_MODEL8 = 0x8, + WEAP_ALT_MODEL9 = 0x9, + WEAP_ALT_MODEL10 = 0xA, + WEAP_ALT_MODEL11 = 0xB, + WEAP_ALT_MODEL12 = 0xC, + WEAP_ALT_MODEL13 = 0xD, + WEAP_ALT_MODEL14 = 0xE, + WEAP_ALT_MODEL15 = 0xF, + + NUM_WEAP_ALTMODELS, + }; + struct WeaponDef { const char* szInternalName; const char* szDisplayName; const char* szOverlayName; - XModel* gunXModel[16]; + XModel* gunXModel[NUM_WEAP_ALTMODELS]; XModel* handXModel; - const char* szXAnims[33]; + const char* szXAnims[NUM_WEAP_ANIMS]; const char* szModeName; uint16_t hideTags[8]; uint16_t notetrackSoundMapKeys[16]; @@ -3226,7 +3265,7 @@ namespace IW3 float fStandRotMinSpeed; float fDuckedRotMinSpeed; float fProneRotMinSpeed; - XModel* worldModel[16]; + XModel* worldModel[NUM_WEAP_ALTMODELS]; XModel* worldClipModel; XModel* rocketModel; XModel* knifeModel; @@ -3404,8 +3443,8 @@ namespace IW3 int holdButtonToThrow; int freezeMovementWhenFiring; float lowAmmoWarningThreshold; - float parallelBounce[29]; - float perpendicularBounce[29]; + float parallelBounce[SURF_TYPE_NUM]; + float perpendicularBounce[SURF_TYPE_NUM]; FxEffectDef* projTrailEffect; float vProjectileColor[3]; guidedMissileType_t guidedMissileType; @@ -3494,7 +3533,7 @@ namespace IW3 float destabilizationRateTime; float destabilizationCurvatureMax; int destabilizeDistance; - float locationDamageMultipliers[19]; + float locationDamageMultipliers[HITLOC_COUNT]; const char* fireRumble; const char* meleeImpactRumble; float adsDofStart; @@ -3695,10 +3734,20 @@ namespace IW3 FxElemDef* elemDefs; }; + enum FxFleshType + { + FX_FLESHTYPE_BODY_NONFATAL = 0x0, + FX_FLESHTYPE_BODY_FATAL = 0x1, + FX_FLESHTYPE_HEAD_NONFATAL = 0x2, + FX_FLESHTYPE_HEAD_FATAL = 0x3, + + FX_FLESHTYPE_COUNT, + }; + struct FxImpactEntry { - FxEffectDef* nonflesh[29]; - FxEffectDef* flesh[4]; + FxEffectDef* nonflesh[SURF_TYPE_NUM]; + FxEffectDef* flesh[FX_FLESHTYPE_COUNT]; }; struct FxImpactTable diff --git a/src/Common/Game/IW4/IW4_Assets.h b/src/Common/Game/IW4/IW4_Assets.h index 48313908..36ac21bf 100644 --- a/src/Common/Game/IW4/IW4_Assets.h +++ b/src/Common/Game/IW4/IW4_Assets.h @@ -1733,7 +1733,7 @@ namespace IW4 bool hasBeenUploaded; unsigned char unused[1]; MaterialTechniqueSet* remappedTechniqueSet; - MaterialTechnique* techniques[48]; + MaterialTechnique* techniques[TECHNIQUE_COUNT]; }; union RawFileBuffer @@ -2724,10 +2724,20 @@ namespace IW4 Glyph* glyphs; }; + enum FxFleshType + { + FX_FLESHTYPE_BODY_NONFATAL = 0x0, + FX_FLESHTYPE_BODY_FATAL = 0x1, + FX_FLESHTYPE_HEAD_NONFATAL = 0x2, + FX_FLESHTYPE_HEAD_FATAL = 0x3, + + FX_FLESHTYPE_COUNT, + }; + struct FxImpactEntry { FxEffectDef* nonflesh[31]; - FxEffectDef* flesh[4]; + FxEffectDef* flesh[FX_FLESHTYPE_COUNT]; }; struct FxImpactTable @@ -3070,6 +3080,23 @@ namespace IW4 float origin[3]; }; + enum DynEntityDrawType + { + DYNENT_DRAW_MODEL = 0x0, + DYNENT_DRAW_BRUSH = 0x1, + + DYNENT_DRAW_COUNT, + }; + + enum DynEntityCollType + { + DYNENT_COLL_CLIENT_FIRST = 0x0, + DYNENT_COLL_CLIENT_MODEL = 0x0, + DYNENT_COLL_CLIENT_BRUSH = 0x1, + + DYNENT_COLL_COUNT, + }; + enum DynEntityType { DYNENT_TYPE_INVALID = 0x0, @@ -3161,11 +3188,11 @@ namespace IW4 MapEnts* mapEnts; uint16_t smodelNodeCount; SModelAabbNode* smodelNodes; - uint16_t dynEntCount[2]; - DynEntityDef* dynEntDefList[2]; - DynEntityPose* dynEntPoseList[2]; - DynEntityClient* dynEntClientList[2]; - DynEntityColl* dynEntCollList[2]; + uint16_t dynEntCount[DYNENT_COLL_COUNT]; + DynEntityDef* dynEntDefList[DYNENT_DRAW_COUNT]; + DynEntityPose* dynEntPoseList[DYNENT_DRAW_COUNT]; + DynEntityClient* dynEntClientList[DYNENT_DRAW_COUNT]; + DynEntityColl* dynEntCollList[DYNENT_COLL_COUNT]; unsigned int checksum; char padding[48]; }; @@ -3921,10 +3948,10 @@ namespace IW4 struct GfxWorldDpvsDynamic { - unsigned int dynEntClientWordCount[2]; - unsigned int dynEntClientCount[2]; - raw_uint* dynEntCellBits[2]; - raw_byte16* dynEntVisData[2][3]; + unsigned int dynEntClientWordCount[DYNENT_DRAW_COUNT]; + unsigned int dynEntClientCount[DYNENT_DRAW_COUNT]; + raw_uint* dynEntCellBits[DYNENT_DRAW_COUNT]; + raw_byte16* dynEntVisData[DYNENT_DRAW_COUNT][3]; }; struct GfxHeroOnlyLight @@ -3978,7 +4005,7 @@ namespace IW4 GfxSceneDynModel4* sceneDynModel; GfxSceneDynBrush* sceneDynBrush; raw_uint* primaryLightEntityShadowVis; - raw_uint* primaryLightDynEntShadowVis[2]; + raw_uint* primaryLightDynEntShadowVis[DYNENT_DRAW_COUNT]; char* nonSunPrimaryLightForModelDynEnt; GfxShadowGeometry* shadowGeom; GfxLightRegion* lightRegion; @@ -4291,6 +4318,28 @@ namespace IW4 snd_alias_list_t* sound; }; + enum weaponAltModel_t + { + WEAP_ALT_MODEL0 = 0x0, + WEAP_ALT_MODEL1 = 0x1, + WEAP_ALT_MODEL2 = 0x2, + WEAP_ALT_MODEL3 = 0x3, + WEAP_ALT_MODEL4 = 0x4, + WEAP_ALT_MODEL5 = 0x5, + WEAP_ALT_MODEL6 = 0x6, + WEAP_ALT_MODEL7 = 0x7, + WEAP_ALT_MODEL8 = 0x8, + WEAP_ALT_MODEL9 = 0x9, + WEAP_ALT_MODEL10 = 0xA, + WEAP_ALT_MODEL11 = 0xB, + WEAP_ALT_MODEL12 = 0xC, + WEAP_ALT_MODEL13 = 0xD, + WEAP_ALT_MODEL14 = 0xE, + WEAP_ALT_MODEL15 = 0xF, + + NUM_WEAP_ALTMODELS, + }; + struct WeaponDef { const char* szOverlayName; @@ -4757,18 +4806,18 @@ namespace IW4 WeaponCompleteDef weapCompleteDef; WeaponDef weapDef; uint16_t hideTags[32]; - const char* szXAnims[37]; - XModel* gunXModel[16]; - const char* szXAnimsRightHanded[37]; - const char* szXAnimsLeftHanded[37]; + const char* szXAnims[NUM_WEAP_ANIMS]; + XModel* gunXModel[NUM_WEAP_ALTMODELS]; + const char* szXAnimsRightHanded[NUM_WEAP_ANIMS]; + const char* szXAnimsLeftHanded[NUM_WEAP_ANIMS]; uint16_t notetrackSoundMapKeys[16]; uint16_t notetrackSoundMapValues[16]; uint16_t notetrackRumbleMapKeys[16]; uint16_t notetrackRumbleMapValues[16]; - XModel* worldModel[16]; - float parallelBounce[31]; - float perpendicularBounce[31]; - float locationDamageMultipliers[20]; + XModel* worldModel[NUM_WEAP_ALTMODELS]; + float parallelBounce[SURF_TYPE_NUM]; + float perpendicularBounce[SURF_TYPE_NUM]; + float locationDamageMultipliers[HITLOC_COUNT]; }; enum VehicleAxleType @@ -4940,7 +4989,7 @@ namespace IW4 SndAliasCustom speedSnd; float speedSndBlendSpeed; const char* surfaceSndPrefix; - SndAliasCustom surfaceSnds[31]; + SndAliasCustom surfaceSnds[SURF_TYPE_NUM]; float surfaceSndBlendSpeed; float slideVolume; float slideBlendSpeed; diff --git a/src/Common/Game/IW5/IW5_Assets.h b/src/Common/Game/IW5/IW5_Assets.h index a7967c47..35fd731f 100644 --- a/src/Common/Game/IW5/IW5_Assets.h +++ b/src/Common/Game/IW5/IW5_Assets.h @@ -1478,7 +1478,7 @@ namespace IW5 MaterialWorldVertexFormat worldVertFormat; unsigned char unused[2]; MaterialTechniqueSet* remappedTechniqueSet; - MaterialTechnique* techniques[54]; + MaterialTechnique* techniques[TECHNIQUE_COUNT]; }; struct type_align32(4) GfxImageLoadDef @@ -1870,6 +1870,23 @@ namespace IW5 unsigned short childCount; }; + enum DynEntityDrawType + { + DYNENT_DRAW_MODEL = 0x0, + DYNENT_DRAW_BRUSH = 0x1, + + DYNENT_DRAW_COUNT, + }; + + enum DynEntityCollType + { + DYNENT_COLL_CLIENT_FIRST = 0x0, + DYNENT_COLL_CLIENT_MODEL = 0x0, + DYNENT_COLL_CLIENT_BRUSH = 0x1, + + DYNENT_COLL_COUNT, + }; + enum DynEntityType { DYNENT_TYPE_INVALID = 0x0, @@ -1978,11 +1995,11 @@ namespace IW5 MapTriggers stageTrigger; unsigned short smodelNodeCount; SModelAabbNode* smodelNodes; - unsigned short dynEntCount[2]; - DynEntityDef* dynEntDefList[2]; - DynEntityPose* dynEntPoseList[2]; - DynEntityClient* dynEntClientList[2]; - DynEntityColl* dynEntCollList[2]; + unsigned short dynEntCount[DYNENT_COLL_COUNT]; + DynEntityDef* dynEntDefList[DYNENT_DRAW_COUNT]; + DynEntityPose* dynEntPoseList[DYNENT_DRAW_COUNT]; + DynEntityClient* dynEntClientList[DYNENT_DRAW_COUNT]; + DynEntityColl* dynEntCollList[DYNENT_COLL_COUNT]; unsigned int checksum; unsigned char padding[20]; }; @@ -2772,10 +2789,10 @@ namespace IW5 struct GfxWorldDpvsDynamic { - unsigned int dynEntClientWordCount[2]; - unsigned int dynEntClientCount[2]; - raw_uint* dynEntCellBits[2]; - raw_byte16* dynEntVisData[2][3]; + unsigned int dynEntClientWordCount[DYNENT_DRAW_COUNT]; + unsigned int dynEntClientCount[DYNENT_DRAW_COUNT]; + raw_uint* dynEntCellBits[DYNENT_DRAW_COUNT]; + raw_byte16* dynEntVisData[DYNENT_DRAW_COUNT][3]; }; struct GfxHeroOnlyLight @@ -2829,7 +2846,7 @@ namespace IW5 GfxSceneDynModel* sceneDynModel; GfxSceneDynBrush* sceneDynBrush; raw_uint* primaryLightEntityShadowVis; - raw_uint* primaryLightDynEntShadowVis[2]; + raw_uint* primaryLightDynEntShadowVis[DYNENT_DRAW_COUNT]; raw_byte* nonSunPrimaryLightForModelDynEnt; GfxShadowGeometry* shadowGeom; GfxLightRegion* lightRegion; @@ -4133,6 +4150,28 @@ namespace IW5 SURF_TYPE_COUNT }; + enum weaponAltModel_t + { + WEAP_ALT_MODEL0 = 0x0, + WEAP_ALT_MODEL1 = 0x1, + WEAP_ALT_MODEL2 = 0x2, + WEAP_ALT_MODEL3 = 0x3, + WEAP_ALT_MODEL4 = 0x4, + WEAP_ALT_MODEL5 = 0x5, + WEAP_ALT_MODEL6 = 0x6, + WEAP_ALT_MODEL7 = 0x7, + WEAP_ALT_MODEL8 = 0x8, + WEAP_ALT_MODEL9 = 0x9, + WEAP_ALT_MODEL10 = 0xA, + WEAP_ALT_MODEL11 = 0xB, + WEAP_ALT_MODEL12 = 0xC, + WEAP_ALT_MODEL13 = 0xD, + WEAP_ALT_MODEL14 = 0xE, + WEAP_ALT_MODEL15 = 0xF, + + NUM_WEAP_ALTMODELS, + }; + struct WeaponDef { const char* szOverlayName; @@ -4673,18 +4712,18 @@ namespace IW5 WeaponCompleteDef weapCompleteDef; WeaponDef weapDef; uint16_t hideTags[32]; - const char* szXAnims[42]; - XModel* gunXModel[16]; - const char* szXAnimsRightHanded[42]; - const char* szXAnimsLeftHanded[42]; + const char* szXAnims[WEAP_ANIM_COUNT]; + XModel* gunXModel[NUM_WEAP_ALTMODELS]; + const char* szXAnimsRightHanded[WEAP_ANIM_COUNT]; + const char* szXAnimsLeftHanded[WEAP_ANIM_COUNT]; uint16_t notetrackSoundMapKeys[24]; uint16_t notetrackSoundMapValues[24]; uint16_t notetrackRumbleMapKeys[16]; uint16_t notetrackRumbleMapValues[16]; - XModel* worldModel[16]; - float parallelBounce[31]; - float perpendicularBounce[31]; - float locationDamageMultipliers[20]; + XModel* worldModel[NUM_WEAP_ALTMODELS]; + float parallelBounce[SURF_TYPE_COUNT]; + float perpendicularBounce[SURF_TYPE_COUNT]; + float locationDamageMultipliers[HITLOC_COUNT]; WeaponAttachment* scopes[6]; WeaponAttachment* underBarrels[3]; WeaponAttachment* others[4]; @@ -4923,10 +4962,20 @@ namespace IW5 FxElemDef* elemDefs; }; + enum FxFleshType + { + FX_FLESHTYPE_BODY_NONFATAL = 0x0, + FX_FLESHTYPE_BODY_FATAL = 0x1, + FX_FLESHTYPE_HEAD_NONFATAL = 0x2, + FX_FLESHTYPE_HEAD_FATAL = 0x3, + + FX_FLESHTYPE_COUNT, + }; + struct FxImpactEntry { - FxEffectDef* nonflesh[31]; - FxEffectDef* flesh[4]; + FxEffectDef* nonflesh[SURF_TYPE_COUNT]; + FxEffectDef* flesh[FX_FLESHTYPE_COUNT]; }; struct FxImpactTable @@ -4937,7 +4986,7 @@ namespace IW5 struct SurfaceFxEntry { - FxEffectDef* surfaceEffect[31]; + FxEffectDef* surfaceEffect[SURF_TYPE_COUNT]; }; struct SurfaceFxTable @@ -5430,7 +5479,7 @@ namespace IW5 SndAliasCustom speedSnd; float speedSndBlendSpeed; const char* surfaceSndPrefix; - SndAliasCustom surfaceSnds[31]; + SndAliasCustom surfaceSnds[SURF_TYPE_COUNT]; float surfaceSndBlendSpeed; float slideVolume; float slideBlendSpeed; diff --git a/src/Common/Game/QOS/QOS_Assets.h b/src/Common/Game/QOS/QOS_Assets.h index f6f8479f..da13581a 100644 --- a/src/Common/Game/QOS/QOS_Assets.h +++ b/src/Common/Game/QOS/QOS_Assets.h @@ -769,7 +769,7 @@ namespace QOS { const char* name; char unknown[8]; - MaterialTechnique* techniques[43]; + MaterialTechnique* techniques[TECHNIQUE_COUNT]; }; struct complex_s @@ -935,6 +935,42 @@ namespace QOS gcc_align32(8) uint64_t packed; }; + enum materialSurfType_t + { + SURF_TYPE_DEFAULT, + SURF_TYPE_BARK, + SURF_TYPE_BRICK, + SURF_TYPE_CARPET, + SURF_TYPE_CLOTH, + SURF_TYPE_CONCRETE, + SURF_TYPE_DIRT, + SURF_TYPE_FLESH, + SURF_TYPE_FOLIAGE, + SURF_TYPE_GLASS, + SURF_TYPE_GRASS, + SURF_TYPE_GRAVEL, + SURF_TYPE_ICE, + SURF_TYPE_METAL, + SURF_TYPE_MUD, + SURF_TYPE_PAPER, + SURF_TYPE_PLASTER, + SURF_TYPE_ROCK, + SURF_TYPE_SAND, + SURF_TYPE_SNOW, + SURF_TYPE_WATER, + SURF_TYPE_WOOD, + SURF_TYPE_ASPHALT, + SURF_TYPE_CERAMIC, + SURF_TYPE_PLASTIC, + SURF_TYPE_RUBBER, + SURF_TYPE_CUSHION, + SURF_TYPE_FRUIT, + SURF_TYPE_PAINTED_METAL, + SURF_TYPE_METAL_GRATE, + + SURF_TYPE_NUM + }; + struct MaterialInfo { const char* name; @@ -950,7 +986,7 @@ namespace QOS struct Material { MaterialInfo info; - char stateBitsEntry[43]; + char stateBitsEntry[TECHNIQUE_COUNT]; unsigned char textureCount; unsigned char constantCount; unsigned char stateBitsCount; @@ -1185,6 +1221,26 @@ namespace QOS char unknown[72]; }; + enum DynEntityDrawType + { + DYNENT_DRAW_MODEL = 0x0, + DYNENT_DRAW_BRUSH = 0x1, + + DYNENT_DRAW_COUNT, + }; + + enum DynEntityCollType + { + DYNENT_COLL_CLIENT_FIRST = 0x0, + DYNENT_COLL_CLIENT_MODEL = 0x0, + DYNENT_COLL_CLIENT_BRUSH = 0x1, + DYNENT_COLL_SERVER_FIRST = 0x2, + DYNENT_COLL_SERVER_MODEL = 0x2, + DYNENT_COLL_SERVER_BRUSH = 0x3, + + DYNENT_COLL_COUNT, + }; + struct clipMap_t { const char* name; @@ -1236,11 +1292,11 @@ namespace QOS MapEnts* mapEnts; cbrush_t* box_brush; char unknown1[74]; - uint16_t dynEntCount[4]; - DynEntityDef* dynEntDefList[2]; - DynEntityClient* dynEntClientList[2]; - DynEntityServer* dynEntServerList[2]; - DynEntityColl* dynEntCollList[4]; + uint16_t dynEntCount[DYNENT_COLL_COUNT]; + DynEntityDef* dynEntDefList[DYNENT_DRAW_COUNT]; + DynEntityClient* dynEntClientList[DYNENT_DRAW_COUNT]; + DynEntityServer* dynEntServerList[DYNENT_DRAW_COUNT]; + DynEntityColl* dynEntCollList[DYNENT_COLL_COUNT]; int num_constraints; DynEntityPhysConstraint* constraints; int unknown3; @@ -1715,10 +1771,8 @@ namespace QOS sunflare_t sun; float outdoorLookupMatrix[4][4]; GfxImage* outdoorImage; - unsigned int gfxSceneDynModelCount; // Unknown name - unsigned int gfxSceneDynBrushCount; // Unknown name - unsigned int unknownGfxDynEntCellRefCount0; - unsigned int unknownGfxDynEntCellRefCount1; + unsigned int dynEntClientCount[DYNENT_DRAW_COUNT]; + unsigned int unknownGfxDynEntCellRefCount[DYNENT_DRAW_COUNT]; unsigned char* smodelVisData0; unsigned char* smodelVisData1; unsigned char* smodelVisData2; @@ -1731,26 +1785,15 @@ namespace QOS unsigned int* surfaceCastsSunShadow; unsigned int* cellCasterBits; unsigned char* cellHasSunLitSurfsBits; - unsigned char* dynEntVisData0_0; - unsigned char* dynEntVisData0_1; - unsigned char* dynEntVisData0_2; - unsigned char* dynEntVisData0_3; - unsigned char* dynEntVisData1_0; - unsigned char* dynEntVisData1_1; - unsigned char* dynEntVisData1_2; - unsigned char* dynEntVisData1_3; - unsigned char* dynEntCellBits0; - unsigned char* dynEntCellBits1; - unsigned short* dynEntSortList0; - unsigned short* dynEntSortList1; - GfxDynEntCellRef* unknownGfxDynEntCellRef0; - GfxDynEntCellRef* unknownGfxDynEntCellRef1; - GfxSceneDynModel4* gfxSceneDynModel; // name unknown - GfxSceneDynBrush* gfxSceneDynBrush; // name unknown + unsigned char* dynEntVisData[DYNENT_DRAW_COUNT][4]; + unsigned char* dynEntCellBits[DYNENT_DRAW_COUNT]; + unsigned short* dynEntSortList[DYNENT_DRAW_COUNT]; + GfxDynEntCellRef* unknownGfxDynEntCellRef[DYNENT_DRAW_COUNT]; + GfxSceneDynModel4* sceneDynModel; + GfxSceneDynBrush* sceneDynBrush; unsigned short* sortedSurfIndex; unsigned int* primaryLightEntityShadowVis; - unsigned int* primaryLightDynEntShadowVis0; - unsigned int* primaryLightDynEntShadowVis1; + unsigned int* primaryLightDynEntShadowVis[DYNENT_DRAW_COUNT]; GfxShadowGeometry* shadowGeom; unsigned int massiveAdSurfaceCount; GfxMassiveAdSurface* massiveAdSurface; @@ -2505,10 +2548,20 @@ namespace QOS DestructiblePiece* pieces; }; + enum FxFleshType + { + FX_FLESHTYPE_BODY_NONFATAL = 0x0, + FX_FLESHTYPE_BODY_FATAL = 0x1, + FX_FLESHTYPE_HEAD_NONFATAL = 0x2, + FX_FLESHTYPE_HEAD_FATAL = 0x3, + + FX_FLESHTYPE_COUNT, + }; + struct FxImpactEntry { - FxEffectDef* nonflesh[30]; - FxEffectDef* flesh[4]; + FxEffectDef* nonflesh[SURF_TYPE_NUM]; + FxEffectDef* flesh[FX_FLESHTYPE_COUNT]; }; struct FxImpactTable diff --git a/src/Common/Game/T4/T4_Assets.h b/src/Common/Game/T4/T4_Assets.h index 72a364c1..07d0cbdb 100644 --- a/src/Common/Game/T4/T4_Assets.h +++ b/src/Common/Game/T4/T4_Assets.h @@ -1551,7 +1551,7 @@ namespace T4 bool hasBeenUploaded; char unused[1]; MaterialTechniqueSet* remappedTechniqueSet; - MaterialTechnique* techniques[59]; + MaterialTechnique* techniques[TECHNIQUE_COUNT]; }; struct CardMemory @@ -3604,14 +3604,36 @@ namespace T4 SndAliasCustom flameCooldownSound; }; + enum weaponAltModel_t + { + WEAP_ALT_MODEL0 = 0x0, + WEAP_ALT_MODEL1 = 0x1, + WEAP_ALT_MODEL2 = 0x2, + WEAP_ALT_MODEL3 = 0x3, + WEAP_ALT_MODEL4 = 0x4, + WEAP_ALT_MODEL5 = 0x5, + WEAP_ALT_MODEL6 = 0x6, + WEAP_ALT_MODEL7 = 0x7, + WEAP_ALT_MODEL8 = 0x8, + WEAP_ALT_MODEL9 = 0x9, + WEAP_ALT_MODEL10 = 0xA, + WEAP_ALT_MODEL11 = 0xB, + WEAP_ALT_MODEL12 = 0xC, + WEAP_ALT_MODEL13 = 0xD, + WEAP_ALT_MODEL14 = 0xE, + WEAP_ALT_MODEL15 = 0xF, + + NUM_WEAP_ALTMODELS, + }; + struct WeaponDef { const char* szInternalName; const char* szDisplayName; const char* szOverlayName; - XModel* gunXModel[16]; + XModel* gunXModel[NUM_WEAP_ALTMODELS]; XModel* handXModel; - const char* szXAnims[35]; + const char* szXAnims[NUM_WEAP_ANIMS]; const char* szModeName; uint16_t hideTags[8]; uint16_t notetrackSoundMapKeys[20]; @@ -3735,7 +3757,7 @@ namespace T4 float fStandRotMinSpeed; float fDuckedRotMinSpeed; float fProneRotMinSpeed; - XModel* worldModel[16]; + XModel* worldModel[NUM_WEAP_ALTMODELS]; XModel* worldClipModel; XModel* rocketModel; XModel* knifeModel; @@ -3928,8 +3950,8 @@ namespace T4 int holdButtonToThrow; int freezeMovementWhenFiring; float lowAmmoWarningThreshold; - float parallelBounce[31]; - float perpendicularBounce[31]; + float parallelBounce[SURF_TYPE_NUM]; + float perpendicularBounce[SURF_TYPE_NUM]; FxEffectDef* projTrailEffect; float vProjectileColor[3]; guidedMissileType_t guidedMissileType; @@ -4290,10 +4312,20 @@ namespace T4 FxElemDef* elemDefs; }; + enum FxFleshType + { + FX_FLESHTYPE_BODY_NONFATAL = 0x0, + FX_FLESHTYPE_BODY_FATAL = 0x1, + FX_FLESHTYPE_HEAD_NONFATAL = 0x2, + FX_FLESHTYPE_HEAD_FATAL = 0x3, + + FX_FLESHTYPE_COUNT, + }; + struct FxImpactEntry { - FxEffectDef* nonflesh[31]; - FxEffectDef* flesh[4]; + FxEffectDef* nonflesh[SURF_TYPE_NUM]; + FxEffectDef* flesh[FX_FLESHTYPE_COUNT]; }; struct FxImpactTable diff --git a/src/Common/Game/T5/T5_Assets.h b/src/Common/Game/T5/T5_Assets.h index 07bf3268..5247d30a 100644 --- a/src/Common/Game/T5/T5_Assets.h +++ b/src/Common/Game/T5/T5_Assets.h @@ -1788,7 +1788,7 @@ namespace T5 MaterialWorldVertexFormat worldVertFormat; char unused[1]; uint16_t techsetFlags; - MaterialTechnique* techniques[130]; + MaterialTechnique* techniques[TECHNIQUE_COUNT]; }; struct GfxImageLoadDef @@ -2233,6 +2233,26 @@ namespace T5 vec3_t* verts; }; + enum DynEntityDrawType + { + DYNENT_DRAW_MODEL = 0x0, + DYNENT_DRAW_BRUSH = 0x1, + + DYNENT_DRAW_COUNT, + }; + + enum DynEntityCollType + { + DYNENT_COLL_CLIENT_FIRST = 0x0, + DYNENT_COLL_CLIENT_MODEL = 0x0, + DYNENT_COLL_CLIENT_BRUSH = 0x1, + DYNENT_COLL_SERVER_FIRST = 0x2, + DYNENT_COLL_SERVER_MODEL = 0x2, + DYNENT_COLL_SERVER_BRUSH = 0x3, + + DYNENT_COLL_COUNT, + }; + enum DynEntityType { DYNENT_TYPE_INVALID = 0x0, @@ -2430,12 +2450,12 @@ namespace T5 cbrush_t* box_brush; cmodel_t box_model; uint16_t originalDynEntCount; - uint16_t dynEntCount[4]; - DynEntityDef* dynEntDefList[2]; - DynEntityPose* dynEntPoseList[2]; - DynEntityClient* dynEntClientList[2]; - DynEntityServer* dynEntServerList[2]; - DynEntityColl* dynEntCollList[4]; + uint16_t dynEntCount[DYNENT_COLL_COUNT]; + DynEntityDef* dynEntDefList[DYNENT_DRAW_COUNT]; + DynEntityPose* dynEntPoseList[DYNENT_DRAW_COUNT]; + DynEntityClient* dynEntClientList[DYNENT_DRAW_COUNT]; + DynEntityServer* dynEntServerList[DYNENT_DRAW_COUNT]; + DynEntityColl* dynEntCollList[DYNENT_COLL_COUNT]; int num_constraints; PhysConstraint* constraints; int max_ropes; @@ -3145,10 +3165,10 @@ namespace T5 struct GfxWorldDpvsDynamic { - unsigned int dynEntClientWordCount[2]; - unsigned int dynEntClientCount[2]; - unsigned int* dynEntCellBits[2]; - raw_byte16* dynEntVisData[2][3]; + unsigned int dynEntClientWordCount[DYNENT_DRAW_COUNT]; + unsigned int dynEntClientCount[DYNENT_DRAW_COUNT]; + unsigned int* dynEntCellBits[DYNENT_DRAW_COUNT]; + raw_byte16* dynEntVisData[DYNENT_DRAW_COUNT][3]; }; struct GfxWorldLodChain @@ -3252,7 +3272,7 @@ namespace T5 GfxSceneDynModel4* sceneDynModel; GfxSceneDynBrush* sceneDynBrush; unsigned int* primaryLightEntityShadowVis; - unsigned int* primaryLightDynEntShadowVis[2]; + unsigned int* primaryLightDynEntShadowVis[DYNENT_DRAW_COUNT]; char* nonSunPrimaryLightForModelDynEnt; GfxShadowGeometry* shadowGeom; GfxLightRegion* lightRegion; @@ -4284,6 +4304,28 @@ namespace T5 const char* flameCooldownSound; }; + enum weaponAltModel_t + { + WEAP_ALT_MODEL0 = 0x0, + WEAP_ALT_MODEL1 = 0x1, + WEAP_ALT_MODEL2 = 0x2, + WEAP_ALT_MODEL3 = 0x3, + WEAP_ALT_MODEL4 = 0x4, + WEAP_ALT_MODEL5 = 0x5, + WEAP_ALT_MODEL6 = 0x6, + WEAP_ALT_MODEL7 = 0x7, + WEAP_ALT_MODEL8 = 0x8, + WEAP_ALT_MODEL9 = 0x9, + WEAP_ALT_MODEL10 = 0xA, + WEAP_ALT_MODEL11 = 0xB, + WEAP_ALT_MODEL12 = 0xC, + WEAP_ALT_MODEL13 = 0xD, + WEAP_ALT_MODEL14 = 0xE, + WEAP_ALT_MODEL15 = 0xF, + + NUM_WEAP_ALTMODELS, + }; + struct WeaponDef { const char* szOverlayName; @@ -4847,15 +4889,15 @@ namespace T5 { WeaponVariantDef weapVariantDef; WeaponDef weapDef; - XModel* gunXModel[16]; - const char* szXAnims[66]; + XModel* gunXModel[NUM_WEAP_ALTMODELS]; + const char* szXAnims[NUM_WEAP_ANIMS]; uint16_t hideTags[32]; uint16_t notetrackSoundMapKeys[20]; uint16_t notetrackSoundMapValues[20]; - XModel* worldModel[16]; - float parallelBounce[31]; - float perpendicularBounce[31]; - float locationDamageMultipliers[19]; + XModel* worldModel[NUM_WEAP_ALTMODELS]; + float parallelBounce[SURF_TYPE_NUM]; + float perpendicularBounce[SURF_TYPE_NUM]; + float locationDamageMultipliers[HITLOC_COUNT]; }; enum snd_category_t @@ -5188,10 +5230,20 @@ namespace T5 float boundingSphere[4]; }; + enum FxFleshType + { + FX_FLESHTYPE_BODY_NONFATAL = 0x0, + FX_FLESHTYPE_BODY_FATAL = 0x1, + FX_FLESHTYPE_HEAD_NONFATAL = 0x2, + FX_FLESHTYPE_HEAD_FATAL = 0x3, + + FX_FLESHTYPE_COUNT, + }; + struct FxImpactEntry { - FxEffectDef* nonflesh[31]; - FxEffectDef* flesh[4]; + FxEffectDef* nonflesh[SURF_TYPE_NUM]; + FxEffectDef* flesh[FX_FLESHTYPE_COUNT]; }; struct FxImpactTable diff --git a/src/Common/Game/T6/T6_Assets.h b/src/Common/Game/T6/T6_Assets.h index 4ed3d959..53ca3f9c 100644 --- a/src/Common/Game/T6/T6_Assets.h +++ b/src/Common/Game/T6/T6_Assets.h @@ -804,7 +804,7 @@ namespace T6 { const char* name; MaterialWorldVertexFormat worldVertFormat; - MaterialTechnique* techniques[36]; + MaterialTechnique* techniques[TECHNIQUE_COUNT]; }; union GfxTexture @@ -2344,7 +2344,7 @@ namespace T6 int isDrivable; int numberOfSeats; int numberOfGunners; - int seatSwitchOrder[11]; + int seatSwitchOrder[NUM_VEHICLE_POSITIONS]; int driverControlledGunPos; float entryPointRadius[5]; float texScrollScale; @@ -2379,9 +2379,9 @@ namespace T6 float gunnerRotRate; vec2_t gunnerRestAngles[4]; view_limits_t passengerViewLimits[6]; - const char* sndNames[2]; - unsigned int sndIndices[2]; - const char* sndMaterialNames[3]; + const char* sndNames[NUM_VEHICLE_SNDS]; + unsigned int sndIndices[NUM_VEHICLE_SNDS]; + const char* sndMaterialNames[NUM_VEHICLE_MATERIAL_SNDS]; float skidSpeedMin; float skidSpeedMax; const char* futzName; @@ -5175,25 +5175,47 @@ namespace T6 vec3_t ikLeftHandUiViewerRotation; }; + enum weaponAltModel_t + { + WEAP_ALT_MODEL0 = 0x0, + WEAP_ALT_MODEL1 = 0x1, + WEAP_ALT_MODEL2 = 0x2, + WEAP_ALT_MODEL3 = 0x3, + WEAP_ALT_MODEL4 = 0x4, + WEAP_ALT_MODEL5 = 0x5, + WEAP_ALT_MODEL6 = 0x6, + WEAP_ALT_MODEL7 = 0x7, + WEAP_ALT_MODEL8 = 0x8, + WEAP_ALT_MODEL9 = 0x9, + WEAP_ALT_MODEL10 = 0xA, + WEAP_ALT_MODEL11 = 0xB, + WEAP_ALT_MODEL12 = 0xC, + WEAP_ALT_MODEL13 = 0xD, + WEAP_ALT_MODEL14 = 0xE, + WEAP_ALT_MODEL15 = 0xF, + + NUM_WEAP_ALTMODELS, + }; + struct WeaponFullDef { WeaponVariantDef weapVariantDef; WeaponDef weapDef; WeaponAttachment* attachments[63]; WeaponAttachmentUnique* attachmentUniques[95]; - XModel* gunXModel[16]; - const char* szXAnims[88]; + XModel* gunXModel[NUM_WEAP_ALTMODELS]; + const char* szXAnims[NUM_WEAP_ANIMS]; uint16_t hideTags[32]; uint16_t notetrackSoundMapKeys[20]; uint16_t notetrackSoundMapValues[20]; - XModel* worldModel[16]; + XModel* worldModel[NUM_WEAP_ALTMODELS]; XModel* attachViewModel[8]; XModel* attachWorldModel[8]; const char* attachViewModelTag[8]; const char* attachWorldModelTag[8]; - float parallelBounce[32]; - float perpendicularBounce[32]; - float locationDamageMultipliers[21]; + float parallelBounce[SURF_TYPE_NUM]; + float perpendicularBounce[SURF_TYPE_NUM]; + float locationDamageMultipliers[HITLOC_COUNT]; char weaponCamo[64]; }; @@ -5505,10 +5527,20 @@ namespace T6 vec2_t billboardPivot; }; + enum FxFleshType + { + FX_FLESHTYPE_BODY_NONFATAL = 0x0, + FX_FLESHTYPE_BODY_FATAL = 0x1, + FX_FLESHTYPE_HEAD_NONFATAL = 0x2, + FX_FLESHTYPE_HEAD_FATAL = 0x3, + + FX_FLESHTYPE_COUNT, + }; + struct FxImpactEntry { - FxEffectDef* nonflesh[32]; - FxEffectDef* flesh[4]; + FxEffectDef* nonflesh[SURF_TYPE_NUM]; + FxEffectDef* flesh[FX_FLESHTYPE_COUNT]; }; struct StringTableCell diff --git a/src/ZoneCode/Game/QOS/XAssets/GfxWorld.txt b/src/ZoneCode/Game/QOS/XAssets/GfxWorld.txt index 82afe65b..ec366c25 100644 --- a/src/ZoneCode/Game/QOS/XAssets/GfxWorld.txt +++ b/src/ZoneCode/Game/QOS/XAssets/GfxWorld.txt @@ -46,45 +46,34 @@ set block cellCasterBits XFILE_BLOCK_RUNTIME; set count cellCasterBits cellCount * ((cellCount + 31) / 32); set block cellHasSunLitSurfsBits XFILE_BLOCK_RUNTIME; set count cellHasSunLitSurfsBits (cellCount * 512) + 1; -set block dynEntVisData0_0 XFILE_BLOCK_RUNTIME; -set count dynEntVisData0_0 gfxSceneDynModelCount; -set block dynEntVisData0_1 XFILE_BLOCK_RUNTIME; -set count dynEntVisData0_1 gfxSceneDynModelCount; -set block dynEntVisData0_2 XFILE_BLOCK_RUNTIME; -set count dynEntVisData0_2 gfxSceneDynModelCount; -set block dynEntVisData0_3 XFILE_BLOCK_RUNTIME; -set count dynEntVisData0_3 gfxSceneDynModelCount; -set block dynEntVisData1_0 XFILE_BLOCK_RUNTIME; -set count dynEntVisData1_0 gfxSceneDynBrushCount; -set block dynEntVisData1_1 XFILE_BLOCK_RUNTIME; -set count dynEntVisData1_1 gfxSceneDynBrushCount; -set block dynEntVisData1_2 XFILE_BLOCK_RUNTIME; -set count dynEntVisData1_2 gfxSceneDynBrushCount; -set block dynEntVisData1_3 XFILE_BLOCK_RUNTIME; -set count dynEntVisData1_3 gfxSceneDynBrushCount; -set block dynEntCellBits0 XFILE_BLOCK_RUNTIME; -set count dynEntCellBits0 (cellCount * gfxSceneDynModelCount / 8) + 1; -set block dynEntCellBits1 XFILE_BLOCK_RUNTIME; -set count dynEntCellBits1 (cellCount * gfxSceneDynBrushCount / 8) + 1; -set block dynEntSortList0 XFILE_BLOCK_RUNTIME; -set count dynEntSortList0 gfxSceneDynModelCount; -set block dynEntSortList1 XFILE_BLOCK_RUNTIME; -set count dynEntSortList1 gfxSceneDynBrushCount; -set block unknownGfxDynEntCellRef0 XFILE_BLOCK_RUNTIME; -set count unknownGfxDynEntCellRef0 unknownGfxDynEntCellRefCount0; -set block unknownGfxDynEntCellRef1 XFILE_BLOCK_RUNTIME; -set count unknownGfxDynEntCellRef1 unknownGfxDynEntCellRefCount1; -set block gfxSceneDynModel XFILE_BLOCK_RUNTIME; -set count gfxSceneDynModel gfxSceneDynModelCount; -set block gfxSceneDynBrush XFILE_BLOCK_RUNTIME; -set count gfxSceneDynBrush gfxSceneDynBrushCount; +set block dynEntVisData XFILE_BLOCK_RUNTIME; +set count dynEntVisData[0][0] dynEntClientCount[0]; +set count dynEntVisData[0][1] dynEntClientCount[0]; +set count dynEntVisData[0][2] dynEntClientCount[0]; +set count dynEntVisData[0][3] dynEntClientCount[0]; +set count dynEntVisData[1][1] dynEntClientCount[1]; +set count dynEntVisData[1][0] dynEntClientCount[1]; +set count dynEntVisData[1][2] dynEntClientCount[1]; +set count dynEntVisData[1][3] dynEntClientCount[1]; +set block dynEntCellBits XFILE_BLOCK_RUNTIME; +set count dynEntCellBits[0] (cellCount * dynEntClientCount[0] / 8) + 1; +set count dynEntCellBits[1] (cellCount * dynEntClientCount[1] / 8) + 1; +set block dynEntSortList XFILE_BLOCK_RUNTIME; +set count dynEntSortList[0] dynEntClientCount[0]; +set count dynEntSortList[1] dynEntClientCount[1]; +set block unknownGfxDynEntCellRef XFILE_BLOCK_RUNTIME; +set count unknownGfxDynEntCellRef[0] unknownGfxDynEntCellRefCount[0]; +set count unknownGfxDynEntCellRef[1] unknownGfxDynEntCellRefCount[1]; +set block sceneDynModel XFILE_BLOCK_RUNTIME; +set count sceneDynModel dynEntClientCount[0]; +set block sceneDynBrush XFILE_BLOCK_RUNTIME; +set count sceneDynBrush dynEntClientCount[1]; set count sortedSurfIndex models::surfaceCount; set block primaryLightEntityShadowVis XFILE_BLOCK_RUNTIME; set count primaryLightEntityShadowVis (primaryLightCount - sunPrimaryLightIndex - 1) * 0x1000; -set block primaryLightDynEntShadowVis0 XFILE_BLOCK_RUNTIME; -set count primaryLightDynEntShadowVis0 gfxSceneDynModelCount * (primaryLightCount - sunPrimaryLightIndex - 1); -set block primaryLightDynEntShadowVis1 XFILE_BLOCK_RUNTIME; -set count primaryLightDynEntShadowVis1 gfxSceneDynBrushCount * (primaryLightCount - sunPrimaryLightIndex - 1); +set block primaryLightDynEntShadowVis XFILE_BLOCK_RUNTIME; +set count primaryLightDynEntShadowVis[0] dynEntClientCount[0] * (primaryLightCount - sunPrimaryLightIndex - 1); +set count primaryLightDynEntShadowVis[1] dynEntClientCount[1] * (primaryLightCount - sunPrimaryLightIndex - 1); set count shadowGeom primaryLightCount; set count massiveAdSurface massiveAdSurfaceCount; reorder: @@ -123,25 +112,14 @@ reorder: surfaceCastsSunShadow cellCasterBits cellHasSunLitSurfsBits - dynEntVisData0_0 - dynEntVisData1_0 - dynEntVisData0_1 - dynEntVisData1_1 - dynEntVisData0_2 - dynEntVisData1_2 - dynEntVisData0_3 - dynEntVisData1_3 - dynEntCellBits0 - dynEntCellBits1 - dynEntSortList0 - dynEntSortList1 - unknownGfxDynEntCellRef0 - unknownGfxDynEntCellRef1 - gfxSceneDynModel - gfxSceneDynBrush + dynEntVisData + dynEntCellBits + dynEntSortList + unknownGfxDynEntCellRef + sceneDynModel + sceneDynBrush primaryLightEntityShadowVis - primaryLightDynEntShadowVis0 - primaryLightDynEntShadowVis1 + primaryLightDynEntShadowVis sortedSurfIndex shadowGeom massiveAdSurface diff --git a/src/ZoneCode/Game/T5/XAssets/GfxWorld.txt b/src/ZoneCode/Game/T5/XAssets/GfxWorld.txt index c2eded82..827f0b80 100644 --- a/src/ZoneCode/Game/T5/XAssets/GfxWorld.txt +++ b/src/ZoneCode/Game/T5/XAssets/GfxWorld.txt @@ -148,10 +148,10 @@ set count dynEntCellBits[0] dynEntClientWordCount[0] * GfxWorld::dpvsPlanes::cel set count dynEntCellBits[1] dynEntClientWordCount[1] * GfxWorld::dpvsPlanes::cellCount; set block dynEntVisData XFILE_BLOCK_RUNTIME; set count dynEntVisData[0][0] 32 * dynEntClientWordCount[0]; -set count dynEntVisData[1][0] 32 * dynEntClientWordCount[1]; set count dynEntVisData[0][1] 32 * dynEntClientWordCount[0]; -set count dynEntVisData[1][1] 32 * dynEntClientWordCount[1]; set count dynEntVisData[0][2] 32 * dynEntClientWordCount[0]; +set count dynEntVisData[1][1] 32 * dynEntClientWordCount[1]; +set count dynEntVisData[1][0] 32 * dynEntClientWordCount[1]; set count dynEntVisData[1][2] 32 * dynEntClientWordCount[1]; // GfxWaterBuffer