void AmmoTerminate(AmmoClasses *ammo) { AmmoClassesClear(&ammo->Ammo); CArrayTerminate(&ammo->Ammo); AmmoClassesClear(&ammo->CustomAmmo); CArrayTerminate(&ammo->CustomAmmo); }
int MapNewLoadArchive(const char *filename, CampaignSetting *c) { LOG(LM_MAP, LL_DEBUG, "Loading archive map %s", filename); int err = 0; json_t *root = ReadArchiveJSON(filename, "campaign.json"); if (root == NULL) { err = -1; goto bail; } int version; LoadInt(&version, root, "Version"); if (version > MAP_VERSION || version <= 2) { err = -1; goto bail; } MapNewLoadCampaignJSON(root, c); json_free_value(&root); // Unload previous custom data SoundClear(&gSoundDevice.customSounds); PicManagerClearCustom(&gPicManager); ParticleClassesClear(&gParticleClasses.CustomClasses); AmmoClassesClear(&gAmmo.CustomAmmo); CharacterClassesClear(&gCharacterClasses.CustomClasses); BulletClassesClear(&gBulletClasses.CustomClasses); WeaponClassesClear(&gGunDescriptions.CustomGuns); PickupClassesClear(&gPickupClasses.CustomClasses); MapObjectsClear(&gMapObjects.CustomClasses); // Load any custom data LoadArchiveSounds(&gSoundDevice, filename, "sounds"); LoadArchivePics(&gPicManager, filename, "graphics"); root = ReadArchiveJSON(filename, "particles.json"); if (root != NULL) { ParticleClassesLoadJSON(&gParticleClasses.CustomClasses, root); } root = ReadArchiveJSON(filename, "character_classes.json"); if (root != NULL) { CharacterClassesLoadJSON( &gCharacterClasses.CustomClasses, root); } root = ReadArchiveJSON(filename, "bullets.json"); if (root != NULL) { BulletLoadJSON( &gBulletClasses, &gBulletClasses.CustomClasses, root); } root = ReadArchiveJSON(filename, "ammo.json"); if (root != NULL) { AmmoLoadJSON(&gAmmo.CustomAmmo, root); json_free_value(&root); } root = ReadArchiveJSON(filename, "guns.json"); if (root != NULL) { WeaponLoadJSON( &gGunDescriptions, &gGunDescriptions.CustomGuns, root); json_free_value(&root); } BulletLoadWeapons(&gBulletClasses); root = ReadArchiveJSON(filename, "pickups.json"); if (root != NULL) { PickupClassesLoadJSON(&gPickupClasses.CustomClasses, root); } PickupClassesLoadAmmo(&gPickupClasses.CustomClasses, &gAmmo.CustomAmmo); PickupClassesLoadGuns( &gPickupClasses.CustomClasses, &gGunDescriptions.CustomGuns); root = ReadArchiveJSON(filename, "map_objects.json"); if (root != NULL) { MapObjectsLoadJSON(&gMapObjects.CustomClasses, root); } MapObjectsLoadAmmoAndGunSpawners(&gMapObjects, &gAmmo, &gGunDescriptions); root = ReadArchiveJSON(filename, "missions.json"); if (root == NULL) { err = -1; goto bail; } LoadMissions( &c->Missions, json_find_first_label(root, "Missions")->child, version); json_free_value(&root); // Note: some campaigns don't have characters (e.g. dogfights) root = ReadArchiveJSON(filename, "characters.json"); if (root != NULL) { LoadCharacters( &c->characters, json_find_first_label(root, "Characters")->child, version); } bail: json_free_value(&root); return err; }