The OODA Loop
| |
---|---|

Details | |

175,000 ops | |

45,000 yomi | |

Effect |
Utilize Probe Speed to outmaneuver enemies in battle |

**The OODA Loop** is a project in Universal Paperclips.

## Summary[ | ]

This project is unlocked by buying Combat **and** having lost >10M probes in combat. .

"OODA" is a reference to the military strategy of *Observe, Orient, Decide, and Act.*

## Survival chance[ | ]

Due to the way the combat code interacts with the OODA Loop, having a sufficiently high speed stat can guarantee a probe's survival, even when vastly outnumbered. (Why this happens will be explored in the next section)

Given a ratio of hostile and friendly probes interacting in a single cell, the formula for the required speed is `4.375 * (hostile / friendly) - 2.5`

.

Given a speed factor, any friendly probe is guaranteed survival until they are outnumbered more than `(speed + 2.5) / 4.375`

to 1.

Pre-calculated ratios | |||||||
---|---|---|---|---|---|---|---|

1:1 | 2 | 11:1 | 46 | 21:1 | 90 | 31:1 | 134 |

2:1 | 7 | 12:1 | 50 | 22:1 | 94 | 32:1 | 138 |

3:1 | 11 | 13:1 | 55 | 23:1 | 99 | 33:1 | 142 |

4:1 | 15 | 14:1 | 59 | 24:1 | 103 | 34:1 | 147 |

5:1 | 20 | 15:1 | 64 | 25:1 | 107 | 35:1 | 151 |

6:1 | 24 | 16:1 | 68 | 26:1 | 112 | 36:1 | 155 |

7:1 | 29 | 17:1 | 72 | 27:1 | 116 | 37:1 | 160 |

8:1 | 33 | 18:1 | 77 | 28:1 | 120 | 38:1 | 164 |

9:1 | 37 | 19:1 | 81 | 29:1 | 125 | 39:1 | 169 |

10:1 | 42 | 20:1 | 85 | 30:1 | 129 | 40:1 | 173 |

## Mechanics[ | ]

Note: This will be an analysis of the JavaScript code behind the mechanics, however it doesn't require specific knowledge of JavaScript to understand. The relevant code is in the `DoCombat`

function on line 462 of combat.js.

Whenever probes "fight" (i.e. at least one friendly and one hostile probe occupy the same pixel), each probe rolls dice, and if the value is higher than a certain threshold they are killed. Drifters and friendly probes each have different formulas for their dice rolls: (`numDrifters`

and `numFriendly`

are the number of drifter and friendly probes that are present in the pixel)

- The fomula for friendly probes is
`Math.random() * drifterCombat * (numDrifters/numFriendly) * 0.5`

- The fomula for hostile probes is
`(Math.random() * probeCombat * 0.15 + probeCombat * .1) * (numLeftTeam / numRightTeam) * 0.5`

Notice that the OODA Loop doesn't effect either of these factors, rather it becomes a flat bonus on the death threshold, adding `probeSpeed * 0.2`

to the base value of `0.5`

. That means that as long as the dice roll is less than or equal to `0.5 + probeSpeed * 0.2`

, the probe will survive.

The first step is to calculate the formula for the absolute maximum possible dice roll. Since `drifterCombat`

is simply a constant set to `1.75`

, we can combine it with the `0.5`

and get `0.875`

, and since `Math.random()`

is never greater than `1.0`

, replacing that with `1.0`

will get the maximum possible dice roll for a given drifter:friendly ratio. Doing this, the maximum dice roll comes out to `0.875 * (numDrifters/numFriendly)`

.

Bringing this all together, as long as `0.875 * (numDrifters/numFriendly)`

is less than or equal to `0.5 + probeSpeed * 0.2`

, it is impossible for the friendly probe to die. Rearranging this equation results in the formulas shown above.