========================================================
  Storm Engine Script Linter v2.0
  Линтер скриптов для движка Storm Engine
========================================================

Набор утилит для проверки скриптов Storm Engine (Корсары,
Век Парусников и другие игры на движке Storm Engine)
перед запуском игры. Помогает находить ошибки компиляции
и логические проблемы в .c скриптах.

========================================================
  ТРЕБОВАНИЯ
========================================================

Для .exe файлов: ничего не нужно, работают сразу.

Для .py скриптов (если хотите модифицировать):
- Python 3.6 или новее
  Скачать: https://www.python.org/downloads/
  При установке отметьте "Add Python to PATH"

========================================================
  СОСТАВ АРХИВА
========================================================

  .exe файлы (готовы к работе):
  ─────────────────────────────
  storm-lint.exe           — Проверка синтаксиса
  storm-lint-resources.exe — Проверка ресурсов
  storm-lint-advanced.exe  — Продвинутый анализ

  .bat файлы (для удобства):
  ──────────────────────────
  lint-all.bat        — Запустить все три проверки
  lint-syntax.bat     — Только синтаксис
  lint-resources.bat  — Только ресурсы
  lint-logic.bat      — Только логический анализ

  .py скрипты (исходники, для тех кто хочет менять):
  ──────────────────────────────────────────────────
  lint.py              — Исходник проверки синтаксиса
  lint-resources.py    — Исходник проверки ресурсов
  lint-advanced.py     — Исходник продвинутого анализа

  Исходники можно редактировать под свои нужды:
  добавлять новые проверки, менять список встроенных
  функций, настраивать правила. Для запуска .py файлов
  нужен Python 3.6+. Если Python не нужен — используйте
  .exe файлы, они работают без установки чего-либо.

========================================================
  ЧТО НАХОДИТ
========================================================

1. Проверка синтаксиса (storm-lint.exe):
   - else/switch/case/try/catch (не существуют в Storm Engine!)
   - Незакрытые скобки () и {}
   - Пропущенные точки с запятой
   - Вызовы несуществующих функций
   - Использование необъявленных констант (#define)

2. Проверка ресурсов (storm-lint-resources.exe):
   - Несуществующие корабли (SHIP_*)
   - Несуществующие предметы (blade, gun, и т.д.)
   - Несуществующие локации
   - Отсутствующие файлы диалогов

3. Продвинутый анализ (storm-lint-advanced.exe):
   - Недостижимый код после return
   - Бесконечные циклы без break
   - Бессмысленные условия (if(true), if(false))
   - Дублирующиеся ID персонажей
   - Win conditions без завершения (.over)
   - Квестовые флаги которые выставлены но не проверяются
   - Вложенные циклы (проблемы производительности)
   - Неиспользуемые функции

========================================================
  БЫСТРЫЙ СТАРТ (самый простой способ)
========================================================

1. Распакуйте архив в любую папку

2. Перетащите папку PROGRAM вашего мода на файл:
   - lint-all.bat      — для полной проверки
   - lint-syntax.bat   — только синтаксис

   Результат появится в окне консоли.

========================================================
  ИСПОЛЬЗОВАНИЕ ИЗ КОМАНДНОЙ СТРОКИ
========================================================

--- Через .exe (без Python) ---

  Все файлы:
    storm-lint.exe "C:\Games\SeaDogs\PROGRAM"

  Конкретный файл:
    storm-lint.exe "C:\Games\SeaDogs\PROGRAM" quests\my_quest.c

  С подробными предупреждениями:
    storm-lint.exe "C:\Games\SeaDogs\PROGRAM" --verbose

  Проверка ресурсов:
    storm-lint-resources.exe "C:\Games\SeaDogs\PROGRAM"

  Логический анализ:
    storm-lint-advanced.exe "C:\Games\SeaDogs\PROGRAM"

--- Через Python (если установлен) ---

  python lint.py "C:\Games\SeaDogs\PROGRAM"
  python lint-resources.py "C:\Games\SeaDogs\PROGRAM"
  python lint-advanced.py "C:\Games\SeaDogs\PROGRAM"

  С константами движка (если есть исходники):
    python lint.py "C:\Games\SeaDogs\PROGRAM" --engine "C:\storm-engine"

========================================================
  ПРИМЕРЫ ВЫВОДА
========================================================

  ERROR: quests\my_quest.c:142 'else' не существует в Storm Engine!
         Используйте отдельный if

  ERROR: quests\my_quest.c:256 Необъявленная константа: MY_CUSTOM_FLAG

  WARNING: quests\my_quest.c:89 Вызов неизвестной функции: DoSomething()

  WARNING: quests\my_quest.c:301 Недостижимый код после return

========================================================
  СОХРАНЕНИЕ РЕЗУЛЬТАТОВ В ФАЙЛ
========================================================

  storm-lint.exe "C:\Games\SeaDogs\PROGRAM" > results.txt

  (Цвета автоматически отключаются при выводе в файл)

========================================================
  ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
========================================================

  --no-color    Отключить цветной вывод
  --verbose     Подробные предупреждения (только lint/storm-lint)
  --engine DIR  Путь к исходникам движка (только lint/storm-lint)
  -h, --help    Показать справку

========================================================
  ОСОБЕННОСТИ STORM ENGINE
========================================================

Скриптовый язык Storm Engine (Scrypt) похож на C, но
имеет важные ограничения:

  НЕ ПОДДЕРЖИВАЕТСЯ:
  - else         -> используйте отдельные if()
  - switch/case  -> используйте цепочку if()
  - try/catch    -> не существует
  - тернарный оператор (? :)

  ПОДДЕРЖИВАЕТСЯ:
  - if, for, while
  - int, float, string, bool, ref, aref, object
  - #define
  - makearef, makeref
  - Все встроенные функции (rand, SendMessage, и т.д.)

========================================================
  ИЗВЕСТНЫЕ ОГРАНИЧЕНИЯ
========================================================

- Линтер не является полноценным парсером. Он работает
  построчно и может давать ложные срабатывания в
  некоторых случаях (сложные макросы, необычное
  форматирование).

- Проверка ресурсов ищет только статически определённые
  локации и предметы. Динамически создаваемые ресурсы
  могут давать ложные предупреждения.

- Продвинутый анализ проверяет функции только внутри
  одного файла. Функции из других файлов помечаются
  как "возможно в другом файле".

========================================================
  ЛИЦЕНЗИЯ
========================================================

Свободное использование. Можно модифицировать и
распространять без ограничений.

========================================================
