//--------------------------------------------------------------------------- int32_t ObjectType::init(FitIniFilePtr objFile) { int32_t result = 0; result = objFile->seekBlock("ObjectType"); if(result != NO_ERROR) return(result); numUsers = 0; //-------------------------------------------------------------------- // Read in the rest of the Object type Data here. This includes // exposions, collision extents, etc. char apprName[512]; result = objFile->readIdString("AppearanceName", apprName, 511); if(result == NO_ERROR) { appearName = (PSTR)ObjectTypeManager::objectTypeCache->Malloc(strlen(apprName) + 1); strcpy(appearName, apprName); } result = objFile->readIdLong("ExplosionObject", explosionObject); if(result != NO_ERROR) return(result); result = objFile->readIdLong("DestroyedObject", destroyedObject); if(result != NO_ERROR) return(result); result = objFile->readIdFloat("ExtentRadius", extentRadius); if(result != NO_ERROR) extentRadius = 0.0f; result = objFile->readIdLong("IconNumber", iconNumber); if(result != NO_ERROR) iconNumber = -1; keepMe = true; //Never cache out anymore! teamId = -1; //Everything starts out Neutral now. return(NO_ERROR); }
//--------------------------------------------------------------------------- void InitializeGameEngine() { //--------------------------------------------------------------------- float doubleClickThreshold = 0.2f; long dragThreshold = 10; Environment.Key_Exit=-1; // so escape doesn't kill your app //-------------------------------------------------------------- // Read in System.CFG FitIniFilePtr systemFile = new FitIniFile; #ifdef _DEBUG long systemOpenResult = #endif systemFile->open("system.cfg"); #ifdef _DEBUG if( systemOpenResult != NO_ERR) { char Buffer[256]; gos_GetCurrentPath( Buffer, 256 ); STOP(( "Cannot find \"system.cfg\" file in %s",Buffer )); } #endif { #ifdef _DEBUG long systemBlockResult = #endif systemFile->seekBlock("systemHeap"); gosASSERT(systemBlockResult == NO_ERR); { long result = systemFile->readIdULong("systemHeapSize",systemHeapSize); gosASSERT(result == NO_ERR); result = systemFile->readIdULong("guiHeapSize",guiHeapSize); gosASSERT(result == NO_ERR); result = systemFile->readIdULong("logisticsHeapSize",logisticsHeapSize); gosASSERT(result == NO_ERR); } #ifdef _DEBUG long systemPathResult = #endif systemFile->seekBlock("systemPaths"); gosASSERT(systemPathResult == NO_ERR); { long result = systemFile->readIdString("terrainPath",terrainPath,79); gosASSERT(result == NO_ERR); result = systemFile->readIdString("artPath",artPath,79); gosASSERT(result == NO_ERR); result = systemFile->readIdString("fontPath",fontPath,79); gosASSERT(result == NO_ERR); result = systemFile->readIdString("savePath",savePath,79); gosASSERT(result == NO_ERR); result = systemFile->readIdString("spritePath",spritePath,79); gosASSERT(result == NO_ERR); result = systemFile->readIdString("shapesPath",shapesPath,79); gosASSERT(result == NO_ERR); result = systemFile->readIdString("soundPath",soundPath,79); gosASSERT(result == NO_ERR); result = systemFile->readIdString("objectPath",objectPath,79); gosASSERT(result == NO_ERR); result = systemFile->readIdString("cameraPath",cameraPath,79); gosASSERT(result == NO_ERR); result = systemFile->readIdString("tilePath",tilePath,79); gosASSERT(result == NO_ERR); result = systemFile->readIdString("missionPath",missionPath,79); gosASSERT(result == NO_ERR); result = systemFile->readIdString("warriorPath",warriorPath,79); gosASSERT(result == NO_ERR); result = systemFile->readIdString("profilePath",profilePath,79); gosASSERT(result == NO_ERR); result = systemFile->readIdString("interfacepath",interfacePath,79); gosASSERT(result == NO_ERR); result = systemFile->readIdString("moviepath",moviePath,79); gosASSERT(result == NO_ERR); result = systemFile->readIdString("CDsoundPath",CDsoundPath,79); gosASSERT(result == NO_ERR); result = systemFile->readIdString("CDmoviepath",CDmoviePath,79); gosASSERT(result == NO_ERR); result = systemFile->readIdString("CDspritePath",CDspritePath,79); gosASSERT(result == NO_ERR); } #ifdef _DEBUG long fastFileResult = #endif systemFile->seekBlock("FastFiles"); gosASSERT(fastFileResult == NO_ERR); { long result = systemFile->readIdLong("NumFastFiles",maxFastFiles); if (result != NO_ERR) maxFastFiles = 0; if (maxFastFiles) { fastFiles = (FastFile **)malloc(maxFastFiles*sizeof(FastFile *)); memset(fastFiles,0,maxFastFiles*sizeof(FastFile *)); long fileNum = 0; char fastFileId[10]; char fileName[100]; sprintf(fastFileId,"File%d",fileNum); while (systemFile->readIdString(fastFileId,fileName,99) == NO_ERR) { FastFileInit(fileName); fileNum++; sprintf(fastFileId,"File%d",fileNum); numFastFiles++; } } } long result = systemFile->seekBlock("UseMusic"); if (result == NO_ERR) useMusic = TRUE; else useMusic = FALSE; result = systemFile->seekBlock("UseSound"); if (result == NO_ERR) { useSound = TRUE; } else { useSound = FALSE; useMusic = FALSE; } } systemFile->close(); delete systemFile; systemFile = NULL; //-------------------------------------------------------------- // Read in Prefs.cfg FitIniFilePtr prefs = new FitIniFile; #ifdef _DEBUG long prefsOpenResult = #endif prefs->open("prefs.cfg"); gosASSERT (prefsOpenResult == NO_ERR); { #ifdef _DEBUG long prefsBlockResult = #endif prefs->seekBlock("MechCommander2"); gosASSERT(prefsBlockResult == NO_ERR); { long filterSetting; long result = prefs->readIdLong("FilterState",filterSetting); if (result == NO_ERR) { switch (filterSetting) { default: case 0: FilterState = gos_FilterNone; break; case 1: FilterState = gos_FilterBiLinear; break; case 2: FilterState = gos_FilterTriLinear; break; } } result = prefs->readIdLong("TerrainTextureRes",TERRAIN_TXM_SIZE); if (result != NO_ERR) TERRAIN_TXM_SIZE = 64; result = prefs->readIdLong("Resolution",resolution); if (result != NO_ERR) resolution = 0; result = prefs->readIdLong("ObjectTextureRes",ObjectTextureSize); if (result != NO_ERR) ObjectTextureSize = 128; result = prefs->readIdLong("Difficulty",GameDifficulty); if (result != NO_ERR) GameDifficulty = 1; result = prefs->readIdLong("Brightness",gammaLevel); if (result != NO_ERR) gammaLevel = 0; // store volume settings in global variable since soundsystem // does not exist yet. These will be set in SoundSystem::init() result = prefs->readIdLong("DigitalMasterVolume",DigitalMasterVolume); if (result != NO_ERR) DigitalMasterVolume = 255; result = prefs->readIdLong("MusicVolume",MusicVolume); if (result != NO_ERR) MusicVolume = 64; result = prefs->readIdLong("RadioVolume",RadioVolume); if (result != NO_ERR) RadioVolume = 64; result = prefs->readIdLong("SFXVolume",SFXVolume); if (result != NO_ERR) SFXVolume = 64; result = prefs->readIdFloat("DoubleClickThreshold",doubleClickThreshold); if (result != NO_ERR) doubleClickThreshold = 0.2f; result = prefs->readIdLong("DragThreshold",dragThreshold); if (result != NO_ERR) dragThreshold = 10; result = prefs->readIdULong("BaseVertexColor",BaseVertexColor); if (result != NO_ERR) BaseVertexColor = 0x00000000; result = prefs->readIdBoolean("UnlimitedAmmo",useUnlimitedAmmo); if (result != NO_ERR) useUnlimitedAmmo = true; result = prefs->readIdBoolean("RealLOS",useRealLOS); if (result != NO_ERR) useRealLOS = true; } } prefs->close(); delete prefs; prefs = NULL; //--------------------------------------------------------------------- switch (resolution) { case 0: //640by480 gos_SetScreenMode(640,480); break; case 1: //800by600 gos_SetScreenMode(800,600); break; case 2: //1024by768 gos_SetScreenMode(1024,768); break; case 3: //1280by1024 gos_SetScreenMode(1280,1024); break; case 4: //1600by1200 gos_SetScreenMode(1600,1200); break; } //-------------------------------------------------- // Setup Mouse Parameters from Prefs.CFG //userInput = new UserInput; //userInput->init(); //userInput->setMouseDoubleClickThreshold(doubleClickThreshold); //userInput->setMouseDragThreshold(dragThreshold); //-------------------------------------------------- gosResourceHandle = gos_OpenResourceDLL("mc2res.dll"); gosFontHandle = gos_LoadFont("assets\\graphics\\arial8.tga"); globalFloatHelp = new FloatHelp [MAX_FLOAT_HELPS]; // //---------------------------------- // Start associated stuff. //---------------------------------- Stuff::InitializeClasses(); //-------------------------------------------------------------- // Start the GUI Heap. systemHeap = new UserHeap; gosASSERT(systemHeap != NULL); systemHeap->init(systemHeapSize,"SYSTEM"); //-------------------------------------------------------------- // Start the GUI Heap. guiHeap = new UserHeap; gosASSERT(guiHeap != NULL); guiHeap->init(guiHeapSize,"GUI"); //------------------------------------------------ // Fire up the MC Texture Manager. mcTextureManager = new MC_TextureManager; mcTextureManager->start(); //-------------------------------------------------------------- // Load up the mouse cursors //userInput->initMouseCursors("cursors"); //userInput->mouseOff(); //userInput->setMouseCursor(mState_NORMAL); //------------------------------------------------ // Give the Sound System a Whirl! //soundSystem = new GameSoundSystem; //soundSystem->init(); //((SoundSystem *)soundSystem)->init("sound"); //--------------------------------------------------------- // Start the Mission, Scenario and Logistics classes here logistics = new Logistics; logistics->start(log_SPLASH); //Always start with logistics in Splash Screen Mode }
//--------------------------------------------------------------------------- void __stdcall InitializeGameEngine() { gosResourceHandle = gos_OpenResourceDLL("mc2res.dll"); char temp[256]; cLoadString(IDS_FLOAT_HELP_FONT, temp, 255); PSTR pStr = strstr(temp, ","); if(pStr) { gosFontScale = atoi(pStr + 2); *pStr = 0; } char path [256]; strcpy(path, "assets\\graphics\\"); strcat(path, temp); gosFontHandle = gos_LoadFont(path); //------------------------------------------------------------- // Find the CDPath in the registry and save it off so I can // look in CD Install Path for files. //Changed for the shared source release, just set to current directory //uint32_t maxPathLength = 1023; //gos_LoadDataFromRegistry("CDPath", CDInstallPath, &maxPathLength); //if (!maxPathLength) // strcpy(CDInstallPath,"..\\"); strcpy(CDInstallPath, ".\\"); cLoadString(IDS_MC2_FILEMISSING, FileMissingString, 511); cLoadString(IDS_MC2_CDMISSING, CDMissingString, 1023); cLoadString(IDS_MC2_MISSING_TITLE, MissingTitleString, 255); //-------------------------------------------------------------- // Start the SystemHeap and globalHeapList globalHeapList = new HeapList; gosASSERT(globalHeapList != nullptr); globalHeapList->init(); globalHeapList->update(); //Run Instrumentation into GOS Debugger Screen systemHeap = new UserHeap; gosASSERT(systemHeap != nullptr); systemHeap->init(systemHeapSize, "SYSTEM"); float doubleClickThreshold = 0.2f; int32_t dragThreshold = .016667; //-------------------------------------------------------------- // Read in System.CFG FitIniFile systemFile; #ifdef _DEBUG int32_t systemOpenResult = #endif systemFile.open("system.cfg"); #ifdef _DEBUG if(systemOpenResult != NO_ERROR) { char Buffer[256]; gos_GetCurrentPath(Buffer, 256); STOP(("Cannot find \"system.cfg\" file in %s", Buffer)); } #endif { #ifdef _DEBUG int32_t systemBlockResult = #endif systemFile.seekBlock("systemHeap"); gosASSERT(systemBlockResult == NO_ERROR); { int32_t result = systemFile.readIdULong("systemHeapSize", systemHeapSize); result; gosASSERT(result == NO_ERROR); } #ifdef _DEBUG int32_t systemPathResult = #endif systemFile.seekBlock("systemPaths"); gosASSERT(systemPathResult == NO_ERROR); { int32_t result = systemFile.readIdString("terrainPath", terrainPath, 79); gosASSERT(result == NO_ERROR); result = systemFile.readIdString("artPath", artPath, 79); gosASSERT(result == NO_ERROR); result = systemFile.readIdString("fontPath", fontPath, 79); gosASSERT(result == NO_ERROR); result = systemFile.readIdString("savePath", savePath, 79); gosASSERT(result == NO_ERROR); result = systemFile.readIdString("spritePath", spritePath, 79); gosASSERT(result == NO_ERROR); result = systemFile.readIdString("shapesPath", shapesPath, 79); gosASSERT(result == NO_ERROR); result = systemFile.readIdString("soundPath", soundPath, 79); gosASSERT(result == NO_ERROR); result = systemFile.readIdString("objectPath", objectPath, 79); gosASSERT(result == NO_ERROR); result = systemFile.readIdString("cameraPath", cameraPath, 79); gosASSERT(result == NO_ERROR); result = systemFile.readIdString("tilePath", tilePath, 79); gosASSERT(result == NO_ERROR); result = systemFile.readIdString("missionPath", missionPath, 79); gosASSERT(result == NO_ERROR); result = systemFile.readIdString("warriorPath", warriorPath, 79); gosASSERT(result == NO_ERROR); result = systemFile.readIdString("profilePath", profilePath, 79); gosASSERT(result == NO_ERROR); result = systemFile.readIdString("interfacepath", interfacePath, 79); gosASSERT(result == NO_ERROR); result = systemFile.readIdString("moviepath", moviePath, 79); gosASSERT(result == NO_ERROR); result = systemFile.readIdString("CDsoundPath", CDsoundPath, 79); gosASSERT(result == NO_ERROR); result = systemFile.readIdString("CDmoviepath", CDmoviePath, 79); gosASSERT(result == NO_ERROR); result = systemFile.readIdString("tglPath", tglPath, 79); gosASSERT(result == NO_ERROR); result = systemFile.readIdString("texturePath", texturePath, 79); gosASSERT(result == NO_ERROR); } #ifdef _DEBUG int32_t fastFileResult = #endif systemFile.seekBlock("FastFiles"); gosASSERT(fastFileResult == NO_ERROR); { int32_t result = systemFile.readIdLong("NumFastFiles", maxFastFiles); if(result != NO_ERROR) maxFastFiles = 0; if(maxFastFiles) { fastFiles = (FastFile**)malloc(maxFastFiles * sizeof(FastFile*)); memset(fastFiles, 0, maxFastFiles * sizeof(FastFile*)); int32_t fileNum = 0; char fastFileId[10]; char fileName[100]; sprintf(fastFileId, "File%d", fileNum); while(systemFile.readIdString(fastFileId, fileName, 99) == NO_ERROR) { bool result = FastFileInit(fileName); if(!result) STOP(("Unable to startup fastfiles. Probably an old one in the directory!!")); fileNum++; sprintf(fastFileId, "File%d", fileNum); } } } } systemFile.close(); //-------------------------------------------------------------- // Read in Prefs.cfg bool fullScreen = false; FitIniFilePtr prefs = new FitIniFile; #ifdef _DEBUG int32_t prefsOpenResult = #endif prefs->open("prefs.cfg"); gosASSERT(prefsOpenResult == NO_ERROR); { #ifdef _DEBUG int32_t prefsBlockResult = #endif prefs->seekBlock("MechCommander2"); gosASSERT(prefsBlockResult == NO_ERROR); { int32_t filterSetting; int32_t result = prefs->readIdLong("FilterState", filterSetting); if(result == NO_ERROR) { switch(filterSetting) { default: case 0: FilterState = gos_FilterNone; break; case 1: FilterState = gos_FilterBiLinear; break; case 2: FilterState = gos_FilterTriLinear; break; } } result = prefs->readIdLong("TerrainTextureRes", TERRAIN_TXM_SIZE); if(result != NO_ERROR) TERRAIN_TXM_SIZE = 64; result = prefs->readIdLong("ObjectTextureRes", ObjectTextureSize); if(result != NO_ERROR) ObjectTextureSize = 128; result = prefs->readIdLong("Brightness", gammaLevel); if(result != NO_ERROR) gammaLevel = 0; // store volume settings in global variable since soundsystem // does not exist yet. These will be set in SoundSystem::init() result = prefs->readIdLong("DigitalMasterVolume", DigitalMasterVolume); if(result != NO_ERROR) DigitalMasterVolume = 255; result = prefs->readIdLong("MusicVolume", MusicVolume); if(result != NO_ERROR) MusicVolume = 64; result = prefs->readIdLong("RadioVolume", RadioVolume); if(result != NO_ERROR) RadioVolume = 64; result = prefs->readIdLong("SFXVolume", sfxVolume); if(result != NO_ERROR) sfxVolume = 64; result = prefs->readIdFloat("DoubleClickThreshold", doubleClickThreshold); if(result != NO_ERROR) doubleClickThreshold = 0.2f; result = prefs->readIdLong("DragThreshold", dragThreshold); if(result != NO_ERROR) dragThreshold = .016667; result = prefs->readIdULong("BaseVertexColor", BaseVertexColor); if(result != NO_ERROR) BaseVertexColor = 0x00000000; result = prefs->readIdBoolean("FullScreen", fullScreen); if(result != NO_ERROR) fullScreen = true; result = prefs->readIdLong("Rasterizer", renderer); if(result != NO_ERROR) renderer = 0; if((renderer < 0) || (renderer > 3)) renderer = 0; } } prefs->close(); delete prefs; prefs = nullptr; //------------------------------- // Used to output debug stuff! // Mondo COOL! // simply do this in the code and stuff goes to the file called mc2.output // DEBUG_STREAM << thing_you_want_to_output // // IMPORTANT NOTE: Stuff::InitializeClasses(); MidLevelRenderer::InitializeClasses(8192 * 4, 1024, 0, 0, true); gosFX::InitializeClasses(); gos_PushCurrentHeap(MidLevelRenderer::Heap); MidLevelRenderer::TGAFilePool* pool = new MidLevelRenderer::TGAFilePool("data\\Effects\\"); MidLevelRenderer::MLRTexturePool::Instance = new MidLevelRenderer::MLRTexturePool(pool); MidLevelRenderer::MLRSortByOrder* cameraSorter = new MidLevelRenderer::MLRSortByOrder(MidLevelRenderer::MLRTexturePool::Instance); theClipper = new MidLevelRenderer::MLRClipper(0, cameraSorter); gos_PopCurrentHeap(); //------------------------------------------------------ // Start the GOS FX. gos_PushCurrentHeap(gosFX::Heap); gosFX::EffectLibrary::Instance = new gosFX::EffectLibrary(); Check_Object(gosFX::EffectLibrary::Instance); FullPathFileName effectsName; effectsName.init(effectsPath, "mc2.fx", ""); File effectFile; int32_t result = effectFile.open(effectsName); if(result != NO_ERROR) STOP(("Could not find MC2.fx")); int32_t effectsSize = effectFile.fileSize(); puint8_t effectsData = (puint8_t)systemHeap->Malloc(effectsSize); effectFile.read(effectsData, effectsSize); effectFile.close(); effectStream = new Stuff::MemoryStream(effectsData, effectsSize); gosFX::EffectLibrary::Instance->Load(effectStream); gosFX::LightManager::Instance = new gosFX::LightManager(); gos_PopCurrentHeap(); systemHeap->Free(effectsData); //------------------------------------------------ // Fire up the MC Texture Manager. mcTextureManager = new MC_TextureManager; mcTextureManager->start(); //Startup the vertex array pool mcTextureManager->startVertices(500000); //-------------------------------------------------- // Setup Mouse Parameters from Prefs.CFG userInput = new UserInput; userInput->init(); userInput->setMouseDoubleClickThreshold(doubleClickThreshold); userInput->setMouseDragThreshold(dragThreshold); userInput->initMouseCursors("cursors"); userInput->setMouseCursor(mState_NORMAL); userInput->mouseOn(); // now the sound system soundSystem = new GameSoundSystem; soundSystem->init(); ((SoundSystem*)soundSystem)->init("sound"); sndSystem = soundSystem; // for things in the lib that use sound soundSystem->playDigitalMusic(LOGISTICS_LOOP); pLogData = new LogisticsData; pLogData->init(); pMechlopedia = new Mechlopedia; pMechlopedia->init(); pMechlopedia->begin(); }