Компилятор скриптового языка Papyrus с открытым исходным кодом. На данный момент компилятор поддерживает только Skyrim (тестировался на Skyrim SE/AE).
Компилятор был создан для следующих целей:
- Понимание языков программирования: Проект разработан для того, чтобы глубже понять, как работают языки программирования.
- Эксперименты с языком V: Использует язык программирования V для реализации.
- Ускорение компиляции: Стандартный компилятор Papyrus работает очень медленно, поэтому данный проект направлен на оптимизацию этого процесса.
- Улучшенные сообщения об ошибках: Предоставляет более качественные и понятные сообщения об ошибках для упрощения отладки.
- Скачайте архив с компилятором со страницы Github Releases и распакуйте его.
- Откройте консоль в директории, куда распаковали компилятор.
- Используйте следующий синтаксис для работы с компилятором:
papyrus-compiler <command> [arguments]version: Выводит версию компилятора и некоторую дополнительную информацию о билде.compile: Компилирует файлы с расширением.pscв бинарный формат.pex.read: Читает и дизассемблирует файл с расширением.pex, выводя его содержимое в человекочитаемом формате в консоль.disassembly: Читает и дизассемблирует файл с расширением.pex, сохраняя содержимое в человекочитаемом формате в текстовый файл.create-dump: Создаёт файлdump.jsonс информацией о.pexфайлах, находящихся в указанной директории.help: Выводит список доступных команд и их описание.
С командой compile могут использоваться следующие аргументы:
-i,-input: Указывает каталог с.pscфайлами или.pscфайл для компиляции.-o,-output: Указывает каталог для сохранения скомпилированных.pexфайлов.-h,-headers-dir: Указывает каталог с .psc файлами заголовков/импортов, которые будут проанализированы компилятором, но не будут скомпилированы. Используется для того, чтобы компилятор знал о существующих скриптах (Form,ObjectReference,Actor, ...) и их методах/функциях/свойствах/переменных. Смотрите раздел «Файлы заголовков/импортов».-nocache: Игнорирует кэш и принудительно компилирует все файлы.-silent: Отключает вывод сообщений об ошибках в консоль.-original: Использует оригинальный компилятор Papyrus для компиляции.-stats: Сохраняет статистику по скомпилированным файлам в .md файлы (количество вызовов функций, наследований, файлов).-check: Проверяет синтаксис .psc файлов, но не создает .pex файлы.-verbose: ...
Ниже приведены несколько примеров, демонстрирующих использование различных команд и аргументов компилятора для компиляции скриптов, чтения скомпилированных скриптов и т.д.
papyrus-compiler compile -nocache -i "D:\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source" -o "../test-files/compiled/skyrimSources"Эта команда компилирует все скрипты (кэш игнорируется), расположенные в D:\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source, и помещает скомпилированные .pex файлы в каталог ../test-files/compiled/skyrimSources.
papyrus-compiler compile -i "../../RH-workspace/scripts" -o "../../RH-workspace/compiled"Эта команда компилирует все скрипты, расположенные в ../../RH-workspace/scripts, и помещает скомпилированные .pex файлы в каталог ../../RH-workspace/compiled.
papyrus-compiler compile -nocache -h "D:\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source" -i "../test-files/compiler" -o "../test-files/compiled" Эта команда скомпилирует все скрипты из каталога ../test-files/compiler в каталог ../test-files/compiled, а недостающая информация об объектах (Form, ObjectReference, Actor и т.д.) будет взята из .psc файлов в каталоге D:\Steam\steamapps\common\Skyrim Special Edition\Data\Scripts\Source.
papyrus-compiler read "../test-files/compiled/ABCD.pex"papyrus-compiler create-dump "../folder_with_pex_files"Создает JSON-файл dump.json, содержащий некоторую информацию обо всех .pex файлах, расположенных в каталоге ../folder_with_pex_files. Вот как это будет выглядеть:
[
{
"name": "ActiveMagicEffect",
"parent_name": "",
"methods": [
{
"name": "RegisterForUpdate",
"arguments": [
{
"name": "afInterval",
"type": "Float"
}
],
"return_type": "None",
"is_native": true,
"is_global": false
}
],
"global_functions": [...]
},
...
]По умолчанию компилятор не знает о существующих скриптах (Form, ObjectReference, Actor и т.д.), их наследовании (ObjectReference -> Form) и доступных методах/функциях/свойствах/переменных.
Вы можете исправить это двумя способами:
- Укажите путь к каталогу с оригинальными скриптами (например,
..\Skyrim\Data\Scripts\Source) с помощью аргумента-h "...". - Создайте каталог с заголовочными файлами, указывающими существующие объекты и их методы, функции и т.д., и укажите его с помощью аргумента
-h "...".
Пример заголовочного файла Actor.psc:
ScriptName Actor extends ObjectReference
Function EquipItem(Form akItem, bool abPreventRemoval = false, bool abSilent = false) nativeПроанализировав этот файл, компилятор узнает о существовании объекта Actor, его наследовании от ObjectReference и наличии функции EquipItem с соответствующими аргументами (для некоторых из которых есть значения по умолчанию). Флаг native позволяет пропустить написание тела функции в заголовочном файле, так как эти скрипты используются только для анализа. Это значительно ускоряет компиляцию.
Скрипты из каталога, указанного аргументом -h "...", НЕ БУДУТ скомпилированы и помещены в каталог, указанный с помощью -o "...".
v -o "bin\papyrus-compiler.exe" -prod -g -gc none compiler.vv -stats test modules- Papyrus docs
- VS Code Extension: Papyrus Language Tools
- Creation Kit Papyrus Reference
- Compiled Script File Format
- Caprica - A compiler for the Papyrus scripting language used by the Creation Engine.
- Champollion - A PEX to Papyrus Decompiler for Fallout 4
- PapyrusDotNet - PapyrusDotNet - A .NET Papyrus Compiler for Fallout 4 and Skyrim
- Open Papyrus - Docs
- Open Papyrus - Compiler - (WIP, Rust lang) Open-source compiler for the Papyrus scripting language of Bethesda games.
- Scribe Papyrus - A command-line wrapper for the Papyrus compiler with an embedded compiler binary (Rust)
- Scribe Papyrus VSCode - A VS Code extension for compiling Papyrus scripts for Skyrim modding
- Washington Independent - Papyrus Compiler Skyrim - An article about the Papyrus Compiler with script optimization techniques
- Papyrus Header Generator - A tool to generate Papyrus header files from source scripts and compiled .pex files
- DeepWiki - Papyrus Compiler - AI-generated wiki and documentation for the Papyrus Compiler
- RepositoryStats - Papyrus Compiler - Statistics and analytics for the Papyrus Compiler
