OGame 0.84 Open Source Дайджест 2026 года — что изменилось в коде
Документация English Руководство мододела GitHub
МеталлКристаллДейтерийЭнергия

Обзор

В 2026 году OGame 0.84 Open Source — возрождённый классический OGame v0.84 с оригинальным дизайном нулевых — прошёл через две интенсивные волны разработки: январь–февраль и август–сентябрь. За это время в ветку master влито 559 коммитов из 82 смерженных pull request’ов (около +434 тыс. / −82 тыс. строк в ~1 448 файлах).

Главные итоги года:

  • Настоящая подсистема модов: самодостаточные моды с хуками, админ-панель модов и четыре мода в репозитории — GalaxyTool, «Космический Шторм» (Space Storm), «Чудовища Бездны» (Deep Space Horror) и минимальный пример BogusMod.
  • Глубокий рефакторинг архитектуры: модульное ядро, типизация методов, единый роутер страниц и долгая миграция разделения контроллера страницы и представления (MVC).
  • Golden-тестирование страниц: полные HTML-снимки всех страниц игры, рендер на in-memory SQLite-движке, семь поддерживаемых языков и сравнение с сохранёнными снимками OldDesign.
  • Исправления безопасности и стабильности: XSS в именах альянсов, краши после атак, восстановление оригинального алгоритма ракетной атаки (IPM) и десятки игровых багов.
  • Полная документация разработчика: руководство мододела (HTML + wiki), Doxygen-документация игрового ядра, код без ошибок PHPStan и тестовые наборы внутри самих модов.

Все номера issue и pull request’ов ниже ведут на репозиторий GitHub. Дайджест собран по истории ветки master и текущему состоянию кода по состоянию на 3 сентября 2026 года.

Год в цифрах

559коммитов влито в master
82pull request’а смержено
1 448файлов изменено
+434k / −82kстрок добавлено / удалено
4мода в репозитории
707golden-снимков HTML
7языков под тестами
2волны разработки

Ритм активности года (коммиты в master по месяцам):

МесяцКоммитовЧто преобладало
Январь292Модульность ядра, роутер, Space Storm, «Ресурс как игровой объект», Deep Space Horror, старт MVC-миграции
Февраль160Первая волна Space Storm, GalaxyTool-мод, лимиты, фиксы крашей, MVC-миграция
Март6Конец первой волны (последний MVC-мерж — 6 марта)
Июнь6Страницы fleet_templates и changelog на MVC, написан план миграции
Август66In-memory SQLite-бэкенд, golden-тесты, выравнивание MVC, Doxygen, фиксы XSS, зачистка PHPStan
Сентябрь (1–3)29Golden-тесты на всех языках, алгоритм IPM, завершение Space Storm и Deep Space Horror, руководство мододела

Первая волна (PR #167–#247) шла с 9 января по 6 марта и перестроила фундамент движка. Вторая волна (PR #250–#286) — с 18 августа по 3 сентября: тестовый каркас, финальный раунд исправлений и документация. Репозиторий используется командой как живой полигон: заметная часть кода 2026 года написана и отревьюена с помощью ИИ-агентов (в трейлерах коммитов вида Co-authored-by: DeepSeek Harness <deepseek-harness@noreply.local>).

Хронология

КогдаЧто произошло (смерженные PR / коммиты в master)
9–11 января Разделение ядра на модули (#167), полная типизация методов ядра (#169), единый роутер страниц (#171) — фундамент нового ядра заложен за три дня.
12 янв – 15 фев Серия мода Space Storm (#173 #177#193 #209#230): глобальные штормовые события, постройка «Стабилизатор Реальности», боевые и экономические хуки — первая большая проверка системы модов.
18 янв – 1 фев Ресурс как игровой объект (#181 #186 #194 #206): единая экономика страниц ресурсов и империи, обработка ресурсов флотами, новые хуки производства.
26 янв – 6 мар Начало разделения контроллера и представления страницы (#195 и далее #208 #234#247): первой переведена страница ресурсов (26 янв), затем обзор, заметки, админ-страницы, постройки, дерево технологий.
27 янв – 2 фев Серия мода Deep Space Horror (#196 #199#207): три блуждающих чудовища, порталы Бездны, ковровые бомбардировки, трофеи и возрождение — второй большой тест системы модов (свои объекты галактики, юниты и миссии).
7–8 февраля GalaxyTool становится встроенным модом (#214 #216 #217) — мод со своей игровой и админ-страницей на шести языках.
10 февраля Лимиты и баланс (#221): настройка battle_max, предел 99-го уровня для построек и исследований; проверка CRON на админ-странице очереди.
14–15 февраля Исправлены краш после шпионажа (#228), краш после атаки (#231) и локализация имени проекта (#233).
16–24 февраля Ещё страницы на MVC (разделение альянса на подмодули, techtree), исправлены исследование «Гравитон», уменьшение IPM, бой экспедиций; фикс ракетной атаки.
25 июня Прямые коммиты в master: страницы fleet_templates и changelog на MVC; набросан план MVC-миграции и планы разработки (хранились в ветке 191); введены LF-окончания строк (.gitattributes).
18 августа Альтернативный in-memory бэкенд БД — SQLite через PDO (#250) и первый golden-набор на нём (#251).
19 августа Полное golden-покрытие всех страниц игры (#257), golden-тесты POST-страниц (#259); найдены и исправлены регрессии от MVC-рефакторинга.
20 августа MVC-страницы приведены в соответствие с master (#260), Doxygen-документация для game/core (#262), исправление XSS в именах альянсов и заметках (#263 #264), исправлены все ошибки PHPStan (#266).
1 сентября Golden-тесты на всех семи языках (#270), сравнение с сохранёнными снимками OldDesign (#271), восстановлен оригинальный алгоритм ракетной атаки OGame (#272).
2 сентября Завершён Space Storm (#273#275), исправлены отрицательные ресурсы админа (#276), кнопка «максимум» у торговца (#277), кулдаун экспедиций в Дальний космос (#278), мгновенное обновление статистики после ракетной атаки (#283), аудит Deep Space Horror (#284).
3 сентября Опубликовано руководство мододела (#286) — HTML-руководство в стиле Evolution в docs/ и полная wiki-страница о модах.

Архитектура движка

2026 год начался с интенсивного рефакторинга движка, который шёл с января по март и волнами продолжался до августа. Он сделал старую кодовую базу заметно более поддерживаемой, не меняя игровую механику.

Разделение ядра на модули #167

Начало января: 27 модулей движка переехали из веб-доступного корня game/ в самодостаточный game/core/ (36 плоских PHP-модулей + .htaccess, запрещающий веб-доступ), загружаемых в порядке зависимостей бутстрапом core.php. Каждый модуль — сфокусированный файл с ясной зоной ответственности: база данных (db.php-фасад + db_mysql.php/db_sqlite.php), пользователь, планета, флот, очередь, производство, бой, сообщения, альянсы, моды, утилиты и другие. Позже появились единый реестр игровых объектов techs.php (GID, карты, IsBuilding/IsFleet/…) и файл констант defs.php, движок альянсов разделён на подмодули ally.php/allyapps.php/allyranks.php/buddy.php, а слой БД обзавёлся SQLite-бэкендом для тестов.

Полная типизация методов ядра #169

Все методы ядра получили полные PHP-типы (типы параметров и возвращаемых значений). Вместе с PHPStan (см. ниже) это превратило динамически типизированную легаси-базу в код, где большинство ошибок типов ловится на этапе анализа, не доходя до работающей вселенной.

Единый роутер страниц #171

Маршрутизация стала управляться данными через game/router.json: index.php стал единым фронт-контроллером, который сопоставляет ключи ?page=… обработчикам по декларативной таблице (путь, лока, флаги и новый маркер "mvc": true), а моды могут добавлять маршруты через хук route. У админ-панели появился собственный второй роутер — game/pages_admin/admin_router.json (26 записей ?mode, хук route_admin). Сегодня маршрутизировано 37 ключей страниц; 31 — MVC-страницы, и лишь 6 остаются в старом стиле — сама оболочка админки и специальные «голые»/внешние страницы ainfo, bericht, logout, phalanx, pranger.

Разделение контроллера и представления страницы (MVC) #191

Самый долгий рефакторинг года. Раньше игровые страницы смешивали обработку запроса, бизнес-логику и HTML-вывод в одном файле. Теперь каждая страница — класс в game/pages/, наследующий абстрактный Page: controller() обрабатывает GET/POST-логику и возвращает, нужно ли рендерить, view() рендерит; фронт-контроллер вызывает их внутри общего жизненного цикла страницы. Миграция в master, подтверждённая флагом "mvc": true в router.json: 0 до 26 января → 1 (26 янв, #195, ресурсы) → 2 (3 фев, #208) → 7 (16 фев, #234: +обзор, заметки, постройки, techtree) — и оставалось 7 весь март (#235#247 были фиксами) — затем скачок до 31 из 37 маршрутизированных страниц 20 августа (#260: массовый перевод плюс исправление регрессий, чтобы golden-набор проходил). Переведены и все 26 админ-режимов (классы Admin_*). Последние шесть записей старого стиля — намеренно «голые»/внешние страницы: оболочка админки и ainfo, bericht, logout, phalanx, pranger. План миграции был набросан 25 июня (хранился в ветке, в дерево master не попал).

Ресурс как игровой объект #180

Январь: ресурсы перестали быть тремя захардкоженными числами и стали полноценными игровыми объектами, каждый со своим GID (GID_RC_METAL=700, GID_RC_CRYSTAL=701, GID_RC_DEUTERIUM=702, GID_RC_ENERGY=703, GID_RC_DM=704). techs.php получил IsResource() и типизированные карты ресурсов; унифицированные математика цен/длительности/производства и обработка ресурсов флотами позволяют ресурсам течь через все объектно-обобщённые механизмы, а новые хуки (add_resources, page_resources_get_bonus, page_buildings_get_bonus) дают модам и страницам единый конвейер производства (документировано в wiki/ru/resources.md).

Почему это важно

Эти изменения — предпосылка всего остального в дайджесте: типизированное, модульное ядро с роутером и разделёнными контроллерами делает возможными подсистему модов, golden-тесты и чистое состояние PHPStan — и позволяет вносить правки в одну страницу, не ломая всю игру.

Моды: подсистема и контент

Подсистема модов — главная игровая история 2026 года. Мод — это самодостаточная папка в game/mods/ с классом, наследующим GameMod (game/core/mods.php): main.php, manifest.json и опционально свои pages/, pages_admin/, loca/, img/, testing/. Ядро само находит моды по папкам, загружает их в порядке активации и вызывает их хуки в фиксированных точках движка — от событий очереди и бонусов производства до миссий флотов и боевых характеристик. Моды регистрируются по вселенной списком uni.modlist; администратор устанавливает/удаляет/переставляет их через новый админ-раздел (pages_admin/admin_mods.php, функции ModsList/ModsInstall/ModsRemove), после чего вызывается install() (ALTER TABLE, события очереди, loca_add). Полный справочник — руководство мододела и wiki/ru/mods.md.

GalaxyTool #214 #216 #217

Февраль: Galaxytool — раньше безусловная функция ядра — стал встроенным, но опциональным модом со своей игровой страницей (pages/galaxytool.php) и админ-разделом, локализованный на шести языках (de, en, es, fr, it, ru). Периодическое событие очереди (по умолчанию еженедельно) пишет снимки вселенной в temp/ (координаты галактики, статистика топ-1000, статистика альянсов), а игровая страница показывает растущих/падающих/неактивных игроков относительно предыдущего снимка. Администратор настраивает период обновления (1–30 дней) на новой странице admin_galaxytool.php; мод включается по вселенной, и кода GalaxyTool вне папки мода не осталось. Ветка заодно перевела всю админ-область на MVC (#216) и добавила хук route_admin (#217).

Space Storm #172

Начат в январе и завершён в сентябре: демонстрационный мод, который нагружает глобальные модификаторы движка (в Readme прямо сказано — это тестовый полигон механик движка, а не сбалансированный контент). Периодическое глобальное событие — Космический Шторм — тикает каждый час и меняет правила всей вселенной: один или несколько из десяти эффектов (скорость флотов −30–50%; 5% мгновенного прибытия / 1% потери на 1–2 часа; броня −20% и щиты +30%; удвоенный расход топлива и +25% добычи дейтерия; отчёты шпионажа с задержкой 1–5 мин и шпионаж −2; Энергетический Коллапс с −40% энергии и шансом заморозить случайную постройку/исследование; +10% к щитам обороны; конверсия 20% добычи в случайный ресурс; отключённый «Транспорт» между своими планетами; потери атакующего 5% флота после победы). Новое планетарное здание — Стабилизатор Реальности (GID_B_REALITY_STAB) — можно строить только во время шторма (+0.5% энергии за уровень); каждый завершённый уровень «запечатлевает» активный тип шторма на планете и открывает поуровневые контр-эффекты для этих эффектов. Всё реализовано чисто через хуки: боевые эффекты масштабируют статы юнитов по каждому бою на фронтенде боевого движка (battle_unit_stats), бэкенд движка не тронут. Вехи: январская волна (#173#193: скелет, табличные требования, первые механики, хуки can_build/build_end/page_infos), февральская (#209#230: панель бонусов, хуки производства/топлива, базовая фича заморозки очереди FreezeQueue в #213, флот/шпион-хуки, защита от производства выше склада) и сентябрьское завершение (#273#275): все десять эффектов и счётчики стабилизатора доведены до ума, добавлена локализация en/de (языки теперь ru/en/de), авто-разморозка при энергоколлапсе (замороженные задачи размораживаются при восстановлении энергии) и шпион-защита стабилизатора через новый хук spy_protection (+1 уровень защиты шпионажа за каждые 2 уровня), а тесты вынесены внутрь мода как самостоятельный PHPUnit-набор.

Deep Space Horror #189

Три гигантских космических чудовища — Амёба («Планктонный Пожиратель»), Страж («Блуждающий Монолит») и Левиафан («Галактический Исполин») — блуждают по вселенной. Каждое — одновременно объект-«планета» галактики и флот, существует в единственном экземпляре на вселенную и несёт уникальный арт. Флот чудовища летит (миссия «Подготовка к гиперпереходу») к своему Порталу Бездны; по прибытии портал уничтожается, чудовище занимает точку и, если рядом есть обитаемые планеты, начинается автоматический бой — ковровая бомбардировка всех обычных планет в радиусе от портала (P±1 / P±2 / P±3 в зависимости от чудовища), включая оборону и союзные флоты в ожидании (ACS), с бо́льшим числом раундов, чем в обычном бою (+1/+2/+3). Перемещение между порталами подчиняется ИИ каждого чудовища: Амёба дрейфует рядом, Страж идёт по предсказуемой спирали через галактику, Левиафан прыгает в случайные галактики.

Бои идут через фронтенд боевого движка без правок бэкенда — более того, январская волна включала масштабную переработку BattleEngine (#199: переписаны PHP-ядро боя и C++-движок) плюс унификацию боевых отчётов и расчёта обломков, которыми мод затем пользуется. Если защитники уничтожили чудовище, его останки распределяются между участниками пропорционально вкладу (Амёба — 2,5 млн дейтерия, Страж — 10 млн кристалла, Левиафан — 40 млн металла), каждому отправляется личное сообщение «Трофей Бездны», а на всю вселенную уходит броадкаст об уничтожении; убитые чудовища возрождаются в случайной точке через 24–72 реальных часа через одноразовое событие очереди. Языки: ru + en.

В сентябре мод прошёл аудит (#284): потери защитников теперь списываются сквозным образом, трофей распределяется, возрождение планируется (хелпер ядра SetPlanetFleetDefense пишет только существующие колонки), внутри мода появился самостоятельный PHPUnit-набор из 38 тестов (25 логики + 13 на in-memory SQLite), а журнал разработки на 670 строк переписан в читаемый структурированный Readme с добавлением английской локализации.

BogusMod

Добавлен в начале января как минимальный пример: одна колонка БД, свой ресурс, пункт меню и страница — «hello world» системы модов.

Безопасность и исправления

Безопасность

  • XSS в имени альянса и заметках (#165, мерж #263 #264): имена/теги альянсов и заметки, имена игроков, имена ACS-союзов и тексты друзей/заметок теперь HTML-экранируются на выводе примерно на 30 страницах; заметки хранятся как есть и экранируются при рендере (раньше — двойное кодирование). Пути хранения XSS закрыты; добавлен регрессионный набор XssTest.
  • Фикс пустой сессии и CheckParameters при установке (сентябрь): пустая строка сессии больше не аутентифицируется как технический «разлогиненный» аккаунт, гости на внутренних страницах редиректятся домой, а установщик проверяет все поля/диапазоны и доступность БД до изменения таблиц.
  • Утечки учётных данных БД закрыты: back trace использует DEBUG_BACKTRACE_IGNORE_ARGS (#245), AddDBRow экранирует строки через mysqli_real_escape_string, исключения mysqli при подключении не выбрасываются (март).

Бой

  • Восстановлен оригинальный алгоритм ракетной атаки OGame (IPM) (#61, мерж #272): ПРО перехватывают МБР 1:1, а остаточный урон после уничтожения обороны разрушает и хранящиеся у защитника ракеты.
  • Статистика обновляется сразу после ракетной атаки (#145, мерж #283): очки атакующего (стоимость МБР) и защитника (уничтоженная оборона) корректируются немедленно, а не при следующем полном пересчёте.
  • Фиксы ракет (февраль): урон МБР считался по захардкоженному юниту 503 вместо GID_D_IPM, а список событий обзора читал не ту переменную; запуск МБР теперь действительно уменьшает запас ракет планеты (неверный ключ массива).
  • Исправлены краш после атаки (#231) и краш после шпионажа (#228 — отчёт шпионажа читал несуществующее поле энергии, а rand() получал дробную границу); бой экспедиций (защита от отсутствующих записей юнитов); AddShipyard и исследование «Гравитон» (устаревшие чтения планеты, списание стоимости с нехранимых ресурсов).
  • Настройка battle_max и жёсткие пределы MAX_BUILDINGS_LEVEL/MAX_RESEARCH_LEVEL = 99, применяемые в очереди и UI (#221); ACS, бои экспедиций и отправка флотов отклоняют флоты выше battle_max с локализованными ошибками.

Экономика и планеты

  • Отрицательные ресурсы планеты при игре за админа исправлены (#117, мерж #276): сложение/вычитание ресурсов зажимается на нуле в PHP, грабёж и сбор обломков защищены от отрицательных входов; SetPlanetFleetDefense пишет только те колонки, что есть у планеты.
  • Кнопка «максимум» у торговца больше не превышает вместимость складов (#82, мерж #277): сделки ограничиваются свободным складом, а проверка сравнивала кристалл с лимитом металла — исправлено.
  • Производство выше вместимости склада больше не тикает (февраль); IsEnoughResources проверяет ресурсы игрока и планеты раздельно (январь); тёмная материя выведена как ресурс GID_RC_DM (февраль); истечение офицеров перенесено с глобальных событий очереди на надёжные таймеры пользователя (январь); очистка обломков использует унифицированные колонки (январь); страница выхода уважает скин игрока (февраль).

Экспедиции

  • Счётчик посещений экспедиций с кулдауном в Дальний космос и очистка Дальнего космоса (#174, мерж #278): позицию можно посещать ~3 раза/час без лишнего истощения; неиспользуемые объекты Дальнего космоса убирает отдельная еженедельная задача очереди — обе задачи видны на админ-странице очереди.

Стабильность и админка

  • Зачистка предупреждений PHP 8.x шла весь год (устаревшие float→int, неопределённые ключи, unserialize(), отчёты mysqli).
  • Админка: кнопка «Check CRON» на странице очереди, устойчивость cron, редактор Botstrat с JSON-импортом/ экспортом, null-безопасные хелперы имён планет (AdminPlanetName; в списке пользователей у аккаунтов без родной планеты показывается «–»), страница Source-Check с контрольными суммами файлов движка/страниц и режим отпуска через переиспользуемый метод EnableVacation.

Тестирование

До августа у проекта были лишь единичные ad-hoc тесты. За две недели команда построила настоящий регрессионный каркас, который сегодня рендерит целые страницы и сравнивает их с эталонными снимками.

  • In-memory бэкенд БД для тестов (#250): db.php стал фасадом между живым mysqli-бэкендом и новым db_sqlite.php (PDO SQLite, in-memory), выбираемым через DB_CONNECTION=sqlite. Он переводит MySQL-идиомы (LOCK TABLES, SET @var:=, AUTO_INCREMENT), так что настоящий игровой код и схема работают в PHPUnit без MySQL-сервера; FixtureBuilder наполняет полную вселенную-фикстуру на 3 игроков (луны, летящие флоты, очереди, сообщения, альянс, баны, обломки…).
  • Golden-набор страниц (#251 #257 #259 #270 #271): GoldenPagesTest (122 тест-метода) загружает страницы ровно как game/index.php (роутер, аутентификация, моды, лока), нормализует изменчивый вывод (таймстампы, сессии, ID, локализованные длительности) и сравнивает HTML с сохранёнными снимками; UPDATE_GOLDEN=1 перегенерирует их. Покрытие: 707 файлов снимков = 101 HTML на язык × 7 языков (de, en, es, fr, it, jp, ru), включая ~25 POST-сценариев для каждой POST-страницы (отзыв флота, постройка на верфи, обмен у торговца, запуск МБР, действия альянса…) и guard-тесты, которые следят, что у каждой маршрутизированной и каждой POST-страницы есть снимок. 1 сентября снимки сравнили с архивом OldDesign (классический дизайн, сохранённый во внешнем репозитории ogamespec/OldDesign), доказав паритет вёрстки, и дозаполнили недостающую локаль jp_jp. Набор сразу поймал регрессии, внесённые MVC-рефакторингом, — их затем исправили.
  • Юнит-тесты под фиксы: RocketAttack, RocketAttackStats, TraderStorage, NegativeResources, Farspace, Xss, Notes, Homepage и DbSqlite (11 классов, 191 тест-метод суммарно) покрывают конкретные баги из предыдущего раздела.
  • Самостоятельные PHPUnit-наборы внутри модов: Space Storm (22 тест-метода) и Deep Space Horror (38 тест-методов) поставляют testing/ со своим phpunit.xml, bootstrap и DB-тестами на in-memory SQLite (#275, #284) — разработка модов не засоряет общий набор проекта.
  • PHPUnit обновлён до 10.5.62 (#198).

Документация и качество

  • Руководство мододела (#286): mod-manual-ru.html / mod-manual-en.html в стиле Evolution плюс wiki/ru/mods.md и wiki/en/mods.md — руководство из 13 разделов: структура папок, API GameMod, страницы модов и админ-роутинг, локализация, события очереди и полный справочник из 38 хуков с местами вызова, плюс сценарии реальных модов.
  • Doxygen-документация для game/core (#262): +4 200 строк API-комментариев в 37 файлах ядра (Doxyfile в корне, вывод в .gitignore).
  • Зачистка PHPStan (#266): анализ уровня 8 для game/ и wwwroot/ (конфиг с января) в августе доведён до нуля ошибок — версионируемый отчёт сжался с 5 671 строки (январь) до «[OK] No errors». Анализатор вскрыл реальные баги (некавыченный ключ массива, опечатка filectime(), удалённый each(), потерянный __DIR__) — их исправили, а намеренные конструкции, помеченные как мёртвый код, восстановили с ignore-маркерами.
  • Wiki: за год добавлены и сильно обновлены страницы — руководство по модам (en+ru), golden-тестирование, установка (включая Docker), feed, очередь, бонусы и другие.
  • Переписанные Readme: Deep Space Horror получил полный читаемый документ в сентябре (#284); Readme Space Storm документирует каждый эффект и хук.

Локализация

  • Локализация имени проекта (#233): макросы OGAME_INT / OGAME_LOC позволяют локализовать название игры и тексты интерфейса по языкам.
  • Локализован и стабилизирован процесс регистрации: REG_NEW, REG_CHANGE, REG_GREET_MAIL, REG_GREET_MSG, REG_FORGOT, EMAIL_BARRIERFREI; isValidEmail перенесён в утилиты; переработаны страницы регистрации и обслуживания.
  • Локали модов: Space Storm на en/de/ru, Deep Space Horror на en/ru, GalaxyTool на шести языках.
  • Golden-снимки на семи языках держат переводы честными — страница за страницей.

Развёртывание и PHP 8.x

  • Docker: Dockerfile и история развёртывания переработаны (январь–сентябрь) — compose.yaml, боевой движок внутри контейнера, проверки при установке; в wiki появилось полное руководство по установке в Docker и ссылки на сообщество.
  • Совместимость с PHP 8.x: в течение года исправлены все предупреждения 8.x/8.2 (float→int, unserialize, отчёты mysqli); обновлены рекомендации php.ini.
  • Гигиена git: LF-окончания строк закреплены через .gitattributes; конфиги и отчёты PHPStan и PHPUnit версионируются вместе с кодом.

Команда и ссылки

Репозиторий: github.com/ogamespec/ogame-opensource. Основная разработка и ревью кода: ogamespec. Заметная часть работы 2026 года выполнена с помощью ИИ-агентов, чьи коммиты несут трейлер Co-authored-by: DeepSeek Harness <deepseek-harness@noreply.local> — этот дайджест также собран таким агентом в ветке 282-digest-year-2026 (issue #282).