Есть основной loop выполнения последовательности функций при модуле "капитанского мостика" и при каждом модуле оружия.

При каждом loop'е можно задать три локальные переменные.
Если их не хватило - можно отдельно запросить текущее значение вычислений в конкретной строчке в промежутке между началом loop'а и текущей выполняемой функцией.
На всё про всё для общения между loop'ами доступно три глобальных переменных.
Если очень хочется, можно отстрелить до трёх маяков и двигать их по арене по координатам, как эрзац-глобальные-переменные.
Вернее, эрзац-массивы, потому, что...

...Единственный вид массива - фиксированной длины 2, в виде координат некоей точки на двухмерной арене.
ВСЁ остальное - в лучшем случае десятичное число с (насколько я помню) двумя знаками после запятой. И четырьмя знаками до.

Самая сложная вычислительная функция - косинус, кстати.
Никаких баз данных, никаких матриц, джойнов, логарифмов.
И вычисления производятся по одной операции за раз.

Loop можно разбить на три условных потока, которые всё равно будут выполнять свои функции строго по очереди. Просто "потокоимитатор" даёт возможность остановить выполнение серии команд по необходимости, не отправляя весь loop в досрочное завершение.
Loop'ы начинаются и завершаются, как я понимаю, синхронно. Пока все loop'ы не завершили текущий цикл - новый не начнётся.

Функция смены цели поддерживает только вилку "дроны, корабли или и то, и другое" и перебор "следующий/ближайший".

Задача: как-то заколхозить, во-первых, сбор характеристик вражеских кораблей на арене, а во-вторых, выбор из их числа обладателей самого большого или самого маленького параметра.

Сценарий использования: ну например выбрать среди наличных целей самый дохлый корабль и раскатать его в звёздную пыль.
Или найти самый медленный (читай: с наименьшей максимальной скоростью) корабль и распетрушить ему дюзы, пока более проворные товарищи гоняют более быстрых врагов.

И вот как я ни бьюсь, я пока не могу сложить в своей голове какой-то адекватной схемы.

На арену выходит до 10 вражеских кораблей за раз.
Единственная считываемая уникальная метрика у них - максимальная скорость полёта.
И то, как сказать "уникальная"... Из-за особенностей игровой физики, каждое ведро хоть чуть-чуть да отличается по этому результату вычислений на базе мощности двигателя и массы корабля. Остальные параметры будут слишком часто совпадать.

Способа хранить ВЕСЬ массив данных о считанных кораблях и динамически его обновлять - попросту нет, переменных не хватает даже с колхозингом с координатами маяков.

Способ вида "повторить десять раз:
- выбрать следующую цель
- если её координаты null
-- остановить корабль //враги кончились, не на кого набегать. Вместо этого можно выбрать точку и улететь туда. Вместе с дронами!
-- завершить loop
- считать её максимальную скорость
- если её максимальная скорость уже записана в переменную А
-- завершить loop // остался один враг на арене, нечего насиловать проц
- если его %СРАВНИВАЕМЫЙ_ПАРАМЕТР% больше/меньше записанного в переменную Б
-- записать %СРАВНИВАЕМЫЙ_ПАРАМЕТР% в переменную Б и максимальную скорость в переменную А"
мне не нравится тем, что следующий же патч, в котором, скажем, максимальное количество врагов могут увеличить, всё поломает.
А гонять луп 9999 раз каждый такт - это говнокод.

Нужно какое-то более изящное решение.
Желательно, не жрущее ещё больше переменных и не всирающее точность вычислений (точность поиска самого большего/меньшего параметра у присутствующих на арене кораблей) ещё сильнее.

И я до него докопаюсь... Я точно упускаю какую-то скрытую фичу внутриигрового кодинга...