bool CampaignLoad(CampaignOptions *co, CampaignEntry *entry) { CASSERT(!co->IsLoaded, "loading campaign without unloading last one"); // Note: use the mode already set by the menus const GameMode mode = co->Entry.Mode; co->Entry = *entry; co->Entry.Mode = mode; CampaignSettingInit(&co->Setting); if (entry->Mode == GAME_MODE_QUICK_PLAY) { SetupQuickPlayCampaign(&co->Setting); co->IsLoaded = true; } else { // Normalise the path char buf[CDOGS_PATH_MAX]; GetDataFilePath(buf, entry->Path); if (MapNewLoad(buf, &co->Setting)) { LOG(LM_MAIN, LL_ERROR, "failed to load campaign %s!", buf); CASSERT(false, "Failed to load campaign"); } else { co->IsLoaded = true; } } if (co->IsLoaded) { LOG(LM_MAIN, LL_INFO, "loaded campaign/dogfight"); } return co->IsLoaded; }
static void Open(void) { char filename[CDOGS_PATH_MAX]; strcpy(filename, lastFile); bool done = false; while (!done) { ClearScreen(&gGraphicsDevice); CDogsTextStringAt(125, 50, "Open file:"); CDogsTextGoto(125, 50 + CDogsTextHeight()); CDogsTextChar('\020'); CDogsTextString(filename); CDogsTextChar('\021'); BlitFlip(&gGraphicsDevice, &gConfig.Graphics); bool doOpen = false; int c = GetKey(&gEventHandlers); switch (c) { case SDLK_RETURN: case SDLK_KP_ENTER: if (!filename[0]) { break; } doOpen = true; break; case SDLK_ESCAPE: done = true; break; case SDLK_BACKSPACE: if (filename[0]) filename[strlen(filename) - 1] = 0; break; default: if (strlen(filename) == sizeof(filename) - 1) { break; } c = KeyGetTyped(&gEventHandlers.keyboard); if (c && c != '*' && (strlen(filename) > 1 || c != '-') && c != ':' && c != '<' && c != '>' && c != '?' && c != '|') { size_t si = strlen(filename); filename[si + 1] = 0; filename[si] = (char)c; } break; } if (doOpen) { ClearScreen(&gGraphicsDevice); DrawTextStringSpecial( "Loading...", TEXT_XCENTER | TEXT_YCENTER, Vec2iZero(), gGraphicsDevice.cachedConfig.Res, Vec2iZero()); BlitFlip(&gGraphicsDevice, &gConfig.Graphics); CampaignSettingTerminate(&gCampaign.Setting); CampaignSettingInit(&gCampaign.Setting); if (MapNewLoad(filename, &gCampaign.Setting)) { printf("Error: cannot load %s\n", lastFile); continue; } fileChanged = 0; Setup(1); strcpy(lastFile, filename); done = true; sAutosaveIndex = 0; } SDL_Delay(10); } }
int main(int argc, char *argv[]) { int i; int loaded = 0; printf("C-Dogs SDL Editor\n"); debug(D_NORMAL, "Initialising SDL...\n"); if (SDL_Init(SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO) != 0) { printf("Failed to start SDL!\n"); return -1; } SDL_EnableUNICODE(SDL_ENABLE); printf("Data directory:\t\t%s\n", GetDataFilePath("")); printf("Config directory:\t%s\n\n", GetConfigFilePath("")); EditorBrushInit(&brush); ConfigLoadDefault(&gConfig); ConfigLoad(&gConfig, GetConfigFilePath(CONFIG_FILE)); gConfig.Graphics.IsEditor = 1; if (!PicManagerTryInit( &gPicManager, "graphics/cdogs.px", "graphics/cdogs2.px")) { exit(0); } memcpy(origPalette, gPicManager.palette, sizeof origPalette); BuildTranslationTables(gPicManager.palette); TextManagerInit(&gTextManager, GetDataFilePath("graphics/font.px")); GraphicsInit(&gGraphicsDevice); // Hardcode config settings gConfig.Graphics.ScaleMode = SCALE_MODE_NN; gConfig.Graphics.ScaleFactor = 2; gConfig.Graphics.Res.x = 400; gConfig.Graphics.Res.y = 300; GraphicsInitialize( &gGraphicsDevice, &gConfig.Graphics, gPicManager.palette, 0); if (!gGraphicsDevice.IsInitialized) { printf("Video didn't init!\n"); exit(EXIT_FAILURE); } TextManagerGenerateOldPics(&gTextManager, &gGraphicsDevice); PicManagerLoadDir(&gPicManager, GetDataFilePath("graphics")); BulletInitialize(); WeaponInitialize(&gGunDescriptions, GetDataFilePath("guns.json")); CampaignInit(&gCampaign); MissionInit(&lastMission); MissionInit(¤tMission); PlayerDataInitialize(); MapInit(&gMap); // initialise UI collections // Note: must do this after text init since positions depend on text height sObjs = CreateMainObjs(&gCampaign, &brush, Vec2iNew(320, 240)); memset(&sDrawObjs, 0, sizeof sDrawObjs); DrawBufferInit(&sDrawBuffer, Vec2iNew(X_TILES, Y_TILES), &gGraphicsDevice); // Reset campaign (graphics init may have created dummy campaigns) CampaignSettingTerminate(&gCampaign.Setting); CampaignSettingInit(&gCampaign.Setting); EventInit(&gEventHandlers, NULL, false); for (i = 1; i < argc; i++) { if (!loaded) { debug(D_NORMAL, "Loading map %s\n", argv[i]); memset(lastFile, 0, sizeof(lastFile)); strncpy(lastFile, argv[i], sizeof(lastFile) - 1); if (strchr(lastFile, '.') == NULL && sizeof lastFile - strlen(lastFile) > 3) { strcat(lastFile, ".CPN"); } if (MapNewLoad(lastFile, &gCampaign.Setting) == 0) { loaded = 1; } debug(D_NORMAL, "Loaded map %s\n", argv[i]); } } debug(D_NORMAL, "Starting editor\n"); EditCampaign(); MapTerminate(&gMap); WeaponTerminate(&gGunDescriptions); CampaignTerminate(&gCampaign); MissionTerminate(&lastMission); MissionTerminate(¤tMission); DrawBufferTerminate(&sDrawBuffer); GraphicsTerminate(&gGraphicsDevice); PicManagerTerminate(&gPicManager); TextManagerTerminate(&gTextManager); UIObjectDestroy(sObjs); CArrayTerminate(&sDrawObjs); EditorBrushTerminate(&brush); SDL_Quit(); exit(EXIT_SUCCESS); }