diff --git a/Utils/Libs/TexGrab/VImage.cpp b/Utils/Libs/TexGrab/VImage.cpp index c21746ebe..ae6be3d92 100644 --- a/Utils/Libs/TexGrab/VImage.cpp +++ b/Utils/Libs/TexGrab/VImage.cpp @@ -370,7 +370,7 @@ void VRAMImage::SaveAs16ColLbm(const char * Name) ThisFr.SetFrame(lbmData,W,H,GazPalette); ThisFr.SaveLbm(Name); - cout<<"Written "< ExtraTex; +CMkActor3d ThisActor; +//std::vector ExtraTex; //*************************************************************************** char * CycleCommands(char *String,int Num) { -char Text[256],*TextPtr; +int TPBase=-1,TPWidth=-1,TPHeight=-1; +char Text[2048],*TextPtr; int Count,i; if (String[0]=='-' || String[0]=='/') @@ -51,13 +50,24 @@ int Count,i; TextPtr=Text; strcpy(TextPtr,TpStr); Count=ZeroAndCountCommas(TextPtr); - if (Count!=2) - GObject::Error(ERR_FATAL,"Problem with option %s\n",String); + if (Count!=2) GObject::Error(ERR_FATAL,"Problem with option %s\n",String); TPBase=atol(TextPtr); TextPtr+=strlen(TextPtr)+1; TPWidth=atol(TextPtr); TextPtr+=strlen(TextPtr)+1; TPHeight=atol(TextPtr); + ThisActor.SetTPData(TPBase,TPWidth,TPHeight); + break; + case 'x': + TpStr= CheckFileString(String); + TextPtr=Text; + strcpy(TextPtr,TpStr); + Count=ZeroAndCountCommas(TextPtr); + for (i=0; i [ .. ] [ switches.. ]\n"); + printf("Switches:\n"); + printf(" -o:[FILE] Set output Dir\n"); + printf(" -s:nn Set Scaling value\n"); + printf(" -t:p,w,h Set TPage No,Width,Height\n"); + printf(" -d: Enable Debug output\n"); + printf(" -x: Add Texture\n"); + printf(" -d: Add Anim\n"); + printf(" -q: Enable Quadding\n"); + GObject::Error(ERR_FATAL,ErrStr); +} + +//*************************************************************************** +int main (int argc, char *argv[]) +{ + CommandLine(argc,argv,CycleCommands); + if (OutStr.Empty()) Usage("No Output File Set\n"); + + ThisActor.ProcessActor(); + ThisActor.ProcessAnim(); + + return 0; +} + +//*************************************************************************** +//*************************************************************************** +//*************************************************************************** +void CMkActor3d::SetInName(GString const &String) +{ +GString UpperName(String); + UpperName.Upper(); +GFName File=UpperName; + + InFilename=UpperName; InPath=File.Drive(); InPath+=File.Dir(); - OutDir=Out; - OutDir.Append('\\'); - Name=File.File(); -// Create Out Filename from inFilename and outdir - OutFile=OutDir+File.File(); - + +} + +//*************************************************************************** +void CMkActor3d::SetTPData(int TPBase,int TPW,int TPH) +{ TPageBase=TPBase; TPageWidth=TPW ; TPageHeight=TPH; } //*************************************************************************** -void CMkActor3d::Load() +void CMkActor3d::AddAnim(const char *Name) { + InAnimList.push_back(Name); +} + +//*************************************************************************** +void CMkActor3d::AddTex(const char *Name) +{ + InTexList.push_back(Name); +} + +//*************************************************************************** +void CMkActor3d::ProcessActor() +{ + ThisActor.ActorLoad(); + ThisActor.ActorProcess(); + ThisActor.ActorWrite(); +} + +//*************************************************************************** +void CMkActor3d::ProcessAnim() +{ + ThisActor.AnimLoad(); + ThisActor.AnimWrite(); +} + +//*************************************************************************** +void CMkActor3d::ActorLoad() +{ + OutStr.Upper(); + OutStr.Append('\\'); + OutFile=OutStr+Name; + IncludeFile.Upper(); + IncludeFile.Append('\\'); + IncFile=IncludeFile; + IncFile+="ACTOR_"; + IncFile+=Name; + Scene.Load(InFilename); -// Scene.PrintPruneTree(); } //*************************************************************************** @@ -157,12 +230,11 @@ vector VtxList; int WeightCount=ThisNode.Weights.size(); if (WeightCount) { - printf("%s %i\n",ThisNode.Name,WeightCount); +// printf("%s %i\n",ThisNode.Name,WeightCount); for (int i=0; iSceneTexList.size()) GObject::Error(ERR_FATAL,"Crap Material ID, wanted %i, only have %i\n",Mat,SceneTexList.size()); + ParentBone.FaceList.AddFace( VtxList, NodeTriList[T], NodeUVList[T], SceneTexList[Mat]); } } @@ -198,6 +272,8 @@ void CMkActor3d::BuildSkelOut() { int ListSize=Skel.size(); + BoneCount=Skel.size(); + for (int i=0; i [ .. ] [ switches.. ]\n"); - printf("Switches:\n"); - printf(" -o:[FILE] Set output Dir\n"); - printf(" -s:nn Set Scaling value\n"); - printf(" -t:p,w,h Set TPage No,Width,Height\n"); - printf(" -d: Enable Debug output\n"); - printf(" -q: Enable Quadding\n"); - GObject::Error(ERR_FATAL,ErrStr); -} +int ListSize=InAnimList.size(); -//*************************************************************************** -int main (int argc, char *argv[]) -{ - CommandLine(argc,argv,CycleCommands); - if (OutStr.Empty()) Usage("No Output File Set\n"); - - if (TPBase==-1) Usage("No TPage Set\n"); - -vector const &Files = MyFiles.GetFileInfoVector(); - - for (int Loop=0; Loop const &NodeAnim=ThisNode.GetAnim(); +int FrameCount=NodeAnim.size(); +vector &Move=ThisAnim.Move; + + Move.resize(FrameCount); + for (int i=0; i const &NodeAnim=ThisNode.GetAnim(); +int FrameCount=NodeAnim.size(); + +// if (!ThisNode.Pts.size()) // Dont export Skin as bone + if (!ThisNode.GetTris().size()) // Dont export Skin as bone + { + sBoneAnim FrameList; + FrameList.Idx.resize(FrameCount); + + for (int i=0; i Idx; +}; + +//*************************************************************************** +struct sAnim +{ + GString Name; + int FrameCount; + vector BoneAnim; + vector Move; + int AnimOfs; + int MoveOfs; +}; + //*************************************************************************** class CMkActor3d { public: - CMkActor3d(GString const &In,GString const &Out,int TPBase,int TPW,int TPH); - - void Load(); - void Process(); - void Write(); - + void SetInName(GString const &In); + void SetTPData(int TPBase,int TPW,int TPH); + + void AddAnim(const char *Name); + void AddTex(const char *Name); + + void ProcessActor(); + void ProcessAnim(); private: + void ActorLoad(); + void ActorProcess(); + void ActorWrite(); + void ProcessSkel(int Idx,int Parent); void WriteSkel(); @@ -32,20 +56,37 @@ private: void BuildBoneOut(sBone &OutBone,CNode const &InNode,int ParentBoneIdx); int WriteTexInfoList(); - GString InFilename,InPath,Name,OutFile,OutDir; + GString InFilename,InPath,Name,OutFile,IncFile; CScene Scene; vector Skel; - CFaceStore FaceList; - sActor3dHdr FileHdr; + sActorHdr FileHdr; FILE *File; + std::vector InTexList; + std::vector InAnimList; + int TPageBase; int TPageWidth,TPageHeight; +/*Anim*/ + void AnimLoad(); + void AnimWrite(); + void AnimWriteInclude(); + int AnimProcessSkelMove(CScene &Scene,sAnim &ThisAnim,int Idx); + void AnimProcessSkelAnim(CScene &Scene,sAnim &ThisAnim,int Idx); + int AnimWriteMove(sAnim const &ThisAnim); + int AnimWriteAnim(sAnim const &ThisAnim); + int AnimWriteQuatTable(); + + int BoneCount; + vector AnimList; + CList QuatList; + + }; //*************************************************************************** diff --git a/Utils/MkAnim3d/MkAnim3d.cpp b/Utils/MkAnim3d/MkAnim3d.cpp index 7bcf0b128..ba41a4bc8 100644 --- a/Utils/MkAnim3d/MkAnim3d.cpp +++ b/Utils/MkAnim3d/MkAnim3d.cpp @@ -162,8 +162,8 @@ int ChildCount=ThisNode.GetPruneChildCount(); void CMkAnim3d::Write(GString &Filename) { int Anim,AnimCount=AnimList.size(); -sAnim3dFileHdr FileHdr; -sAnim3dHdr Hdr; +sAnimFileHdr FileHdr; +sAnimHdr Hdr; File=fopen(Filename,"wb"); @@ -171,13 +171,13 @@ sAnim3dHdr Hdr; // Write Dummy FileHdr FileHdr.AnimCount=AnimCount; FileHdr.BoneCount=BoneCount; - fwrite(&FileHdr,1,sizeof(sAnim3dFileHdr),File); + fwrite(&FileHdr,1,sizeof(sAnimFileHdr),File); // Write Dummy AnimHdrs for (Anim=0; Anim Quat; vector Idx; }; +//*************************************************************************** struct sAnim { GString Name; @@ -32,20 +32,20 @@ public: BoneCount=-1; } - void Add(GString const &Filename); - void Write(GString &Filename); - void WriteInclude(GString const &IncludeFile); +/*Anim*/void Add(GString const &Filename); +/*Anim*/void Write(GString &Filename); +/*Anim*/void WriteInclude(GString const &IncludeFile); private: - int ProcessSkelMove(CScene &Scene,sAnim &ThisAnim,int Idx); - void ProcessSkelAnim(CScene &Scene,sAnim &ThisAnim,int Idx); - int WriteMove(sAnim const &ThisAnim); - int WriteAnim(sAnim const &ThisAnim); - int WriteQuatTable(); +/*Anim*/int ProcessSkelMove(CScene &Scene,sAnim &ThisAnim,int Idx); +/*Anim*/void ProcessSkelAnim(CScene &Scene,sAnim &ThisAnim,int Idx); +/*Anim*/int WriteMove(sAnim const &ThisAnim); +/*Anim*/int WriteAnim(sAnim const &ThisAnim); +/*Anim*/int WriteQuatTable(); - int BoneCount; - vector AnimList; - CList QuatList; +/*Anim*/int BoneCount; +/*Anim*/vector AnimList; +/*Anim*/CList QuatList; FILE *File; }; diff --git a/build/globals.mak b/build/globals.mak index 63a1cc313..d23d913d3 100644 --- a/build/globals.mak +++ b/build/globals.mak @@ -82,7 +82,6 @@ DATA_INC_DIR := $(DATA_TOOL_DIR)/include MKLEVEL := $(DATA_BIN_DIR)/MkLevel MKACTOR3D := $(DATA_BIN_DIR)/MkActor3d -MKANIM3D := $(DATA_BIN_DIR)/MkAnim3d # Cygwin # ------