Skip to content

Releases: fireundubh/pyro

Pyro

26 Nov 09:27
Compare
Choose a tag to compare
Pyro Pre-release
Pre-release

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 the PapyrusProject 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 the RootDir 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

24 Nov 10:24
Compare
Choose a tag to compare
Pyro Pre-release
Pre-release

Major Changes

  • By default, Pyro will no longer anonymize compiled scripts. The --anonymize argument must be used or the Anonymize attribute must be set to true.
  • By default, Pyro will no longer automatically create BSA/BA2 packages. The --bsarch argument must be used or the CreateArchive attribute must be set to true.
  • 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

24 Nov 00:54
Compare
Choose a tag to compare
Pyro Pre-release
Pre-release

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:/ or file:// 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

23 Nov 18:20
Compare
Choose a tag to compare
Pyro Pre-release
Pre-release

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

23 Nov 07:33
Compare
Choose a tag to compare
Pyro Pre-release
Pre-release

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 the Folders node. Each Folder node now has an independent NoRecurse attribute.
  • Include nodes now support relative folder paths. Each Include node now has an independent NoRecurse 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

22 Nov 10:17
Compare
Choose a tag to compare
Pyro Pre-release
Pre-release

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 and Anonymize default values were always used
  • Fixed issue where Release, Final, and Optimize 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.