Изменения в клиенте ET: Legacy для Android — сборка «Garagum Legacy» =================================================================== Основа: исходный код ET: Legacy 2.86.0 (GPL-3.0). Результат: приложение com.garagumgames.etlegacy, название «Garagum Legacy», versionCode 4, подписано нашим собственным ключом, только arm64-v8a. Цель изменений — убрать любые обращения к серверам разработчиков игры и оставить единственный внешний адрес: 95.85.125.50 (наш сервер). 1. Сетевые адреса в движке -------------------------- src/qcommon/qcommon.h MASTER_SERVER_NAME -> "95.85.125.50" (главный список серверов) MOTD_SERVER_NAME -> "95.85.125.50" (сообщение дня) UPDATE_SERVER_NAME -> "95.85.125.50" (проверка обновлений) MIRROR_SERVER_URL -> "http://95.85.125.50:7017" (обе ветки) из него собираются адреса загрузки данных игры и карт: com_downloadURL = http://95.85.125.50:7017/etmain src/qcommon/q_shared.h PRODUCT_URL -> "http://95.85.125.50:7017/" MODURL -> "95.85.125.50:7017" CMakeLists.txt MODURL -> "95.85.125.50:7017" src/qcommon/common.c sv_master1 -> "95.85.125.50" (аналог +set sv_master1) src/qcommon/auth.c AUTH_DEFAULT_SERVER -> "" (вход в игру отключён) При пустом значении движок пропускает авторизацию полностью (проверка в auth.c: if (!*auth_server->string)). src/ui/ui_loadpanel.c Сообщение «клиент устарел» больше не отправляет на www.etlegacy.com, а указывает на наш сервер: 95.85.125.50:7017. 2. Приложение для Android ------------------------- applicationId com.garagumgames.etlegacy app_name Garagum Legacy versionCode 4 ABI arm64-v8a (телефоны; 64-битный ARM) minSdkVersion 26 (Android 8.0) targetSdkVersion 36 Подпись собственный ключ garagum-etl (схема подписи v2) Данные игры приложение забирает с этого же сервера (http://95.85.125.50:7017/etmain/), поэтому при первом запуске телефон должен находиться в локальной сети. Каталоги на телефоне (внешний каталог приложения, разрешения не нужны): .../files/etlegacy fs_basepath: данные игры, только чтение .../files/etlegacy/home fs_homepath: профиль и всё, что пишет движок Движок отказывается запускаться, если fs_basepath и fs_homepath совпадают («FS_Startup: fs_homepath and fs_basepath are equal»), поэтому домашний каталог вынесен в подпапку home. В первой сборке versionCode 4 игра именно на этом и падала: старый лаунчер подавал в качестве fs_homepath сам fs_basepath. Управление на экране. В релизной сборке все экранные кнопки рисовались чёрными значками на полностью прозрачном фоне поверх 3D-сцены, а площадка и головка джойстика задавались прозрачным цветом, поэтому кнопок не было видно вообще. Теперь у каждой кнопки полупрозрачная панель со светлой рамкой, значок перекрашен в белый и растянут на всю кнопку, у джойстика видимая окружность. Кнопка «огонь» большая, у неё только рамка, чтобы не закрывать сцену. Кнопки клавиатуры и меню (btn, gears) в релизной сборке были скрыты всегда, поэтому игрок не мог ни открыть консоль/чат, ни вызвать меню игры. Теперь они показываются во время боя. Системная клавиатура больше не выезжает поверх игры при каждом запуске: SDL включает ввод текста при инициализации движка, и Android показывал клавиатуру. Клавиатура закрывается, как только появляется боевой HUD, а своя кнопка клавиатуры по-прежнему её открывает. Раскладка кнопок. В исходной раскладке кнопки «перезарядка», «альтернативный режим» и «присесть» стояли в одной и той же точке у правого края (координаты считались от ширины экрана), поэтому две из трёх были недостижимы, а нижний ряд был виден не полностью. Раскладка переписана по одной позиции на кнопку: верхний ряд консоль, клавиатура, Esc/меню, шестерёнка нижний ряд применить, присесть, клавиша, прыжок, альт-режим, перезарядка Раскладка сделана по образцу PUBG Mobile (два больших пальца). Левый палец двигает и стреляет, правый — целится и стреляет: слева снизу джойстик движения слева сверху «бег» (автобег) слева в центре второй огонь (огонь, не отпуская палец прицела) справа снизу огонь (большая кнопка), рядом прыжок, присесть, лежать справа выше прицел (ADS), перезарядка, альтернативный режим правый край наклон влево и наклон вправо верх слева консоль, клавиатура, меню, счёт, шестерёнка верх центр пять слотов оружия Второй огонь, прицел и оба наклона не имеют клавиш на клавиатуре — они посылают команды движка напрямую (+attack, +zoom, +leanleft, +leanright), поэтому работают и на телефоне, и с внешней клавиатурой. Виджеты самого ET: Legacy остаются в правом нижнем углу (счётчик патронов, полоса выносливости) и в правой полосе (лента убийств, таймер), поэтому кнопки в эти зоны не заходят: правый нижний блок обрывается на 88% ширины и 83% высоты. В PUBG Mobile слоты оружия стоят именно там — здесь HUD игры важнее. Правки раскладки в меню «Настроить кнопки» не доходили до игры: редактор сохранял карту компонентов под именем componentMap, а боевой экран читал componentMap_garagum4. Теперь редактор, тема и привязки пишут в ту же карту. Значки кнопок больше не берутся из сохранённой раскладки: в Android идентификатор картинки — это просто номер, и добавление новой картинки сдвигает нумерацию. Из-за этого кнопка «огонь» получала значок клавиатуры. Теперь расположение кнопок берётся из сохранённой раскладки игрока, а значки всегда из текущей сборки. Джойстик сделан полупрозрачным и с меньшей головкой — сплошной светлый круг закрывал левую половину обзора. Меню игры (кнопка Esc) открывается и переведено на русский: «ВЕРНУТЬСЯ В БОЙ», «КОМАНДА И КЛАСС», «НАСТРОИТЬ КНОПКИ», «ВЫЙТИ ИЗ МАТЧА». Кнопка-шестерёнка открывает настройку экранных кнопок (правка, тема, привязки, сброс). 3. Что это даёт --------------- Клиент не обращается ни к одному серверу вне нашей сети: ни к master.etlegacy.com, ни к update.etlegacy.com, ни к auth.etlegacy.com, ни к зеркалам загрузки. Если официальные сервера и сайт ET: Legacy исчезнут, клиент продолжит работать — он зависит только от 95.85.125.50. 4. Правка только для сборки -------------------------- libs/CMakeLists.txt Загрузка библиотеки SDL 2.30.9 переведена с релизного файла (github.com/libsdl-org/SDL/releases/...) на архив тега (github.com/libsdl-org/SDL/archive/refs/tags/release-2.30.9.tar.gz), хеш MD5=63c33c970dc15605e2a6b378938e5025. Причина: релизные файлы GitHub отдаются с хоста release-assets.githubusercontent.com, который с нашего сервера недоступен, а архив тега скачивается. Содержимое то же самое (проверено: include/SDL_revision.h и configure на месте), на работу клиента это не влияет — меняется только источник загрузки при сборке. 5. Исходный код --------------- Полный пересобранный архив исходников: etlegacy-2.86.0-garagum-src.tar.gz (107,5 МБ) Ключ подписи и пароль к нему на этом сервере не публикуются. Лицензия исходного кода — GPL-3.0, она сохранена без изменений. Сборка APK: garagum-legacy-v2.86.0.apk, 42 908 791 байт, sha256 5fd3ddb08d8b9f9cf5ae20408ba41382635a6a2e28f88cbf5fb7e591a4858e9b.