Commit graph

11 commits

Author SHA1 Message Date
0b82cd77f3 Lua: continue, include и загрузка геймода
- Препроцессор GMod: continue внутри for/while/repeat -> goto + уникальная
  метка; учтены строки/комментарии, вложенные циклы и функции, завершающие
  break/return (оборачиваются в do ... end). widget_bones.lua грузится:
  энтити 6 из 6.
- include(): поиск рядом с текущим файлом и в lua/ игры, тот же препроцессор,
  лимиты размера/глубины, защита от циклов и выхода за каталог игры.
- LuaRuntime::load_gamemode(): init.lua и cl_init.lua, сбор ошибок без
  падения. Sandbox init.lua выполняется, cl_init.lua упирается в VGUI
  (AccessorFunc); реестры list/scripted_ents после загрузки целы.
- Безопасные заглушки загрузочного слоя Sandbox: CLIENT/SERVER, is*,
  FindMetaTable, cleanup, drive, duplicator, net, cvars, player_manager.
- Тесты: юнит-тесты препроцессора, include на временных файлах и реальных
  lua/includes, загрузка sandbox на ассетах.
2026-10-24 13:29:30 +03:00
dbecb3c6c5 feat(render): попиксельная лайтмапа, HDR и мягкие тени
Свет больше не интерполируется по вершинам: LUMP_LIGHTING раскладывается в
атлас Rgba16Float (рамка 1 тексель на блок), в вершине появился lightmap_uv,
шейдер мира читает атлас на каждый пиксель с билинейной фильтрацией. Это
убирает перелом света по рёбрам брашей (A10). Для карт без атласа остаётся
вершинный путь fs_main_vertex.

Мир, небо и вода рисуются в Rgba16Float; затем экспозиция, ACES и bloom
(порог в ½ разрешения, два прохода размытия, аддитивно). UI и диагностика
идут отдельным проходом в sRGB-поверхность. Переключатели: SOURCE_RS_NO_HDR,
SOURCE_RS_EXPOSURE, SOURCE_RS_BLOOM, SOURCE_RS_BLOOM_THRESHOLD.

PCF теней: 9 отсчётов с поворотом по мировой позиции и нормальным смещением,
режим SOURCE_RS_DEBUG_SHADOW. Плюс SOURCE_RS_NO_VSYNC и SOURCE_RS_LOG_FPS для
замеров.

Тесты: lightmap_atlas_maps_face_block, half_conversion_known_values; все
прежние сьюты зелёные. Замер E11: ~22,1 fps до, ~21,0 с HDR (~3% на пост),
NO_HDR ~21,7.
2026-10-23 14:10:58 +03:00
44b0ece2ab render: вода (SURF_WARP), area-скайбокс с правильным порядком глубины, лайтмапы диспов по UV
- Вода: детект Water-шейдера (/), отдельный полупрозрачный
  проход с френелем; поверхность/изнанка по нормали. Белая дыра на месте воды
  (2D-скайбокс «вниз») устранена.
- 3D-скайбокс: выбор граней по area листа sky_camera (движок: area bits), а не по
  AABB. Disp-грани не попадают в leaf_faces — выбор по листу центра грани; теперь
  в скайбоксе есть большая плоскость flatgrass_2 (пропадала — торчала «стена»
  бетонного пола). Защита >30% граней = скайбокс не выделяем (gm_flatgrass).
- Порядок: 2D-скайбокс фоном -> 3D-меш (depth Always, без записи) -> мир ->
  вода. Скайбокс больше не проступает сквозь дальние стены карты.
- Лайтмапы: блок грани (size+1)^2 с индексом v*width+u; для displacement'ов —
  плотная сетка по UV поверхности (CalcDispSurfCoords), а не проекция мира:
  убрана «шахматка» теней на рельефе. Скайбокс-меш тоже сэмплит лайтмапы.
- Тесты: gm_flatgrass-диспы живут в скайбоксе (z≈-16000), пороги обновлены.
- docs/RECON.md §12: форматы листьев/граней, лайтмапы, скайбокс, вода.
2026-10-12 08:28:28 +03:00
a92da38a1d docs: прогресс M2/M3/M7 (netchan, игрок, модели, скайбокс, HUD, меню, Lua)
- PLAN.md: отмечено сделанное по M3 v1 (ходьба, энтити-модели, 3D-скайбокс,
  HUD, меню) и M7 v0 (LuaJIT-рантайм, препроцессор, автозагрузка аддонов)
- net: диагностические env-переключатели (keepalive, задержки connect, флаги)
- RECON §11: формат GMod netchan и открытый вопрос кика
2026-10-12 04:47:04 +03:00
efc4b03bc8 net: M2 v0 — хендшейк с ClassicBox, Steam-тикет, netchan-заголовки
- crates/net: битовые буферы Source (LSB), A2S, netchan (флаги/checksum/challenge),
  разбор net/SVC-сообщений, connect с GMod ChecksumXOR и Steam-тикетом
- steamworks-rs: session ticket для VAC-серверов (appid 4000)
- версия клиента в connect берётся из A2S (фикс #GameUI_ServerRejectNewVersion)
- CLI: net info / net connect
- Проверено: ClassicBox принимает подключение (auth_protocol=3, Steam)
- Далее: подканалы надёжного потока → SVC_ServerInfo → signon
- docs: прогресс M2, заметки (нумерация GMod, ChecksumXOR, версии, локальный DS)
2026-10-12 00:27:28 +03:00
b8b5a4c328 engine/render: M3 v0 — рендер мира BSP со скайбоксом
- crates/engine: сборка мира (браши, displacement'ы, лайтмапы в вершинах,
  материалы через VMT/patch/include, кэш текстур, пропуск прозрачных материалов),
  загрузка скайбокса из skyname
- crates/render: wgpu-рендерер мира (VB/IB, батчи, глубина), скайбокс-куб,
  камера-полёт, capture PNG с учётом BGRA, debug-режимы материалов
- client: команда map (диск/VPK, pakfile карты, WASD+мышь, --pos/--angles/--screenshot)
- тесты: gm_construct/gm_flatgrass собираются, 0 заглушек, 41 324 треугольника
- docs: прогресс M3 и заметки (BGRA, pak-VMT, z=w клиппинг)
2026-10-12 00:06:26 +03:00
d6b213cecc formats: VVD/VTX — меш-данные моделей (вершины, fixup, LOD-дерево)
- VVD (IDSV v4): заголовок 64 байта, mstudiovertex_t 48 байт (веса/кости/позиция/нормаль/UV),
  тангенты, таблица fixup
- VTX (packed): BodyPart→Model→LOD→Mesh→StripGroup→Strip, валидация индексов и смещений;
  смещения вложенных структур относительны своей структуры
- fs inspect: для .mdl показывает VVD/VTX-статистику и сверку checksum
- тесты: oildrum (270 вершин/756 индексов), 51 пара VVD/VTX с совпадающим checksum
- docs: прогресс M1 (остался ANIM, PCF/PHY/SND, GMA/mount.cfg)
2026-10-11 23:15:46 +03:00
7236910e69 formats: MDL (заголовок v44-49, кости, аттачменты, хитбоксы, текстуры, keyvalues)
- базовый studiohdr_t = 408 байт, v48+ studiohdr2 (256 байт) перед костями
- строки читаются относительно структур (sznameindex), всё bounded
- fs inspect: полная сводка по модели (кости/аттачменты/текстуры/include/keyvalues)
- тесты: oildrum (v44, 1 кость), advisor (v48, 25 костей), выборка 53 моделей — 0 ошибок
- docs: прогресс M1 (остались VVD/VTX/ANIM, PCF/PHY/SND, GMA/mount.cfg)
2026-10-11 23:09:25 +03:00
34ea6b8521 formats: KeyValues, BSP (+геометрия, LZMA, pakfile ZIP), VTF (декод DXT), VMT; fs inspect/list
- crates/formats: bounded-парсеры kv/bsp/vtf/vmt/pakfile
- BSP: 64 лумпа, LZMA, ENTITIES, texdata/имена, game lumps, геометрия v20 с validate()
- VTF 7.0-7.5: заголовок, ресурсы 7.3+, мипы, декод в RGBA8 (DXT1/3/5 и др.)
- pakfile: ZIP Store/Deflate с CRC и лимитами
- client: fs list, fs inspect (формат по магии), геометрия карты в inspect
- тесты: реальные карты gm_construct/gm_flatgrass, 200 VTF, 200 VMT, pakfile 599 записей
- docs: прогресс M1 и заметки разведки
2026-10-11 23:03:45 +03:00
dec5b2c48f sprint 0: workspace, tier/fs/math, VPK v1/v2 с CRC, окно SDL3+wgpu на Vulkan
- crates/tier: tracing-логи, конвары с реестром, конфиг TOML, авто-детект ассетов
- crates/fs: bounded-парсер VPK v1/v2 (preload, встроенные данные, внешние архивы),
  VirtualFs с приоритетами и защитой от traversal, CRC-проверка
- crates/math: Vec3/Angle/Aabb
- crates/client (gmod-rs): fs doctor / fs cat, окно SDL3+wgpu 30, FPS в заголовке и логе
- тесты на реальных VPK (~/gmod_server/server): 9 контейнеров, 77 933 записи, 0 ошибок CRC
- CI-скелет, fuzz-таргет vpk_parse, config.example.toml, обновление docs
2026-10-11 22:47:09 +03:00
ec0750a829 docs: план Source RS — этапы, архитектура, проблемы, Lua, сеть, разведка 2026-10-11 22:25:36 +03:00