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 code>@</code 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
Let's Play with Fire