Did a little Quake to Doom experiment

This commit is contained in:
Robert Beckebans 2022-02-05 15:49:50 +01:00
parent 2ea2db396d
commit cde21c018d
3 changed files with 844 additions and 7 deletions

View file

@ -738,3 +738,45 @@ CONSOLE_COMMAND( convertMapToValve220, "Convert .map file to the Valve 220 map f
common->SetRefreshOnPrint( false );
}
CONSOLE_COMMAND( convertMapQuakeToDoom, "Convert Quake .map in Valve 220 map format for Doom 3 BFG", idCmdSystem::ArgCompletion_MapNameNoJson )
{
common->SetRefreshOnPrint( true );
if( args.Argc() != 2 )
{
common->Printf( "Usage: convertMapQuakeToDoom <map>\n" );
return;
}
idStr filename = args.Argv( 1 );
if( !filename.Length() )
{
return;
}
filename.StripFileExtension();
idStr mapName;
sprintf( mapName, "maps/%s.map", filename.c_str() );
idMapFile map;
if( map.Parse( mapName, true, false ) )
{
map.ConvertQuakeToDoom();
idStrStatic< MAX_OSPATH > canonical = mapName;
canonical.ToLower();
idStrStatic< MAX_OSPATH > extension;
canonical.StripFileExtension();
//idStrStatic< MAX_OSPATH > convertedFileName;
//convertedFileName = canonical;
//convertedFileName += "_valve220";
map.Write( canonical, ".map" );
}
common->SetRefreshOnPrint( false );
}

View file

@ -711,7 +711,7 @@ idMapBrush* idMapBrush::ParseValve220( idLexer& src, const idVec3& origin )
!src.Parse1DMatrix( 3, planepts[1].ToFloatPtr() ) ||
!src.Parse1DMatrix( 3, planepts[2].ToFloatPtr() ) )
{
src.Error( "idMapBrush::ParseQ3: unable to read brush side plane definition" );
src.Error( "idMapBrush::ParseValve220: unable to read brush side plane definition" );
sides.DeleteContents( true );
return NULL;
}
@ -730,13 +730,55 @@ idMapBrush* idMapBrush::ParseValve220( idLexer& src, const idVec3& origin )
// read the material
if( !src.ReadTokenOnLine( &token ) )
{
src.Error( "idMapBrush::ParseQ3: unable to read brush side material" );
src.Error( "idMapBrush::ParseValve220: unable to read brush side material" );
sides.DeleteContents( true );
return NULL;
}
idToken matPrefix;
idToken numberToken;
if( token == "*" || token == "+" || token.type == TT_NUMBER )
{
// RB: try again for Quake 1 maps
matPrefix = token;
if( token == "+" )
{
if( !src.ReadTokenOnLine( &numberToken ) )
{
src.Error( "idMapBrush::ParseValve220: unable to read brush side material" );
sides.DeleteContents( true );
return NULL;
}
if( numberToken.type == TT_NUMBER )
{
if( !src.ReadTokenOnLine( &token ) )
{
src.Error( "idMapBrush::ParseValve220: unable to read brush side material" );
sides.DeleteContents( true );
return NULL;
}
}
}
else if( !src.ReadTokenOnLine( &token ) )
{
src.Error( "idMapBrush::ParseValve220: unable to read brush side material" );
sides.DeleteContents( true );
return NULL;
}
}
// we have an implicit 'textures/' in the old format
side->material = "textures/" + token;
if( numberToken.type == TT_NUMBER )
{
side->material = "textures/" + numberToken + token;
}
else
{
side->material = "textures/" + token;
}
side->projection = idMapBrushSide::PROJECTION_VALVE220;
for( int axis = 0; axis < 2; axis++ )
@ -1882,7 +1924,7 @@ int idMapFile::AddEntity( idMapEntity* mapEnt )
idMapFile::FindEntity
===============
*/
idMapEntity* idMapFile::FindEntity( const char* name )
idMapEntity* idMapFile::FindEntity( const char* name ) const
{
for( int i = 0; i < entities.Num(); i++ )
{
@ -1900,7 +1942,7 @@ idMapEntity* idMapFile::FindEntity( const char* name )
RB idMapFile::FindEntityAtOrigin
===============
*/
idMapEntity* idMapFile::FindEntityAtOrigin( const idVec3& org )
idMapEntity* idMapFile::FindEntityAtOrigin( const idVec3& org ) const
{
idBounds bo( org );
bo.ExpandSelf( 0.125f );
@ -1920,6 +1962,33 @@ idMapEntity* idMapFile::FindEntityAtOrigin( const idVec3& org )
return NULL;
}
/*
=============
RB from idGameEdit::GetUniqueEntityName
generates a unique name for a given classname
=============
*/
const char* idMapFile::GetUniqueEntityName( const char* classname ) const
{
int id;
static char name[1024];
// can only have MAX_GENTITIES, so if we have a spot available, we're guaranteed to find one
for( id = 0; id < 99999; id++ )
{
idStr::snPrintf( name, sizeof( name ), "%s_%d", classname, id );
if( FindEntity( name ) == NULL )
{
return name;
}
}
// id == MAX_GENTITIES + 1, which can't be in use if we get here
idStr::snPrintf( name, sizeof( name ), "%s_%d", classname, id );
return name;
}
/*
===============
idMapFile::RemoveEntity
@ -3010,6 +3079,123 @@ bool idMapFile::ConvertToValve220Format()
return true;
}
bool idMapFile::ConvertQuakeToDoom()
{
idDict classTypeOverview;
idStrList textureCollections;
int count = GetNumEntities();
for( int j = 0; j < count; j++ )
{
idMapEntity* ent = GetEntity( j );
if( ent )
{
idStr classname = ent->epairs.GetString( "classname" );
const idKeyValue* targetnamePair = ent->epairs.FindKey( "targetname" );
if( targetnamePair )
{
ent->epairs.Set( "name", targetnamePair->GetValue() );
ent->epairs.Delete( "targetname" );
}
const idKeyValue* namePair = ent->epairs.FindKey( "name" );
if( !namePair )
{
idStr uniqueName = GetUniqueEntityName( classname );
ent->epairs.Set( "name", uniqueName );
}
else
{
// is there a name clash with another entity?
bool clash = false;
for( int i = 1; i < count; i++ )
{
if( i == j )
{
continue;
}
idMapEntity* otherEnt = GetEntity( i );
const idKeyValue* otherNamePair = otherEnt->epairs.FindKey( "name" );
if( otherNamePair && !otherNamePair->GetValue().IsEmpty() && idStr::Cmp( namePair->GetValue(), otherNamePair->GetValue() ) == 0 )
{
// both entities have the same name, give this one a new name
idStr uniqueName = GetUniqueEntityName( classname );
ent->epairs.Set( "name", uniqueName );
break;
}
}
}
if( idStr::Icmp( classname, "func_wall" ) == 0 )
{
ent->epairs.Set( "classname", "func_static" );
}
if( ent->GetNumPrimitives() > 0 )
{
const idKeyValue* namePair = ent->epairs.FindKey( "name" );
ent->epairs.Set( "model", namePair->GetValue() );
// map Wad brushes names to proper Doom 3 compatible material names
for( int i = 0; i < ent->GetNumPrimitives(); i++ )
{
idMapPrimitive* mapPrim;
mapPrim = ent->GetPrimitive( i );
if( mapPrim->GetType() == idMapPrimitive::TYPE_BRUSH )
{
idMapBrush* brushPrim = static_cast<idMapBrush*>( mapPrim );
for( int s = 0; s < brushPrim->GetNumSides(); s++ )
{
idMapBrushSide* side = brushPrim->GetSide( s );
idStr matName;
WadTextureToMaterial( side->GetMaterial(), matName );
side->SetMaterial( matName );
}
}
else if( mapPrim->GetType() == idMapPrimitive::TYPE_PATCH )
{
idMapPatch* patch = static_cast<idMapPatch*>( mapPrim );
idMapFile::AddMaterialToCollection( patch->GetMaterial(), textureCollections );
}
}
}
}
}
idMapEntity* worldspawn = GetEntity( 0 );
if( worldspawn )
{
#if 1
worldspawn->epairs.Set( "_tb_textures", "textures/common;textures/editor;textures/id1" );
#else
TODO
idStr list;
for( int i = 0; i < textureCollections.Num(); i++ )
{
list += textureCollections[ i ];
if( i != ( textureCollections.Num() - 1 ) )
{
list += ";";
}
}
worldspawn->epairs.Set( "_tb_textures", list );
#endif
worldspawn->epairs.Set( "_tb_def", "builtin:DOOM-3-slim.fgd" );
}
return true;
}
void idMapFile::AddMaterialToCollection( const char* material, idStrList& textureCollections )
{
idStr withoutPath = material;
@ -3021,4 +3207,608 @@ void idMapFile::AddMaterialToCollection( const char* material, idStrList& textur
textureCollections.AddUnique( textureCollection );
}
typedef struct
{
const char* quakeName;
const char* doomName;
} quakeToDoom_t;
static quakeToDoom_t textureConvertNames[] =
{
// id1.wad
{"textures/#04awater1", "textures/id1/04awater1"},
{"textures/#04mwat1", "textures/id1/04mwat1"},
{"textures/#04mwat2", "textures/id1/04mwat2"},
{"textures/#04water1", "textures/id1/04water1"},
{"textures/#04water2", "textures/id1/04water2"},
{"textures/#lava1", "textures/id1/lava1"},
{"textures/#slime", "textures/id1/slime"},
{"textures/#slime0", "textures/id1/slime0"},
{"textures/#slime1", "textures/id1/slime1"},
{"textures/#teleport", "textures/id1/teleport"},
{"textures/#water0", "textures/id1/water0"},
{"textures/#water1", "textures/id1/water1"},
{"textures/#water2", "textures/id1/water2"},
{"textures/0_box_side", "textures/id1/0_box_side"},
{"textures/0_box_top", "textures/id1/0_box_top"},
{"textures/0_med100", "textures/id1/0_med100"},
{"textures/0_med25", "textures/id1/0_med25"},
{"textures/0_med25s", "textures/id1/0_med25s"},
{"textures/0basebtn", "textures/id1/0basebtn"},
{"textures/0butn", "textures/id1/0butn"},
{"textures/0butnn", "textures/id1/0butnn"},
{"textures/0button", "textures/id1/0button"},
{"textures/0floorsw", "textures/id1/0floorsw"},
{"textures/0light01", "textures/id1/0light01"},
{"textures/0mtlsw", "textures/id1/0mtlsw"},
{"textures/0planet", "textures/id1/0planet"},
{"textures/0shoot", "textures/id1/0shoot"},
{"textures/0slip", "textures/id1/0slip"},
{"textures/0slipbot", "textures/id1/0slipbot"},
{"textures/0sliptop", "textures/id1/0sliptop"},
{"textures/1_box_side", "textures/id1/1_box_side"},
{"textures/1_box_top", "textures/id1/1_box_top"},
{"textures/1_med100", "textures/id1/1_med100"},
{"textures/1_med25", "textures/id1/1_med25"},
{"textures/1_med25s", "textures/id1/1_med25s"},
{"textures/1basebtn", "textures/id1/1basebtn"},
{"textures/1butn", "textures/id1/1butn"},
{"textures/1butnn", "textures/id1/1butnn"},
{"textures/1button", "textures/id1/1button"},
{"textures/1floorsw", "textures/id1/1floorsw"},
{"textures/1light01", "textures/id1/1light01"},
{"textures/1mtlsw", "textures/id1/1mtlsw"},
{"textures/1planet", "textures/id1/1planet"},
{"textures/1shoot", "textures/id1/1shoot"},
{"textures/1slip", "textures/id1/1slip"},
{"textures/2_med100", "textures/id1/2_med100"},
{"textures/2_med25", "textures/id1/2_med25"},
{"textures/2butn", "textures/id1/2butn"},
{"textures/2butnn", "textures/id1/2butnn"},
{"textures/2button", "textures/id1/2button"},
{"textures/2floorsw", "textures/id1/2floorsw"},
{"textures/2light01", "textures/id1/2light01"},
{"textures/2mtlsw", "textures/id1/2mtlsw"},
{"textures/2planet", "textures/id1/2planet"},
{"textures/2shoot", "textures/id1/2shoot"},
{"textures/2slip", "textures/id1/2slip"},
{"textures/3_med100", "textures/id1/3_med100"},
{"textures/3_med25", "textures/id1/3_med25"},
{"textures/3butn", "textures/id1/3butn"},
{"textures/3butnn", "textures/id1/3butnn"},
{"textures/3button", "textures/id1/3button"},
{"textures/3floorsw", "textures/id1/3floorsw"},
{"textures/3mtlsw", "textures/id1/3mtlsw"},
{"textures/3planet", "textures/id1/3planet"},
{"textures/3shoot", "textures/id1/3shoot"},
{"textures/3slip", "textures/id1/3slip"},
{"textures/4slip", "textures/id1/4slip"},
{"textures/5slip", "textures/id1/5slip"},
{"textures/6slip", "textures/id1/6slip"},
{"textures/abasebtn", "textures/id1/abasebtn"},
{"textures/abutn", "textures/id1/abutn"},
{"textures/abutnn", "textures/id1/abutnn"},
{"textures/abutton", "textures/id1/abutton"},
{"textures/afloorsw", "textures/id1/afloorsw"},
{"textures/amtlsw", "textures/id1/amtlsw"},
{"textures/ashoot", "textures/id1/ashoot"},
{"textures/adoor01_2", "textures/id1/adoor01_2"},
{"textures/adoor02_2", "textures/id1/adoor02_2"},
{"textures/adoor03_2", "textures/id1/adoor03_2"},
{"textures/adoor03_3", "textures/id1/adoor03_3"},
{"textures/adoor03_4", "textures/id1/adoor03_4"},
{"textures/adoor03_5", "textures/id1/adoor03_5"},
{"textures/adoor03_6", "textures/id1/adoor03_6"},
{"textures/adoor09_1", "textures/id1/adoor09_1"},
{"textures/adoor09_2", "textures/id1/adoor09_2"},
{"textures/afloor1_3", "textures/id1/afloor1_3"},
{"textures/afloor1_4", "textures/id1/afloor1_4"},
{"textures/afloor1_8", "textures/id1/afloor1_8"},
{"textures/afloor3_1", "textures/id1/afloor3_1"},
{"textures/altar1_1", "textures/id1/altar1_1"},
{"textures/altar1_3", "textures/id1/altar1_3"},
{"textures/altar1_4", "textures/id1/altar1_4"},
{"textures/altar1_6", "textures/id1/altar1_6"},
{"textures/altar1_7", "textures/id1/altar1_7"},
{"textures/altar1_8", "textures/id1/altar1_8"},
{"textures/altarb_1", "textures/id1/altarb_1"},
{"textures/altarb_2", "textures/id1/altarb_2"},
{"textures/altarc_1", "textures/id1/altarc_1"},
{"textures/arch7", "textures/id1/arch7"},
{"textures/arrow_m", "textures/id1/arrow_m"},
{"textures/az1_6", "textures/id1/az1_6"},
{"textures/azfloor1_1", "textures/id1/azfloor1_1"},
{"textures/azswitch3", "textures/id1/azswitch3"},
{"textures/azwall1_5", "textures/id1/azwall1_5"},
{"textures/azwall3_1", "textures/id1/azwall3_1"},
{"textures/azwall3_2", "textures/id1/azwall3_2"},
{"textures/basebutn3", "textures/id1/basebutn3"},
{"textures/batt0sid", "textures/id1/batt0sid"},
{"textures/batt0top", "textures/id1/batt0top"},
{"textures/batt1sid", "textures/id1/batt1sid"},
{"textures/batt1top", "textures/id1/batt1top"},
{"textures/black", "textures/id1/black"},
{"textures/bodiesa2_1", "textures/id1/bodiesa2_1"},
{"textures/bodiesa2_4", "textures/id1/bodiesa2_4"},
{"textures/bodiesa3_1", "textures/id1/bodiesa3_1"},
{"textures/bodiesa3_2", "textures/id1/bodiesa3_2"},
{"textures/bodiesa3_3", "textures/id1/bodiesa3_3"},
{"textures/bricka2_1", "textures/id1/bricka2_1"},
{"textures/bricka2_2", "textures/id1/bricka2_2"},
{"textures/bricka2_4", "textures/id1/bricka2_4"},
{"textures/bricka2_6", "textures/id1/bricka2_6"},
{"textures/carch02", "textures/id1/carch02"},
{"textures/carch03", "textures/id1/carch03"},
{"textures/carch04_1", "textures/id1/carch04_1"},
{"textures/carch04_2", "textures/id1/carch04_2"},
{"textures/ceil1_1", "textures/id1/ceil1_1"},
{"textures/ceiling1_3", "textures/id1/ceiling1_3"},
{"textures/ceiling4", "textures/id1/ceiling4"},
{"textures/ceiling5", "textures/id1/ceiling5"},
{"textures/church1_2", "textures/id1/church1_2"},
{"textures/church7", "textures/id1/church7"},
{"textures/city1_4", "textures/id1/city1_4"},
{"textures/city1_7", "textures/id1/city1_7"},
{"textures/city2_1", "textures/id1/city2_1"},
{"textures/city2_2", "textures/id1/city2_2"},
{"textures/city2_3", "textures/id1/city2_3"},
{"textures/city2_5", "textures/id1/city2_5"},
{"textures/city2_6", "textures/id1/city2_6"},
{"textures/city2_7", "textures/id1/city2_7"},
{"textures/city2_8", "textures/id1/city2_8"},
{"textures/city3_2", "textures/id1/city3_2"},
{"textures/city3_4", "textures/id1/city3_4"},
{"textures/city4_1", "textures/id1/city4_1"},
{"textures/city4_2", "textures/id1/city4_2"},
{"textures/city4_5", "textures/id1/city4_5"},
{"textures/city4_6", "textures/id1/city4_6"},
{"textures/city4_7", "textures/id1/city4_7"},
{"textures/city4_8", "textures/id1/city4_8"},
{"textures/city5_1", "textures/id1/city5_1"},
{"textures/city5_2", "textures/id1/city5_2"},
{"textures/city5_3", "textures/id1/city5_3"},
{"textures/city5_4", "textures/id1/city5_4"},
{"textures/city5_6", "textures/id1/city5_6"},
{"textures/city5_7", "textures/id1/city5_7"},
{"textures/city5_8", "textures/id1/city5_8"},
{"textures/city6_3", "textures/id1/city6_3"},
{"textures/city6_4", "textures/id1/city6_4"},
{"textures/city6_7", "textures/id1/city6_7"},
{"textures/city6_8", "textures/id1/city6_8"},
{"textures/city8_2", "textures/id1/city8_2"},
{"textures/citya1_1", "textures/id1/citya1_1"},
{"textures/clip", "textures/common/clip"},
{"textures/column01_3", "textures/id1/column01_3"},
{"textures/column01_4", "textures/id1/column01_4"},
{"textures/column1_2", "textures/id1/column1_2"},
{"textures/column1_4", "textures/id1/column1_4"},
{"textures/column1_5", "textures/id1/column1_5"},
{"textures/comp1_1", "textures/id1/comp1_1"},
{"textures/comp1_2", "textures/id1/comp1_2"},
{"textures/comp1_3", "textures/id1/comp1_3"},
{"textures/comp1_4", "textures/id1/comp1_4"},
{"textures/comp1_5", "textures/id1/comp1_5"},
{"textures/comp1_6", "textures/id1/comp1_6"},
{"textures/comp1_7", "textures/id1/comp1_7"},
{"textures/comp1_8", "textures/id1/comp1_8"},
{"textures/cop1_1", "textures/id1/cop1_1"},
{"textures/cop1_2", "textures/id1/cop1_2"},
{"textures/cop1_3", "textures/id1/cop1_3"},
{"textures/cop1_4", "textures/id1/cop1_4"},
{"textures/cop1_5", "textures/id1/cop1_5"},
{"textures/cop1_6", "textures/id1/cop1_6"},
{"textures/cop1_7", "textures/id1/cop1_7"},
{"textures/cop1_8", "textures/id1/cop1_8"},
{"textures/cop2_1", "textures/id1/cop2_1"},
{"textures/cop2_2", "textures/id1/cop2_2"},
{"textures/cop2_3", "textures/id1/cop2_3"},
{"textures/cop2_4", "textures/id1/cop2_4"},
{"textures/cop2_5", "textures/id1/cop2_5"},
{"textures/cop2_6", "textures/id1/cop2_6"},
{"textures/cop3_1", "textures/id1/cop3_1"},
{"textures/cop3_2", "textures/id1/cop3_2"},
{"textures/cop3_4", "textures/id1/cop3_4"},
{"textures/cop4_3", "textures/id1/cop4_3"},
{"textures/cop4_5", "textures/id1/cop4_5"},
{"textures/crate0_side", "textures/id1/crate0_side"},
{"textures/crate0_top", "textures/id1/crate0_top"},
{"textures/crate1_side", "textures/id1/crate1_side"},
{"textures/crate1_top", "textures/id1/crate1_top"},
{"textures/dem4_1", "textures/id1/dem4_1"},
{"textures/dem4_4", "textures/id1/dem4_4"},
{"textures/dem5_3", "textures/id1/dem5_3"},
{"textures/demc4_4", "textures/id1/demc4_4"},
{"textures/door01_2", "textures/id1/door01_2"},
{"textures/door02_1", "textures/id1/door02_1"},
{"textures/door02_2", "textures/id1/door02_2"},
{"textures/door02_3", "textures/id1/door02_3"},
{"textures/door02_7", "textures/id1/door02_7"},
{"textures/door03_2", "textures/id1/door03_2"},
{"textures/door03_3", "textures/id1/door03_3"},
{"textures/door03_4", "textures/id1/door03_4"},
{"textures/door03_5", "textures/id1/door03_5"},
{"textures/door04_1", "textures/id1/door04_1"},
{"textures/door04_2", "textures/id1/door04_2"},
{"textures/door05_2", "textures/id1/door05_2"},
{"textures/door05_3", "textures/id1/door05_3"},
{"textures/dopeback", "textures/id1/dopeback"},
{"textures/dopefish", "textures/id1/dopefish"},
{"textures/dr01_1", "textures/id1/dr01_1"},
{"textures/dr01_2", "textures/id1/dr01_2"},
{"textures/dr02_1", "textures/id1/dr02_1"},
{"textures/dr02_2", "textures/id1/dr02_2"},
{"textures/dr03_1", "textures/id1/dr03_1"},
{"textures/dr05_2", "textures/id1/dr05_2"},
{"textures/dr07_1", "textures/id1/dr07_1"},
{"textures/dung01_1", "textures/id1/dung01_1"},
{"textures/dung01_2", "textures/id1/dung01_2"},
{"textures/dung01_3", "textures/id1/dung01_3"},
{"textures/dung01_4", "textures/id1/dung01_4"},
{"textures/dung01_5", "textures/id1/dung01_5"},
{"textures/dung02_1", "textures/id1/dung02_1"},
{"textures/dung02_5", "textures/id1/dung02_5"},
{"textures/ecop1_1", "textures/id1/ecop1_1"},
{"textures/ecop1_4", "textures/id1/ecop1_4"},
{"textures/ecop1_6", "textures/id1/ecop1_6"},
{"textures/ecop1_7", "textures/id1/ecop1_7"},
{"textures/ecop1_8", "textures/id1/ecop1_8"},
{"textures/edoor01_1", "textures/id1/edoor01_1"},
{"textures/elwall1_1", "textures/id1/elwall1_1"},
{"textures/elwall2_4", "textures/id1/elwall2_4"},
{"textures/emetal1_3", "textures/id1/emetal1_3"},
{"textures/enter01", "textures/id1/enter01"},
{"textures/exit01", "textures/id1/exit01"},
{"textures/exit02_2", "textures/id1/exit02_2"},
{"textures/exit02_3", "textures/id1/exit02_3"},
{"textures/floor01_5", "textures/id1/floor01_5"},
{"textures/grave01_1", "textures/id1/grave01_1"},
{"textures/grave01_3", "textures/id1/grave01_3"},
{"textures/grave02_1", "textures/id1/grave02_1"},
{"textures/grave02_2", "textures/id1/grave02_2"},
{"textures/grave02_3", "textures/id1/grave02_3"},
{"textures/grave02_4", "textures/id1/grave02_4"},
{"textures/grave02_5", "textures/id1/grave02_5"},
{"textures/grave02_6", "textures/id1/grave02_6"},
{"textures/grave02_7", "textures/id1/grave02_7"},
{"textures/grave03_1", "textures/id1/grave03_1"},
{"textures/grave03_2", "textures/id1/grave03_2"},
{"textures/grave03_3", "textures/id1/grave03_3"},
{"textures/grave03_4", "textures/id1/grave03_4"},
{"textures/grave03_5", "textures/id1/grave03_5"},
{"textures/grave03_6", "textures/id1/grave03_6"},
{"textures/grave03_7", "textures/id1/grave03_7"},
{"textures/ground1_1", "textures/id1/ground1_1"},
{"textures/ground1_2", "textures/id1/ground1_2"},
{"textures/ground1_5", "textures/id1/ground1_5"},
{"textures/ground1_6", "textures/id1/ground1_6"},
{"textures/ground1_7", "textures/id1/ground1_7"},
{"textures/ground1_8", "textures/id1/ground1_8"},
{"textures/key01_1", "textures/id1/key01_1"},
{"textures/key01_2", "textures/id1/key01_2"},
{"textures/key01_3", "textures/id1/key01_3"},
{"textures/key02_1", "textures/id1/key02_1"},
{"textures/key02_2", "textures/id1/key02_2"},
{"textures/key03_1", "textures/id1/key03_1"},
{"textures/key03_2", "textures/id1/key03_2"},
{"textures/key03_3", "textures/id1/key03_3"},
{"textures/lgmetal", "textures/id1/lgmetal"},
{"textures/lgmetal2", "textures/id1/lgmetal2"},
{"textures/lgmetal3", "textures/id1/lgmetal3"},
{"textures/lgmetal4", "textures/id1/lgmetal4"},
{"textures/light1_1", "textures/id1/light1_1"},
{"textures/light1_2", "textures/id1/light1_2"},
{"textures/light1_3", "textures/id1/light1_3"},
{"textures/light1_4", "textures/id1/light1_4"},
{"textures/light1_5", "textures/id1/light1_5"},
{"textures/light1_7", "textures/id1/light1_7"},
{"textures/light1_8", "textures/id1/light1_8"},
{"textures/light3_3", "textures/id1/light3_3"},
{"textures/light3_5", "textures/id1/light3_5"},
{"textures/light3_6", "textures/id1/light3_6"},
{"textures/light3_7", "textures/id1/light3_7"},
{"textures/light3_8", "textures/id1/light3_8"},
{"textures/m5_3", "textures/id1/m5_3"},
{"textures/m5_5", "textures/id1/m5_5"},
{"textures/m5_8", "textures/id1/m5_8"},
{"textures/med100", "textures/id1/med100"},
{"textures/med3_0", "textures/id1/med3_0"},
{"textures/med3_1", "textures/id1/med3_1"},
{"textures/met5_1", "textures/id1/met5_1"},
{"textures/met5_2", "textures/id1/met5_2"},
{"textures/met5_3", "textures/id1/met5_3"},
{"textures/metal1_1", "textures/id1/metal1_1"},
{"textures/metal1_2", "textures/id1/metal1_2"},
{"textures/metal1_3", "textures/id1/metal1_3"},
{"textures/metal1_4", "textures/id1/metal1_4"},
{"textures/metal1_5", "textures/id1/metal1_5"},
{"textures/metal1_6", "textures/id1/metal1_6"},
{"textures/metal1_7", "textures/id1/metal1_7"},
{"textures/metal2_1", "textures/id1/metal2_1"},
{"textures/metal2_2", "textures/id1/metal2_2"},
{"textures/metal2_3", "textures/id1/metal2_3"},
{"textures/metal2_4", "textures/id1/metal2_4"},
{"textures/metal2_5", "textures/id1/metal2_5"},
{"textures/metal2_6", "textures/id1/metal2_6"},
{"textures/metal2_7", "textures/id1/metal2_7"},
{"textures/metal2_8", "textures/id1/metal2_8"},
{"textures/metal3_2", "textures/id1/metal3_2"},
{"textures/metal4_2", "textures/id1/metal4_2"},
{"textures/metal4_3", "textures/id1/metal4_3"},
{"textures/metal4_4", "textures/id1/metal4_4"},
{"textures/metal4_5", "textures/id1/metal4_5"},
{"textures/metal4_6", "textures/id1/metal4_6"},
{"textures/metal4_7", "textures/id1/metal4_7"},
{"textures/metal4_8", "textures/id1/metal4_8"},
{"textures/metal5_1", "textures/id1/metal5_1"},
{"textures/metal5_2", "textures/id1/metal5_2"},
{"textures/metal5_3", "textures/id1/metal5_3"},
{"textures/metal5_4", "textures/id1/metal5_4"},
{"textures/metal5_5", "textures/id1/metal5_5"},
{"textures/metal5_6", "textures/id1/metal5_6"},
{"textures/metal5_8", "textures/id1/metal5_8"},
{"textures/metal6_1", "textures/id1/metal6_1"},
{"textures/metal6_2", "textures/id1/metal6_2"},
{"textures/metal6_3", "textures/id1/metal6_3"},
{"textures/metal6_4", "textures/id1/metal6_4"},
{"textures/metalt1_1", "textures/id1/metalt1_1"},
{"textures/metalt1_2", "textures/id1/metalt1_2"},
{"textures/metalt1_7", "textures/id1/metalt1_7"},
{"textures/metalt2_1", "textures/id1/metalt2_1"},
{"textures/metalt2_2", "textures/id1/metalt2_2"},
{"textures/metalt2_3", "textures/id1/metalt2_3"},
{"textures/metalt2_4", "textures/id1/metalt2_4"},
{"textures/metalt2_5", "textures/id1/metalt2_5"},
{"textures/metalt2_6", "textures/id1/metalt2_6"},
{"textures/metalt2_7", "textures/id1/metalt2_7"},
{"textures/metalt2_8", "textures/id1/metalt2_8"},
{"textures/metflor2_1", "textures/id1/metflor2_1"},
{"textures/mmetal1_1", "textures/id1/mmetal1_1"},
{"textures/mmetal1_2", "textures/id1/mmetal1_2"},
{"textures/mmetal1_3", "textures/id1/mmetal1_3"},
{"textures/mmetal1_5", "textures/id1/mmetal1_5"},
{"textures/mmetal1_6", "textures/id1/mmetal1_6"},
{"textures/mmetal1_7", "textures/id1/mmetal1_7"},
{"textures/mmetal1_8", "textures/id1/mmetal1_8"},
{"textures/mswtch_2", "textures/id1/mswtch_2"},
{"textures/mswtch_3", "textures/id1/mswtch_3"},
{"textures/mswtch_4", "textures/id1/mswtch_4"},
{"textures/muh_bad", "textures/id1/muh_bad"},
{"textures/nail0sid", "textures/id1/nail0sid"},
{"textures/nail0top", "textures/id1/nail0top"},
{"textures/nail1sid", "textures/id1/nail1sid"},
{"textures/nail1top", "textures/id1/nail1top"},
{"textures/nmetal2_1", "textures/id1/nmetal2_1"},
{"textures/nmetal2_6", "textures/id1/nmetal2_6"},
{"textures/plat_side1", "textures/id1/plat_side1"},
{"textures/plat_stem", "textures/id1/plat_stem"},
{"textures/plat_top1", "textures/id1/plat_top1"},
{"textures/plat_top2", "textures/id1/plat_top2"},
{"textures/quake", "textures/id1/quake"},
{"textures/raven", "textures/id1/raven"},
{"textures/rock0sid", "textures/id1/rock0sid"},
{"textures/rock1_2", "textures/id1/rock1_2"},
{"textures/rock1sid", "textures/id1/rock1sid"},
{"textures/rock3_2", "textures/id1/rock3_2"},
{"textures/rock3_7", "textures/id1/rock3_7"},
{"textures/rock3_8", "textures/id1/rock3_8"},
{"textures/rock4_1", "textures/id1/rock4_1"},
{"textures/rock4_2", "textures/id1/rock4_2"},
{"textures/rock5_2", "textures/id1/rock5_2"},
{"textures/rockettop", "textures/id1/rockettop"},
{"textures/rune1_1", "textures/id1/rune1_1"},
{"textures/rune1_4", "textures/id1/rune1_4"},
{"textures/rune1_5", "textures/id1/rune1_5"},
{"textures/rune1_6", "textures/id1/rune1_6"},
{"textures/rune1_7", "textures/id1/rune1_7"},
{"textures/rune2_1", "textures/id1/rune2_1"},
{"textures/rune2_2", "textures/id1/rune2_2"},
{"textures/rune2_3", "textures/id1/rune2_3"},
{"textures/rune2_4", "textures/id1/rune2_4"},
{"textures/rune2_5", "textures/id1/rune2_5"},
{"textures/rune_a", "textures/id1/rune_a"},
{"textures/sfloor1_2", "textures/id1/sfloor1_2"},
{"textures/sfloor3_2", "textures/id1/sfloor3_2"},
{"textures/sfloor4_1", "textures/id1/sfloor4_1"},
{"textures/sfloor4_2", "textures/id1/sfloor4_2"},
{"textures/sfloor4_4", "textures/id1/sfloor4_4"},
{"textures/sfloor4_5", "textures/id1/sfloor4_5"},
{"textures/sfloor4_6", "textures/id1/sfloor4_6"},
{"textures/sfloor4_7", "textures/id1/sfloor4_7"},
{"textures/sfloor4_8", "textures/id1/sfloor4_8"},
{"textures/shot0sid", "textures/id1/shot0sid"},
{"textures/shot0top", "textures/id1/shot0top"},
{"textures/shot1sid", "textures/id1/shot1sid"},
{"textures/shot1top", "textures/id1/shot1top"},
{"textures/skill0", "textures/id1/skill0"},
{"textures/skill1", "textures/id1/skill1"},
{"textures/skill2", "textures/id1/skill2"},
{"textures/skill3", "textures/id1/skill3"},
{"textures/sky1", "textures/id1/sky1"},
{"textures/sky4", "textures/id1/sky4"},
{"textures/slip1", "textures/id1/slip1"},
{"textures/slip2", "textures/id1/slip2"},
{"textures/slipbotsd", "textures/id1/slipbotsd"},
{"textures/sliplite", "textures/id1/sliplite"},
{"textures/slipside", "textures/id1/slipside"},
{"textures/sliptopsd", "textures/id1/sliptopsd"},
{"textures/stone1_3", "textures/id1/stone1_3"},
{"textures/stone1_5", "textures/id1/stone1_5"},
{"textures/stone1_7", "textures/id1/stone1_7"},
{"textures/switch_1", "textures/id1/switch_1"},
{"textures/swtch1_1", "textures/id1/swtch1_1"},
{"textures/tech01_1", "textures/id1/tech01_1"},
{"textures/tech01_2", "textures/id1/tech01_2"},
{"textures/tech01_3", "textures/id1/tech01_3"},
{"textures/tech01_5", "textures/id1/tech01_5"},
{"textures/tech01_6", "textures/id1/tech01_6"},
{"textures/tech01_7", "textures/id1/tech01_7"},
{"textures/tech01_9", "textures/id1/tech01_9"},
{"textures/tech02_1", "textures/id1/tech02_1"},
{"textures/tech02_2", "textures/id1/tech02_2"},
{"textures/tech02_3", "textures/id1/tech02_3"},
{"textures/tech02_5", "textures/id1/tech02_5"},
{"textures/tech02_6", "textures/id1/tech02_6"},
{"textures/tech02_7", "textures/id1/tech02_7"},
{"textures/tech03_1", "textures/id1/tech03_1"},
{"textures/tech03_2", "textures/id1/tech03_2"},
{"textures/tech04_1", "textures/id1/tech04_1"},
{"textures/tech04_2", "textures/id1/tech04_2"},
{"textures/tech04_3", "textures/id1/tech04_3"},
{"textures/tech04_4", "textures/id1/tech04_4"},
{"textures/tech04_5", "textures/id1/tech04_5"},
{"textures/tech04_6", "textures/id1/tech04_6"},
{"textures/tech04_7", "textures/id1/tech04_7"},
{"textures/tech04_8", "textures/id1/tech04_8"},
{"textures/tech05_1", "textures/id1/tech05_1"},
{"textures/tech05_2", "textures/id1/tech05_2"},
{"textures/tech06_1", "textures/id1/tech06_1"},
{"textures/tech06_2", "textures/id1/tech06_2"},
{"textures/tech07_1", "textures/id1/tech07_1"},
{"textures/tech07_2", "textures/id1/tech07_2"},
{"textures/tech08_1", "textures/id1/tech08_1"},
{"textures/tech08_2", "textures/id1/tech08_2"},
{"textures/tech09_3", "textures/id1/tech09_3"},
{"textures/tech09_4", "textures/id1/tech09_4"},
{"textures/tech10_1", "textures/id1/tech10_1"},
{"textures/tech10_3", "textures/id1/tech10_3"},
{"textures/tech11_1", "textures/id1/tech11_1"},
{"textures/tech11_2", "textures/id1/tech11_2"},
{"textures/tech12_1", "textures/id1/tech12_1"},
{"textures/tech13_2", "textures/id1/tech13_2"},
{"textures/tech14_1", "textures/id1/tech14_1"},
{"textures/tech14_2", "textures/id1/tech14_2"},
{"textures/tele_top", "textures/id1/tele_top"},
{"textures/tlight01", "textures/id1/tlight01"},
{"textures/tlight01_2", "textures/id1/tlight01_2"},
{"textures/tlight02", "textures/id1/tlight02"},
{"textures/tlight03", "textures/id1/tlight03"},
{"textures/tlight05", "textures/id1/tlight05"},
{"textures/tlight07", "textures/id1/tlight07"},
{"textures/tlight08", "textures/id1/tlight08"},
{"textures/tlight09", "textures/id1/tlight09"},
{"textures/tlight10", "textures/id1/tlight10"},
{"textures/tlight11", "textures/id1/tlight11"},
{"textures/trigger", "textures/common/trigger"},
{"textures/twall1_1", "textures/id1/twall1_1"},
{"textures/twall1_2", "textures/id1/twall1_2"},
{"textures/twall1_4", "textures/id1/twall1_4"},
{"textures/twall2_1", "textures/id1/twall2_1"},
{"textures/twall2_2", "textures/id1/twall2_2"},
{"textures/twall2_3", "textures/id1/twall2_3"},
{"textures/twall2_5", "textures/id1/twall2_5"},
{"textures/twall2_6", "textures/id1/twall2_6"},
{"textures/twall3_1", "textures/id1/twall3_1"},
{"textures/twall5_1", "textures/id1/twall5_1"},
{"textures/twall5_2", "textures/id1/twall5_2"},
{"textures/twall5_3", "textures/id1/twall5_3"},
{"textures/unwall1_8", "textures/id1/unwall1_8"},
{"textures/uwall1_2", "textures/id1/uwall1_2"},
{"textures/uwall1_3", "textures/id1/uwall1_3"},
{"textures/uwall1_4", "textures/id1/uwall1_4"},
{"textures/vine1_2", "textures/id1/vine1_2"},
{"textures/wall11_2", "textures/id1/wall11_2"},
{"textures/wall11_6", "textures/id1/wall11_6"},
{"textures/wall14_5", "textures/id1/wall14_5"},
{"textures/wall14_6", "textures/id1/wall14_6"},
{"textures/wall16_7", "textures/id1/wall16_7"},
{"textures/wall3_4", "textures/id1/wall3_4"},
{"textures/wall5_4", "textures/id1/wall5_4"},
{"textures/wall9_3", "textures/id1/wall9_3"},
{"textures/wall9_8", "textures/id1/wall9_8"},
{"textures/warch05", "textures/id1/warch05"},
{"textures/wbrick1_4", "textures/id1/wbrick1_4"},
{"textures/wbrick1_5", "textures/id1/wbrick1_5"},
{"textures/wceiling4", "textures/id1/wceiling4"},
{"textures/wceiling5", "textures/id1/wceiling5"},
{"textures/wenter01", "textures/id1/wenter01"},
{"textures/wexit01", "textures/id1/wexit01"},
{"textures/wgrass1_1", "textures/id1/wgrass1_1"},
{"textures/wgrnd1_5", "textures/id1/wgrnd1_5"},
{"textures/wgrnd1_6", "textures/id1/wgrnd1_6"},
{"textures/wgrnd1_8", "textures/id1/wgrnd1_8"},
{"textures/window01_1", "textures/id1/window01_1"},
{"textures/window01_2", "textures/id1/window01_2"},
{"textures/window01_3", "textures/id1/window01_3"},
{"textures/window01_4", "textures/id1/window01_4"},
{"textures/window02_1", "textures/id1/window02_1"},
{"textures/window03", "textures/id1/window03"},
{"textures/window1_2", "textures/id1/window1_2"},
{"textures/window1_3", "textures/id1/window1_3"},
{"textures/window1_4", "textures/id1/window1_4"},
{"textures/wiz1_1", "textures/id1/wiz1_1"},
{"textures/wiz1_4", "textures/id1/wiz1_4"},
{"textures/wizmet1_1", "textures/id1/wizmet1_1"},
{"textures/wizmet1_2", "textures/id1/wizmet1_2"},
{"textures/wizmet1_3", "textures/id1/wizmet1_3"},
{"textures/wizmet1_4", "textures/id1/wizmet1_4"},
{"textures/wizmet1_5", "textures/id1/wizmet1_5"},
{"textures/wizmet1_6", "textures/id1/wizmet1_6"},
{"textures/wizmet1_7", "textures/id1/wizmet1_7"},
{"textures/wizmet1_8", "textures/id1/wizmet1_8"},
{"textures/wizwin1_2", "textures/id1/wizwin1_2"},
{"textures/wizwin1_8", "textures/id1/wizwin1_8"},
{"textures/wizwood1_2", "textures/id1/wizwood1_2"},
{"textures/wizwood1_3", "textures/id1/wizwood1_3"},
{"textures/wizwood1_4", "textures/id1/wizwood1_4"},
{"textures/wizwood1_5", "textures/id1/wizwood1_5"},
{"textures/wizwood1_6", "textures/id1/wizwood1_6"},
{"textures/wizwood1_7", "textures/id1/wizwood1_7"},
{"textures/wizwood1_8", "textures/id1/wizwood1_8"},
{"textures/wkey02_1", "textures/id1/wkey02_1"},
{"textures/wkey02_2", "textures/id1/wkey02_2"},
{"textures/wkey02_3", "textures/id1/wkey02_3"},
{"textures/wmet1_1", "textures/id1/wmet1_1"},
{"textures/wmet2_1", "textures/id1/wmet2_1"},
{"textures/wmet2_2", "textures/id1/wmet2_2"},
{"textures/wmet2_3", "textures/id1/wmet2_3"},
{"textures/wmet2_4", "textures/id1/wmet2_4"},
{"textures/wmet2_6", "textures/id1/wmet2_6"},
{"textures/wmet3_1", "textures/id1/wmet3_1"},
{"textures/wmet3_3", "textures/id1/wmet3_3"},
{"textures/wmet3_4", "textures/id1/wmet3_4"},
{"textures/wmet4_2", "textures/id1/wmet4_2"},
{"textures/wmet4_3", "textures/id1/wmet4_3"},
{"textures/wmet4_4", "textures/id1/wmet4_4"},
{"textures/wmet4_5", "textures/id1/wmet4_5"},
{"textures/wmet4_6", "textures/id1/wmet4_6"},
{"textures/wmet4_7", "textures/id1/wmet4_7"},
{"textures/wmet4_8", "textures/id1/wmet4_8"},
{"textures/wood1_1", "textures/id1/wood1_1"},
{"textures/wood1_5", "textures/id1/wood1_5"},
{"textures/wood1_7", "textures/id1/wood1_7"},
{"textures/wood1_8", "textures/id1/wood1_8"},
{"textures/woodflr1_2", "textures/id1/woodflr1_2"},
{"textures/woodflr1_4", "textures/id1/woodflr1_4"},
{"textures/woodflr1_5", "textures/id1/woodflr1_5"},
{"textures/wswamp1_2", "textures/id1/wswamp1_2"},
{"textures/wswamp1_4", "textures/id1/wswamp1_4"},
{"textures/wswamp2_1", "textures/id1/wswamp2_1"},
{"textures/wswamp2_2", "textures/id1/wswamp2_2"},
{"textures/wswitch1", "textures/id1/wswitch1"},
{"textures/wwall1_1", "textures/id1/wwall1_1"},
{"textures/wwood1_5", "textures/id1/wwood1_5"},
{"textures/wwood1_7", "textures/id1/wwood1_7"},
{"textures/z_exit", "textures/id1/z_exit"},
// TODO add more wads like prototype, Makkon et cetera
};
static const int numTextureConvertNames = sizeof( textureConvertNames ) / sizeof( textureConvertNames[0] );
void idMapFile::WadTextureToMaterial( const char* material, idStr& matName )
{
for( int i = 0 ; i < numTextureConvertNames ; i++ )
{
if( !idStr::Icmp( material, textureConvertNames[i].quakeName ) )
{
matName = textureConvertNames[i].doomName;
return;
}
}
matName = material;
}
// RB end

View file

@ -484,6 +484,9 @@ public:
bool WriteJSON( const char* fileName, const char* ext, bool fromBasePath = true );
bool ConvertToPolygonMeshFormat();
bool ConvertToValve220Format();
// converts Wad texture names to valid Doom 3 materials and gives every entity a unique name
bool ConvertQuakeToDoom();
// RB end
// get the number of entities in the map
@ -516,8 +519,8 @@ public:
bool NeedsReload();
int AddEntity( idMapEntity* mapentity );
idMapEntity* FindEntity( const char* name );
idMapEntity* FindEntityAtOrigin( const idVec3& org ); // RB
idMapEntity* FindEntity( const char* name ) const;
idMapEntity* FindEntityAtOrigin( const idVec3& org ) const; // RB
void RemoveEntity( idMapEntity* mapEnt );
void RemoveEntities( const char* classname );
void RemoveAllEntities();
@ -528,6 +531,7 @@ public:
}
static void AddMaterialToCollection( const char* material, idStrList& textureCollections );
static void WadTextureToMaterial( const char* material, idStr& matName );
protected:
float version;
@ -540,6 +544,7 @@ protected:
private:
void SetGeometryCRC();
const char* GetUniqueEntityName( const char* classname ) const; // RB
};
ID_INLINE idMapFile::idMapFile()