void gpSaveTheRecordedGame(char *name, featom *atom) { char filename[300]; if ((gpTextEntryName != NULL) && (strlen(gpTextEntryName) > 0)) { if (strlen(gpTextEntryName) < 2) { GeneralMessageBox(strGetString(strErrorInSaveGameName),strGetString(strAtLeast2Chars)); return; } strcpy(filename,SavedGamesPath); strcat(filename,gpTextEntryName); if (fileExists(filename,0)) { overwriteRecGame = TRUE; strcpy(overwritefilename,filename); feScreenStart(ghMainRegion, "OverwriteGamePopup"); return; } recPackInGameStartCB(filename); feScreenDisappear(NULL, NULL); if (!multiPlayerGame) { universePause = FALSE; // unpause game } return; } if (gpNumberGames > 0) { gpDonePicking(name, atom); dbgAssertOrIgnore(gpCurrentSelected < gpNumberGames); strcpy(filename,SavedGamesPath); strcat(filename,gpGames[gpCurrentSelected].title); if (fileExists(filename,0)) { overwriteRecGame = TRUE; strcpy(overwritefilename,filename); feScreenStart(ghMainRegion, "OverwriteGamePopup"); return; } recPackInGameStartCB(filename); feScreenDisappear(NULL, NULL); if (!multiPlayerGame) { universePause = FALSE; // unpause game } return; } GeneralMessageBox(strGetString(strErrorInSaveGameName),strGetString(strAtLeast2Chars)); }
void gpLoadTheRecordedGame(char *name, featom *atom) { sdword verifysavename; if (!gpGetGameName(name,atom,recordPacketSaveFileName)) { return; } strcpy(recordPacketFileName,recordPacketSaveFileName); strcat(recordPacketFileName,PKTS_EXTENSION); if ((verifysavename = VerifySaveFile(recordPacketSaveFileName)) != VERIFYSAVEFILE_OK) { if (verifysavename == VERIFYSAVEFILE_BADVERSION) GeneralMessageBox(strGetString(strErrorInvalidSaveGameFileVersion),NULL); else GeneralMessageBox(strGetString(strErrorInvalidSaveGameFile),NULL); return; } feScreenDisappear(NULL, NULL); recPackPlayInGameInit(); utyLoadMultiPlayerGameGivenFilename(recordPacketSaveFileName); }
void gpLoadGame(char *name, featom *atom) { char filename[PATH_MAX] = ""; sdword verifysavename; if (gpNumberGames > 0) { gpDonePicking(name, atom); dbgAssertOrIgnore(gpCurrentSelected < gpNumberGames); if (gpLoadTutorial) { strcpy(filename,TutorialSavedGamesPath); } else { strcpy(filename,SavedGamesPath); } strcat(filename,gpGames[gpCurrentSelected].title); if ((verifysavename = VerifySaveFile(filename)) != VERIFYSAVEFILE_OK) { if (verifysavename == VERIFYSAVEFILE_BADVERSION) GeneralMessageBox(strGetString(strErrorInvalidSaveGameFileVersion),NULL); else GeneralMessageBox(strGetString(strErrorInvalidSaveGameFile),NULL); return; } feScreenDisappear(NULL, NULL); soundEventStopTrack(SOUND_EVENT_DEFAULT, 1.0f); soundEventPause(TRUE); gameEnd(); if (gpLoadSinglePlayerGame) { if (gpLoadTutorial) { tutorial = 1; } else { //for single player games, tutorial == 2 to use certain tutorial functions tutorial = 2; } utyLoadSinglePlayerGameGivenFilename(filename); } else { utyLoadMultiPlayerGameGivenFilename(filename); } if (!multiPlayerGame) { universePause = FALSE; // unpause game } soundEventPause(FALSE); } }
void gpStopRecording(char *name, featom *atom) { recPackInGameStopCB(); feScreenDisappear(NULL, NULL); if (!multiPlayerGame) { universePause = FALSE; // unpause game } }
void gpBackToInGameEscapeMenu(char *name, featom *atom) { feScreenDisappear(NULL, NULL); #if defined(HW_GAME_DEMO) if ((singlePlayerGame) && (!(utyCreditsSequence|utyPlugScreens)) && (universe.quittime > 0.0f) && (universe.totaltimeelapsed >= universe.quittime)) #else if ((singlePlayerGame) && (!(utyCreditsSequence)) && (universe.quittime > 0.0f) && (universe.totaltimeelapsed >= universe.quittime)) #endif { feScreenStart(ghMainRegion, "SP_Game_Over"); return; } switch (escapemenu) { case ESCAPE_DEFAULT: feScreenStart(ghMainRegion, "In_game_esc_menu"); break; case ESCAPE_SINGLE: feScreenStart(ghMainRegion, "In_game_esc_menu2"); break; case ESCAPE_RECORDING: feScreenStart(ghMainRegion, "In_game_esc_menu_recording"); break; case ESCAPE_PLAYING: feScreenStart(ghMainRegion, "In_game_esc_menu_playing"); break; case ESCAPE_TUTORIAL: feScreenStart(ghMainRegion, "In_game_esc_menu_tutorial"); break; case ESCAPE_DEFAULT_NOSAVE: feScreenStart(ghMainRegion, "In_game_esc_menu_nosave"); break; case ESCAPE_RECORDING_NOSAVE: feScreenStart(ghMainRegion, "In_game_esc_menu_nosave_recording"); break; } }
void spBackPicking(char *name, featom *atom) { spDescriptionDefaultsAndFreeText(); if (scenarioTexture != TR_InvalidInternalHandle) { //delete the preview image, if there was one trRGBTextureDelete(scenarioTexture); scenarioTexture = TR_InvalidInternalHandle; if (spTextureData != NULL) { memFree(spTextureData); spTextureData = NULL; } } feScreenDisappear(NULL, NULL); spPickerStarted = FALSE; }
/*----------------------------------------------------------------------------- Name : spDonePicking/spBackPicking // if the region is the scenario picker Description : Close the color picker and optionally specify the file path of the chosen file. Inputs : standard FE callback Outputs : DonePicking stores chosen file name in parameter to spScenarioPick Return : void ----------------------------------------------------------------------------*/ void spDonePicking(char *name, featom *atom) { sdword index; sdword spCurrentSelectedCandidate = spCurrentSelected; if (spScenarioListWindow->CurLineSelected!=NULL) { for (index = 0; index < spNumberScenarios; index++) { if (spScenarioListWindow->CurLineSelected->data == (ubyte *)&spScenarios[index]) { spCurrentSelectedCandidate = index; break; } } } if (gameTypeFromDescription != NULL) { //if there is a game type from description file mgSetGameTypeByStruct(gameTypeFromDescription); //set that game type feAllCallOnCreate(feStack[feStackIndex - 1].screen);//update buttons to reflect changes mgGameTypesOtherButtonPressed(); } spDescriptionDefaultsAndFreeText(); if (scenarioTexture != TR_InvalidInternalHandle) { //delete the preview image, if there was one trRGBTextureDelete(scenarioTexture); scenarioTexture = TR_InvalidInternalHandle; if (spTextureData != NULL) { memFree(spTextureData); spTextureData = NULL; } } if (spSelectionValid(spCurrentSelectedCandidate)) { spCurrentSelected = spCurrentSelectedCandidate; } feScreenDisappear(NULL, NULL); spPickerStarted = FALSE; }
void gpOverwriteNo(char *name, featom *atom) { feScreenDisappear(NULL, NULL); }
void gpBackPicking(char *name, featom *atom) { feScreenDisappear(NULL, NULL); }
void gpDeleteGame(char *name, featom *atom) { char filename[PATH_MAX] = ""; sdword i; sdword index; fonthandle oldfont; if (!gpGetGameName(name,atom,filename)) { return; } // gpCurrentSelected will be set by gpGetGameName feScreenDisappear(NULL, NULL); char *tmpFilePath = filePathPrepend(filename, FF_UserSettingsPath); strcpy(filename, tmpFilePath); fileDelete(filename); if (SavedGamesPath == RecordedGamesPath) { char tmpfile[PATH_MAX] = ""; strcpy(tmpfile,filename); strcat(tmpfile,PKTS_EXTENSION); fileDelete(tmpfile); } for (i=gpCurrentSelected;i<gpNumberGames-1;i++) { gpGames[i] = gpGames[i+1]; } gpNumberGames--; if (gpNumberGames == 0) { gpCurrentSelected = 0; } else if (gpCurrentSelected >= gpNumberGames) { gpCurrentSelected--; dbgAssertOrIgnore(gpCurrentSelected >= 0); dbgAssertOrIgnore(gpCurrentSelected < gpNumberGames); } dbgAssertOrIgnore(gpNumberGames >= 0); oldfont = fontMakeCurrent(gpListFont); // fontHeight called later on in this function uicListCleanUp(gpGameListWindow); uicListWindowInit(gpGameListWindow, NULL, // title draw, no title NULL, // title click process, no title 0, // title height, no title gpGameItemDraw, // item draw function fontHeight(" ")+GP_VertSpacing, // item height UICLW_CanSelect); for (index = 0; index < gpNumberGames; index++) { if (index==gpCurrentSelected) uicListAddItem(gpGameListWindow, (ubyte *)&gpGames[index], UICLI_CanSelect|UICLI_Selected, UICLW_AddToTail); else uicListAddItem(gpGameListWindow, (ubyte *)&gpGames[index], UICLI_CanSelect, UICLW_AddToTail); } fontMakeCurrent(oldfont); }
/*----------------------------------------------------------------------------- Name : gcInGameChatEntry Description : Handles the chat text entry box messages. Inputs : Outputs : Return : void ----------------------------------------------------------------------------*/ void gcInGameChatEntry(char *name, featom *atom) { sdword user; chathistory *chat; char temp[60]; sdword ruentered; if (MessageToAllies == GC_RUTransfer) { if (FEFIRSTCALL(atom)) { chatentrybox = (textentryhandle)atom->pData; uicTextEntryInit(chatentrybox,UICTE_NoTextures|UICTE_ChatTextEntry|UICTE_NumberEntry); bitSet(chatentrybox->reg.status, RSF_KeyCapture); keyBufferClear(); bitSet(chatentrybox->textflags, UICTE_DropShadow); chatentrybox->shadowColor = colBlack; uicTextBufferResize(chatentrybox,GC_MAXCHARACTERS); return; } switch (uicTextEntryMessage(atom)) { case CM_AcceptText : { ruentered = atol(chatentrybox->textBuffer); //sendRUTransfer((udword)PLAYER_MASK(RUTransferToPlayer), ruentered); clWrapRUTransfer(&universe.mainCommandLayer,sigsPlayerIndex,RUTransferToPlayer, ruentered,0); //universe.players[sigsPlayerIndex].resourceUnits-=ruentered; InChatMode = FALSE; feScreenDisappear(NULL,NULL); } break; case CM_RejectText : { InChatMode = FALSE; feScreenDisappear(NULL,NULL); } break; case CM_KeyPressed: { ruentered = atol(chatentrybox->textBuffer); if (ruentered > universe.players[sigsPlayerIndex].resourceUnits || ruentered <= 0) { //backspace if ru's entered are more than player has, or if they're less than or equal to 0 uicBackspaceCharacter(chatentrybox); } } break; } } else { if (FEFIRSTCALL(atom)) { chatentrybox = (textentryhandle)atom->pData; uicTextEntryInit(chatentrybox,UICTE_NoTextures|UICTE_ChatTextEntry); bitSet(chatentrybox->reg.status, RSF_KeyCapture); keyBufferClear(); bitSet(chatentrybox->textflags, UICTE_DropShadow); chatentrybox->shadowColor = colBlack; uicTextBufferResize(chatentrybox,GC_MAXCHARACTERS); return; } switch (uicTextEntryMessage(atom)) { case CM_AcceptText : chat = (chathistory *)memAlloc(sizeof(chathistory),"InGameChat",NonVolatile); if (MessageToAllies==GC_ChatToAllies) { sendChatMessage(universe.players[sigsPlayerIndex].Allies,chatentrybox->textBuffer,(uword)sigsPlayerIndex); strcpy(chat->chatstring, chatentrybox->textBuffer); chat->messageType = GC_WHISPEREDMESSAGE; } else { if ((user=gcParseChatEntry(chatentrybox->textBuffer))!=-1) { if (user!=sigsPlayerIndex) { sendChatMessage(PLAYER_MASK(user),chatentrybox->textBuffer+strlen(playerNames[user])+2,(uword)sigsPlayerIndex); strcpy(chat->chatstring, chatentrybox->textBuffer+strlen(playerNames[user])+2); chat->messageType = GC_WHISPEREDMESSAGE; #ifdef DEBUG_STOMP regVerify(chatdrawregion); #endif bitSet(chatdrawregion->status,RSF_DrawThisFrame); } } else { sendChatMessage(OTHER_PLAYERS_MASK,chatentrybox->textBuffer,(uword)sigsPlayerIndex); strcpy(chat->chatstring, chatentrybox->textBuffer+strlen(playerNames[user])); chat->messageType = GC_NORMALMESSAGE; #ifdef DEBUG_STOMP regVerify(chatdrawregion); #endif bitSet(chatdrawregion->status,RSF_DrawThisFrame); } } strcpy(chat->userName, utyName); chat->playerindex = sigsPlayerIndex; gcAddChatItemToList(chat); uicTextEntrySet(chatentrybox,"",0); InChatMode = FALSE; feScreenDisappear(NULL,NULL); break; case CM_RejectText : InChatMode = FALSE; feScreenDisappear(NULL,NULL); break; case CM_KeyPressed: { if ((user=gcParseChatEntry(chatentrybox->textBuffer))!=-1) { sprintf(temp, "/%s ", playerNames[user]); if (strlen(chatentrybox->textBuffer) < strlen(temp)) uicTextEntrySet(chatentrybox, temp, strlen(temp)); } } break; } } }