Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if ($combatworthygroups>1) {
- if ($battle->getDefenseBonus() > 0) {
- $this->log(10, "Defense Bonus / Fortification: ".$battle->getDefenseBonus()."\n");
- }
- foreach ($battle->getGroups() as $group) {
- $mysize = $group->getVisualSize();
- if ($group->isDefender() && $battle->getDefenseBonus()) {
- // if we're on defense, we feel like we're more
- $mysize *= 1 + ($battle->getDefenseBonus()/200);
- }
- $enemy = $group->getEnemy();
- if ($enemy) {
- $enemysize = $enemy->getVisualSize();
- $mod = sqrt($mysize / $enemysize);
- } else {
- // FIXME: strange, we don't know our enemy?
- $mod = 1.0;
- }
- $this->log(3, "Group #".$group->getId().", visual size $mysize.\n");
- $this->battlesize = min($mysize, $enemysize);
- foreach ($group->getCharacters() as $char) {
- $this->character_manager->addAchievement($char, 'battlesize', $this->battlesize);
- }
- $base_morale = 50;
- // defense bonuses:
- if ($group->isDefender()) {
- if ($battle->getDefenseBonus()) {
- $base_morale += $battle->getDefenseBonus()/2;
- }
- if ($battle->getSettlement()) {
- $base_morale += 10; // note: this will always be true if the above is true, as for the moment we have fortifications only at settlements
- }
- }
- $this->log(10, "Base morale: $base_morale, mod = $mod\n");
- foreach ($group->getSoldiers() as $soldier) {
- // starting morale: my power, defenses and relative sizes
- $power = $soldier->RangedPower() + $soldier->MeleePower() + $soldier->DefensePower();
- if ($group->isDefender() && $battle->getDefenseBonus()) {
- $soldier->setFortified(true);
- }
- if ($soldier->isNoble()) {
- $this->character_manager->addAchievement($soldier->getCharacter(), 'battles');
- $morale = $base_morale * 1.5;
- } else {
- $this->history->addToSoldierLog($soldier, 'battle', array("%link-battle%"=>$this->report->getId()));
- $morale = $base_morale;
- }
- if ($soldier->getDistanceHome() > 10000) {
- // 50km = -10 / 100 km = -14 / 200 km = -20 / 500 km = -32
- $distance_mod = sqrt(($soldier->getDistanceHome-10000)/500);
- } else {
- $distance_mod = 0;
- }
- $soldier->setMorale(($morale + $power) * $mod - $distance_mod);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement