Space Combat
Last updated
Last updated
NodeRunners is a player-controlled universe. Pilots are able to engage with any other pilots except for three conditions:
The players in question are in the hypershield (Zone 1, Nodes A4-A16)
The target player is from the same guild
The player does not have guns equipped on their ship.
Players who destroy another player's ship will receive a reward for the kill. The "PK Reward" will be paid out to the player if/when the ship in question has been salvaged.
Upon ship destruction, pilots themselves will be unaffected (other than the “death” statistic being updated). However, the destroyed ship will become unusable until it is salvaged. Salvaging a ship requires the player to pay a small percentage of the ship's market value to use the ship again.
The combat system in NodeRunners is intricate and involves some luck and the following factors.
Number of Guns
Each gun's firing rate
Each gun's damage
Each gun's accuracy
Ship hull (hit points)
Max shields
Shield applied at time of defense
Evasion
When Alice attacks a Bob, this is the order of operations in how we calculate damage that Bob will receive if any:
accuracy: value taken from gun that typically ranges from 40 to 60
evasion: value take from ships that typically ranges from 5 to 50
shieldValue: value taken from ships that typically ranges from 40 to 60
shieldSlider: value taken from user input which can be 0, 25, 50, 75, or 100 (to be used as percentages)
firingRate: value taken from guns that range from 80 to 90
randAccuracy: that's just random number from 1 to 100
randEvasion: that's just random number from 1 to 100
If Alice has 4 guns we calculate the playerAverageFiringRate from those guns
We then calculate the timeBetweenShots (in seconds) = 35 / playerAverageFiringRate
Note we actually subtract the 80 or 90 firing rate values of each gun by 50 so that we amplify their difference so that players feel more of the difference between different gun’s firing rate.
35 is an arbitrary constant to convert firing rate values of the guns to in real life seconds
Example Calculations: firingrate examples
Each shot includes independent rolls of each gun’s damage as calculated below:
ShotTotalDamage = gun1Damage + gun2Damage + gun3Damage + gun4Damage
The below calculation is done for each gun Alice has.
if (randAccuracy <= accuracy) //1
{
if (!(randEvasion <= evasion)) //2
damageTaken = (gunDamage - (gunDamage * (shieldValue * shieldSlider / 100))) * 6; //3
}
In English, the above code means that we pick a random number if that random number is less than or equal to the gun’s accuracy, then that means that it was an accurate hit, and we can then proceed forward in the calculation. The higher the accuracy value of the gun the higher the chance the calculation moves forward.
If NOT able to evade, then calculation move forward
damageTaken is equal to the original gunDamage minus the damage reduction by the shieldValue * shieldSlider
The 6 is an arbitrary constant we use that we can adjust up or down depending on how big we want each shot.