static void load_mission_objective(FILE *f, struct MissionObjectiveOld *o) { f_read(f, o->description, sizeof(o->description)); f_read32(f, &o->type, sizeof(o->type)); f_read32(f, &o->index, sizeof(o->index)); f_read32(f, &o->count, sizeof(o->count)); f_read32(f, &o->required, sizeof(o->required)); f_read32(f, &o->flags, sizeof(o->flags)); debug(D_VERBOSE, " >> Objective: %s data: %d %d %d %d %d\n", o->description, o->type, o->index, o->count, o->required, o->flags); }
int ScanCampaignOld(const char *filename, char **title, int *missions) { FILE *f; int i; CampaignSettingOld setting; debug(D_NORMAL, "filename: %s\n", filename); f = fopen(filename, "rb"); if (f != NULL) { f_read32(f, &i, sizeof(i)); if (i != CAMPAIGN_MAGIC) { fclose(f); debug(D_NORMAL, "Filename: %s\n", filename); debug(D_NORMAL, "Magic: %d FileM: %d\n", CAMPAIGN_MAGIC, i); debug(D_NORMAL, "ScanCampaignOld - bad file!\n"); return -1; } f_read32(f, &i, sizeof(i)); if (i != CAMPAIGN_VERSION) { fclose(f); debug( D_NORMAL, "ScanCampaignOld - version mismatch (expected %d, read %d)\n", CAMPAIGN_VERSION, i); return -1; } f_read(f, setting.title, sizeof(setting.title)); f_read(f, setting.author, sizeof(setting.author)); f_read(f, setting.description, sizeof(setting.description)); f_read32(f, &setting.missionCount, sizeof(setting.missionCount)); CSTRDUP(*title, setting.title); *missions = setting.missionCount; fclose(f); return 0; } perror("ScanCampaignOld - couldn't read file:"); return -1; }
int IsCampaignOldFile(const char *filename) { int32_t i; FILE *f = fopen(filename, "rb"); if (f == NULL) { return 0; } f_read32(f, &i, sizeof i); fclose(f); return i == CAMPAIGN_MAGIC; }
int LoadCampaignOld(const char *filename, CampaignSettingOld *setting) { FILE *f = NULL; int32_t i; int err = 0; debug(D_NORMAL, "f: %s\n", filename); f = fopen(filename, "rb"); if (f == NULL) { err = -1; goto bail; } f_read32(f, &i, sizeof(i)); if (i != CAMPAIGN_MAGIC) { debug(D_NORMAL, "LoadCampaign - bad file!\n"); err = -1; goto bail; } f_read32(f, &i, sizeof(i)); if (i != CAMPAIGN_VERSION) { debug(D_NORMAL, "LoadCampaign - version mismatch!\n"); err = -1; goto bail; } f_read(f, setting->title, sizeof(setting->title)); f_read(f, setting->author, sizeof(setting->author)); f_read(f, setting->description, sizeof(setting->description)); f_read32(f, &setting->missionCount, sizeof(int32_t)); CCALLOC( setting->missions, setting->missionCount * sizeof *setting->missions); debug(D_NORMAL, "No. missions: %d\n", setting->missionCount); for (i = 0; i < setting->missionCount; i++) { load_mission(f, &setting->missions[i]); } f_read32(f, &setting->characterCount, sizeof(int32_t)); CCALLOC( setting->characters, setting->characterCount * sizeof *setting->characters); debug(D_NORMAL, "No. characters: %d\n", setting->characterCount); for (i = 0; i < setting->characterCount; i++) { load_character(f, &setting->characters[i]); } bail: if (f != NULL) { fclose(f); } return err; }
static void load_mission(FILE *f, struct MissionOld *m) { int i; f_read(f, m->title, sizeof(m->title)); f_read(f, m->description, sizeof(m->description)); debug(D_NORMAL, "== MISSION ==\n"); debug(D_NORMAL, "t: %s\n", m->title); debug(D_NORMAL, "d: %s\n", m->description); R32(m->wallStyle); R32(m->floorStyle); R32(m->roomStyle); R32(m->exitStyle); R32(m->keyStyle); R32(m->doorStyle); R32(m->mapWidth); R32(m->mapHeight); R32(m->wallCount); R32(m->wallLength); R32(m->roomCount); R32(m->squareCount); R32(m->exitLeft); R32(m->exitTop); R32(m->exitRight); R32(m->exitBottom); R32(m->objectiveCount); debug(D_NORMAL, "number of objectives: %d\n", m->objectiveCount); for (i = 0; i < OBJECTIVE_MAX; i++) { load_mission_objective(f, &m->objectives[i]); } R32(m->baddieCount); for (i = 0; i < BADDIE_MAX; i++) { f_read32(f, &m->baddies[i], sizeof(int)); } R32(m->specialCount); for (i = 0; i < SPECIAL_MAX; i++) { f_read32(f, &m->specials[i], sizeof(int)); } R32(m->itemCount); for (i = 0; i < ITEMS_MAX; i++) { f_read32(f, &m->items[i], sizeof(int)); } for (i = 0; i < ITEMS_MAX; i++) { f_read32(f, &m->itemDensity[i], sizeof(int)); } R32(m->baddieDensity); R32(m->weaponSelection); f_read(f, m->song, sizeof(m->song)); f_read(f, m->map, sizeof(m->map)); R32(m->wallRange); R32(m->floorRange); R32(m->roomRange); R32(m->altRange); debug(D_VERBOSE, "number of baddies: %d\n", m->baddieCount); }
int LoadCampaign( const char *filename, CampaignSetting *setting, int max_missions, int max_characters) { FILE *f = NULL; int i; int err = CAMPAIGN_OK; int numMissions = max_missions; int numCharacters = max_characters; debug(D_NORMAL, "f: %s\n", filename); f = fopen(filename, "rb"); if (f == NULL) { err = CAMPAIGN_BADPATH; goto bail; } f_read32(f, &i, sizeof(i)); if (i != CAMPAIGN_MAGIC) { debug(D_NORMAL, "LoadCampaign - bad file!\n"); err = CAMPAIGN_BADFILE; goto bail; } f_read32(f, &i, sizeof(i)); if (i != CAMPAIGN_VERSION) { debug(D_NORMAL, "LoadCampaign - version mismatch!\n"); err = CAMPAIGN_VERSIONMISMATCH; goto bail; } f_read(f, setting->title, sizeof(setting->title)); f_read(f, setting->author, sizeof(setting->author)); f_read(f, setting->description, sizeof(setting->description)); f_read32(f, &setting->missionCount, sizeof(setting->missionCount)); if (max_missions <= 0) { size_t size = setting->missionCount * sizeof(struct Mission); CCALLOC(setting->missions, size); numMissions = setting->missionCount; } else if (setting->missionCount < max_missions) { numMissions = setting->missionCount; } debug(D_NORMAL, "No. missions: %d\n", numMissions); for (i = 0; i < numMissions; i++) { load_mission(f, &setting->missions[i]); } f_read32(f, &setting->characterCount, sizeof(setting->characterCount)); if (max_characters <= 0) { size_t size = setting->characterCount * sizeof(TBadGuy); CCALLOC(setting->characters, size); numCharacters = setting->characterCount; } else if (setting->characterCount < max_characters) { numCharacters = setting->characterCount; } debug(D_NORMAL, "No. characters: %d\n", numCharacters); for (i = 0; i < numCharacters; i++) { load_character(f, &setting->characters[i]); } bail: if (f != NULL) { fclose(f); } return err; }