void ConvertCampaignSetting(CampaignSetting *dest, CampaignSettingOld *src) { int i; CFREE(dest->Title); CSTRDUP(dest->Title, src->title); CFREE(dest->Author); CSTRDUP(dest->Author, src->author); CFREE(dest->Description); CSTRDUP(dest->Description, src->description); for (i = 0; i < src->missionCount; i++) { Mission m; MissionInit(&m); ConvertMission(&m, &src->missions[i]); CArrayPushBack(&dest->Missions, &m); } CharacterStoreTerminate(&dest->characters); CharacterStoreInit(&dest->characters); for (i = 0; i < src->characterCount; i++) { Character *ch = CharacterStoreAddOther(&dest->characters); ConvertCharacter(ch, &src->characters[i]); CharacterSetLooks(ch, &ch->looks); } }
static void SetupQuickPlayEnemies( Mission *mission, const int numEnemies, CharacterStore *store) { int i; for (i = 0; i < numEnemies; i++) { const GunDescription *gun; CArrayPushBack(&mission->Enemies, &i); for (;;) { gun = CArrayGet( &gGunDescriptions.Guns, rand() % (int)gGunDescriptions.Guns.size); if (!gun->IsRealGun) { continue; } // make at least one of each type of enemy: // - Short range weapon // - Long range weapon // - High explosive weapon if (i == 0 && !IsShortRange(gun)) { continue; } if (i == 1 && !IsLongRange(gun)) { continue; } if (i == 2 && ConfigGetBool(&gConfig, "QuickPlay.EnemiesWithExplosives") && !IsHighDPS(gun)) { continue; } if (!ConfigGetBool(&gConfig, "QuickPlay.EnemiesWithExplosives") && IsHighDPS(gun)) { continue; } break; } Character *ch = CharacterStoreAddOther(store); SetupQuickPlayEnemy(ch, gun); } }
void LoadCharacters( CharacterStore *c, json_t *charactersNode, const int version) { json_t *child = charactersNode->child; CharacterStoreTerminate(c); CharacterStoreInit(c); while (child) { Character *ch = CharacterStoreAddOther(c); char *tmp; if (version < 7) { // Old version stored character looks as palette indices int face; LoadInt(&face, child, "face"); ch->Class = IntCharacterClass(face); int skin, arm, body, leg, hair; LoadInt(&skin, child, "skin"); LoadInt(&arm, child, "arm"); LoadInt(&body, child, "body"); LoadInt(&leg, child, "leg"); LoadInt(&hair, child, "hair"); ConvertCharacterColors(skin, arm, body, leg, hair, &ch->Colors); } else { tmp = GetString(child, "Class"); ch->Class = StrCharacterClass(tmp); CFREE(tmp); LoadColor(&ch->Colors.Skin, child, "Skin"); LoadColor(&ch->Colors.Arms, child, "Arms"); LoadColor(&ch->Colors.Body, child, "Body"); LoadColor(&ch->Colors.Legs, child, "Legs"); LoadColor(&ch->Colors.Hair, child, "Hair"); } LoadInt(&ch->speed, child, "speed"); tmp = GetString(child, "Gun"); ch->Gun = StrGunDescription(tmp); CFREE(tmp); LoadInt(&ch->maxHealth, child, "maxHealth"); LoadInt(&ch->flags, child, "flags"); LoadInt(&ch->bot->probabilityToMove, child, "probabilityToMove"); LoadInt(&ch->bot->probabilityToTrack, child, "probabilityToTrack"); LoadInt(&ch->bot->probabilityToShoot, child, "probabilityToShoot"); LoadInt(&ch->bot->actionDelay, child, "actionDelay"); child = child->next; } }