/*----------------------------------------------------------------------------- Name : gpStartup Description : Inputs : Outputs : Registers some callbacks for buttons and user regions. Return : ----------------------------------------------------------------------------*/ void gpStartup(void) { feDrawCallbackAddMultiple(gpDrawCallbacks); feCallbackAddMultiple(gpCallbacks); gpListFont = frFontRegister(GP_ListFont); gpNameFont = frFontRegister(GP_NameFont); gpTextEntryName = memAlloc(GP_GAMENAME_LENGTH, "gpTextEntryName", NonVolatile); gpTextEntryName[0] = 0; gpGames = NULL; }
/*----------------------------------------------------------------------------- Name : spStartup Description : Inputs : Outputs : Registers some callbacks for buttons and user regions. Return : ----------------------------------------------------------------------------*/ void spStartup(void) { feDrawCallbackAddMultiple(spDrawCallbacks); spListFont = frFontRegister(SCP_ListFont); spNameFont = frFontRegister(SCP_NameFont); spScenarios = memAlloc(spScenarioListLength * sizeof(spscenario), "spScenarios", NonVolatile); spTitleListLoad(); if (spCurrentSelected >= spNumberScenarios) { spCurrentSelected = spScenarioFind(DefaultScenario); } }
void horseRaceInit() { udword i; horseGetNumBars(&horseBarInfo); //initialize current bar to the 0th bar localbar=0; for(i=0;i<MAX_MULTIPLAYER_PLAYERS;i++) { horseracestatus.barnum[i] = 0; horseracestatus.percent[i] = 0; horseracestatus.hrstatusstr[i][0] = 0; if (autodownloadmapRequired()) TTimerStart(&hrPlayerDropoutTimers[i],HorseRacePlayerDropoutTime*2.0f); // give double time for autodownloads else TTimerStart(&hrPlayerDropoutTimers[i],HorseRacePlayerDropoutTime); PlayersAlreadyDrawnDropped[i] = FALSE; } for (i=0;i<NUM_CHAT_LINES;i++) { chathistory[i].message[0] = 0; } listInit(&horseCrapRegion.cutouts); JustInit = TRUE; if (!hrScreensHandle) { feCallbackAddMultiple(hrCallBack); feDrawCallbackAddMultiple(hrDrawCallback); hrScreensHandle = feScreensLoad(HR_FIBFile); } if (!ShouldHaveMousePtr) mouseCursorHide(); if (singlePlayerGame) { hrBaseRegion = feScreenStart(&horseCrapRegion, HR_SingleRaceScreen); } else { hrBaseRegion = feScreenStart(&horseCrapRegion, (multiPlayerGame) ? HR_RaceScreen : HR_RaceScreenNotNetwork); } playernamefont = frFontRegister(HR_PlayerNameFont); hrRunning=TRUE; if (RGLtype == SWtype && feShouldSaveMouseCursor()) { rglFeature(RGL_SAVEBUFFER_ON); } hrBackgroundDirty = (RGLtype == SWtype) ? 10000 : 3; hrBackgroundReinit = FALSE; }
/*----------------------------------------------------------------------------- Name : gcStartup Description : This initializes the game chatting system, adding its regions to the game etc. Inputs : Outputs : Return : void ----------------------------------------------------------------------------*/ void gcStartup(void) { chathistory *dummy; chathistoryfont = frFontRegister(chathistoryfontname); listInit(&chathistorylist); dummy = memAlloc(sizeof(chathistory), "DummyChatThing", NonVolatile); dummy->messageType = GC_BUFFERSTART; listAddNode(&chathistorylist,&dummy->link,dummy); dummy = memAlloc(sizeof(chathistory), "DummyChatThing", NonVolatile); dummy->messageType = GC_BUFFEREND; listAddNode(&chathistorylist,&dummy->link,dummy); curPosition = &dummy->link; chatmutex = (void *)CreateMutex(NULL,FALSE,NULL); if (chatdrawregion!=NULL) { regChildInsert(chatdrawregion, ghMainRegion); } else { feScreensLoad(GC_FIBFile); feCallbackAddMultiple(gcCallBack); feDrawCallbackAddMultiple(gcDrawCallback); gcScreenHandle = feScreenFind("Say_Chatting_Screen"); chatdrawatom.x = gcScreenHandle->atoms[0].x; chatdrawatom.y = gcScreenHandle->atoms[0].y; chatdrawatom.width = gcScreenHandle->atoms[0].width; chatdrawatom.height = gcScreenHandle->atoms[0].height; chatdrawatom.pData = (char *)gcChatTextDraw; chatwidth = chatdrawatom.width; textentrypos.x0 = gcScreenHandle->atoms[1].x; textentrypos.y0 = gcScreenHandle->atoms[1].y; textentrypos.x1 = gcScreenHandle->atoms[1].x+gcScreenHandle->atoms[1].width; textentrypos.y1 = gcScreenHandle->atoms[1].y+gcScreenHandle->atoms[1].height; chatdrawregion = regChildAlloc(ghMainRegion, (sdword)&chatdrawatom, chatdrawatom.x, chatdrawatom.y, chatdrawatom.width, chatdrawatom.height, 0, 0); chatdrawatom.region = (void*)chatdrawregion; regDrawFunctionSet(chatdrawregion, feUserRegionDraw); chatdrawregion->drawstyle[0] = chatdrawatom.drawstyle[0]; chatdrawregion->drawstyle[1] = chatdrawatom.drawstyle[1]; chatdrawregion->atom = &chatdrawatom; } gcRunning=TRUE; }
/*----------------------------------------------------------------------------- Name : svStartup() Description : Inputs : Outputs : Return : ----------------------------------------------------------------------------*/ void svStartup(void) { cameraInit(&svCamera, SV_InitialCameraDistance); svCamera.angle = DEG_TO_RAD(svAngle); svCamera.declination = DEG_TO_RAD(svDeclination); feDrawCallbackAdd(SV_ShipViewName, svShipViewRender); //add render callbacks feDrawCallbackAdd(SV_FirepowerName, svFirepowerRender); feDrawCallbackAdd(SV_CoverageName, svCoverageRender); feDrawCallbackAdd(SV_ManeuverName, svManeuverRender); feDrawCallbackAdd(SV_ArmorName, svArmorRender); feDrawCallbackAdd(SV_TopSpeedName, svTopSpeedRender); feDrawCallbackAdd(SV_MassName, svMassRender); svMouseInside = FALSE; svMousePressLeft = FALSE; svMousePressRight = FALSE; svShipViewFont = frFontRegister(svShipViewFontName); svShipStatFont = frFontRegister(svShipStatFontName); }
void tutStartup(void) { sdword count; if(tutorial == 3) { tutInitialize(); return; } tutorialdone = FALSE; if(tutRegion != NULL) { regChildInsert(tutRegion, ®RootRegion); } else { tutRegion = regChildAlloc(®RootRegion, (sdword)&tutAtom, tutAtom.x, tutAtom.y, tutAtom.width, tutAtom.height, 0, 0); tutAtom.region = (void*)tutRegion; tutRegion->atom = &tutAtom; regDrawFunctionSet(tutRegion, tutExecute); } tutTitleFont = frFontRegister(tutTitleFontName); tutMainFont = frFontRegister(tutMainFontName); tutTipTitleFont = frFontRegister(tutTipTitleFontName); tutTipFont = frFontRegister(tutTipFontName); for(count = 0; count < NUM_BUTTON_TEXTURES; count++) { tutButtonTexture[count] = TR_InvalidInternalHandle; tutButtonImage[count] = NULL; tutButtonImage[count] = trLIFFileLoad(tutTextureNames[count], NonVolatile); dbgAssert(tutButtonImage[count] != NULL); tutButtonTexture[count] = trRGBTextureCreate((color *)tutButtonImage[count]->data, tutButtonImage[count]->width, tutButtonImage[count]->height, TRUE); } }
/*----------------------------------------------------------------------------- Name : spNewItem Description : Called when a new item in the color picker list is selected. Inputs : Outputs : Return : ----------------------------------------------------------------------------*/ void spNewItem(void) { char bitmapFile[_MAX_PATH]; char descriptionFile[_MAX_PATH]; char *chopBuffer; sdword scen; rectangle textureRect; // rectangle rect = spScenarioBitmapWindow->rect; color *bmpBuffer; filehandle handle; bmpheader header; featom *atom; scen = spScenarioListWindow->CurLineSelected->position; atom = feAtomFindInScreen(feStack[feStackIndex].screen, "CS_ScenarioBitmap"); dbgAssert(atom != NULL); if (scenarioTexture != TR_InvalidInternalHandle) { //delete the old texture before creating a new one trRGBTextureDelete(scenarioTexture); scenarioTexture = TR_InvalidInternalHandle; if (spTextureData != NULL) { memFree(spTextureData); spTextureData = NULL; } } //free the previous text and set defaults spDescriptionDefaultsAndFreeText(); spFindImage(bitmapFile, descriptionFile, spScenarios[scen].bitmapfileSpec); if (strlen(bitmapFile) > 0) { handle = bmpFileOpen(&header, bitmapFile); //open the file if (handle != 0) { //if opened properly if (header.biWidth < SCP_PreviewWidthMin || header.biHeight > SCP_PreviewWidthMax) { #if SCP_VERBOSE_LEVEL >= 1 dbgMessagef("\n'%s': width of %d bad.", bitmapFile, header.biWidth); #endif bmpClose(handle); return; } else if (header.biHeight < SCP_PreviewHeightMin || header.biHeight > SCP_PreviewHeightMax) { #if SCP_VERBOSE_LEVEL >= 1 dbgMessagef("\n'%s': height of %d bad.", bitmapFile, header.biHeight); #endif bmpClose(handle); return; } //allocate the image buffer bmpBuffer = memAlloc(header.biWidth * header.biHeight * sizeof(color), "TempBMPbuffer", Pyrophoric); bmpBodyRead(bmpBuffer, handle, &header); //read in the body of the file if (header.biWidth != SCP_PreviewWidth || header.biHeight != SCP_PreviewHeight) { //if the image is the wrong size //rescale the image to the proper size bmpBuffer = trImageScale(bmpBuffer, header.biWidth, header.biHeight, SCP_PreviewWidth, SCP_PreviewHeight, TRUE); header.biWidth = SCP_PreviewWidth; //make it think we're the right size header.biHeight = SCP_PreviewHeight; } scenarioTexture = trRGBTextureCreate(bmpBuffer, header.biWidth, header.biHeight, FALSE); spTextureWidth = header.biWidth; spTextureHeight = header.biHeight; if (spTextureData != NULL) { memFree(spTextureData); } spTextureData = (ubyte*)memAlloc(4*spTextureWidth*spTextureHeight, "scenpick data", NonVolatile); memcpy(spTextureData, bmpBuffer, 4*spTextureWidth*spTextureHeight); memFree(bmpBuffer); //free the image } else { return; } } else { #if SCP_VERBOSE_LEVEL >= 1 dbgMessage("\nNo preview image found!"); #endif textureRect.x0 = atom->x + SCP_TEXTURE_INSET; textureRect.y0 = atom->y + SCP_TEXTURE_INSET; textureRect.x1 = atom->x + atom->width - SCP_TEXTURE_INSET; textureRect.y1 = atom->y + atom->height - SCP_TEXTURE_INSET; primRectSolid2(&textureRect, colBlack); } if (strlen(descriptionFile) > 0) { //if there is a description file // load in the proper description based on the language if (strCurLanguage==languageEnglish) { scriptSet(NULL, descriptionFile, spDescriptionTweaks);//load in the description text } else if (strCurLanguage==languageFrench) { scriptSet(NULL, descriptionFile, spDescriptionTweaksFrench);//load in the description text if (spDescription==NULL) { // if french isn't found load in english scriptSet(NULL, descriptionFile, spDescriptionTweaks);//load in the description text } } else if (strCurLanguage==languageGerman) { scriptSet(NULL, descriptionFile, spDescriptionTweaksGerman);//load in the description text if (spDescription==NULL) { // if german isn't found load in english scriptSet(NULL, descriptionFile, spDescriptionTweaks);//load in the description text } } else if (strCurLanguage==languageSpanish) { scriptSet(NULL, descriptionFile, spDescriptionTweaksSpanish);//load in the description text if (spDescription==NULL) { // if german isn't found load in english scriptSet(NULL, descriptionFile, spDescriptionTweaks);//load in the description text } } else if (strCurLanguage==languageItalian) { scriptSet(NULL, descriptionFile, spDescriptionTweaksItalian);//load in the description text if (spDescription==NULL) { // if german isn't found load in english scriptSet(NULL, descriptionFile, spDescriptionTweaks);//load in the description text } } if (spDescription != NULL) { //if there was real text in that file if (spDescriptionFont == FONT_InvalidFontHandle) { //make sure we have a font spDescriptionFont = frFontRegister("default.hff"); } textureRect.x0 = atom->x + SCP_TEXTURE_INSET; //and a region to print into textureRect.y0 = atom->y + SCP_TEXTURE_INSET; textureRect.x1 = atom->x + atom->width - SCP_TEXTURE_INSET; textureRect.y1 = atom->y + atom->height - SCP_TEXTURE_INSET; spDescriptionLines = memAlloc(sizeof(char *) * (textureRect.y1 - textureRect.y0), "DescLines", NonVolatile);//allocate the chopping pointers chopBuffer = memAlloc(strlen(spDescription) + textureRect.y1 - textureRect.y0, "DescChopped", NonVolatile);//allocate chop buffer spNDescriptionLines = subStringsChop(&textureRect, spDescriptionFont, strlen(spDescription), spDescription, chopBuffer, spDescriptionLines); memFree(spDescription); //free unchopped description spDescription = chopBuffer; //keep pointer to chopped description } gameTypeFromDescription = memAlloc(sizeof(GameType), "DescGameType", 0); memset(gameTypeFromDescription, 0xff, sizeof(GameType)); //flag all members as unused gameTypeFromDescription->flag = gameTypeFromDescription->flagNeeded = 0; //flag none of the flags needed scriptSetStruct(NULL, descriptionFile, StaticMGInfoScriptTable, (ubyte *)gameTypeFromDescription); } if (strlen(descriptionFile) > 0 || strlen(bitmapFile) > 0) { //if there is a description file or a bitmap if (spPickerStarted) { spScenarioBitmap(atom, (regionhandle)atom->region);//draw it/them } } }
/*----------------------------------------------------------------------------- Name : spDescriptionFontSet Description : Script-parsing callback to set the font for the description text. Inputs : Outputs : Return : ----------------------------------------------------------------------------*/ static void spDescriptionFontSet(char *directory,char *field,void *dataToFillIn) { spDescriptionFont = frFontRegister(field); }
sdword tmTradeBegin(regionhandle region, sdword ID, udword event, udword data) { sdword status = 0; sdword i; //if disabled, just return if ((tmTradeDisabled) || (playPackets) || (universePause) || (tmTradeActive)) { return 0; } // disbale rendering of main screen mrRenderMainScreen = FALSE; // clear the screen rndClear(); tmTradeActive = TRUE; tmTechListFont = frFontRegister(TM_TechListFont); tmFont = frFontRegister(TM_Font); tmCurrentSelect = 0; tmDialogPhrase = DialogWelcome; if (piePointSpecMode != PSM_Idle) { piePointModeOnOff(); } if (!tmScreensHandle) { feCallbackAddMultiple(tmCallback); //add in the callbacks feDrawCallbackAddMultiple(tmDrawCallback); tmScreensHandle = feScreensLoad(TM_FIBFile); //load in the screen } soundEventStopSFX(0.5f); /* play the intro sound */ soundEvent(NULL, UI_ManagerIntro); /* play the build manager ambient */ soundEvent(NULL, UI_Trading); tmBaseRegion = feScreenStart(region, TM_TradeScreen);//add new regions as siblings of current one tmIoSaveState = ioDisable(); tmTechSelected = -1; for (i = 0; i < TM_NUM_TECHS; i++) { if (tmTechForSale[i] == TM_TECH_IS_FOR_SALE) { tmTechSelected = i; tmtechinfo = i; tmDirtyTechInfo(); break; } } mouseCursorShow(); bitSet(tbDisable,TBDISABLE_TRADEMGR_USE); return(status); }