Releases: fireundubh/pyro
Pyro
Major Changes
- Pyro can create multiple BSA/BA2 packages if they are defined in the PPJ.
- Pyro can create a ZIP archive containing specific files if they are defined in the PPJ.
- Pyro can expand variables in paths and string-type attributes if they are defined in the PPJ.
- The
Archive
attribute of thePapyrusProject
node was removed. - The
--anonymize
and--bsarch
arguments were removed.
Packaging
Pyro can now create multiple packages using the Packages
node block.
<Packages Output="{relative or absolute path to output folder where BSA/BA2 packages will be written}">
<Package Name="{file name}" RootDir="{required - relative or absolute path to folder containing files or folders to include}">
<Include>{relative or absolute path to file or folder in RootDir, or simple glob pattern}</Include>
<Include NoRecurse="true">scripts</Include>
<Include NoRecurse="false">**/*.txt</Include>
</Package>
<Package Name="{file name}" RootDir="{required - relative or absolute path to folder containing includes}">
<Include NoRecurse="false">**/*.dds</Include>
</Package>
</Packages>
Note: Glob patterns are limited to "match everything" expressions, such as *.pex
and **\*.psc
.
Default Values
Node | Attribute | Default Value | Required |
---|---|---|---|
Packages |
Output |
Path to pyro/dist folder |
No |
Package |
Name |
If the attribute is omitted: - the package file will be named after the project, - the extension will be appropriate to the game, and - subsequent package names will be suffixed with (1) , (2) , and so on. |
No |
Package |
RootDir |
Path to the project folder | Yes |
Include |
NoRecurse |
false | No |
Zipping
Pyro can now create a ZIP archive containing specific files using the ZipFile
node block.
<ZipFile
Name="{file name}"
RootDir="{required - relative or absolute path to folder containing files or folders to include}"
Output="{relative or absolute path to output folder where ZIP file will be written}"
Compression="{choices: 'store' or 'deflate' compression}">
<Include>{relative or absolute path to file or folder in RootDir, or simple glob pattern}</Include>
<Include>MyProject.esp</Include>
<Include NoRecurse="true">*.bsa</Include>
</ZipFile>
Note: Glob patterns are limited to "match everything" expressions, such as *.pex
and **\*.psc
.
Default Values
Node | Attribute | Default Value | Required |
---|---|---|---|
ZipFile |
Name |
If the attribute is omitted, the ZIP file will be named after the project. | No |
ZipFile |
RootDir |
Path to the project folder | Yes |
ZipFile |
Output |
Path to pyro/dist folder |
No |
ZipFile |
Compression |
deflate | No |
Include |
NoRecurse |
false | No |
Variables
Pyro can substitute variables with defined values in PPJ paths and string attributes.
<Variables>
<Variable Name="namespace" Value="Master of Disguise"/>
<Variable Name="modname" Value="Master of Disguise - Special Edition"/>
<Variable Name="myproject" Value="E:\projects\skyrim\Master of Disguise - Special Edition"/>
</Variables>
Variables are prefixed with the @
symbol. The Name
and Value
attributes are required.
<ZipFile Name="@modname" RootDir="@myproject" Output="@myproject" Compression="deflate">
<Include>@myproject\@modname.esp</Include>
<Include NoRecurse="true">*.bsa</Include>
</ZipFile>
New PapyrusProject Attributes
The Package
and Zip
boolean attributes have been added to allow enabling and disabling packaging and zipping.
<PapyrusProject
xmlns="PapyrusProject.xsd"
Flags="TESV_Papyrus_Flags.flg"
Output="@myproject\scripts"
Optimize="true" Anonymize="true" Package="true" Zip="true">
Default Values
Node | Attribute | Default Value | Required |
---|---|---|---|
PapyrusProject |
Package |
false | No |
PapyrusProject |
Zip |
false | No |
Fixes
- Fixed issue where schema validation could fail on the
Asm
attribute due to case sensitivity - Fixed issue where absolute
Include
paths were not constrained to theRootDir
directory
Licensing
- Pyro is transpiled by Nuitka from Python 3.7.5 to C and compiled with MSVC 2019.
- Pyro is distributed with bsarch v0.7 under the MPL 2.0 License. (Source Code)
- The Pyro source code is licensed under the MIT License.
Pyro
Major Changes
- By default, Pyro will no longer anonymize compiled scripts. The
--anonymize
argument must be used or theAnonymize
attribute must be set totrue
. - By default, Pyro will no longer automatically create BSA/BA2 packages. The
--bsarch
argument must be used or theCreateArchive
attribute must be set totrue
. - Consequently, the
--no-anonymize
and--no-bsarch
arguments were removed.
Fixes
- Improved and optimized missing compiled scripts discovery
- Fixed issue where the order of operations executed during PapyrusProject initialized produced unexpected behavior
- Fixed issue where a previous improvement to pre-build compiled scripts discovery returned only paths to existing files
Licensing
- Pyro is transpiled by Nuitka from Python 3.7.5 to C and compiled with MSVC 2019.
- Pyro is distributed with bsarch v0.7 under the MPL 2.0 License. (Source Code)
- The Pyro source code is licensed under the MIT License.
Pyro
Major Changes
- When the game type is not explicitly defined, Pyro will also attempt to discover the game type using the
--registry-path
argument. - When using XSD validation, Pyro will terminate if the
Game
attribute value does not contain a valid game type.
Fixes
- Fixed issue where some paths were not normalized
- Fixed issue where some input path validation tests were case sensitive
- Fixed issue where input paths prefixed with
file:/
orfile://
were not parsed correctly - Fixed issue where logging deprecation warnings were output to console
Licensing
- Pyro is transpiled by Nuitka from Python 3.7.5 to C and compiled with MSVC 2019.
- Pyro is distributed with bsarch v0.7 under the MPL 2.0 License. (Source Code)
- The Pyro source code is licensed under the MIT License.
Pyro
Major Changes
- When using XSD validation, Pyro allows the Imports, Folders, Scripts, and Includes nodes to appear in any order. This is a further improvement by Pyro on how Papyrus Projects are handled by the Papyrus Compiler for Fallout 4 which enforces a specific order.
- When the game type is not explicitly defined, Pyro attempts to discover the game type first using arguments then the game path, import paths, and finally the flags path. The game type will generally be discoverable from imports; nearly every project imports base game scripts. For Skyrim projects, the game type is less accurately discoverable from the flags path because the flags file for SSE and TESV share the same name. If Pyro uses this last resort, the game type will default to SSE if the game path for SSE can be discovered as well.
Fixes
- Fixed issue where passing the full registry path with
--registry-path
was not handled correctly
Licensing
- Pyro is transpiled by Nuitka from Python 3.7.5 to C and compiled with MSVC 2019.
- Pyro is distributed with bsarch v0.7 under the MPL 2.0 License. (Source Code)
- The Pyro source code is licensed under the MIT License.
Pyro
Major Changes
- If the
xmlns
attribute of the PapyrusProject node is set to a valid XML Schema path, Pyro will use that XSD file to validate the PPJ. - The
NoRecurse
attribute was removed from theFolders
node. EachFolder
node now has an independentNoRecurse
attribute. Include
nodes now support relative folder paths. EachInclude
node now has an independentNoRecurse
attribute.- Comments, including XML-unsupported comments, can now be used in PPJs.
XML Schema Validation
<PapyrusProject xmlns="PapyrusProject.xsd">
Pyro will look for the file named PapyrusProject.xsd
in the program path. If this attribute is omitted, Pyro will not validate the PPJ.
Folder Recursion
<Folders>
<Folder NoRecurse="true">Master of Disguise</Folder>
</Folders>
When NoRecurse
is enabled, Pyro will not compile scripts in subfolders within the given folder. By default, NoRecurse
is disabled.
Include Folders
<Includes Root="E:\projects\skyrim\Master of Disguise - Special Edition">
<Include NoRecurse="false">interface</Include>
</Includes>
When NoRecurse
is disabled, Pyro will recursively add files in this folder and its subfolders to the output BSA/BA2. By default, NoRecurse
is disabled.
Comments Allowed
<PapyrusProject
<!-- xmlns="PapyrusProject.xsd" -->
Game="sse"
Flags="<!-- TESV_Papyrus_Flags.flg -->"
Output="E:\projects\skyrim\Master of Disguise - Special Edition\scripts"
Archive="E:\projects\skyrim\Master of Disguise - Special Edition\Master of Disguise - Special Edition.bsa"
Optimize="true">
These are not valid XML comments because they appear within element tags and attribute values. XML-unsupported comments will cause validators and syntax highlighters to treat the PPJ as malformed. Pyro will strip all supported and unsupported comments virtually before parsing the PPJ to avoid parsing errors.
Fixes
- Fixed issue where passing an invalid input path (e.g., a nonexistent PPJ file) would produce an unhandled exception
- Fixed issue where deeply nested Fallout 4 script paths were not resolved correctly (e.g.,
AutoLoot\Fragments\Terminals\TERM_AutoLoot_312_04001137.psc
) - Fixed issue where Fallout 4 scripts were compiled repeatedly
Licensing
- Pyro is transpiled by Nuitka from Python 3.7.5 to C and compiled with MSVC 2019.
- Pyro is distributed with bsarch v0.7 under the MPL 2.0 License. (Source Code)
- The Pyro source code is licensed under the MIT License.
Pyro
Major Changes
- Improving compatibility with other tools, Pyro can be configured with CLI arguments instead of INI settings. In addition, users can use the
--worker-limit
argument to fine tune the maximum number of compiler processes spawned. - All PPJ attributes are optional. If PPJ attributes are not configured, Pyro will use default values.
- Pyro uses an incremental build system that compares timestamps embedded in compiled scripts with the last modified timestamps on source scripts, instead of recording and comparing hashes in an external file.
- Path handling has been significantly improved to achieve parity with the Fallout 4 Papyrus Compiler CLI. Pyro will check if paths are absolute, if they're relative to the input PPJ, and if they're relative to Imports. Only the first valid match will be used.
- Implicit import path discovery has been significantly improved. Pyro will evalute paths in Folders and Scripts to use any relevant paths missing from the Imports declaration.
Fixes
- Allowed
xmlns
attribute to be optional - Fixed issue where
CreateArchive
andAnonymize
default values were always used - Fixed issue where
Release
,Final
, andOptimize
values were not properly checked for 'true' or '1'
Licensing
- Pyro is transpiled by Nuitka from Python 3.7.5 to C and compiled with MSVC 2019.
- Pyro is distributed with bsarch v0.7 under the MPL 2.0 License. (Source Code)
- The Pyro source code is licensed under the MIT License.