/** * Load a scenario in a safe way, and prepare the game. * @param houseID The House which is going to play the game. * @param scenarioID The Scenario to load. */ void Game_LoadScenario(uint8 houseID, uint16 scenarioID) { Audio_PlayVoice(VOICE_STOP); Game_Init(); g_validateStrictIfZero++; g_scenarioID = scenarioID; if (!Scenario_Load(scenarioID, houseID)) { GUI_DisplayModalMessage("No more scenarios!", 0xFFFF); PrepareEnd(); exit(0); } Game_Prepare(); if (scenarioID < 5) { g_hintsShown1 = 0; g_hintsShown2 = 0; } g_validateStrictIfZero--; }
/** * Load a scenario in a safe way, and prepare the game. * @param houseID The House which is going to play the game. * @param scenarioID The Scenario to load. */ bool Game_LoadScenario(const char* scenario) { Audio_PlayVoice(VOICE_STOP); Game_Init(); g_validateStrictIfZero++; g_scenarioID = 0xFFFF; if (!Scenario_Load(scenario, SEARCHDIR_SCENARIO_DIR)) return false; Game_Prepare(); g_hintsShown1 = 0; g_hintsShown2 = 0; g_validateStrictIfZero--; return true; }
bool LoadFile(char *filename) { FILE *fp; char filenameComplete[1024]; bool res; Sound_Output_Feedback(0xFFFE); Game_Init(); snprintf(filenameComplete, sizeof(filenameComplete), "data/%s", filename); fp = fopen(filenameComplete, "rb"); if (fp == NULL) { Error("Failed to open file '%s' for reading.\n", filenameComplete); /* TODO -- Load failures should not result in termination */ exit(0); return false; } Sprites_LoadTiles(); g_validateStrictIfZero++; res = Load_Main(fp); g_validateStrictIfZero--; fclose(fp); if (!res) { Error("Error while loading savegame.\n"); /* TODO -- Load failures should not result in termination */ exit(0); return false; } if (g_gameMode != GM_RESTART) Game_Prepare(); return true; }
/** * Load a scenario in a safe way, and prepare the game. * @param houseID The House which is going to play the game. * @param scenarioID The Scenario to load. */ void Game_LoadScenario(uint8 houseID, uint16 scenarioID) { Sound_Output_Feedback(0xFFFE); Game_Init(); g_validateStrictIfZero++; if (!Scenario_Load(scenarioID, houseID)) { GUI_DisplayModalMessage("No more scenarios!", 0xFFFF); PrepareEnd(); exit(0); } Game_Prepare(); if (scenarioID < 5) { g_hintsShown1 = 0; g_hintsShown2 = 0; } g_validateStrictIfZero--; }
static bool Skirmish_GenerateMapInner(bool generate_houses, SkirmishData* sd) { const MapInfo* mi = &g_mapInfos[0]; if (generate_houses) Skirmish_Prepare(); Game_Init(); Skirmish_GenGeneral(); Sprites_UnloadTiles(); Sprites_LoadTiles(); Tools_RandomLCG_Seed(g_skirmish.seed); Map_CreateLandscape(g_skirmish.seed); if (!generate_houses) return true; /* Create initial island. */ sd->island[0].start = 0; sd->island[0].end = 0; for (int dy = 0; dy < mi->sizeY; dy++) { for (int dx = 0; dx < mi->sizeX; dx++) { const int tx = mi->minX + dx; const int ty = mi->minY + dy; const uint16 packed = Tile_PackXY(tx, ty); sd->buildable[sd->island[0].end].x = tx; sd->buildable[sd->island[0].end].y = ty; sd->buildable[sd->island[0].end].packed = packed; sd->buildable[sd->island[0].end].parent = 0; sd->island[0].end++; } } memset(sd->islandID, 0, MAP_SIZE_MAX * MAP_SIZE_MAX * sizeof(sd->islandID[0])); Skirmish_DivideIsland(HOUSE_INVALID, 0, sd); if (sd->nislands_unused == 0) return false; /* Spawn players. */ for (HouseType houseID = HOUSE_HARKONNEN; houseID < HOUSE_MAX; houseID++) { if (g_skirmish.brain[houseID] == BRAIN_NONE) continue; if (g_skirmish.brain[houseID] == BRAIN_HUMAN) Scenario_Create_House(houseID, g_skirmish.brain[houseID], 2000, 0, 250); else { House* h = Scenario_Create_House(houseID, g_skirmish.brain[houseID], 1000, 0, 250); h->flags.isAIActive = true; if (!Skirmish_GenStructuresAI(houseID, sd)) return false; } } for (HouseType houseID = HOUSE_HARKONNEN; houseID < HOUSE_MAX; houseID++) { if (g_skirmish.brain[houseID] == BRAIN_NONE) continue; if (g_skirmish.brain[houseID] == BRAIN_HUMAN) { if (!Skirmish_GenUnitsHuman(houseID, sd)) return false; } else { Skirmish_GenUnitsAI(houseID); } } Skirmish_GenSpiceBlooms(); Skirmish_GenSandworms(); Skirmish_GenCHOAM(); Game_Prepare(); GUI_ChangeSelectionType(SELECTIONTYPE_STRUCTURE); Scenario_CentreViewport(g_playerHouseID); g_tickScenarioStart = g_timerGame; return true; }