I've been trying to figure out how beam damage should overflow onto another target token. The issue is that the range and number of deflectors on the other token (both of which modify damage) are probably different to the original token.
This led me to the conclusion that Stars! must keep track of the "base" damage that has been "spent" at any particular time, leading to the following pseudo-code...
baseDamage = weaponDamage * weaponCount
while baseDamage > 0
pick most attractive target in range
if no suitable target
exit
end if
damageMultiplier = rangeMultiplier * deflectorMultiplier * capacitorMultiplier
if shields > baseDamage * damageMultiplier
shields = shields - baseDamage * damageMultiplier
baseDamage = 0
else
baseDamage = baseDamage - shields / damageMultiplier
shields = 0
if not sappers
kills = baseDamage * damageMultiplier / targetArmourPerShip
if kills > numberOfShipsInTargetStack
kills = numberOfShipsInTargetStack
end if
baseDamage = baseDamage - kills * targetArmourPerShip / damageMultiplier
numberOfShipsInTargetStack = numberOfShipsInTargetStack - kills
if numberOfShipsInTargetStack > 0
if baseDamage * damageMultiplier > numberOfShipsInTargetStack * targetArmourPerShip
kills = kills + numberOfShipsInTargetStack
baseDamage = baseDamage - kills * targetArmourPerShip / damageMultiplier
else
targetArmourPerShip = targetArmourPerShip - baseDamage * damageMultiplier / targetArmourPerShip
baseDamage = 0
end if
end if
end if
end if
end while
Would anyone care to comment on this ?