Initial import of Red Planet v4.10 Win32 source
Imports the current Win32 source for the pod-racing game 'Red Planet', built on the MUNGA engine and its L4 (Win32/DirectX) platform layer: - MUNGA / MUNGA_L4: cross-platform engine core and Win32 backend - RP / RP_L4: Red Planet game logic and Win32 application - DivLoader, Setup1: asset loader and installer project - lib, MUNGA_L4/openal, MUNGA_L4/sos: third-party audio dependencies Removed stale Subversion metadata and added .gitignore/.gitattributes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+862
@@ -0,0 +1,862 @@
|
||||
#include "munga.h"
|
||||
#pragma hdrstop
|
||||
|
||||
#include "tool.h"
|
||||
#include "fileutil.h"
|
||||
#include "audtools.h"
|
||||
#include "registry.h"
|
||||
#include "boxsolid.h"
|
||||
#include "namelist.h"
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
//
|
||||
int
|
||||
GetId(char *string)
|
||||
{
|
||||
int id;
|
||||
|
||||
char *number = strstr( string, "/id:");
|
||||
if (number != NULL)
|
||||
{
|
||||
number += 4;
|
||||
id = atoi(number);
|
||||
return id;
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
Logical
|
||||
PlatformTool::ConvertStringToModeMask(
|
||||
const char */*string*/,
|
||||
ModeMask */*returned_value_ptr*/
|
||||
)
|
||||
{
|
||||
Fail("PlatformTool::ConvertStringToModeMask method not overridden!");
|
||||
return False;
|
||||
}
|
||||
|
||||
Logical
|
||||
PlatformTool::ConvertStringToTechStatus(
|
||||
const char */*string*/,
|
||||
int */*returned_value_ptr*/
|
||||
)
|
||||
{
|
||||
Fail("PlatformTool::ConvertStringToTechStatus method not overridden!");
|
||||
return False;
|
||||
}
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
//
|
||||
int
|
||||
ApplicationTool::BuildResources(
|
||||
int argc,
|
||||
char **argv,
|
||||
AudioCreateSymbols &create_symbols,
|
||||
Byte minor_version
|
||||
)
|
||||
{
|
||||
char temp_name[200];
|
||||
const char *Res_Name;
|
||||
char *resfilename;
|
||||
char ops_filename[150];
|
||||
char dirgauge[150];
|
||||
char dircollision[150];
|
||||
char dirmodel[150];
|
||||
char dirmap[150];
|
||||
char diraudio[150];
|
||||
char dirvideo[150];
|
||||
char diranim[150];
|
||||
|
||||
char short_name[100];
|
||||
char long_name[200];
|
||||
char id_name[100];
|
||||
|
||||
const char *tempdir;
|
||||
|
||||
ResourceDirectories
|
||||
resource_directories;
|
||||
|
||||
NotationFile *ops_file = new NotationFile();
|
||||
Register_Object(ops_file);
|
||||
|
||||
StreamableResourceFile file;
|
||||
|
||||
if (argc < 2)
|
||||
{
|
||||
DEBUG_STREAM << "Usage: buildXX resource.bld [res2.bld ...]\n" << std::flush;
|
||||
return 1;
|
||||
}
|
||||
|
||||
verboseMode = False;
|
||||
labOnly = False;
|
||||
|
||||
//
|
||||
// Write audio symbols, add static audio resources
|
||||
//
|
||||
create_symbols.Execute();
|
||||
platformTool->CreateStaticAudioStreamResource(&file);
|
||||
|
||||
//
|
||||
//------------------------------------
|
||||
// Arguments are only build files,
|
||||
// so step thru them
|
||||
//------------------------------------
|
||||
//
|
||||
for(int arg_number = 1; arg_number < argc; ++arg_number)
|
||||
{
|
||||
|
||||
strcpy(temp_name,argv[arg_number]);
|
||||
NotationFile *notation_file;
|
||||
|
||||
WorkingDirectory = MakeWorkingDirectory(temp_name);
|
||||
Register_Pointer(WorkingDirectory);
|
||||
|
||||
char *filename = MakePathedFilename(WorkingDirectory, temp_name);
|
||||
Register_Pointer(filename);
|
||||
|
||||
notation_file = new NotationFile(filename);
|
||||
Register_Object(notation_file);
|
||||
|
||||
labOnly |= notation_file->IsMarkedLabOnly();
|
||||
|
||||
if (!notation_file->PageCount())
|
||||
{
|
||||
DEBUG_STREAM << filename << " does not exist! " << std::endl << std::flush;
|
||||
Unregister_Object(notation_file);
|
||||
delete notation_file;
|
||||
Stop_Registering();
|
||||
return 0;
|
||||
}
|
||||
else if (!notation_file->PageExists("resource"))
|
||||
{
|
||||
DEBUG_STREAM << filename << " Not a valid resource list" << std::endl << std::flush;
|
||||
Unregister_Object(notation_file);
|
||||
delete notation_file;
|
||||
Stop_Registering();
|
||||
return 0;
|
||||
}
|
||||
|
||||
Unregister_Pointer(filename);
|
||||
delete filename;
|
||||
|
||||
//
|
||||
//-----------------------------------------------
|
||||
// If this is the first file check
|
||||
// for required info, if not skip this
|
||||
// section so required info isn't overwritten
|
||||
//-----------------------------------------------
|
||||
//
|
||||
|
||||
if(arg_number == 1)
|
||||
{
|
||||
|
||||
|
||||
//
|
||||
// Check verboseMode
|
||||
//
|
||||
|
||||
const char *verb_string;
|
||||
|
||||
if(notation_file->GetEntry("resource","verbose",&verb_string))
|
||||
{
|
||||
if(!stricmp(verb_string, "true"))
|
||||
{
|
||||
verboseMode = True;
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------
|
||||
// Set up directories
|
||||
//--------------------------------
|
||||
|
||||
if(!notation_file->GetEntry("resource","dirmap",&tempdir))
|
||||
{
|
||||
DEBUG_STREAM << "No map directory specified!!!" << std::endl << std::flush;
|
||||
PostQuitMessage(AbortExitCodeID);
|
||||
}
|
||||
|
||||
strcpy(dirmap, tempdir);
|
||||
|
||||
if(!notation_file->GetEntry("resource","dirmodel", &tempdir))
|
||||
{
|
||||
DEBUG_STREAM << "No model directory specified!!!" << std::endl << std::flush;
|
||||
PostQuitMessage(AbortExitCodeID);
|
||||
}
|
||||
|
||||
strcpy(dirmodel, tempdir);
|
||||
|
||||
if(!notation_file->GetEntry("resource","dircollision", &tempdir))
|
||||
{
|
||||
DEBUG_STREAM << "No collision directory specified!!!" << std::endl << std::flush;
|
||||
PostQuitMessage(AbortExitCodeID);
|
||||
}
|
||||
|
||||
strcpy(dircollision, tempdir);
|
||||
|
||||
|
||||
const char
|
||||
*vp,
|
||||
*version_string;
|
||||
Byte version[2] = {0,0};
|
||||
|
||||
notation_file->GetEntry("resource","diraudio", &tempdir);
|
||||
if (tempdir)
|
||||
{
|
||||
strcpy(diraudio, tempdir);
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_STREAM << "No directory specified for 'diraudio'!\n" << std::flush;
|
||||
PostQuitMessage(AbortExitCodeID);
|
||||
}
|
||||
|
||||
notation_file->GetEntry("resource","dirvideo", &tempdir);
|
||||
if (tempdir)
|
||||
{
|
||||
strcpy(dirvideo, tempdir);
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_STREAM << "No directory specified for 'dirvideo'!\n" << std::flush;
|
||||
PostQuitMessage(AbortExitCodeID);
|
||||
}
|
||||
|
||||
notation_file->GetEntry("resource","diranimation", &tempdir);
|
||||
if (tempdir)
|
||||
{
|
||||
strcpy(diranim, tempdir);
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_STREAM << "No directory specified for 'diranimation'!\n" << std::flush;
|
||||
PostQuitMessage(AbortExitCodeID);
|
||||
}
|
||||
|
||||
notation_file->GetEntry("resource","dirgauge", &tempdir);
|
||||
if (tempdir)
|
||||
{
|
||||
strcpy(dirgauge, tempdir);
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_STREAM << "No directory specified for 'gauge'!\n" << std::flush;
|
||||
PostQuitMessage(AbortExitCodeID);
|
||||
}
|
||||
resource_directories.collisionDirectory = dircollision;
|
||||
resource_directories.modelDirectory = dirmodel;
|
||||
resource_directories.mapDirectory = dirmap;
|
||||
resource_directories.audioDirectory = diraudio;
|
||||
resource_directories.videoDirectory = dirvideo;
|
||||
resource_directories.animationDirectory = diranim;
|
||||
resource_directories.gaugeDirectory = dirgauge;
|
||||
|
||||
//-------------------------
|
||||
// Get version info
|
||||
//-------------------------
|
||||
|
||||
|
||||
if (!notation_file->GetEntry("release","version", &version_string))
|
||||
{
|
||||
DEBUG_STREAM << "No version number in build!!!!" << std::endl << std::flush;
|
||||
PostQuitMessage(AbortExitCodeID);
|
||||
}
|
||||
|
||||
version[0] = (Byte)atoi(version_string);
|
||||
|
||||
vp = strchr(version_string, '.');
|
||||
|
||||
if (vp)
|
||||
{
|
||||
vp++;
|
||||
version[1] = (Byte)atoi(vp);
|
||||
}
|
||||
|
||||
//-------------------------
|
||||
// Get Resource Name
|
||||
//-------------------------
|
||||
|
||||
if(!notation_file->GetEntry("resource","name",&Res_Name))
|
||||
{
|
||||
DEBUG_STREAM << "No resource file specified!!!" << std::endl << std::flush;
|
||||
PostQuitMessage(AbortExitCodeID);
|
||||
}
|
||||
|
||||
resfilename = MakePathedFilename(WorkingDirectory, Res_Name);
|
||||
Register_Pointer(resfilename);
|
||||
|
||||
strcpy(ops_filename, Res_Name);
|
||||
char *p = ops_filename;
|
||||
|
||||
p += strlen(ops_filename);
|
||||
p -= 4;
|
||||
*p = '\0';
|
||||
|
||||
|
||||
|
||||
//================================
|
||||
// Set ops_file "res name"
|
||||
// write maps and write models
|
||||
// can use this for ops file
|
||||
// format.
|
||||
//================================
|
||||
|
||||
ops_file->SetEntry("resource", "res name", ops_filename);
|
||||
ops_file->AppendEntry("resource", NULL, (char *)NULL);
|
||||
|
||||
strcat(ops_filename, ".ops");
|
||||
|
||||
file.versionArray[1] = version[0];
|
||||
file.versionArray[2] = version[1];
|
||||
file.versionArray[3] = minor_version;
|
||||
}
|
||||
|
||||
//
|
||||
//---------------------------
|
||||
// Now step thru each entry
|
||||
// in every build file
|
||||
//---------------------------
|
||||
//
|
||||
|
||||
NameList *entry_list =
|
||||
notation_file->MakeEntryList("resource");
|
||||
Register_Object(entry_list);
|
||||
NameList::Entry *entry = entry_list->GetFirstEntry();
|
||||
|
||||
const char *entry_data;
|
||||
|
||||
int pre_allocated = 0;
|
||||
|
||||
while (entry != NULL)
|
||||
{
|
||||
|
||||
entry_data = entry->GetName();
|
||||
if (entry_data == NULL)
|
||||
{
|
||||
entry = entry->GetNextEntry();
|
||||
continue;
|
||||
}
|
||||
|
||||
entry_data = entry->GetChar();
|
||||
if (entry_data == NULL)
|
||||
{
|
||||
entry = entry->GetNextEntry();
|
||||
continue;
|
||||
}
|
||||
|
||||
strcpy(id_name, entry_data);
|
||||
int id = GetId(id_name);
|
||||
if ( id != -1)
|
||||
{
|
||||
if(arg_number > 1)
|
||||
{
|
||||
|
||||
Fail("Manual ResourceID's not allowed in second build files!");
|
||||
|
||||
}
|
||||
|
||||
if (id > pre_allocated)
|
||||
{
|
||||
pre_allocated = id;
|
||||
}
|
||||
}
|
||||
|
||||
entry = entry->GetNextEntry();
|
||||
}
|
||||
|
||||
//
|
||||
// pre_allocated number....
|
||||
//
|
||||
file.PreAllocateIDs(pre_allocated);
|
||||
|
||||
|
||||
|
||||
entry = entry_list->GetFirstEntry();
|
||||
while (entry != NULL)
|
||||
{
|
||||
|
||||
entry_data = entry->GetName();
|
||||
|
||||
if (entry_data == NULL)
|
||||
{
|
||||
entry = entry->GetNextEntry();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!stricmp(entry_data, "LAB_ONLY"))
|
||||
{
|
||||
labOnly = True;
|
||||
entry = entry->GetNextEntry();
|
||||
continue;
|
||||
}
|
||||
else if (!stricmp(entry_data, "map"))
|
||||
{
|
||||
|
||||
const char *q = entry->GetChar();
|
||||
strcpy(long_name, q);
|
||||
|
||||
|
||||
int id = GetId(long_name);
|
||||
if (id != -1)
|
||||
{
|
||||
|
||||
//
|
||||
// Strip id number off
|
||||
//
|
||||
|
||||
char *p = strchr(long_name, '\t');
|
||||
if (p)
|
||||
{
|
||||
*p = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
char *p = strchr(long_name, ' ');
|
||||
*p = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// open mapname
|
||||
//
|
||||
|
||||
char *filename = MakePathedFilename(resource_directories.mapDirectory, long_name);
|
||||
Register_Pointer(filename);
|
||||
|
||||
DEBUG_STREAM << "Opening Map " << filename << std::endl << std::flush;
|
||||
|
||||
NotationFile *new_notation_file = new NotationFile(filename);
|
||||
Register_Object(new_notation_file);
|
||||
|
||||
labOnly |= new_notation_file->IsMarkedLabOnly();
|
||||
|
||||
StripDirectory(long_name);
|
||||
strcpy(short_name, long_name);
|
||||
|
||||
|
||||
if (new_notation_file->PageCount())
|
||||
{
|
||||
if (
|
||||
!WriteMaps(
|
||||
short_name,
|
||||
new_notation_file,
|
||||
ops_file,
|
||||
&file,
|
||||
&resource_directories,
|
||||
id
|
||||
)
|
||||
)
|
||||
{
|
||||
DEBUG_STREAM << filename << " Did not work!!!! " << std::endl << std::flush;
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_STREAM << filename << " Does not exist! " << std::endl << std::flush;
|
||||
}
|
||||
|
||||
|
||||
Unregister_Pointer(filename);
|
||||
delete filename;
|
||||
Unregister_Object(new_notation_file);
|
||||
delete new_notation_file;
|
||||
}
|
||||
else if (!stricmp(entry_data, "model"))
|
||||
{
|
||||
|
||||
strcpy(long_name, entry->GetChar());
|
||||
|
||||
int id = GetId(long_name);
|
||||
if (id != -1)
|
||||
{
|
||||
|
||||
//
|
||||
// Strip id number off
|
||||
//
|
||||
|
||||
char *p = strchr(long_name, '\t');
|
||||
if (p)
|
||||
{
|
||||
*p = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
char *p = strchr(long_name, ' ');
|
||||
*p = '\0';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// open modelname
|
||||
//
|
||||
|
||||
char *filename = MakePathedFilename(resource_directories.modelDirectory, long_name);
|
||||
Register_Pointer(filename);
|
||||
DEBUG_STREAM << "Opening Model " << filename << std::endl << std::flush;
|
||||
NotationFile *new_notation_file = new NotationFile(filename);
|
||||
Register_Object(new_notation_file);
|
||||
|
||||
labOnly |= new_notation_file->IsMarkedLabOnly();
|
||||
|
||||
const char *p = StripExtension(StripDirectory(long_name));
|
||||
|
||||
strcpy(short_name, p);
|
||||
|
||||
|
||||
if (new_notation_file->PageCount())
|
||||
{
|
||||
if (
|
||||
!WriteModels(
|
||||
new_notation_file,
|
||||
ops_file,
|
||||
&file,
|
||||
short_name,
|
||||
&resource_directories,
|
||||
id
|
||||
)
|
||||
)
|
||||
{
|
||||
|
||||
DEBUG_STREAM << "Error - Model did not work : " << filename << std::endl << std::flush;
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_STREAM << filename << " does not exist " << std::endl << std::flush;
|
||||
|
||||
}
|
||||
|
||||
|
||||
Unregister_Pointer(filename);
|
||||
delete filename;
|
||||
|
||||
Unregister_Object(new_notation_file);
|
||||
delete new_notation_file;
|
||||
|
||||
}
|
||||
else if (!stricmp(entry_data, "zone"))
|
||||
{
|
||||
char *q = entry->GetChar();
|
||||
strcpy(long_name, q);
|
||||
|
||||
//
|
||||
// open zone
|
||||
//
|
||||
|
||||
char *filename = MakePathedFilename(resource_directories.mapDirectory, long_name);
|
||||
Register_Pointer(filename);
|
||||
|
||||
DEBUG_STREAM << "Opening Zones " << filename << std::endl << std::flush;
|
||||
|
||||
NotationFile *new_notation_file = new NotationFile(filename);
|
||||
Register_Object(new_notation_file);
|
||||
|
||||
labOnly |= new_notation_file->IsMarkedLabOnly();
|
||||
|
||||
if (new_notation_file->PageCount())
|
||||
{
|
||||
|
||||
InterestLatticeManager::CreateZoneResources
|
||||
(
|
||||
&file,
|
||||
new_notation_file
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_STREAM << filename << " Does not exist! " << std::endl << std::flush;
|
||||
}
|
||||
|
||||
|
||||
Unregister_Pointer(filename);
|
||||
delete filename;
|
||||
Unregister_Object(new_notation_file);
|
||||
delete new_notation_file;
|
||||
|
||||
}
|
||||
else if (!stricmp(entry_data, "static"))
|
||||
{
|
||||
//
|
||||
// Add registry static objects
|
||||
//
|
||||
Check(entry);
|
||||
const char *static_object_file_name = entry->GetChar();
|
||||
Check_Pointer(static_object_file_name);
|
||||
|
||||
char *full_path_file_name =
|
||||
MakePathedFilename(
|
||||
resource_directories.modelDirectory,
|
||||
static_object_file_name
|
||||
);
|
||||
Register_Pointer(full_path_file_name);
|
||||
|
||||
NotationFile
|
||||
static_object_notation_file(full_path_file_name);
|
||||
|
||||
Registry::CreateStaticObjectStreamResource(
|
||||
&static_object_notation_file,
|
||||
&file
|
||||
);
|
||||
|
||||
Unregister_Pointer(full_path_file_name);
|
||||
delete full_path_file_name;
|
||||
}
|
||||
|
||||
entry = entry->GetNextEntry();
|
||||
}
|
||||
|
||||
Unregister_Object(entry_list);
|
||||
delete entry_list;
|
||||
|
||||
//
|
||||
//-------------------------------------------------------
|
||||
// Make this resource Lab only if labOnly was specified
|
||||
//-------------------------------------------------------
|
||||
//
|
||||
|
||||
if (labOnly == True)
|
||||
{
|
||||
file.labOnly = 1;
|
||||
}
|
||||
|
||||
|
||||
Unregister_Pointer(WorkingDirectory);
|
||||
Unregister_Object(notation_file);
|
||||
|
||||
delete WorkingDirectory;
|
||||
delete notation_file;
|
||||
|
||||
}
|
||||
|
||||
WriteOpsFile(ops_file, &file, &resource_directories);
|
||||
|
||||
file.SaveAs(resfilename);
|
||||
ops_file->WriteFile(ops_filename);
|
||||
|
||||
|
||||
Unregister_Pointer(resfilename);
|
||||
delete resfilename;
|
||||
|
||||
//------------------------
|
||||
// open the vehicle.tbl
|
||||
// and write to ops and
|
||||
//------------------------
|
||||
|
||||
|
||||
Unregister_Object(ops_file);
|
||||
delete ops_file;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//#############################################################################
|
||||
|
||||
void
|
||||
ApplicationTool::ListResource(
|
||||
ResourceDescription *resource
|
||||
)
|
||||
{
|
||||
Check(resource);
|
||||
switch (resource->resourceType)
|
||||
{
|
||||
case ResourceDescription::ModelListResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": Model List of "
|
||||
<< *(int*)resource->resourceAddress << " elements";
|
||||
break;
|
||||
|
||||
case ResourceDescription::MapListResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": Map List of "
|
||||
<< *(int*)resource->resourceAddress << " elements";
|
||||
break;
|
||||
|
||||
case ResourceDescription::AudioStreamListResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": Audio stream List of "
|
||||
<< *(int*)resource->resourceAddress << " elements";
|
||||
break;
|
||||
|
||||
case ResourceDescription::VideoListResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": Video List of "
|
||||
<< *(int*)resource->resourceAddress << " elements";
|
||||
break;
|
||||
|
||||
case ResourceDescription::SubsystemListResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": Subsystem List of "
|
||||
<< *(int*)resource->resourceAddress << " elements";
|
||||
break;
|
||||
|
||||
case ResourceDescription::ControlMappingsListResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": ControlsMappings List of "
|
||||
<< *(int*)resource->resourceAddress << " elements";
|
||||
break;
|
||||
|
||||
case ResourceDescription::DamageZoneListResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": DamageZone List of "
|
||||
<< *(int*)resource->resourceAddress << " elements";
|
||||
break;
|
||||
|
||||
case ResourceDescription::SkeletonListResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": Skeleton List of "
|
||||
<< *(int*)resource->resourceAddress << " elements";
|
||||
break;
|
||||
|
||||
case ResourceDescription::BoxedSolidStreamResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": Boxed Solid Stream of "
|
||||
<< resource->resourceSize/sizeof(BoxedSolidResource)
|
||||
<< " solids";
|
||||
break;
|
||||
|
||||
case ResourceDescription::VideoModelResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": VideoModel" << std::flush;
|
||||
break;
|
||||
|
||||
case ResourceDescription::StaticAudioStreamResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": StaticAudioStream" << std::flush;
|
||||
break;
|
||||
|
||||
case ResourceDescription::InternalAudioStreamResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": InternalAudioStream" << std::flush;
|
||||
break;
|
||||
|
||||
case ResourceDescription::ExternalAudioStreamResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": ExternalAudioStream" << std::flush;
|
||||
break;
|
||||
|
||||
case ResourceDescription::MakeMessageStreamResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": Map stream of "
|
||||
<< *(int*)resource->resourceAddress << " instances";
|
||||
break;
|
||||
|
||||
case ResourceDescription::GameModelResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": GameModel" << std::flush;
|
||||
break;
|
||||
|
||||
case ResourceDescription::AnimationResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": Animation" << std::flush;
|
||||
break;
|
||||
|
||||
case ResourceDescription::SubsystemModelStreamResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": Stream of "
|
||||
<< *(int*)resource->resourceAddress << " Subsystems";
|
||||
break;
|
||||
|
||||
case ResourceDescription::GaugeImageStreamResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": GaugeImage" << std::flush;
|
||||
break;
|
||||
|
||||
case ResourceDescription::ControlMappingStreamResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": Stream of "
|
||||
<< *(int*)resource->resourceAddress << " ControlsMappings";
|
||||
break;
|
||||
|
||||
case ResourceDescription::DamageZoneStreamResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": Stream of "
|
||||
<< *(int*)resource->resourceAddress << " DamageZones";
|
||||
break;
|
||||
|
||||
case ResourceDescription::SkeletonStreamResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": Stream of "
|
||||
<< *(int*)resource->resourceAddress << " Segments";
|
||||
break;
|
||||
|
||||
case ResourceDescription::EnvironmentZoneResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": EnvironmentZone" << std::flush;
|
||||
break;
|
||||
|
||||
case ResourceDescription::InterestZoneResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": InterestZone" << std::flush;
|
||||
break;
|
||||
|
||||
case ResourceDescription::VehicleTableResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": VehicleTable" << std::flush;
|
||||
break;
|
||||
|
||||
case ResourceDescription::ExistanceBoxStreamResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": Stream of "
|
||||
<< resource->resourceSize/sizeof(ExtentBox)
|
||||
<< " Existance boxes";
|
||||
break;
|
||||
|
||||
case ResourceDescription::CameraStreamResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": Stream of "
|
||||
<< *(int*)resource->resourceAddress << " Cameras";
|
||||
break;
|
||||
|
||||
case ResourceDescription::DamageLookupTableStreamResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": DamageZoneLookupTable" << std::flush;
|
||||
break;
|
||||
|
||||
case ResourceDescription::ExplosionTableStreamResourceType:
|
||||
DEBUG_STREAM << resource->resourceName << ": ExplosionTable" << std::flush;
|
||||
break;
|
||||
|
||||
default:
|
||||
DEBUG_STREAM << "Unknown type " << resource->resourceType << std::flush;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//#############################################################################
|
||||
|
||||
int
|
||||
ApplicationTool::ListResources(
|
||||
int argc,
|
||||
char **argv
|
||||
)
|
||||
{
|
||||
if (argc < 2)
|
||||
{
|
||||
DEBUG_STREAM << "Usage: listXX resource.res [res2.res ...]\n" << std::flush;
|
||||
return 1;
|
||||
}
|
||||
|
||||
for (int i=1; i < argc; ++i)
|
||||
{
|
||||
char res_name[200];
|
||||
strcpy(res_name, argv[i]);
|
||||
|
||||
StreamableResourceFile
|
||||
file;
|
||||
|
||||
file.Open(res_name);
|
||||
|
||||
DEBUG_STREAM << res_name << ": v" << (int)file.versionArray[0] << '.'
|
||||
<< (int)file.versionArray[1] << '.' << (int)file.versionArray[2] << '.'
|
||||
<< (int)file.versionArray[3] << std::endl;
|
||||
|
||||
if (file.labOnly == 1)
|
||||
{
|
||||
DEBUG_STREAM << "LAB ONLY RESOURCE!" << std::endl << std::flush;
|
||||
}
|
||||
|
||||
DEBUG_STREAM << std::endl << std::flush;
|
||||
DEBUG_STREAM << "ID# Size Data\n" << std::flush;
|
||||
DEBUG_STREAM << "---- ------ -----------------------------------------------------\n" << std::flush;
|
||||
|
||||
for (int j=0; j<=file.GetMaxResourceID(); ++j)
|
||||
{
|
||||
DEBUG_STREAM << std::setw(4) << j << " " << std::flush;
|
||||
ResourceDescription *resource = file.FindResourceDescription(j);
|
||||
if (resource)
|
||||
{
|
||||
DEBUG_STREAM << std::setw(6) << resource->resourceSize << " " << std::flush;
|
||||
resource->Lock();
|
||||
ListResource(resource);
|
||||
resource->Unlock();
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_STREAM << " Not Used" << std::flush;
|
||||
}
|
||||
DEBUG_STREAM << std::endl << std::flush;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user