Skip to content

Instantly share code, notes, and snippets.

@lulebe
Last active December 29, 2017 11:09
Show Gist options
  • Select an option

  • Save lulebe/4941ac11c21b9a21a206872fe03423b2 to your computer and use it in GitHub Desktop.

Select an option

Save lulebe/4941ac11c21b9a21a206872fe03423b2 to your computer and use it in GitHub Desktop.
/*
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