Замер: для gm_construct реально читаются 335 файлов из VPK на 27,0 МБ
(277 материалов, 23 модели, 35 Lua-скриптов; крупнейшее — m_anm.ani 6,8 МБ)
плюс карта 35,0 МБ. Итого 62,1 МБ сырых, 31 МБ в tar.gz — против 6,7 ГБ
полной установки. Этого набора достаточно: клиент запускается с ним, карта
и пистолет полностью текстурированы (проверено кадром).
- VirtualFs: запись успешных чтений (start_recording/take_recorded);
- команда `gmod-rs fs pack <карта> --out <каталог>`: собирает мир, грузит
модели игрока и оружия, автозагрузку Lua и копирует прочитанные файлы в
структуру garrysmod/... плюс карту — получается самодостаточный корень
ассетов для `--assets`;
- android/build.sh: если есть android/assets/gmod (или GMOD_RS_ANDROID_ASSETS),
каталог кладётся в APK как assets/gmod;
- MainActivity: при первом запуске распаковывает assets/gmod в
files/gmod_server/server, если карты там ещё нет — APK самодостаточен,
adb push не нужен;
- .gitignore: android/assets/ (ассеты GMod не коммитим).
Все сьюты зелёные.
- MainActivity фиксирует ландшафт (SDL перебивал манифест FULL_USER) и
передаёт путь к ассетам через getExternalFilesDir;
- короткий тап по JUMP не теряется между кадрами (jump_pending);
- HUD сдвинут внутрь от статус-бара и нижней панели;
- логгер на Android собирается без неиспользуемой ветки.
tracing на Android пишет в logcat (adb logcat -s gmod-rs), иначе диагностика
запуска на устройстве теряется. build.sh принимает ANDROID_ABI (arm64-v8a,
x86_64, armeabi-v7a, x86) — x86_64 нужен для проверки в эмуляторе.
- client получил lib.rs (общий запуск) и cdylib с экспортом SDL_main;
- steamworks и mlua-фичи разведены по target cfg: на Android нет Steam,
Lua 5.4 вместо LuaJIT;
- виртуальный стик, обзор свайпом и кнопки прыжка/приседа в map;
- android/: манифест, SDLActivity Java, build.sh (aapt2+d8+apksigner).