Last active
December 29, 2017 11:09
-
-
Save lulebe/4941ac11c21b9a21a206872fe03423b2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| external calls: | |
| - unit.initiative | |
| - unit.computeDistance(unit) | |
| - unit.reduceAmmo() | |
| - unit.getHurt() | |
| - unit.getSpecialTerrainBonus() | |
| - computeDamage //see below | |
| */ | |
| function executeBattle (attacker, defender) { | |
| var defenderDamage = 0 | |
| var attackerDamage = 0 | |
| var attackerInitiative = attacker.initiative | |
| var defenderInitiative = defender.initiative | |
| if(attacker.computeDistance(defender) > 1) { //Distance attack, attacker will not get hurt | |
| defenderDamage = this.computeDamage(attacker,defender) | |
| attacker.reduceAmmo(1) | |
| defender.getHurt(defenderDamage) | |
| attackerInitiative = 0 | |
| defenderInitiative = 1 | |
| } else { // close combat, both may get hurt | |
| //not quite sure: | |
| if(defender.getSpecialTerrainBonus()) { | |
| defenderInitiative = defenderInitiative - 1 | |
| } | |
| attackerInitiative = attackerInitiative - 1 | |
| //depending on initiative, one starts the fight first or both at the same time | |
| //lower initiative starts the fight (what?!) | |
| if(attackerInitiative == defenderInitiative) { | |
| defenderDamage = this.computeDamage(attacker,defender) | |
| attackerDamage = this.computeDamage(defender,attacker) | |
| attacker.reduceAmmo(1) | |
| defender.reduceAmmo(1) | |
| defender.getHurt(defenderDamage) | |
| attacker.getHurt(attackerDamage) | |
| } else if(attackerInitiative < defenderInitiative) { | |
| defenderDamage = this.computeDamage(attacker,defender) | |
| attacker.reduceAmmo(1) | |
| defender.getHurt(defenderDamage) | |
| if(defender) { | |
| attackerDamage = this.computeDamage(defender,attacker) | |
| defender.reduceAmmo(1) | |
| attacker.getHurt(attackerDamage) | |
| } | |
| } else if(attackerInitiative > defenderInitiative) { | |
| attackerDamage = this.computeDamage(defender,attacker) | |
| defender.reduceAmmo(1) | |
| attacker.getHurt(attackerDamage) | |
| if(attacker) { | |
| defenderDamage = this.computeDamage(attacker,defender) | |
| attacker.reduceAmmo(1) | |
| defender.getHurt(defenderDamage) | |
| } | |
| } | |
| } | |
| } | |
| /* | |
| external calls: | |
| - unit.getNumberOfFights(uniTypeCat, isDefender) | |
| - unit.computeDistance(unit) | |
| - unit.minRange | |
| - unit.hitPoints | |
| - unit.getHp() | |
| - city.getBattleBonus() | |
| - game.getCity(row,col) | |
| - game.getHumanBonus(row,col) | |
| */ | |
| function computeDamage (attacker, defender) { | |
| var damage = 0 | |
| for (var i = 0; i < 6; i++) { | |
| var attackerNumberOfFights = attacker.getNumberOfFights(defender.getTypeCat(),0) | |
| var defenderNumberOfFights = defender.getNumberOfFights(attacker.getTypeCat(),1) | |
| if(defender.computeDistance(attacker) < attacker.getMinRange()) { | |
| attackerNumberOfFights = 0 | |
| } | |
| if(attacker.computeDistance(defender) < defender.getMinRange()) { | |
| defenderNumberOfFights = 0 | |
| } | |
| var defenderCity = this.getCity(defender.row,defender.col) | |
| if(defenderCity != null) { | |
| defenderNumberOfFights = defenderNumberOfFights + defenderCity.getBattleBonus() | |
| defenderNumberOfFights = defenderNumberOfFights + this.getHumanBonus(defender.row,defender.col) | |
| } | |
| var attackerCity = this.getCity(attacker.row,attacker.col) | |
| if(attackerCity != null) { | |
| attackerNumberOfFights = attackerNumberOfFights + attackerCity.getBattleBonus() / 2 | |
| attackerNumberOfFights = attackerNumberOfFights + this.getHumanBonus(attacker.row,attacker.col) / 2 | |
| } | |
| var attackerHitpoints = attacker.hitPoints; | |
| var diceResult = 0 | |
| var damageAdd = 0 | |
| for (var j = 0; j < attackerHitpoints; j++) { | |
| var highestAttackerDiceResult = 0 | |
| var highestDefenderDiceResult = 0 | |
| for (var k = 0; k < attackerNumberOfFights; k++) { | |
| diceResult = this.getDice()// 0 < randint < 7 | |
| if(diceResult > highestAttackerDiceResult) { | |
| highestAttackerDiceResult = diceResult | |
| } | |
| } | |
| for (var l = 0; l < defenderNumberOfFights; l++) { | |
| diceResult = this.getDice()// 0 < randint < 7 | |
| if(diceResult > highestDefenderDiceResult) { | |
| highestDefenderDiceResult = diceResult | |
| } | |
| } | |
| if(highestDefenderDiceResult < highestAttackerDiceResult) { | |
| damageAdd = damageAdd + 1 | |
| } | |
| } | |
| damage = damage + damageAdd | |
| } | |
| damage = damage / 6 | |
| if(damage > defender.getHP()) { | |
| damage = defender.getHP() | |
| } | |
| if(damage > 8) { | |
| damage = 8 | |
| } | |
| return damage | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment