// save anim set file BOOL CSeriousSkaStudioApp::SaveAnimSetFile(CAnimSet &as, BOOL bConvert) { DisableRendering(); CTFileName fnAnimSet = as.GetName(); fnAnimSet = fnAnimSet.NoExt() + ".aal"; try { fnAnimSet.RemoveApplicationPath_t(); } catch(char *){} // back up current skeleton list file CTString strBackUp; try { strBackUp.Load_t(fnAnimSet); } catch(char*){} CTFileStream ostrFile; try { ostrFile.Create_t(fnAnimSet,CTStream::CM_TEXT); SaveAnimSet_t(as,ostrFile); ostrFile.Close(); } catch(char *strError) { ErrorMessage(strError); EnableRendering(); return FALSE; } if(bConvert) { ConvertAnimSet(fnAnimSet); } EnableRendering(); return TRUE; }
// Parse smc file in existing model instance void ParseSmcFile_t(CModelInstance &mi, const CTString &fnSmcFile) { // Clear given model instance before parsing mi.Clear(); CTFileName fnFileName = fnSmcFile; try { fnFileName.RemoveApplicationPath_t(); } catch (char *) { } CTString strIncludeFile; strIncludeFile.Load_t(fnFileName); _yy_mi = &mi; SMCPushBuffer(fnFileName, strIncludeFile, TRUE); syyparse(); }
CTString IFeel_GetProjectFileName() { CTString strIFeelTable; CTFileName fnIFeelTable = (CTString)"Data\\IFeel.txt"; CTString strDefaultProjectFile = "Data\\Default.ifr"; // get product name CTString strProduct = IFeel_GetProductName(); try { strIFeelTable.Load_t(fnIFeelTable); } catch(char *strErr) { CPrintF("%s\n",strErr); return ""; } CTString strLine; // read up to 1000 devices for(INDEX idev=0;idev<1000;idev++) { char strDeviceName[256]; char strProjectFile[256]; strLine = strIFeelTable; // read first line strLine.OnlyFirstLine(); if(strLine==strIFeelTable) { break; } // remove that line strIFeelTable.RemovePrefix(strLine); strIFeelTable.DeleteChar(0); // read device name and project file name strIFeelTable.ScanF("\"%256[^\"]\" \"%256[^\"]\"",&strDeviceName,&strProjectFile); // check if this is default if(strcmp(strDeviceName,"Default")==0) strDefaultProjectFile = strProjectFile; // check if this is current device if(strProduct == strDeviceName) return strProjectFile; } // device was not found, return default project file CPrintF("No project file specified for device '%s'.\nUsing default project file\n",strProduct); return strDefaultProjectFile; }
// save skeleton list file BOOL CSeriousSkaStudioApp::SaveSkeletonListFile(CSkeleton &skl, BOOL bConvert) { DisableRendering(); CTFileName fnSkeletonList = skl.GetName(); fnSkeletonList = fnSkeletonList.NoExt() + ".asl"; try { fnSkeletonList.RemoveApplicationPath_t(); } catch(char *){} // back up current skeleton list file CTString strBackUp; try { strBackUp.Load_t(fnSkeletonList); } catch(char*){} CTFileStream ostrFile; try { ostrFile.Create_t(fnSkeletonList,CTStream::CM_TEXT); SaveSkeletonList_t(skl,ostrFile); ostrFile.Close(); } catch(char *strError) { ErrorMessage(strError); EnableRendering(); return FALSE; } if(bConvert) { if(!ConvertSkeleton(fnSkeletonList)) { // convert failed if(strBackUp.Length()>0) { // try returning old mesh list file try { strBackUp.Save_t(fnSkeletonList); } catch(char*){} } } } EnableRendering(); return TRUE; }
// save mesh list file BOOL CSeriousSkaStudioApp::SaveMeshListFile(MeshInstance &mshi, BOOL bConvert) { DisableRendering(); // get mesh list filename CTFileName fnMeshList = mshi.mi_pMesh->GetName(); fnMeshList = fnMeshList.NoExt() + ".aml"; try { fnMeshList.RemoveApplicationPath_t(); } catch(char *){} CTString strBackUp; try { // back up current mesh list file strBackUp.Load_t(fnMeshList); } catch(char*){} // save mesh instance in new mesh list file CTFileStream ostrFile; try { ostrFile.Create_t(fnMeshList,CTStream::CM_TEXT); SaveMeshInstance_t(mshi,ostrFile); ostrFile.Close(); } catch(char *strError) { ErrorMessage(strError); EnableRendering(); return FALSE; } // if new mesh list file needs to be converted if(bConvert) { if(!ConvertMesh(fnMeshList)) { // convert failed if(strBackUp.Length()>0) { // try returning old mesh list file try { strBackUp.Save_t(fnMeshList); } catch(char*){} } } } EnableRendering(); return TRUE; }
static void LoadCharTable(const CTFileName &fnCharTable) { if(fnCharTable.Length() == 0) { ClearCharTable(); return; } try { SetDlgItemText(_hWnd,IDC_CHARACTER_TABLE,(const char*)(fnCharTable.FileName() + fnCharTable.FileExt())); _strCharTable.Load_t(fnCharTable); INDEX iLen = _strCharTable.Length(); memset(&_aubCharTable[0],0,sizeof(_aubCharTable)); for(INDEX ic=0;ic<iLen;ic++) { unsigned char ch = _strCharTable[ic]; _aubCharTable[ch] = 1; } _aubCharTable[10] = 0; _aubCharTable[13] = 0; _fnCharacterTable = fnCharTable; } catch(char *strErr) { MessageBox(_hWnd,strErr,0,0); } }
static void LoadingHook_t(CProgressHookInfo *pphi) { // if user presses escape ULONG ulCheckFlags = 0x8000; if (pphi->phi_fCompleted>0) { ulCheckFlags |= 0x0001; } if (_bUserBreakEnabled && (GetAsyncKeyState(VK_ESCAPE)&ulCheckFlags)) { // break loading throw TRANS("User break!"); } #if USECUSTOMTEXT // if no custom loading text if (_strCustomText=="") { // load it try { _strCustomText.Load_t(CTFILENAME("Data\\LoadingText.txt")); } catch (char *strError) { _strCustomText = strError; } } #endif // measure time since last call static CTimerValue tvLast(0I64); CTimerValue tvNow = _pTimer->GetHighPrecisionTimer(); // if not first or final update, and not enough time passed if (pphi->phi_fCompleted!=0 && pphi->phi_fCompleted!=1 && (tvNow-tvLast).GetSeconds() < REFRESHTIME) { // do nothing return; } tvLast = tvNow; // skip if cannot lock drawport CDrawPort *pdp = _pdpLoadingHook; ASSERT(pdp!=NULL); CDrawPort dpHook(pdp, TRUE); if( !dpHook.Lock()) return; // clear screen dpHook.Fill(C_BLACK|255); // get session properties currently loading CSessionProperties *psp = (CSessionProperties *)_pNetwork->GetSessionProperties(); ULONG ulLevelMask = psp->sp_ulLevelsMask; if (psp->sp_bCooperative) { INDEX iLevel = -1; INDEX iLevelNext = -1; CTString strLevelName = _pNetwork->ga_fnmWorld.FileName(); CTString strNextLevelName = _pNetwork->ga_fnmNextLevel.FileName(); // second encounter INDEX u, v; u = v = -1; strLevelName.ScanF("%01d_%01d_", &u, &v); iLevel = u*10+v; RemapLevelNames(iLevel); u = v = -1; strNextLevelName.ScanF("%01d_%01d_", &u, &v); iLevelNext = u*10+v; RemapLevelNames(iLevelNext); // first encounter if(iLevel == -1) { strLevelName.ScanF("%02d_", &iLevel); strNextLevelName.ScanF("%02d_", &iLevelNext); if(iLevel != -1) { map_bIsFirstEncounter = TRUE; } } else { map_bIsFirstEncounter = FALSE; } if (iLevel>0) { ulLevelMask|=1<<(iLevel-1); } if (iLevelNext>0) { ulLevelMask|=1<<(iLevelNext-1); } } if (ulLevelMask!=0 && !_pNetwork->IsPlayingDemo()) { // map hook extern void RenderMap( CDrawPort *pdp, ULONG ulLevelMask, CProgressHookInfo *pphi); RenderMap(&dpHook, ulLevelMask, pphi); // finish rendering dpHook.Unlock(); dpHook.dp_Raster->ra_pvpViewPort->SwapBuffers(); // keep current time tvLast = _pTimer->GetHighPrecisionTimer(); return; } // get sizes PIX pixSizeI = dpHook.GetWidth(); PIX pixSizeJ = dpHook.GetHeight(); CFontData *pfd = _pfdConsoleFont; PIX pixCharSizeI = pfd->fd_pixCharWidth + pfd->fd_pixCharSpacing; PIX pixCharSizeJ = pfd->fd_pixCharHeight + pfd->fd_pixLineSpacing; PIX pixBarSizeJ = 17;//*pixSizeJ/480; COLOR colBcg = LerpColor(C_BLACK, SE_COL_BLUE_LIGHT, 0.30f)|0xff; COLOR colBar = LerpColor(C_BLACK, SE_COL_BLUE_LIGHT, 0.45f)|0xff; COLOR colLines = colBar; //C_vdGREEN|0xff; COLOR colText = LerpColor(C_BLACK, SE_COL_BLUE_LIGHT, 0.95f)|0xff; COLOR colEsc = C_WHITE|0xFF; dpHook.Fill(0, pixSizeJ-pixBarSizeJ, pixSizeI, pixBarSizeJ, colBcg); dpHook.Fill(0, pixSizeJ-pixBarSizeJ, pixSizeI*pphi->phi_fCompleted, pixBarSizeJ, colBar); dpHook.DrawBorder(0, pixSizeJ-pixBarSizeJ, pixSizeI, pixBarSizeJ, colLines); dpHook.SetFont( _pfdConsoleFont); dpHook.SetTextScaling( 1.0f); dpHook.SetTextAspect( 1.0f); // print status text setlocale(LC_ALL, ""); CTString strDesc(0, "%s", pphi->phi_strDescription); strupr((char*)(const char*)strDesc); setlocale(LC_ALL, "C"); CTString strPerc(0, "%3.0f%%", pphi->phi_fCompleted*100); //dpHook.PutText(strDesc, pixCharSizeI/2, pixSizeJ-pixBarSizeJ-2-pixCharSizeJ, C_GREEN|255); //dpHook.PutTextCXY(strPerc, pixSizeI/2, pixSizeJ-pixBarSizeJ/2+1, C_GREEN|255); dpHook.PutText(strDesc, pixCharSizeI/2, pixSizeJ-pixBarSizeJ+pixCharSizeJ/2, colText); dpHook.PutTextR(strPerc, pixSizeI-pixCharSizeI/2, pixSizeJ-pixBarSizeJ+pixCharSizeJ/2, colText); if (_bUserBreakEnabled && !_pGame->gm_bFirstLoading) { dpHook.PutTextC( TRANS( "PRESS ESC TO ABORT"), pixSizeI/2, pixSizeJ-pixBarSizeJ-2-pixCharSizeJ, colEsc); } /* //LCDPrepare(1.0f); //LCDSetDrawport(&dpHook); // fill the box with background dirt and grid //LCDRenderClouds1(); //LCDRenderGrid(); // draw progress bar PIX pixBarCentI = pixBoxSizeI*1/2; PIX pixBarCentJ = pixBoxSizeJ*3/4; PIX pixBarSizeI = pixBoxSizeI*7/8; PIX pixBarSizeJ = pixBoxSizeJ*3/8; PIX pixBarMinI = pixBarCentI-pixBarSizeI/2; PIX pixBarMaxI = pixBarCentI+pixBarSizeI/2; PIX pixBarMinJ = pixBarCentJ-pixBarSizeJ/2; PIX pixBarMaxJ = pixBarCentJ+pixBarSizeJ/2; dpBox.Fill(pixBarMinI, pixBarMinJ, pixBarMaxI-pixBarMinI, pixBarMaxJ-pixBarMinJ, C_BLACK|255); dpBox.Fill(pixBarMinI, pixBarMinJ, (pixBarMaxI-pixBarMinI)*pphi->phi_fCompleted, pixBarMaxJ-pixBarMinJ, C_GREEN|255); // put more dirt LCDRenderClouds2Light(); // draw borders COLOR colBorders = LerpColor(C_GREEN, C_BLACK, 200); LCDDrawBox(0,-1, PIXaabbox2D( PIX2D(pixBarMinI, pixBarMinJ), PIX2D(pixBarMaxI, pixBarMaxJ)), colBorders|255); LCDDrawBox(0,-1, PIXaabbox2D( PIX2D(0,0), PIX2D(dpBox.GetWidth(), dpBox.GetHeight())), colBorders|255); // print status text dpBox.SetFont( _pfdDisplayFont); dpBox.SetTextScaling( 1.0f); dpBox.SetTextAspect( 1.0f); // print status text CTString strRes; strRes.PrintF( "%s", pphi->phi_strDescription); //strupr((char*)(const char*)strRes); dpBox.PutTextC( strRes, 160, 17, C_GREEN|255); strRes.PrintF( "%3.0f%%", pphi->phi_fCompleted*100); dpBox.PutTextCXY( strRes, pixBarCentI, pixBarCentJ, C_GREEN|255); dpBox.Unlock(); if( Flesh.gm_bFirstLoading) { #if USECUSTOMTEXT FLOAT fScaling = (FLOAT)slSizeI/640.0f; dpHook.Lock(); dpHook.SetFont( _pfdDisplayFont); dpHook.SetTextScaling( fScaling); dpHook.SetTextAspect( 1.0f); //dpHook.Fill( 0, 0, slSizeI, pixCenterJ, C_vdGREEN|255, C_vdGREEN|255, C_vdGREEN|0, C_vdGREEN|0); dpHook.PutTextC( TRANS( "SERIOUS SAM - TEST VERSION"), pixCenterI, 5*fScaling, C_WHITE|255); dpHook.PutTextC( TRANS( "THIS IS NOT A DEMO VERSION, THIS IS A COMPATIBILITY TEST!"), pixCenterI, 25*fScaling, C_WHITE|255); dpHook.PutTextC( TRANS( "Serious Sam (c) 2000 Croteam LLC, All Rights Reserved.\n"), pixCenterI, 45*fScaling, C_WHITE|255); dpHook.PutText( _strCustomText, 1*fScaling, 85*fScaling, C_GREEN|255); dpHook.Unlock(); #endif } else if (_bUserBreakEnabled) { FLOAT fScaling = (FLOAT)slSizeI/640.0f; dpHook.Lock(); dpHook.SetFont( _pfdDisplayFont); dpHook.SetTextScaling( fScaling); dpHook.SetTextAspect( 1.0f); //dpHook.Fill( 0, 0, slSizeI, pixCenterJ, C_vdGREEN|255, C_vdGREEN|255, C_vdGREEN|0, C_vdGREEN|0); dpHook.PutTextC( TRANS( "PRESS ESC TO ABORT"), pixCenterI, pixCenterJ+pixBoxSizeJ+5*fScaling, C_WHITE|255); } */ dpHook.Unlock(); // finish rendering dpHook.dp_Raster->ra_pvpViewPort->SwapBuffers(); // keep current time tvLast = _pTimer->GetHighPrecisionTimer(); }