# The OODA Loop

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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.