Skip to content

Latest commit

 

History

History
40 lines (28 loc) · 6.87 KB

ANALYSIS.md

File metadata and controls

40 lines (28 loc) · 6.87 KB

Анализ исходного репозитория

Область анализа

Проанализированы все четыре пользовательских файла исходной ревизии cb90770143c300b8bcafe8b55296a43340ca6ec7. Служебный каталог .git не является материалом API. Сохранённые артефакты читаются целиком генератором; инструкции дампа интерпретируются только как построение таблиц данных, без запуска игрового кода.

Файл Результат
README.md (исходный) Краткое описание находки и интересных подсистем. Утверждения о «полном API», оригинальных комментариях в байткоде и вырезанных механиках не подтверждаются сами по себе; README заменён справочной точкой входа.
DespairEngine_API_FEAR3 3 686 строк; побайтовая копия luasense_decompiled.lua. Сохранена для совместимости, не учитывается повторно при подсчёте функций.
luasense_decompiled.lua 3 686 строк, 1 503 объявления функций, подготовка таблиц пространств имён. Все тела пустые. Параметры обозначены argN. Полного набора редакторских путей из дампа здесь нет.
luasense_bytecode_disassembly.txt 55 632 строки: заголовок, 52 603 инструкции корневого прототипа и сводки 3 025 дочерних прототипов. Содержит создание таблиц функций и справочных записей Editor. Тела дочерних прототипов не дизассемблированы подробно.

Что означают числа

В дампе 3 024 дочерних прототипа отмечены как body=RETURN; child#0 (GetCallTipInfo) отмечен как helper с 67 инструкциями. Следовательно, неверно считать абсолютно все исходные тела пустыми: пустой является именно предоставленная Lua-реконструкция. Текст не позволяет восстановить поведение helper.

Объединение 1 503 путей из заглушек и 3 002 ключей call-tip даёт 3 879 записей. Пересечение — 626 путей. Короткие имена (Player, Game.Player) и длинные (GameScript.Game.Player) учитываются раздельно: общность реализации автоматически не предполагается. Редакторские пути часто имеют описание, но не достоверную сигнатуру из Lua-реконструкции.

Метод извлечения

  1. Из аннотированных LOADK, GETGLOBAL и SETGLOBAL извлекаются доступные значения констант через ast.literal_eval.
  2. Выполняется ограниченная модель восьми встречающихся инструкций: создание таблицы, загрузка константы, чтение/запись глобала, чтение/запись таблицы, ссылка на closure и возврат. Неизвестная инструкция вызывает ошибку.
  3. Неаннотированные константы представлены символами @K[n]. Полные оригинальные имена полей из них не выдумываются.
  4. Из единственной дочерней таблицы Editor берутся строковые ключи call-tip и их вложенные данные. Сохраняются в JSON без потери структуры.
  5. Имена функций и арность отдельно извлекаются из Lua-заглушек. Сопоставление с подсказками производится только по точному полному пути.
  6. Генерируются JSON, индекс и Markdown-страницы пространств имён. SHA-256 исходных артефактов фиксируют именно использованную версию данных.

В справочнике принята структурная интерпретация: @K[203] содержит описание функции, @K[202] — нумерованную таблицу параметров, @K[209] — имя параметра, @K[211] — описание параметра. Это вывод по структуре и содержимому, не восстановленные имена констант. Сырой объект доступен под каждой записью; дополнительные поля не отбрасываются. Порядок параметров подсказки не является подтверждением ABI, типов или возвращаемых значений.

Границы достоверности

  • Строки описаний сохранены как данные call-tip, а не как доказательство сохранения обычных Lua-комментариев в байткоде.
  • Заголовок заявляет Lua 5.1; бинарник в репозитории отсутствует, поэтому формат независимо не проверен.
  • Нет доказательств полноты публичного или внутреннего API Despair Engine.
  • Нет типов объектов, верифицированного жизненного цикла, среды выполнения, тестовой карты или рабочего SDK.
  • Системы possession, tethering, scares и редакторские команды следует исследовать по имеющимся записям, но их наличие не доказывает, что они доступны в релизной игре.
  • Автотесты проверяют извлечение и воспроизводимость справочника, а не работоспособность игровых вызовов.

Исходные артефакты намеренно не перемещены и не исправлены: они остаются проверяемой основой для последующих исследований.