void EntityClassQuake3_construct() { // start by creating the default unknown eclass eclass_bad = EClass_Create("UNKNOWN_CLASS", Vector3(0.0f, 0.5f, 0.0f), ""); EntityClass_realise(); }
void EntityClassDoom3_construct(){ GlobalFileSystem().attach( g_EntityClassDoom3 ); // start by creating the default unknown eclass g_EntityClassDoom3_bad = EClass_Create( "UNKNOWN_CLASS", Vector3( 0.0f, 0.5f, 0.0f ), "" ); EntityClassDoom3_realise(); }
eclass_t *Eclass_ForName( const char *name, qboolean has_brushes ){ eclass_t *e; if ( !name || *name == '\0' ) { return eclass_bad; } #ifdef _DEBUG // grouping stuff, not an eclass if ( strcmp( name, "group_info" ) == 0 ) { Sys_FPrintf( SYS_WRN, "WARNING: unexpected group_info entity in Eclass_ForName\n" ); } #endif if ( !name ) { return eclass_bad; } for ( e = eclass ; e ; e = e->next ) if ( !strcmp( name, e->name ) ) { return e; } // create a new class for it if ( has_brushes ) { e = EClass_Create( name, 0, 0.5, 0,NULL,NULL,"Not found in source." ); } else { e = EClass_Create( name, 0, 0.5, 0,&smallbox[0],&smallbox[1],"Not found in source." ); } Eclass_InsertAlphabetized( e ); return e; }
void Eclass_Init(){ GSList *pFiles; // start by creating the default unknown eclass eclass_bad = EClass_Create( "UNKNOWN_CLASS", 0, 0.5, 0,NULL,NULL,NULL ); // now scan the definitions _EClassTable *pTable = &g_EClassDefTable; while ( pTable ) { // read in all scripts/*.<extension> pFiles = vfsGetFileList( "scripts", pTable->m_pfnGetExtension() ); if ( pFiles ) { GSList *pFile = pFiles; while ( pFile ) { /*! \todo the MP/SP filtering rules need to be CLEANED UP and SANITIZED */ // HACK // JKII SP/MP mapping mode if ( g_pGameDescription->mGameFile == "jk2.game" || g_pGameDescription->mGameFile == "ja.game" ) { if ( !strcmp( ValueForKey( g_qeglobals.d_project_entity, "gamemode" ), "sp" ) ) { // SP mapping, ignore mp_*.def char *name = (char *)pFile->data; if ( name[0] == 'm' && name[1] == 'p' && name[2] == '_' ) { Sys_Printf( "Single Player mapping mode. Ignoring '%s'\n", name ); pFile = pFile->next; continue; } } else { // MP mapping, ignore sp_*.def char *name = (char *)pFile->data; if ( name[0] == 's' && name[1] == 'p' && name[2] == '_' ) { Sys_Printf( "Multiplayer mapping mode. Ignoring '%s'\n", name ); pFile = pFile->next; continue; } } } // RIANT // STVEF SP/MP mapping mode else if ( g_pGameDescription->mGameFile == "stvef.game" ) { if ( !strcmp( ValueForKey( g_qeglobals.d_project_entity, "gamemode" ), "sp" ) ) { // SP mapping, ignore mp_*.def char *name = (char *)pFile->data; if ( name[0] == 'm' && name[1] == 'p' && name[2] == '_' || name[0] == 'h' && name[1] == 'm' && name[2] == '_' ) { Sys_Printf( "Single Player mapping mode. Ignoring '%s'\n", name ); pFile = pFile->next; continue; } } else { // HM mapping, ignore sp_*.def char *name = (char *)pFile->data; if ( name[0] == 's' && name[1] == 'p' && name[2] == '_' ) { Sys_Printf( "HoloMatch mapping mode. Ignoring '%s'\n", name ); pFile = pFile->next; continue; } } } // for a given name, we grab the first .def in the vfs // this allows to override baseq3/scripts/entities.def for instance char relPath[PATH_MAX]; strcpy( relPath, "scripts/" ); strcat( relPath, (char*)pFile->data ); char *fullpath = vfsGetFullPath( relPath, 0, 0 ); if ( !fullpath ) { Sys_FPrintf( SYS_ERR, "Failed to find the full path for \"%s\" in the VFS\n", relPath ); } else{ pTable->m_pfnScanFile( fullpath ); } if ( g_pGameDescription->mEClassSingleLoad ) { break; } pFile = pFile->next; } vfsClearFileDirList( &pFiles ); pFiles = NULL; } else{ Sys_FPrintf( SYS_ERR, "Didn't find any scripts/*.%s files to load EClass information\n", pTable->m_pfnGetExtension() ); } // we deal with two formats max, if the other table exists, loop again if ( g_bHaveEClassExt && pTable == &g_EClassDefTable ) { pTable = &g_EClassExtTable; } else{ pTable = NULL; // done, exit } } Eclass_CreateSpriteModelPaths(); }