mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-08 17:44:56 +00:00
Initial PATH cooking support
This commit is contained in:
@@ -11,7 +11,7 @@ struct AFSM : public BigDNA
|
||||
{
|
||||
AT_DECL_DNA_YAML
|
||||
Value<atUint32> stateCount;
|
||||
Vector<String<-1>, DNA_COUNT(stateCount)> stateNames;
|
||||
Vector<String<-1>, AT_DNA_COUNT(stateCount)> stateNames;
|
||||
Value<atUint32> triggerCount;
|
||||
|
||||
struct State : public BigDNA
|
||||
@@ -31,11 +31,11 @@ struct AFSM : public BigDNA
|
||||
Value<float> parameter;
|
||||
Value<atUint32> targetState;
|
||||
};
|
||||
Vector<Trigger, DNA_COUNT(triggerCount)> triggers;
|
||||
Vector<Trigger, AT_DNA_COUNT(triggerCount)> triggers;
|
||||
};
|
||||
Vector<Transition, DNA_COUNT(transitionCount)> transitions;
|
||||
Vector<Transition, AT_DNA_COUNT(transitionCount)> transitions;
|
||||
};
|
||||
Vector<State, DNA_COUNT(stateCount)> states;
|
||||
Vector<State, AT_DNA_COUNT(stateCount)> states;
|
||||
|
||||
static bool Extract(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath)
|
||||
{
|
||||
|
||||
@@ -99,7 +99,7 @@ struct ANCS : BigDNA
|
||||
};
|
||||
std::vector<AnimInfo> animInfos;
|
||||
};
|
||||
Vector<AnimState, DNA_COUNT(animStateCount)> animStates;
|
||||
Vector<AnimState, AT_DNA_COUNT(animStateCount)> animStates;
|
||||
} pasDatabase;
|
||||
|
||||
struct ParticleResData
|
||||
@@ -136,7 +136,7 @@ struct ANCS : BigDNA
|
||||
Value<atUint32> parentMode;
|
||||
Value<atUint32> flags;
|
||||
};
|
||||
Vector<EffectComponent, DNA_COUNT(compCount)> comps;
|
||||
Vector<EffectComponent, AT_DNA_COUNT(compCount)> comps;
|
||||
};
|
||||
std::vector<Effect> effects;
|
||||
|
||||
@@ -145,7 +145,7 @@ struct ANCS : BigDNA
|
||||
|
||||
std::vector<atUint32> animIdxs;
|
||||
};
|
||||
Vector<CharacterInfo, DNA_COUNT(characterCount)> characters;
|
||||
Vector<CharacterInfo, AT_DNA_COUNT(characterCount)> characters;
|
||||
} characterSet;
|
||||
|
||||
struct AnimationSet : BigDNA
|
||||
@@ -262,7 +262,7 @@ struct ANCS : BigDNA
|
||||
MetaAnimFactory anim;
|
||||
Value<atUint32> probability;
|
||||
};
|
||||
Vector<Child, DNA_COUNT(animCount)> children;
|
||||
Vector<Child, AT_DNA_COUNT(animCount)> children;
|
||||
|
||||
void gatherPrimitives(std::map<atUint32, DNAANCS::AnimationResInfo<UniqueID32>>& out)
|
||||
{
|
||||
@@ -284,7 +284,7 @@ struct ANCS : BigDNA
|
||||
AT_DECL_DNA_YAML
|
||||
AT_DECL_DNAV
|
||||
Value<atUint32> animCount;
|
||||
Vector<MetaAnimFactory, DNA_COUNT(animCount)> children;
|
||||
Vector<MetaAnimFactory, AT_DNA_COUNT(animCount)> children;
|
||||
|
||||
void gatherPrimitives(std::map<atUint32, DNAANCS::AnimationResInfo<UniqueID32>>& out)
|
||||
{
|
||||
|
||||
@@ -18,12 +18,12 @@ struct CINF : BigDNA
|
||||
Value<atUint32> parentId;
|
||||
Value<atVec3f> origin;
|
||||
Value<atUint32> linkedCount;
|
||||
Vector<atUint32, DNA_COUNT(linkedCount)> linked;
|
||||
Vector<atUint32, AT_DNA_COUNT(linkedCount)> linked;
|
||||
};
|
||||
Vector<Bone, DNA_COUNT(boneCount)> bones;
|
||||
Vector<Bone, AT_DNA_COUNT(boneCount)> bones;
|
||||
|
||||
Value<atUint32> boneIdCount;
|
||||
Vector<atUint32, DNA_COUNT(boneIdCount)> boneIds;
|
||||
Vector<atUint32, AT_DNA_COUNT(boneIdCount)> boneIds;
|
||||
|
||||
Value<atUint32> nameCount;
|
||||
struct Name : BigDNA
|
||||
@@ -32,7 +32,7 @@ struct CINF : BigDNA
|
||||
String<-1> name;
|
||||
Value<atUint32> boneId;
|
||||
};
|
||||
Vector<Name, DNA_COUNT(nameCount)> names;
|
||||
Vector<Name, AT_DNA_COUNT(nameCount)> names;
|
||||
|
||||
atUint32 getInternalBoneIdxFromId(atUint32 id) const;
|
||||
atUint32 getBoneIdxFromId(atUint32 id) const;
|
||||
|
||||
@@ -18,9 +18,9 @@ struct MaterialSet : BigDNA
|
||||
{
|
||||
AT_DECL_DNA
|
||||
Value<atUint32> textureCount = 0;
|
||||
Vector<UniqueID32, DNA_COUNT(textureCount)> textureIDs;
|
||||
Vector<UniqueID32, AT_DNA_COUNT(textureCount)> textureIDs;
|
||||
Value<atUint32> materialCount = 0;
|
||||
Vector<atUint32, DNA_COUNT(materialCount)> materialEndOffs;
|
||||
Vector<atUint32, AT_DNA_COUNT(materialCount)> materialEndOffs;
|
||||
|
||||
void addTexture(const UniqueID32& id) {textureIDs.push_back(id); ++textureCount;}
|
||||
void addMaterialEndOff(atUint32 off) {materialEndOffs.push_back(off); ++materialCount;}
|
||||
@@ -59,7 +59,7 @@ struct MaterialSet : BigDNA
|
||||
const Flags& getFlags() const {return flags;}
|
||||
|
||||
Value<atUint32> textureCount = 0;
|
||||
Vector<atUint32, DNA_COUNT(textureCount)> textureIdxs;
|
||||
Vector<atUint32, AT_DNA_COUNT(textureCount)> textureIdxs;
|
||||
struct VAFlags : BigDNA
|
||||
{
|
||||
AT_DECL_DNA
|
||||
@@ -132,13 +132,13 @@ struct MaterialSet : BigDNA
|
||||
const VAFlags& getVAFlags() const {return vaFlags;}
|
||||
Value<atUint32> groupIdx;
|
||||
|
||||
Vector<atUint32, DNA_COUNT(flags.konstValuesEnabled())> konstCount;
|
||||
Vector<GX::Color, DNA_COUNT(flags.konstValuesEnabled() ? konstCount[0] : 0)> konstColors;
|
||||
Vector<atUint32, AT_DNA_COUNT(flags.konstValuesEnabled())> konstCount;
|
||||
Vector<GX::Color, AT_DNA_COUNT(flags.konstValuesEnabled() ? konstCount[0] : 0)> konstColors;
|
||||
|
||||
using BlendFactor = GX::BlendFactor;
|
||||
Value<BlendFactor> blendDstFac;
|
||||
Value<BlendFactor> blendSrcFac;
|
||||
Vector<atUint32, DNA_COUNT(flags.samusReflectionIndirectTexture())> indTexSlot;
|
||||
Vector<atUint32, AT_DNA_COUNT(flags.samusReflectionIndirectTexture())> indTexSlot;
|
||||
|
||||
Value<atUint32> colorChannelCount = 0;
|
||||
struct ColorChannel : BigDNA
|
||||
@@ -158,7 +158,7 @@ struct MaterialSet : BigDNA
|
||||
GX::AttnFn attenuationFn() const {return GX::AttnFn(flags >> 13 & 0x3);}
|
||||
void setAttenuationFn(GX::AttnFn fn) {flags &= ~0x6000; flags |= atUint32(fn) << 13;}
|
||||
};
|
||||
Vector<ColorChannel, DNA_COUNT(colorChannelCount)> colorChannels;
|
||||
Vector<ColorChannel, AT_DNA_COUNT(colorChannelCount)> colorChannels;
|
||||
|
||||
Value<atUint32> tevStageCount = 0;
|
||||
struct TEVStage : BigDNA
|
||||
@@ -218,7 +218,7 @@ struct MaterialSet : BigDNA
|
||||
GX::TevKAlphaSel kAlphaIn() const {return GX::TevKAlphaSel(kaInput);}
|
||||
void setKAlphaIn(GX::TevKAlphaSel val) {kaInput = val;}
|
||||
};
|
||||
Vector<TEVStage, DNA_COUNT(tevStageCount)> tevStages;
|
||||
Vector<TEVStage, AT_DNA_COUNT(tevStageCount)> tevStages;
|
||||
struct TEVStageTexInfo : BigDNA
|
||||
{
|
||||
AT_DECL_DNA
|
||||
@@ -226,7 +226,7 @@ struct MaterialSet : BigDNA
|
||||
Value<atUint8> texSlot = 0xff;
|
||||
Value<atUint8> tcgSlot = 0xff;
|
||||
};
|
||||
Vector<TEVStageTexInfo, DNA_COUNT(tevStageCount)> tevStageTexInfo;
|
||||
Vector<TEVStageTexInfo, AT_DNA_COUNT(tevStageCount)> tevStageTexInfo;
|
||||
|
||||
Value<atUint32> tcgCount = 0;
|
||||
struct TexCoordGen : BigDNA
|
||||
@@ -245,7 +245,7 @@ struct MaterialSet : BigDNA
|
||||
GX::PTTexMtx postMtx() const {return GX::PTTexMtx((flags >> 15 & 0x3f) + 64);}
|
||||
void setPostMtx(GX::PTTexMtx val) {flags &= ~0x1f8000; flags |= (atUint32(val)-64) << 15;}
|
||||
};
|
||||
Vector<TexCoordGen, DNA_COUNT(tcgCount)> tcgs;
|
||||
Vector<TexCoordGen, AT_DNA_COUNT(tcgCount)> tcgs;
|
||||
|
||||
Value<atUint32> uvAnimsSize = 4;
|
||||
Value<atUint32> uvAnimsCount = 0;
|
||||
@@ -270,7 +270,7 @@ struct MaterialSet : BigDNA
|
||||
UVAnimation(const std::string& gameFunction,
|
||||
const std::vector<atVec4f>& gameArgs);
|
||||
};
|
||||
Vector<UVAnimation, DNA_COUNT(uvAnimsCount)> uvAnims;
|
||||
Vector<UVAnimation, AT_DNA_COUNT(uvAnimsCount)> uvAnims;
|
||||
|
||||
static void AddTexture(hecl::blender::PyOutStream& out,
|
||||
GX::TexGenSrc type, int mtxIdx, uint32_t texIdx);
|
||||
@@ -293,7 +293,7 @@ struct MaterialSet : BigDNA
|
||||
bool matrixSkinning,
|
||||
atUint32 grpIdx);
|
||||
};
|
||||
Vector<Material, DNA_COUNT(head.materialCount)> materials;
|
||||
Vector<Material, AT_DNA_COUNT(head.materialCount)> materials;
|
||||
|
||||
static void RegisterMaterialProps(hecl::blender::PyOutStream& out);
|
||||
static void ConstructMaterial(hecl::blender::PyOutStream& out,
|
||||
@@ -366,13 +366,13 @@ struct HMDLMaterialSet : BigDNA
|
||||
MaterialSet::Material::Flags flags;
|
||||
|
||||
Value<atUint32> textureCount = 0;
|
||||
Vector<atUint32, DNA_COUNT(textureCount)> textureIdxs;
|
||||
Vector<atUint32, AT_DNA_COUNT(textureCount)> textureIdxs;
|
||||
|
||||
Vector<atUint32, DNA_COUNT(flags.samusReflectionIndirectTexture())> indTexSlot;
|
||||
Vector<atUint32, AT_DNA_COUNT(flags.samusReflectionIndirectTexture())> indTexSlot;
|
||||
|
||||
Value<atUint32> uvAnimsSize = 4;
|
||||
Value<atUint32> uvAnimsCount = 0;
|
||||
Vector<MaterialSet::Material::UVAnimation, DNA_COUNT(uvAnimsCount)> uvAnims;
|
||||
Vector<MaterialSet::Material::UVAnimation, AT_DNA_COUNT(uvAnimsCount)> uvAnims;
|
||||
|
||||
String<-1> heclSource;
|
||||
hecl::Frontend::IR heclIr;
|
||||
@@ -384,7 +384,7 @@ struct HMDLMaterialSet : BigDNA
|
||||
const std::unordered_map<std::string, int32_t>& iprops,
|
||||
const std::vector<hecl::ProjectPath>& texPaths);
|
||||
};
|
||||
Vector<Material, DNA_COUNT(head.materialCount)> materials;
|
||||
Vector<Material, AT_DNA_COUNT(head.materialCount)> materials;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -21,10 +21,10 @@ struct CSKR : BigDNA
|
||||
Value<atUint32> boneId;
|
||||
Value<float> weight;
|
||||
};
|
||||
Vector<Weight, DNA_COUNT(weightCount)> weights;
|
||||
Vector<Weight, AT_DNA_COUNT(weightCount)> weights;
|
||||
Value<atUint32> vertCount;
|
||||
};
|
||||
Vector<SkinningRule, DNA_COUNT(skinningRuleCount)> skinningRules;
|
||||
Vector<SkinningRule, AT_DNA_COUNT(skinningRuleCount)> skinningRules;
|
||||
|
||||
const atInt16* getMatrixBank(size_t) const
|
||||
{
|
||||
|
||||
@@ -30,19 +30,19 @@ struct DCLN : BigDNA
|
||||
Value<atUint32> version;
|
||||
Value<atUint32> memSize;
|
||||
Value<atUint32> materialCount;
|
||||
Vector<Material, DNA_COUNT(materialCount)> materials;
|
||||
Vector<Material, AT_DNA_COUNT(materialCount)> materials;
|
||||
Value<atUint32> vertMatsCount;
|
||||
Vector<atUint8, DNA_COUNT(vertMatsCount)> vertMats;
|
||||
Vector<atUint8, AT_DNA_COUNT(vertMatsCount)> vertMats;
|
||||
Value<atUint32> edgeMatsCount;
|
||||
Vector<atUint8, DNA_COUNT(edgeMatsCount)> edgeMats;
|
||||
Vector<atUint8, AT_DNA_COUNT(edgeMatsCount)> edgeMats;
|
||||
Value<atUint32> triMatsCount;
|
||||
Vector<atUint8, DNA_COUNT(triMatsCount)> triMats;
|
||||
Vector<atUint8, AT_DNA_COUNT(triMatsCount)> triMats;
|
||||
Value<atUint32> edgeVertsCount;
|
||||
Vector<Edge, DNA_COUNT(edgeVertsCount)> edgeVertConnections;
|
||||
Vector<Edge, AT_DNA_COUNT(edgeVertsCount)> edgeVertConnections;
|
||||
Value<atUint32> triangleEdgesCount;
|
||||
Vector<Triangle, DNA_COUNT(triangleEdgesCount / 3)> triangleEdgeConnections;
|
||||
Vector<Triangle, AT_DNA_COUNT(triangleEdgesCount / 3)> triangleEdgeConnections;
|
||||
Value<atUint32> vertCount;
|
||||
Vector<atVec3f, DNA_COUNT(vertCount)> verts;
|
||||
Vector<atVec3f, AT_DNA_COUNT(vertCount)> verts;
|
||||
|
||||
struct Node : BigDNA
|
||||
{
|
||||
@@ -52,7 +52,7 @@ struct DCLN : BigDNA
|
||||
{
|
||||
AT_DECL_DNA
|
||||
Value<atUint32> triangleIndexCount;
|
||||
Vector<atUint16, DNA_COUNT(triangleIndexCount)> triangleIndices;
|
||||
Vector<atUint16, AT_DNA_COUNT(triangleIndexCount)> triangleIndices;
|
||||
size_t getMemoryUsage() const { return (((triangleIndices.size() * 2) + 16) + 3) & ~3; }
|
||||
};
|
||||
|
||||
@@ -92,7 +92,7 @@ struct DCLN : BigDNA
|
||||
};
|
||||
|
||||
|
||||
Vector<Collision, DNA_COUNT(colCount)> collision;
|
||||
Vector<Collision, AT_DNA_COUNT(colCount)> collision;
|
||||
|
||||
void sendToBlender(hecl::blender::Connection& conn, std::string_view entryName);
|
||||
|
||||
|
||||
@@ -124,21 +124,21 @@ struct DeafBabe : BigDNA
|
||||
Value<atVec3f> aabb[2];
|
||||
Value<BspNodeType> rootNodeType;
|
||||
Value<atUint32> bspSize;
|
||||
Buffer<DNA_COUNT(bspSize)> bspTree;
|
||||
Buffer<AT_DNA_COUNT(bspSize)> bspTree;
|
||||
Value<atUint32> materialCount;
|
||||
Vector<Material, DNA_COUNT(materialCount)> materials;
|
||||
Vector<Material, AT_DNA_COUNT(materialCount)> materials;
|
||||
Value<atUint32> vertMatsCount;
|
||||
Vector<atUint8, DNA_COUNT(vertMatsCount)> vertMats;
|
||||
Vector<atUint8, AT_DNA_COUNT(vertMatsCount)> vertMats;
|
||||
Value<atUint32> edgeMatsCount;
|
||||
Vector<atUint8, DNA_COUNT(edgeMatsCount)> edgeMats;
|
||||
Vector<atUint8, AT_DNA_COUNT(edgeMatsCount)> edgeMats;
|
||||
Value<atUint32> triMatsCount;
|
||||
Vector<atUint8, DNA_COUNT(triMatsCount)> triMats;
|
||||
Vector<atUint8, AT_DNA_COUNT(triMatsCount)> triMats;
|
||||
Value<atUint32> edgeVertsCount;
|
||||
Vector<Edge, DNA_COUNT(edgeVertsCount)> edgeVertConnections;
|
||||
Vector<Edge, AT_DNA_COUNT(edgeVertsCount)> edgeVertConnections;
|
||||
Value<atUint32> triangleEdgesCount;
|
||||
Vector<Triangle, DNA_COUNT(triangleEdgesCount / 3)> triangleEdgeConnections;
|
||||
Vector<Triangle, AT_DNA_COUNT(triangleEdgesCount / 3)> triangleEdgeConnections;
|
||||
Value<atUint32> vertCount;
|
||||
Vector<atVec3f, DNA_COUNT(vertCount)> verts;
|
||||
Vector<atVec3f, AT_DNA_COUNT(vertCount)> verts;
|
||||
|
||||
/* Dummy MP2 member */
|
||||
void insertNoClimb(hecl::blender::PyOutStream&) const {}
|
||||
|
||||
@@ -48,7 +48,7 @@ struct EVNT : BigDNA
|
||||
Value<atUint8> value;
|
||||
};
|
||||
Value<atUint32> boolPOICount;
|
||||
Vector<BoolPOINode, DNA_COUNT(boolPOICount)> boolPOINodes;
|
||||
Vector<BoolPOINode, AT_DNA_COUNT(boolPOICount)> boolPOINodes;
|
||||
|
||||
struct Int32POINode : POINode
|
||||
{
|
||||
@@ -57,7 +57,7 @@ struct EVNT : BigDNA
|
||||
String<-1> locator;
|
||||
};
|
||||
Value<atUint32> int32POICount;
|
||||
Vector<Int32POINode, DNA_COUNT(int32POICount)> int32POINodes;
|
||||
Vector<Int32POINode, AT_DNA_COUNT(int32POICount)> int32POINodes;
|
||||
|
||||
struct ParticlePOINode : POINode
|
||||
{
|
||||
@@ -70,7 +70,7 @@ struct EVNT : BigDNA
|
||||
Value<atUint32> parentMode;
|
||||
};
|
||||
Value<atUint32> particlePOICount;
|
||||
Vector<ParticlePOINode, DNA_COUNT(particlePOICount)> particlePOINodes;
|
||||
Vector<ParticlePOINode, AT_DNA_COUNT(particlePOICount)> particlePOINodes;
|
||||
|
||||
struct SoundPOINode : POINode
|
||||
{
|
||||
@@ -80,7 +80,7 @@ struct EVNT : BigDNA
|
||||
Value<float> maxDist;
|
||||
};
|
||||
Value<atUint32> soundPOICount;
|
||||
Vector<SoundPOINode, DNA_COUNT(soundPOICount)> soundPOINodes;
|
||||
Vector<SoundPOINode, AT_DNA_COUNT(soundPOICount)> soundPOINodes;
|
||||
|
||||
static bool Extract(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath)
|
||||
{
|
||||
|
||||
@@ -296,15 +296,15 @@ struct FRME : BigDNA
|
||||
Value<atUint32> unk1;
|
||||
Value<atUint32> unk2;
|
||||
Value<atUint32> quadCoordCount;
|
||||
Vector<atVec3f, DNA_COUNT(quadCoordCount)> quadCoords;
|
||||
Vector<atVec3f, AT_DNA_COUNT(quadCoordCount)> quadCoords;
|
||||
Value<atUint32> uvCoordCount;
|
||||
Vector<atVec2f, DNA_COUNT(uvCoordCount)> uvCoords;
|
||||
Vector<atVec2f, AT_DNA_COUNT(uvCoordCount)> uvCoords;
|
||||
|
||||
FourCC fourcc() const { return FOURCC('IMGP'); }
|
||||
};
|
||||
};
|
||||
|
||||
Vector<Widget, DNA_COUNT(widgetCount)> widgets;
|
||||
Vector<Widget, AT_DNA_COUNT(widgetCount)> widgets;
|
||||
static bool Extract(const SpecBase& dataSpec,
|
||||
PAKEntryReadStream& rs,
|
||||
const hecl::ProjectPath& outPath,
|
||||
|
||||
@@ -30,10 +30,10 @@ struct HINT : BigDNA
|
||||
};
|
||||
|
||||
Value<atUint32> locationCount;
|
||||
Vector<Location, DNA_COUNT(locationCount)> locations;
|
||||
Vector<Location, AT_DNA_COUNT(locationCount)> locations;
|
||||
};
|
||||
Value<atUint32> hintCount;
|
||||
Vector<Hint, DNA_COUNT(hintCount)> hints;
|
||||
Vector<Hint, AT_DNA_COUNT(hintCount)> hints;
|
||||
|
||||
|
||||
static bool Extract(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath)
|
||||
|
||||
@@ -314,7 +314,8 @@ bool MLVL::Cook(const hecl::ProjectPath& outPath, const hecl::ProjectPath& inPat
|
||||
}
|
||||
}
|
||||
|
||||
urde::SObjectTag pathTag = g_curSpec->buildTagFromPath(areaPath.ensureAuxInfo(_S("PATH")), btok);
|
||||
hecl::ProjectPath pathPath(areaPath.getParentPath(), _S("!path.blend"));
|
||||
urde::SObjectTag pathTag = g_curSpec->buildTagFromPath(pathPath, btok);
|
||||
if (pathTag.id.IsValid())
|
||||
areaOut.deps.emplace_back(pathTag.id.Value(), pathTag.type);
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ struct MLVL : BigDNA
|
||||
Value<atUint16> msg;
|
||||
Value<bool> active;
|
||||
};
|
||||
Vector<MemRelayLink, DNA_COUNT(memRelayLinkCount)> memRelayLinks;
|
||||
Vector<MemRelayLink, AT_DNA_COUNT(memRelayLinkCount)> memRelayLinks;
|
||||
|
||||
Value<atUint32> areaCount;
|
||||
Value<atUint32> unknown1;
|
||||
@@ -40,7 +40,7 @@ struct MLVL : BigDNA
|
||||
Value<atUint32> areaId;
|
||||
|
||||
Value<atUint32> attachedAreaCount;
|
||||
Vector<atUint16, DNA_COUNT(attachedAreaCount)> attachedAreas;
|
||||
Vector<atUint16, AT_DNA_COUNT(attachedAreaCount)> attachedAreas;
|
||||
Value<atUint32> padding;
|
||||
|
||||
Value<atUint32> depCount;
|
||||
@@ -54,10 +54,10 @@ struct MLVL : BigDNA
|
||||
Dependency(const UniqueID32& idin, const hecl::FourCC& fcc)
|
||||
: id(idin), type(fcc) {}
|
||||
};
|
||||
Vector<Dependency, DNA_COUNT(depCount)> deps;
|
||||
Vector<Dependency, AT_DNA_COUNT(depCount)> deps;
|
||||
|
||||
Value<atUint32> depLayerCount;
|
||||
Vector<atUint32, DNA_COUNT(depLayerCount)> depLayers;
|
||||
Vector<atUint32, AT_DNA_COUNT(depLayerCount)> depLayers;
|
||||
|
||||
Value<atUint32> dockCount;
|
||||
struct Dock : BigDNA
|
||||
@@ -70,14 +70,14 @@ struct MLVL : BigDNA
|
||||
Value<atUint32> areaIdx;
|
||||
Value<atUint32> dockIdx;
|
||||
};
|
||||
Vector<Endpoint, DNA_COUNT(endpointCount)> endpoints;
|
||||
Vector<Endpoint, AT_DNA_COUNT(endpointCount)> endpoints;
|
||||
|
||||
Value<atUint32> planeVertCount;
|
||||
Vector<atVec3f, DNA_COUNT(planeVertCount)> planeVerts;
|
||||
Vector<atVec3f, AT_DNA_COUNT(planeVertCount)> planeVerts;
|
||||
};
|
||||
Vector<Dock, DNA_COUNT(dockCount)> docks;
|
||||
Vector<Dock, AT_DNA_COUNT(dockCount)> docks;
|
||||
};
|
||||
Vector<Area, DNA_COUNT(areaCount)> areas;
|
||||
Vector<Area, AT_DNA_COUNT(areaCount)> areas;
|
||||
|
||||
void finishLastArea()
|
||||
{
|
||||
@@ -102,7 +102,7 @@ struct MLVL : BigDNA
|
||||
Value<atUint32> groupId;
|
||||
UniqueID32 agscId;
|
||||
};
|
||||
Vector<AudioGroup, DNA_COUNT(audioGroupCount)> audioGroups;
|
||||
Vector<AudioGroup, AT_DNA_COUNT(audioGroupCount)> audioGroups;
|
||||
String<-1> unkString;
|
||||
|
||||
Value<atUint32> layerFlagCount;
|
||||
@@ -112,13 +112,13 @@ struct MLVL : BigDNA
|
||||
Value<atUint32> layerCount;
|
||||
Value<atUint64> flags;
|
||||
};
|
||||
Vector<LayerFlags, DNA_COUNT(layerFlagCount)> layerFlags;
|
||||
Vector<LayerFlags, AT_DNA_COUNT(layerFlagCount)> layerFlags;
|
||||
|
||||
Value<atUint32> layerNameCount;
|
||||
Vector<String<-1>, DNA_COUNT(layerNameCount)> layerNames;
|
||||
Vector<String<-1>, AT_DNA_COUNT(layerNameCount)> layerNames;
|
||||
|
||||
Value<atUint32> layerNameOffsetCount;
|
||||
Vector<atUint32, DNA_COUNT(layerNameOffsetCount)> layerNameOffsets;
|
||||
Vector<atUint32, AT_DNA_COUNT(layerNameOffsetCount)> layerNameOffsets;
|
||||
|
||||
void readMeta(athena::io::YAMLDocReader& __dna_docin)
|
||||
{
|
||||
|
||||
@@ -798,7 +798,8 @@ bool MREA::PCCook(const hecl::ProjectPath& outPath,
|
||||
|
||||
/* PATH */
|
||||
{
|
||||
UniqueID32 pathId = inPath.ensureAuxInfo(_S("PATH"));
|
||||
hecl::ProjectPath pathPath(inPath.getParentPath(), _S("!path.blend"));
|
||||
UniqueID32 pathId = pathPath;
|
||||
secs.emplace_back(4, 0);
|
||||
athena::io::MemoryWriter w(secs.back().data(), secs.back().size());
|
||||
pathId.write(w);
|
||||
@@ -826,31 +827,4 @@ bool MREA::PCCook(const hecl::ProjectPath& outPath,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MREA::CookPath(const hecl::ProjectPath& outPath,
|
||||
const hecl::ProjectPath& inPath)
|
||||
{
|
||||
PATH path = {};
|
||||
path.version = 4;
|
||||
path.octreeNodeCount = 1;
|
||||
path.octree.emplace_back();
|
||||
PATH::OctreeNode& s = path.octree.back();
|
||||
s.isLeaf = 1;
|
||||
s.points[0] = atVec3f{FLT_MAX, FLT_MAX, FLT_MAX};
|
||||
s.points[1] = atVec3f{-FLT_MAX, -FLT_MAX, -FLT_MAX};
|
||||
s.points[2] = atVec3f{0.f, 0.f, 0.f};
|
||||
for (int i=0 ; i<8 ; ++i)
|
||||
s.children[i] = 0xffffffff;
|
||||
s.regionCount = 0;
|
||||
s.regionStart = 0;
|
||||
|
||||
athena::io::FileWriter w(outPath.getAbsolutePath());
|
||||
path.write(w);
|
||||
int64_t rem = w.position() % 32;
|
||||
if (rem)
|
||||
for (int64_t i=0 ; i<32-rem ; ++i)
|
||||
w.writeUByte(0xff);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ struct MREA
|
||||
Value<atUint32> visiSecIdx;
|
||||
Value<atUint32> pathSecIdx;
|
||||
Value<atUint32> arotSecIdx;
|
||||
Vector<atUint32, DNA_COUNT(secCount)> secSizes;
|
||||
Vector<atUint32, AT_DNA_COUNT(secCount)> secSizes;
|
||||
};
|
||||
|
||||
struct MeshHeader : BigDNA
|
||||
@@ -137,9 +137,6 @@ struct MREA
|
||||
const ColMesh& cMesh,
|
||||
const std::vector<Light>& lights,
|
||||
hecl::blender::Token& btok);
|
||||
|
||||
static bool CookPath(const hecl::ProjectPath& outPath,
|
||||
const hecl::ProjectPath& inPath);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ struct PAK : BigDNA
|
||||
DNAFourCC type;
|
||||
UniqueID32 id;
|
||||
Value<atUint32> nameLen;
|
||||
String<DNA_COUNT(nameLen)> name;
|
||||
String<AT_DNA_COUNT(nameLen)> name;
|
||||
};
|
||||
|
||||
struct Entry : BigDNA
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "PATH.hpp"
|
||||
#include "hecl/Blender/Connection.hpp"
|
||||
#include <unordered_set>
|
||||
#include "zeus/CAABox.hpp"
|
||||
#include "../DNACommon/AROTBuilder.hpp"
|
||||
|
||||
namespace DataSpec::DNAMP1
|
||||
{
|
||||
@@ -14,18 +15,41 @@ void PATH::sendToBlender(hecl::blender::Connection& conn, std::string_view entry
|
||||
"import bmesh\n"
|
||||
"from mathutils import Vector, Matrix\n"
|
||||
"\n"
|
||||
"bpy.types.Material.retro_path_idx_mask = bpy.props.IntProperty(name='Retro: Path Index Mask')\n"
|
||||
"bpy.types.Material.retro_path_type_mask = bpy.props.IntProperty(name='Retro: Path Type Mask')\n"
|
||||
"\n"
|
||||
"material_dict = {}\n"
|
||||
"material_index = []\n"
|
||||
"def select_material(data):\n"
|
||||
" if data in material_index:\n"
|
||||
" return material_index.index(data)\n"
|
||||
" elif data in material_dict:\n"
|
||||
" material_index.append(data)\n"
|
||||
"def make_ground_material(idxMask):\n"
|
||||
" mat = bpy.data.materials.new('Ground %%X' %% idxMask)\n"
|
||||
" mat.diffuse_color = (0.8, 0.460, 0.194)\n"
|
||||
" return mat\n"
|
||||
"def make_flyer_material(idxMask):\n"
|
||||
" mat = bpy.data.materials.new('Flyer %%X' %% idxMask)\n"
|
||||
" mat.diffuse_color = (0.016, 0.8, 0.8)\n"
|
||||
" return mat\n"
|
||||
"def make_swimmer_material(idxMask):\n"
|
||||
" mat = bpy.data.materials.new('Swimmer %%X' %% idxMask)\n"
|
||||
" mat.diffuse_color = (0.074, 0.293, 0.8)\n"
|
||||
" return mat\n"
|
||||
"def select_material(meshIdxMask, meshTypeMask):\n"
|
||||
" key = (meshIdxMask, meshTypeMask)\n"
|
||||
" if key in material_index:\n"
|
||||
" return material_index.index(key)\n"
|
||||
" elif key in material_dict:\n"
|
||||
" material_index.append(key)\n"
|
||||
" return len(material_index)-1\n"
|
||||
" else:\n"
|
||||
" mat = bpy.data.materials.new(data)\n"
|
||||
" material_dict[data] = mat\n"
|
||||
" material_index.append(data)\n"
|
||||
" if meshTypeMask == 0x2:\n"
|
||||
" mat = make_flyer_material(meshIdxMask)\n"
|
||||
" elif meshTypeMask == 0x4:\n"
|
||||
" mat = make_swimmer_material(meshIdxMask)\n"
|
||||
" else:\n"
|
||||
" mat = make_ground_material(meshIdxMask)\n"
|
||||
" mat.retro_path_idx_mask = meshIdxMask\n"
|
||||
" mat.retro_path_type_mask = meshTypeMask\n"
|
||||
" material_dict[key] = mat\n"
|
||||
" material_index.append(key)\n"
|
||||
" return len(material_index)-1\n"
|
||||
"\n"
|
||||
"bpy.context.scene.name = '%s'\n"
|
||||
@@ -35,7 +59,8 @@ void PATH::sendToBlender(hecl::blender::Connection& conn, std::string_view entry
|
||||
" bpy.context.scene.objects.unlink(ob)\n"
|
||||
" bpy.data.objects.remove(ob)\n"
|
||||
"\n"
|
||||
"bm = bmesh.new()\n",
|
||||
"bm = bmesh.new()\n"
|
||||
"height_lay = bm.faces.layers.float.new('Height')\n",
|
||||
entryName.data());
|
||||
|
||||
for (const Node& n : nodes)
|
||||
@@ -50,23 +75,38 @@ void PATH::sendToBlender(hecl::blender::Connection& conn, std::string_view entry
|
||||
for (int i=0 ; i<r.nodeCount ; ++i)
|
||||
os.format("tri_verts.append(bm.verts[%u])\n", r.nodeStart + i);
|
||||
|
||||
zeus::CVector3f centroid = r.centroid;
|
||||
if (xf)
|
||||
centroid = xf->multiplyOneOverW(centroid);
|
||||
os.format("face = bm.faces.get(tri_verts)\n"
|
||||
"if face is None:\n"
|
||||
" face = bm.faces.new(tri_verts)\n"
|
||||
" face.normal_flip()\n"
|
||||
"face.material_index = select_material('0x%08X')\n"
|
||||
"face.material_index = select_material(0x%04X, 0x%04X)\n"
|
||||
"face.smooth = False\n"
|
||||
"hobj = bpy.data.objects.new('Height', None)\n"
|
||||
"hobj.location = (%f,%f,%f)\n"
|
||||
"hobj.layers[1] = True\n"
|
||||
"bpy.context.scene.objects.link(hobj)\n"
|
||||
"\n", r.flags, centroid.v[0], centroid.v[1], centroid.v[2] + r.height);
|
||||
"face[height_lay] = %f\n"
|
||||
"\n", r.meshIndexMask, r.meshTypeMask, r.height);
|
||||
|
||||
#if 0
|
||||
zeus::CVector3f center = xf->multiplyOneOverW(r.centroid);
|
||||
zeus::CAABox aabb(xf->multiplyOneOverW(r.aabb[0]), xf->multiplyOneOverW(r.aabb[1]));
|
||||
os.format("aabb = bpy.data.objects.new('AABB', None)\n"
|
||||
"aabb.location = (%f,%f,%f)\n"
|
||||
"aabb.scale = (%f,%f,%f)\n"
|
||||
"aabb.empty_draw_type = 'CUBE'\n"
|
||||
"bpy.context.scene.objects.link(aabb)\n"
|
||||
"centr = bpy.data.objects.new('Center', None)\n"
|
||||
"centr.location = (%f,%f,%f)\n"
|
||||
"bpy.context.scene.objects.link(centr)\n",
|
||||
aabb.min.v[0] + (aabb.max.v[0] - aabb.min.v[0]) / 2.f,
|
||||
aabb.min.v[1] + (aabb.max.v[1] - aabb.min.v[1]) / 2.f,
|
||||
aabb.min.v[2] + (aabb.max.v[2] - aabb.min.v[2]) / 2.f,
|
||||
(aabb.max.v[0] - aabb.min.v[0]) / 2.f,
|
||||
(aabb.max.v[1] - aabb.min.v[1]) / 2.f,
|
||||
(aabb.max.v[2] - aabb.min.v[2]) / 2.f,
|
||||
center.x, center.y, center.z);
|
||||
#endif
|
||||
}
|
||||
|
||||
os << "path_mesh = bpy.data.meshes.new('PATH')\n"
|
||||
os << "bmesh.ops.remove_doubles(bm, verts=bm.verts, dist=0.001)\n"
|
||||
"path_mesh = bpy.data.meshes.new('PATH')\n"
|
||||
"bm.to_mesh(path_mesh)\n"
|
||||
"path_mesh_obj = bpy.data.objects.new(path_mesh.name, path_mesh)\n"
|
||||
"\n"
|
||||
@@ -129,7 +169,11 @@ bool PATH::Cook(const hecl::ProjectPath& outPath,
|
||||
const PathMesh& mesh,
|
||||
hecl::blender::Connection* conn)
|
||||
{
|
||||
athena::io::MemoryReader r(mesh.data.data(), mesh.data.size());
|
||||
PATH path;
|
||||
path.read(r);
|
||||
AROTBuilder octreeBuilder;
|
||||
octreeBuilder.buildPath(path);
|
||||
|
||||
athena::io::FileWriter w(outPath.getAbsolutePath());
|
||||
path.write(w);
|
||||
|
||||
@@ -21,7 +21,7 @@ struct PATH : BigDNA
|
||||
Value<atVec3f> normal;
|
||||
};
|
||||
Value<atUint32> nodeCount;
|
||||
Vector<Node, DNA_COUNT(nodeCount)> nodes;
|
||||
Vector<Node, AT_DNA_COUNT(nodeCount)> nodes;
|
||||
|
||||
struct Link : BigDNA
|
||||
{
|
||||
@@ -32,7 +32,7 @@ struct PATH : BigDNA
|
||||
Value<float> oneOverWidth2d;
|
||||
};
|
||||
Value<atUint32> linkCount;
|
||||
Vector<Link, DNA_COUNT(linkCount)> links;
|
||||
Vector<Link, AT_DNA_COUNT(linkCount)> links;
|
||||
|
||||
struct Region : BigDNA
|
||||
{
|
||||
@@ -41,7 +41,8 @@ struct PATH : BigDNA
|
||||
Value<atUint32> nodeStart;
|
||||
Value<atUint32> linkCount;
|
||||
Value<atUint32> linkStart;
|
||||
Value<atUint32> flags;
|
||||
Value<atUint16> meshIndexMask;
|
||||
Value<atUint16> meshTypeMask;
|
||||
Value<float> height;
|
||||
Value<atVec3f> normal;
|
||||
Value<atUint32> regionIdx;
|
||||
@@ -50,26 +51,27 @@ struct PATH : BigDNA
|
||||
Value<atUint32> regionIdxPtr;
|
||||
};
|
||||
Value<atUint32> regionCount;
|
||||
Vector<Region, DNA_COUNT(regionCount)> regions;
|
||||
Vector<Region, AT_DNA_COUNT(regionCount)> regions;
|
||||
|
||||
Vector<atUint32, DNA_COUNT((((regionCount * (regionCount - 1)) / 2) + 31) / 32)> bitmap1;
|
||||
Vector<atUint32, DNA_COUNT(bitmap1.size())> bitmap2;
|
||||
Vector<atUint32, DNA_COUNT(((((regionCount * regionCount) + 31) / 32) - bitmap1.size()) * 2)> bitmap3;
|
||||
Vector<atUint32, AT_DNA_COUNT((((regionCount * (regionCount - 1)) / 2) + 31) / 32)> bitmap1;
|
||||
Vector<atUint32, AT_DNA_COUNT(bitmap1.size())> bitmap2;
|
||||
Vector<atUint32, AT_DNA_COUNT(((((regionCount * regionCount) + 31) / 32) - bitmap1.size()) * 2)> bitmap3;
|
||||
|
||||
Value<atUint32> octreeRegionLookupCount;
|
||||
Vector<atUint32, DNA_COUNT(octreeRegionLookupCount)> octreeRegionLookup;
|
||||
Vector<atUint32, AT_DNA_COUNT(octreeRegionLookupCount)> octreeRegionLookup;
|
||||
|
||||
struct OctreeNode : BigDNA
|
||||
{
|
||||
AT_DECL_DNA
|
||||
Value<atUint32> isLeaf;
|
||||
Value<atVec3f> points[3];
|
||||
Value<atVec3f> aabb[2];
|
||||
Value<atVec3f> centroid;
|
||||
Value<atUint32> children[8];
|
||||
Value<atUint32> regionCount;
|
||||
Value<atUint32> regionStart;
|
||||
};
|
||||
Value<atUint32> octreeNodeCount;
|
||||
Vector<OctreeNode, DNA_COUNT(octreeNodeCount)> octree;
|
||||
Vector<OctreeNode, AT_DNA_COUNT(octreeNodeCount)> octree;
|
||||
|
||||
void sendToBlender(hecl::blender::Connection& conn, std::string_view entryName,
|
||||
const zeus::CMatrix4f* xf);
|
||||
|
||||
@@ -21,15 +21,15 @@ struct SAVW : BigDNA
|
||||
AT_DECL_DNA_YAML
|
||||
SAVWCommon::Header header;
|
||||
Value<atUint32> skippableCutsceneCount;
|
||||
Vector<atUint32, DNA_COUNT(skippableCutsceneCount)> skippableCutscenes;
|
||||
Vector<atUint32, AT_DNA_COUNT(skippableCutsceneCount)> skippableCutscenes;
|
||||
Value<atUint32> relayCount;
|
||||
Vector<atUint32, DNA_COUNT(relayCount)> relays;
|
||||
Vector<atUint32, AT_DNA_COUNT(relayCount)> relays;
|
||||
Value<atUint32> layerCount;
|
||||
Vector<SAVWCommon::Layer, DNA_COUNT(layerCount)> layers;
|
||||
Vector<SAVWCommon::Layer, AT_DNA_COUNT(layerCount)> layers;
|
||||
Value<atUint32> doorCount;
|
||||
Vector<atUint32, DNA_COUNT(doorCount)> doors;
|
||||
Vector<atUint32, AT_DNA_COUNT(doorCount)> doors;
|
||||
Value<atUint32> scanCount;
|
||||
Vector<Scan, DNA_COUNT(scanCount)> scans;
|
||||
Vector<Scan, AT_DNA_COUNT(scanCount)> scans;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -14,19 +14,19 @@ struct SCLY : BigDNA
|
||||
Value<atUint32> version;
|
||||
Value<atUint32> layerCount;
|
||||
|
||||
Vector<atUint32, DNA_COUNT(layerCount)> layerSizes;
|
||||
Vector<atUint32, AT_DNA_COUNT(layerCount)> layerSizes;
|
||||
|
||||
struct ScriptLayer : BigDNA
|
||||
{
|
||||
AT_DECL_EXPLICIT_DNA_YAML
|
||||
Value<atUint8> unknown;
|
||||
Value<atUint32> objectCount;
|
||||
Vector<std::unique_ptr<IScriptObject>, DNA_COUNT(objectCount)> objects;
|
||||
Vector<std::unique_ptr<IScriptObject>, AT_DNA_COUNT(objectCount)> objects;
|
||||
void addCMDLRigPairs(PAKRouter<PAKBridge>& pakRouter,
|
||||
std::unordered_map<UniqueID32, std::pair<UniqueID32, UniqueID32>>& addTo) const;
|
||||
void nameIDs(PAKRouter<PAKBridge>& pakRouter) const;
|
||||
};
|
||||
Vector<ScriptLayer, DNA_COUNT(layerCount)> layers;
|
||||
Vector<ScriptLayer, AT_DNA_COUNT(layerCount)> layers;
|
||||
|
||||
void exportToLayerDirectories(const PAK::Entry &, PAKRouter<PAKBridge>&, bool) const;
|
||||
void addCMDLRigPairs(PAKRouter<PAKBridge>& pakRouter,
|
||||
|
||||
@@ -37,7 +37,7 @@ struct IScriptObject : BigDNAVYaml
|
||||
};
|
||||
|
||||
Value<atUint32> connectionCount;
|
||||
Vector<Connection, DNA_COUNT(connectionCount)> connections;
|
||||
Vector<Connection, AT_DNA_COUNT(connectionCount)> connections;
|
||||
Value<atUint32> propertyCount;
|
||||
virtual ~IScriptObject() = default;
|
||||
|
||||
|
||||
@@ -383,7 +383,7 @@ struct PlayerParameters : BigDNA
|
||||
{
|
||||
AT_DECL_DNA_YAML
|
||||
Value<atUint32> propertyCount;
|
||||
Vector<bool, DNA_COUNT(propertyCount)> bools;
|
||||
Vector<bool, AT_DNA_COUNT(propertyCount)> bools;
|
||||
};
|
||||
|
||||
struct ActorParameters : BigDNA
|
||||
|
||||
@@ -74,7 +74,7 @@ struct CTweakAutoMapper final : public ITweakAutoMapper
|
||||
DNAColor xf8_;
|
||||
DNAColor xfc_;
|
||||
Value<atUint32> x100_doorColorCount;
|
||||
Vector<DNAColor, DNA_COUNT(x100_doorColorCount)> x104_doorColors;
|
||||
Vector<DNAColor, AT_DNA_COUNT(x100_doorColorCount)> x104_doorColors;
|
||||
DNAColor x118_doorBorderColor;
|
||||
DNAColor x11c_openDoorColor;
|
||||
|
||||
|
||||
@@ -162,7 +162,7 @@ struct CTweakGui final : ITweakGui
|
||||
Value<float> x2bc_hudLightAttMulLinear;
|
||||
Value<float> x2c0_hudLightAttMulQuadratic;
|
||||
Value<atUint32> m_scanSpeedsCount;
|
||||
Vector<float, DNA_COUNT(m_scanSpeedsCount)> x2c4_scanSpeeds;
|
||||
Vector<float, AT_DNA_COUNT(m_scanSpeedsCount)> x2c4_scanSpeeds;
|
||||
String<-1> x2d0_;
|
||||
String<-1> x2e0_;
|
||||
String<-1> x2f0_;
|
||||
|
||||
@@ -133,7 +133,7 @@ struct CTweakGuiColors final : public ITweakGuiColors
|
||||
};
|
||||
Value<atUint32> x1c4_perVisorCount;
|
||||
/* Combat, Scan, XRay, Thermal, Ball */
|
||||
Vector<PerVisorColors, DNA_COUNT(x1c4_perVisorCount)> x1c4_perVisorColors;
|
||||
Vector<PerVisorColors, AT_DNA_COUNT(x1c4_perVisorCount)> x1c4_perVisorColors;
|
||||
|
||||
CTweakGuiColors() = default;
|
||||
CTweakGuiColors(athena::io::IStreamReader& r) { this->read(r); }
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace DataSpec::DNAMP1
|
||||
struct CTweakPlayerControl final : ITweakPlayerControl
|
||||
{
|
||||
AT_DECL_DNA_YAML
|
||||
Vector<atUint32, DNA_COUNT(67)> m_mappings;
|
||||
Vector<atUint32, AT_DNA_COUNT(67)> m_mappings;
|
||||
atUint32 GetMapping(atUint32 command) const {return m_mappings[command];}
|
||||
CTweakPlayerControl() = default;
|
||||
CTweakPlayerControl(athena::io::IStreamReader& reader) {this->read(reader);}
|
||||
|
||||
@@ -62,11 +62,11 @@ struct CTweakTargeting final : public ITweakTargeting
|
||||
{
|
||||
AT_DECL_DNA
|
||||
Value<atUint32> count;
|
||||
Vector<float, DNA_COUNT(count)> floats;
|
||||
Vector<float, AT_DNA_COUNT(count)> floats;
|
||||
};
|
||||
Vector<UnkVec, DNA_COUNT(xf8_outerBeamSquareAngleCount)> xf8_outerBeamSquareAngles;
|
||||
Vector<UnkVec, AT_DNA_COUNT(xf8_outerBeamSquareAngleCount)> xf8_outerBeamSquareAngles;
|
||||
Value<atUint32> x108_chargeGaugeAngleCount;
|
||||
Vector<float, DNA_COUNT(x108_chargeGaugeAngleCount)> x108_chargeGaugeAngles;
|
||||
Vector<float, AT_DNA_COUNT(x108_chargeGaugeAngleCount)> x108_chargeGaugeAngles;
|
||||
Value<float> x118_chargeGaugeScale;
|
||||
DNAColor x11c_chargeGaugeNonFullColor;
|
||||
Value<atUint32> x120_chargeTickCount;
|
||||
|
||||
Reference in New Issue
Block a user