/** * Enters the mission. * @param action Pointer to an action. */ void ConfirmLandingState::btnYesClick(Action *action) { _game->popState(); Ufo* u = dynamic_cast<Ufo*>(_craft->getDestination()); TerrorSite* t = dynamic_cast<TerrorSite*>(_craft->getDestination()); AlienBase* b = dynamic_cast<AlienBase*>(_craft->getDestination()); if (u != 0) { SavedBattleGame *bgame = new SavedBattleGame(); _game->getSavedGame()->setBattleGame(bgame); if(u->getStatus() == Ufo::CRASHED) bgame->setMissionType("STR_UFO_CRASH_RECOVERY"); else bgame->setMissionType("STR_UFO_GROUND_ASSAULT"); BattlescapeGenerator bgen = BattlescapeGenerator(_game); bgen.setWorldTexture(_texture); bgen.setWorldShade(_shade); bgen.setCraft(_craft); bgen.setUfo(u); bgen.setAlienRace(u->getAlienRace()); bgen.setAlienItemlevel(0); bgen.run(); _game->pushState(new BriefingState(_game, _craft)); } else if (t != 0) { SavedBattleGame *bgame = new SavedBattleGame(); _game->getSavedGame()->setBattleGame(bgame); bgame->setMissionType("STR_TERROR_MISSION"); BattlescapeGenerator bgen = BattlescapeGenerator(_game); bgen.setWorldTexture(_texture); bgen.setWorldShade(_shade); bgen.setCraft(_craft); bgen.setTerrorSite(t); bgen.setAlienRace(t->getAlienRace()); bgen.setAlienItemlevel(0); bgen.run(); _game->pushState(new BriefingState(_game, _craft)); } else if (b != 0) { SavedBattleGame *bgame = new SavedBattleGame(); _game->getSavedGame()->setBattleGame(bgame); bgame->setMissionType("STR_ALIEN_BASE_ASSAULT"); BattlescapeGenerator bgen = BattlescapeGenerator(_game); bgen.setWorldTexture(_texture); bgen.setWorldShade(_shade); bgen.setCraft(_craft); bgen.setAlienBase(b); bgen.setAlienRace(b->getAlienRace()); bgen.setAlienItemlevel(0); bgen.run(); _game->pushState(new BriefingState(_game, _craft)); } }
/** * Returns to the previous screen. * @param action Pointer to an action. */ void BaseDefenseState::btnOkClick(Action *) { _timer->stop(); _game->setPalette(_game->getResourcePack()->getPalette("PALETTES.DAT_0")->getColors()); _game->popState(); if(_ufo->getStatus() != Ufo::DESTROYED) { if (_base->getAvailableSoldiers(true) > 0) { size_t month = _game->getSavedGame()->getMonthsPassed(); if (month > _game->getRuleset()->getAlienItemLevels().size()-1) month = _game->getRuleset()->getAlienItemLevels().size()-1; SavedBattleGame *bgame = new SavedBattleGame(); _game->getSavedGame()->setBattleGame(bgame); bgame->setMissionType("STR_BASE_DEFENSE"); BattlescapeGenerator bgen = BattlescapeGenerator(_game); bgen.setBase(_base); bgen.setAlienRace(_ufo->getAlienRace()); bgen.setAlienItemlevel(_game->getRuleset()->getAlienItemLevels().at(month).at(RNG::generate(0,9))); bgen.run(); _state->musicStop(); _game->pushState(new BriefingState(_game, 0, _base)); } else { _game->pushState(new BaseDestroyedState(_game, _base)); } } // Whatever happens in the base defense, the UFO has finished its duty _ufo->setStatus(Ufo::DESTROYED); }
/** * Enters the mission. * @param action Pointer to an action. */ void ConfirmLandingState::btnYesClick(Action *) { _game->popState(); _state->musicStop(); Ufo* u = dynamic_cast<Ufo*>(_craft->getDestination()); TerrorSite* t = dynamic_cast<TerrorSite*>(_craft->getDestination()); AlienBase* b = dynamic_cast<AlienBase*>(_craft->getDestination()); size_t month = _game->getSavedGame()->getMonthsPassed(); if (month > _game->getRuleset()->getAlienItemLevels().size()-1) month = _game->getRuleset()->getAlienItemLevels().size()-1; SavedBattleGame *bgame = new SavedBattleGame(); _game->getSavedGame()->setBattleGame(bgame); BattlescapeGenerator bgen = BattlescapeGenerator(_game); bgen.setWorldTexture(_texture); bgen.setWorldShade(_shade); bgen.setCraft(_craft); if (u != 0) { if(u->getStatus() == Ufo::CRASHED) bgame->setMissionType("STR_UFO_CRASH_RECOVERY"); else bgame->setMissionType("STR_UFO_GROUND_ASSAULT"); bgen.setUfo(u); bgen.setAlienRace(u->getAlienRace()); } else if (t != 0) { bgame->setMissionType("STR_TERROR_MISSION"); bgen.setTerrorSite(t); bgen.setAlienRace(t->getAlienRace()); } else if (b != 0) { bgame->setMissionType("STR_ALIEN_BASE_ASSAULT"); bgen.setAlienBase(b); bgen.setAlienRace(b->getAlienRace()); } else { throw Exception("No mission available!"); } bgen.setAlienItemlevel(_game->getRuleset()->getAlienItemLevels().at(month).at(RNG::generate(0,9))); bgen.run(); _game->pushState(new BriefingState(_game, _craft)); }
/** * Returns to the previous screen. * @param action Pointer to an action. */ void ConfirmCydoniaState::btnYesClick(Action *) { _game->popState(); _game->popState(); SavedBattleGame *bgame = new SavedBattleGame(); _game->getSavedGame()->setBattleGame(bgame); bgame->setMissionType("STR_MARS_CYDONIA_LANDING"); BattlescapeGenerator bgen = BattlescapeGenerator(_game); bgen.setCraft(_craft); bgen.setAlienRace("STR_SECTOID"); bgen.setWorldShade(15); bgen.run(); _game->pushState(new BriefingState(_game, _craft)); }
/** * Returns to the previous screen. * @param action Pointer to an action. */ void ConfirmCydoniaState::btnYesClick(Action *) { _game->popState(); _game->popState(); SavedBattleGame *bgame = new SavedBattleGame(); _game->getSavedGame()->setBattleGame(bgame); BattlescapeGenerator bgen = BattlescapeGenerator(_game); for (std::vector<std::string>::const_iterator i = _game->getRuleset()->getDeploymentsList().begin(); i != _game->getRuleset()->getDeploymentsList().end(); ++i) { AlienDeployment *deployment = _game->getRuleset()->getDeployment(*i); if (deployment->isFinalDestination()) { bgame->setMissionType(*i); bgen.setAlienRace(deployment->getRace()); break; } } bgen.setCraft(_craft); bgen.run(); _game->pushState(new BriefingState(_craft)); }
/** * Starts the battle. * @param action Pointer to an action. */ void NewBattleState::btnOkClick(Action *) { save(); if (_missionTypes[_cbxMission->getSelected()] != "STR_BASE_DEFENSE" && _craft->getNumSoldiers() == 0 && _craft->getNumVehicles() == 0) { return; } SavedBattleGame *bgame = new SavedBattleGame(); _game->getSavedGame()->setBattleGame(bgame); bgame->setMissionType(_missionTypes[_cbxMission->getSelected()]); BattlescapeGenerator bgen = BattlescapeGenerator(_game); Base *base = 0; bgen.setTerrain(_game->getMod()->getTerrain(_terrainTypes[_cbxTerrain->getSelected()])); // base defense if (_missionTypes[_cbxMission->getSelected()] == "STR_BASE_DEFENSE") { base = _craft->getBase(); bgen.setBase(base); _craft = 0; } // alien base else if (_game->getMod()->getDeployment(bgame->getMissionType())->isAlienBase()) { AlienBase *b = new AlienBase(_game->getMod()->getDeployment(bgame->getMissionType())); b->setId(1); b->setAlienRace(_alienRaces[_cbxAlienRace->getSelected()]); _craft->setDestination(b); bgen.setAlienBase(b); _game->getSavedGame()->getAlienBases()->push_back(b); } // ufo assault else if (_craft && _game->getMod()->getUfo(_missionTypes[_cbxMission->getSelected()])) { Ufo *u = new Ufo(_game->getMod()->getUfo(_missionTypes[_cbxMission->getSelected()])); u->setId(1); _craft->setDestination(u); bgen.setUfo(u); // either ground assault or ufo crash if (RNG::generate(0,1) == 1) { u->setStatus(Ufo::LANDED); bgame->setMissionType("STR_UFO_GROUND_ASSAULT"); } else { u->setStatus(Ufo::CRASHED); bgame->setMissionType("STR_UFO_CRASH_RECOVERY"); } _game->getSavedGame()->getUfos()->push_back(u); } // mission site else { const AlienDeployment *deployment = _game->getMod()->getDeployment(bgame->getMissionType()); const RuleAlienMission *mission = _game->getMod()->getAlienMission(_game->getMod()->getAlienMissionList().front()); // doesn't matter MissionSite *m = new MissionSite(mission, deployment); m->setId(1); m->setAlienRace(_alienRaces[_cbxAlienRace->getSelected()]); _craft->setDestination(m); bgen.setMissionSite(m); _game->getSavedGame()->getMissionSites()->push_back(m); } if (_craft) { _craft->setSpeed(0); bgen.setCraft(_craft); } _game->getSavedGame()->setDifficulty((GameDifficulty)_cbxDifficulty->getSelected()); bgen.setWorldShade(_slrDarkness->getValue()); bgen.setAlienRace(_alienRaces[_cbxAlienRace->getSelected()]); bgen.setAlienItemlevel(_slrAlienTech->getValue()); bgame->setDepth(_slrDepth->getValue()); bgen.run(); _game->popState(); _game->popState(); _game->pushState(new BriefingState(_craft, base)); _craft = 0; }