MCPcopy Create free account
hub / github.com/OpenXcom/OpenXcom / initSave

Method initSave

src/Menu/NewBattleState.cpp:382–456  ·  view source on GitHub ↗

* Initializes a new savegame with * everything available. */

Source from the content-addressed store, hash-verified

380 * everything available.
381 */
382void NewBattleState::initSave()
383{
384 const Ruleset *rule = _game->getRuleset();
385 SavedGame *save = new SavedGame();
386 Base *base = new Base(rule);
387 const YAML::Node &starter = _game->getRuleset()->getStartingBase();
388 base->load(starter, save, true, true);
389 save->getBases()->push_back(base);
390
391 // kill everything we don't want in this base
392 for (std::vector<Soldier*>::iterator i = base->getSoldiers()->begin(); i != base->getSoldiers()->end(); ++i) delete (*i);
393 base->getSoldiers()->clear();
394 for (std::vector<Craft*>::iterator i = base->getCrafts()->begin(); i != base->getCrafts()->end(); ++i) delete (*i);
395 base->getCrafts()->clear();
396 base->getItems()->getContents()->clear();
397
398 _craft = new Craft(rule->getCraft(_crafts[_cbxCraft->getSelected()]), base, 1);
399 base->getCrafts()->push_back(_craft);
400
401 // Generate soldiers
402 for (int i = 0; i < 30; ++i)
403 {
404 Soldier *soldier = rule->genSoldier(save);
405
406 for (int n = 0; n < 5; ++n)
407 {
408 if (RNG::percent(70))
409 continue;
410 soldier->promoteRank();
411
412 UnitStats* stats = soldier->getCurrentStats();
413 stats->tu += RNG::generate(0, 5);
414 stats->stamina += RNG::generate(0, 5);
415 stats->health += RNG::generate(0, 5);
416 stats->bravery += RNG::generate(0, 5);
417 stats->reactions += RNG::generate(0, 5);
418 stats->firing += RNG::generate(0, 5);
419 stats->throwing += RNG::generate(0, 5);
420 stats->strength += RNG::generate(0, 5);
421 stats->psiStrength += RNG::generate(0, 5);
422 stats->melee += RNG::generate(0, 5);
423 stats->psiSkill += RNG::generate(0, 20);
424 }
425 UnitStats* stats = soldier->getCurrentStats();
426 stats->bravery = (int)ceil(stats->bravery / 10.0) * 10; // keep it a multiple of 10
427
428 base->getSoldiers()->push_back(soldier);
429 if (i < _craft->getRules()->getSoldiers())
430 soldier->setCraft(_craft);
431 }
432
433 // Generate items
434 const std::vector<std::string> &items = rule->getItemsList();
435 for (std::vector<std::string>::const_iterator i = items.begin(); i != items.end(); ++i)
436 {
437 RuleItem *rule = _game->getRuleset()->getItem(*i);
438 if (rule->getBattleType() != BT_CORPSE && rule->isRecoverable())
439 {

Callers

nothing calls this directly

Calls 15

percentFunction · 0.85
generateFunction · 0.85
getBasesMethod · 0.80
getContentsMethod · 0.80
getSelectedMethod · 0.80
genSoldierMethod · 0.80
promoteRankMethod · 0.80
getBattleTypeMethod · 0.80
isRecoverableMethod · 0.80
isFixedMethod · 0.80
getBigSpriteMethod · 0.80
addFinishedResearchMethod · 0.80

Tested by

no test coverage detected