void SetupMission( int buildTables, Mission *m, struct MissionOptions *mo, int missionIndex) { int i; MissionOptionsInit(mo); mo->index = missionIndex; mo->missionData = m; mo->doorPics = doorStyles[abs(m->DoorStyle) % DOORSTYLE_COUNT]; mo->keyPics = keyStyles[abs(m->KeyStyle) % KEYSTYLE_COUNT]; for (i = 0; i < (int)m->Items.size; i++) { CArrayPushBack( &mo->MapObjects, MapObjectGet(*(int32_t *)CArrayGet(&m->Items, i))); } mo->exitPic = exitPics[2 * (abs(m->ExitStyle) % EXIT_COUNT)]; mo->exitShadow = exitPics[2 * (abs(m->ExitStyle) % EXIT_COUNT) + 1]; ActorsInit(); ObjsInit(); MobObjsInit(); SetupObjectives(mo, m); SetupBadguysForMission(m); SetupWeapons(gPlayerDatas, &m->Weapons); SetPaletteRanges(m->WallColor, m->FloorColor, m->RoomColor, m->AltColor); if (buildTables) { BuildTranslationTables(gPicManager.palette); } }
void SetupMission(int index, int buildTables) { int i; int x, y; struct Mission *m; memset(&gMission, 0, sizeof(gMission)); gMission.index = index; m = &gCampaign.setting->missions[abs(index) % gCampaign.setting->missionCount]; gMission.missionData = m; gMission.doorPics = doorStyles[abs(m->doorStyle) % DOORSTYLE_COUNT]; gMission.keyPics = keyStyles[abs(m->keyStyle) % KEYSTYLE_COUNT]; gMission.objectCount = m->itemCount; for (i = 0; i < m->itemCount; i++) gMission.mapObjects[i] = &mapItems[abs(m->items[i]) % ITEMS_COUNT]; srand(10 * index + gCampaign.seed); gMission.exitPic = exitPics[2 * (abs(m->exitStyle) % EXIT_COUNT)]; gMission.exitShadow = exitPics[2 * (abs(m->exitStyle) % EXIT_COUNT) + 1]; if (m->exitLeft > 0) { gMission.exitLeft = m->exitLeft * TILE_WIDTH; gMission.exitRight = m->exitRight * TILE_WIDTH; gMission.exitTop = m->exitTop * TILE_HEIGHT; gMission.exitBottom = m->exitBottom * TILE_HEIGHT; } else { if (m->mapWidth) x = (rand() % (abs(m->mapWidth) - EXIT_WIDTH)) + (XMAX - abs(m->mapWidth)) / 2; else x = rand() % (XMAX - EXIT_WIDTH); if (m->mapHeight) y = (rand() % (abs(m->mapHeight) - EXIT_HEIGHT)) + (YMAX - abs(m->mapHeight)) / 2; else y = rand() % (YMAX - EXIT_HEIGHT); gMission.exitLeft = x * TILE_WIDTH; gMission.exitRight = (x + EXIT_WIDTH + 1) * TILE_WIDTH; gMission.exitTop = y * TILE_HEIGHT; gMission.exitBottom = (y + EXIT_HEIGHT + 1) * TILE_HEIGHT; } SetupObjectives(m); SetupBadguysForMission(m); SetupWeapons(m->weaponSelection); SetRange(WALL_COLORS, abs(m->wallRange) % COLORRANGE_COUNT); SetRange(FLOOR_COLORS, abs(m->floorRange) % COLORRANGE_COUNT); SetRange(ROOM_COLORS, abs(m->roomRange) % COLORRANGE_COUNT); SetRange(ALT_COLORS, abs(m->altRange) % COLORRANGE_COUNT); if (buildTables) BuildTranslationTables(); }
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); }