Files
firestorm/Gameleap/code/mw4/Tools/PMeshHunter/PMeshHunter.cpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

470 lines
10 KiB
C++

#include <Stuff\StuffHeaders.hpp>
#include <MLR\MLRTexturePool.hpp>
#include <DLLPlatform\DLLPlatform.hpp>
#include <ElementRenderer\ElementRenderer.hpp>
#include <ElementRenderer\GroupElement.hpp>
#include <ElementRenderer\ListElement.hpp>
#include <ElementRenderer\SwitchElement.hpp>
#include <ElementRenderer\ShapeElement.hpp>
#include <ElementRenderer\GridElement.hpp>
#include <ElementRenderer\StateChange.hpp>
#include <MLR\MLRHeaders.hpp>
#include <gosFX\gosFX.hpp>
#include "ImageLib\image.h"
#include <GameOS\ToolOS.hpp>
//#define NON_DEBUG_BUG 1
char theName[1024];
char contentPath[1024];
char inputPath[1024];
char texturePath[1024];
char outputPath[1024];
void FileExportMaster(int, int, Scalar, Scalar, Scalar, Scalar, const char *fname);
void ImportMegabasetexture(Page *page);
void ImportExportCulturalMeshs(Page *map_to_convert, const char*, const
char*, Scalar, Scalar, Scalar, Scalar);
FILE *analyzeFile;
void __stdcall InitializeGameEngine()
{
//
//---------------------
// Initialize libraries
//---------------------
//
Stuff::InitializeClasses();
MidLevelRenderer::InitializeClasses(NULL, 32768*16);
gosFX::InitializeClasses();
ElementRenderer::InitializeClasses();
Stuff::ArmorLevel=1;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void __stdcall DoGameLogic()
{
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void __stdcall UpdateDisplay()
{
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void __stdcall TerminateGameEngine()
{
//
//-------------------
// Turn off libraries
//-------------------
//
ElementRenderer::TerminateClasses();
gosFX::TerminateClasses();
MidLevelRenderer::TerminateClasses();
Stuff::TerminateClasses();
}
//
// Setup the GameOS structure
//
void __stdcall GetGameOSEnvironment( char* CommandLine )
{
CommandLine = CommandLine;
Environment.applicationName = "PMeshHunter";
Environment.directoryPath = "\\Tools\\PMeshHunter";
Environment.screenWidth = 640;
Environment.screenHeight = 480;
Environment.fullScreen = FALSE;
Environment.bitDepth = 16;
Environment.debugLog = "PMeshHunterLog.txt";
Environment.spew = ""; //"GameOS*";
Environment.UpdateRenderers = UpdateDisplay;
Environment.DoGameLogic = DoGameLogic;
Environment.InitializeGameEngine = InitializeGameEngine;
Environment.TerminateGameEngine = TerminateGameEngine;
Environment.Renderer = 0;
Environment.FullScreenDevice = 0;
Environment.AntiAlias = 0; // true/false - Enable full screen antialiasing
//
// Texture infomation
//
Environment.Texture_S_256 = 13;
Environment.Texture_S_128 = 12;
Environment.Texture_S_64 = 1;
Environment.Texture_S_32 = 1;
Environment.Texture_S_16 = 1;
Environment.Texture_K_256 = 1;
Environment.Texture_K_128 = 1;
Environment.Texture_K_64 = 1;
Environment.Texture_K_32 = 1;
Environment.Texture_K_16 = 1;
Environment.Texture_A_256 = 1;
Environment.Texture_A_128 = 1;
Environment.Texture_A_64 = 1;
Environment.Texture_A_32 = 1;
Environment.Texture_A_16 = 1;
}
void
CheckFiles(const char *dir)
{
char file_name[1024];
char long_file_name[1024];
sprintf(file_name, "%s\\*.erf", dir);
const char *fname = gos_FindFiles(file_name);
while(fname!=NULL)
{
sprintf(long_file_name, "%s\\%s", dir, fname);
if(gos_DoesFileExist((const char *)long_file_name))
{
FileStream fs;
fs.Open(long_file_name);
if(fs.IsFileOpened()==true)
{
SPEWALWAYS((0, "%s", long_file_name));
gos_PushCurrentHeap(ElementRenderer::g_Heap);
ElementRenderer::Element *element = ElementRenderer::Element::Create(&fs, ElementRenderer::ReadERFVersion(&fs));
gos_PopCurrentHeap();
Check_Object(element);
delete element;
}
}
fname = gos_FindFilesNext();
}
gos_FindFilesClose();
sprintf(file_name, "%s\\*.mlr", dir);
fname = gos_FindFiles(file_name);
while(fname!=NULL)
{
sprintf(long_file_name, "%s\\%s", dir, fname);
if(gos_DoesFileExist((const char *)long_file_name))
{
FileStream fs;
fs.Open(long_file_name);
if(fs.IsFileOpened()==true)
{
SPEWALWAYS((0, "%s", long_file_name));
int version = MidLevelRenderer::ReadMLRVersion(&fs);
OBB obb;
fs >> obb;
MLRShape *shape;
if(version<14)
{
shape = MidLevelRenderer::MLRShape::Make(&fs, version);
}
else
{
RegisteredClass::ClassID class_id;
fs >> class_id;
switch(class_id)
{
case MidLevelRenderer::MLRShapeClassID:
shape = MidLevelRenderer::MLRShape::Make(&fs, version);
break;
case MidLevelRenderer::MLRCulturShapeClassID:
shape = MidLevelRenderer::MLRCulturShape::Make(&fs, version);
break;
}
}
Check_Object(shape);
shape->DetachReference();
}
}
fname = gos_FindFilesNext();
}
gos_FindFilesClose();
sprintf(file_name, "%s\\*.ebf", dir);
fname = gos_FindFiles(file_name);
while(fname!=NULL)
{
sprintf(long_file_name, "%s\\%s", dir, fname);
if(gos_DoesFileExist((const char *)long_file_name))
{
FileStream fs;
fs.Open(long_file_name);
if(fs.IsFileOpened()==true)
{
SPEWALWAYS((0, "%s", long_file_name));
gosFX::ReadGFXVersion(&fs);
int mlr_version = MidLevelRenderer::ReadMLRVersion(&fs);
unsigned debris_count;
fs >> debris_count;
unsigned i;
Point3D pos, center;
Scalar radius;
for(i=0;i<debris_count;i++)
{
fs >> pos;
fs >> center;
fs >> radius;
//
//---------------
// Load the shape
//---------------
//
MLRShape *piece = NULL;
if(mlr_version<14)
{
piece = MidLevelRenderer::MLRShape::Make(&fs, mlr_version);
}
else
{
RegisteredClass::ClassID class_id;
fs >> class_id;
switch(class_id)
{
case MidLevelRenderer::MLRShapeClassID:
piece = MidLevelRenderer::MLRShape::Make(&fs, mlr_version);
break;
case MidLevelRenderer::MLRCulturShapeClassID:
piece = MidLevelRenderer::MLRCulturShape::Make(&fs, mlr_version);
break;
}
}
Check_Object(piece);
piece->DetachReference();
}
}
}
fname = gos_FindFilesNext();
}
gos_FindFilesClose();
}
extern WIN32_FIND_DATA FindDirectoryData;
extern HANDLE FindDirectoryHandle;
void
CheckDirectory(const char *dir)
{
char dir_name[1024];
char long_dir_name[1024];
fprintf(stdout, "%s\n", dir);
sprintf(dir_name, "%s\\*.*", dir);
const char *dname = gos_FindDirectories(dir_name);
while(dname!=NULL)
{
sprintf(long_dir_name, "%s\\%s", dir, dname);
WIN32_FIND_DATA rememberFindDirectoryData = FindDirectoryData;
HANDLE rememberFindDirectoryHandle = FindDirectoryHandle;
CheckDirectory(long_dir_name);
FindDirectoryData = rememberFindDirectoryData;
FindDirectoryHandle = rememberFindDirectoryHandle;
dname = gos_FindDirectoriesNext();
}
gos_FindDirectoriesClose();
CheckFiles(dir);
}
int
__cdecl main(int argc, char *argv[])
{
InitGameOS(NULL, NULL, "blabla");
InitializeGameEngine();
for(int i=1;i<argc;i++)
{
if(NULL!=strstr(argv[i], "-h") || NULL!=strstr(argv[i], "/h"))
{
fprintf(stdout, "%s - Polygon Mesh Hunter\n", argv[0]);
fprintf(stdout, "No Help available\n");
exit(0);
}
}
gos_PushCurrentHeap(MidLevelRenderer::TexturePoolHeap);
MidLevelRenderer::TGAFilePool *pool = new MidLevelRenderer::TGAFilePool("textures\\");
Check_Object(pool);
MidLevelRenderer::MLRTexturePool::Instance =
new MidLevelRenderer::MLRTexturePool(pool);
Check_Object(MidLevelRenderer::MLRTexturePool::Instance);
gos_PopCurrentHeap();
#if 1
CheckDirectory("content");
#else
{
MString fname("test.erf");
if(gos_DoesFileExist((const char *)fname))
{
FileStream fs;
fs.Open(fname);
if(fs.IsFileOpened()==true)
{
gos_PushCurrentHeap(ElementRenderer::g_Heap);
ElementRenderer::Element *element = ElementRenderer::Element::Create(&fs, ElementRenderer::ReadERFVersion(&fs));
gos_PopCurrentHeap();
Check_Object(element);
delete element;
}
}
fname = "test.mlr";
if(gos_DoesFileExist((const char *)fname))
{
FileStream fs;
fs.Open(fname);
if(fs.IsFileOpened()==true)
{
int version = MidLevelRenderer::ReadMLRVersion(&fs);
OBB obb;
fs >> obb;
MLRShape *shape;
if(version<14)
{
shape = MidLevelRenderer::MLRShape::Make(&fs, version);
}
else
{
RegisteredClass::ClassID class_id;
fs >> class_id;
switch(class_id)
{
case MidLevelRenderer::MLRShapeClassID:
shape = MidLevelRenderer::MLRShape::Make(&fs, version);
break;
case MidLevelRenderer::MLRCulturShapeClassID:
shape = MidLevelRenderer::MLRCulturShape::Make(&fs, version);
break;
}
}
Check_Object(shape);
shape->DetachReference();
}
}
fname = "test.ebf";
if(gos_DoesFileExist((const char *)fname))
{
FileStream fs;
fs.Open(fname);
if(fs.IsFileOpened()==true)
{
// fs.LoadData();
gosFX::ReadGFXVersion(&fs);
int mlr_version = MidLevelRenderer::ReadMLRVersion(&fs);
unsigned debris_count;
fs >> debris_count;
unsigned i;
Point3D pos, center;
Scalar radius;
for(i=0;i<debris_count;i++)
{
fs >> pos;
fs >> center;
fs >> radius;
//
//---------------
// Load the shape
//---------------
//
MLRShape *piece = NULL;
if(mlr_version<14)
{
piece = MidLevelRenderer::MLRShape::Make(&fs, mlr_version);
}
else
{
RegisteredClass::ClassID class_id;
fs >> class_id;
switch(class_id)
{
case MidLevelRenderer::MLRShapeClassID:
piece = MidLevelRenderer::MLRShape::Make(&fs, mlr_version);
break;
case MidLevelRenderer::MLRCulturShapeClassID:
piece = MidLevelRenderer::MLRCulturShape::Make(&fs, mlr_version);
break;
}
}
Check_Object(piece);
piece->DetachReference();
}
}
}
}
#endif
TerminateGameEngine();
ExitGameOS();
return 0;
}