Skip to content

Releases: EvenTorset/fxr

v10.0.1

27 May 09:57
2c5a9a1
Compare
Choose a tag to compare
  • Fixed two fields in action 11000 being marked as added in AC6 when they were actually added in ER. These two fields are now named correctly and also exist in the action's game data for ER.
  • Fixed the field type and description for field 31 in action 10300. The type change fixes reading some of these actions from DS3 and Sekiro.

v10.0.0

26 May 22:28
2298b09
Compare
Choose a tag to compare

Highlights:

  • Added a subclass for action 10001, which is seemingly identical to action 10000 (GPU particles), except it doesn't exist in DS3 or Sekiro. There probably is a difference, but it's currently unknown.
  • Node 2202 and everything related to it has been renamed and its documentation has been updated to match some new discoveries about it:
    • SharedEmitterNode -> NodeEmitterNode
    • SharedEmitterEffect -> NodeEmitterEffect
    • EmitAllParticles -> SelectAllNodes
    • EmitRandomParticles -> SelectRandomNode
    • SharedEmitterEffect.behavior -> NodeEmitterEffect.nodeSelector
    • The old shared emitter example has also been renamed and updated.
  • Actions 500, 501, 502, and 503, and their slots in effects have also been renamed to match:
    • NoParticleSpread -> NoSpread
    • CircularParticleSpread -> CircularSpread
    • EllipticalParticleSpread -> EllipticalSpread
    • RectangularParticleSpread -> RectangularSpread
    • BasicEffect.particleDirection -> BasicEffect.directionSpread
    • SharedEmitterEffect.particleDirection -> NodeEmitterEffect.directionSpread
  • All .fromJSON() methods can now also take an instance of the class, which means it's now a lot easier to just copy things from the JSON structure of an existing FXR file and use it to create new effects.
    • A lot of parts in the JSON structures have also been made optional, and the methods will use the library's default values to fill those in automatically.
    • To see how these changes can make it easier to edit existing effect, see the new example about it.
  • Added .min() and .max() methods to all properties, which return the minimum/maximum value of the property.
    • These currently do not apply modifiers, so randomized properties will not give the min/max potential value, only whatever it would be without any modifiers.
    • Curve properties will not count the interpolated values for this, only the keyframe values.
  • Added a new RandomDeltaProperty function that simplifies creation of properties with a RandomDeltaModifier.
    • To make the difference clearer, the RandomProperty method has been renamed to RandomRangeProperty.
  • The anyValueMult and anyValueSum functions have been improved in a few ways:
    • They no longer automatically convert component sequence props to sequence props unless it's required.
    • They no longer add extra, unnecessary keyframes when operating on two linear properties.
    • Fixed the value type of the output property of these functions potentially being incorrect when operating on a value property and a sequence property.
  • Fixed the DataAction.toAction method not using the data conversion system, which caused it to create incorrect actions in many cases. This function was previously not used internally, so it only broke something if it was used directly.

v9.0.0

21 May 23:16
d8d5a27
Compare
Choose a tag to compare

Highlights:

  • The 6 view distance fields in many of the appearance actions have been renamed and properly documented.
  • The field that hides particles while indoors in some of the appearance actions has been renamed and documented.
  • The lightsaber example has been fixed and improved a lot. The main improvements were for the steam coming off it while it's raining, which now looks better and doesn't show up while indoors.
  • The FXR.getResources() method now returns an object with more information about each resource instead of just a list of numerical IDs.
  • All float fields in all 4 games that had the wrong type set in the library have had the type changed to match. It was rarely a problem, but it was still roughly 20 or so fields that would be parsed as giant integers instead. None of these fields were known, so it's unlikely to change anything in existing scripts using the library.

v8.1.0

18 May 18:23
82035d5
Compare
Choose a tag to compare

Highlights:

  • Added subclasses for action 10100 (unknown), 10300 (wind force), and 10400 (unknown).
  • Fixed various small errors in the documentation.
  • Fixed one of the properties of action 10000 not being scaled when it should by the Node.scale function.
  • Not really a change to the library itself, but there is now a new command line tool with an optional file explorer context menu command to convert FXR files to and from JSON easily that is using the library. This can be used similarly to how WitchyBND is used, where you convert an FXR file to a format that is easier to read and edit, and then convert it back later. The JSON structure has names for all known fields and properties, and can be a lot easier to work with than Witchy's XML in some cases. The JSON can also be converted to an FXR file for any of the 4 supported games.

v8.0.0

15 May 23:25
a21a0c1
Compare
Choose a tag to compare

Highlights:

  • Curve properties have been updated to have pretty accurate sampling (with the .valueAt(x) method), which means the library can be used to create previews of the interpolation curves now. The library also uses this internally to do various conversions, so this should improve conversion between games as well as scaling and recoloring in some cases.
    • Bezier properties (previously Curve1) has perfect sampling, meaning you will get exactly the same value as what the game will at a given point.
    • Hermite properties (previously Curve2) has approximate sampling. It's pretty close to perfect, but the exact formula used in-game hasn't been found yet, so an approximation is used.
    • ComponentHermite properties (previously CompCurve, aka UnkAc6 in Witchy's XML) is based on the Hermite props, so it is also only a close approximation for now.
  • Keyframes have been reworked. There are now three different types:
    • Keyframe: Basic keyframe used for stepped and linear properties with just a position and a value.
    • BezierKeyframe: Used in Bezier properties, extending the basic keyframes with two extra values that define the control points used for the curve.
    • HermiteKeyframe: Used in Hermite properties, similar to BezierKeyframe, but these have two angles instead of positions that define the control points.
  • All of the remaining actions that were still using the old system have been updated to use the new cross-game system that most other actions use, so they now all have their own classes and a better JSON structure. They weren't updated until now because these actions are the same in all 4 games.
    • The NodeMovement, NodeTransform, and ParticleMovement classes have been replaced with functions with the same names that work similarly and create instances of one of the new classes based on what arguments you give it.
  • The sfxReferences, externalValues1, and externalValues2 lists and the updateReferences method have been removed from the FXR class. These references list are now always automatically generated based on the content of the FXR when saving. There is also a new getReferences method to generate these lists in case they are useful for anything, for example quickly checking what SFX are referenced.
  • The two model actions, 605 and 10015, now have their own enums for orientation modes, because they don't work like most other particle types. They're also different from each other, which is interesting.
  • Fixed FXR.getResources() not listing the texture in WaterInteraction actions.
  • Fixed RandomRange modifiers not being read correctly.
  • Fixed an error in the editing example in the README file.

v7.0.0

18 Apr 10:22
58a34f7
Compare
Choose a tag to compare

Highlights:

  • Added subclasses for actions 81 (emission sound), 10000 (particle system w/ GPU particles), and 10014 (lens flare).
  • Modifiers have been completely reworked and should be easier to do things with now.
  • The FXR class has gotten some improvements to make it easier to read and write files when using Node.js:
    • The FXR.read function can now also take a file path directly to read from a file.
    • A new method has been added to the FXR class called saveAs, which writes to a file directly.
  • The FXR.updateReferences method now properly supports AC6's FXRs. It previously only added external value 10000 to the "unkBloodEnabler" list, but in AC6 2000 is in there and 10000 doesn't exist.
  • Added the missing unknown field in action 133 from AC6.
  • Fixed action 605 for DS3. This affected all 605 actions read from or written for DS3.
  • Fixed action 301 for DS3. This only affected new effects created with the library and effects converted from other games.
  • Fixed shared emitter effects not being writable for DS3 even though vanilla DS3 uses them pretty commonly.
  • A lot of bugs related to converting to and from the JSON format have been fixed.

v6.2.0

07 Apr 00:05
4f2be35
Compare
Choose a tag to compare

This update fixes a few small bugs. Most are related to AC6, but some affect FXRs for all games.

v6.1.0

03 Apr 02:44
4f90b2e
Compare
Choose a tag to compare

This fixes an issue where Randomizer2 modifiers were not working in DS3 or SDT. These modiifers are not supported by those games, and the properties they are applied to are now automatically converted to equal properties using Randomizer1 modifiers instead when writing for those games.

v6.0.1

01 Apr 22:17
1f2363d
Compare
Choose a tag to compare

This update fixes several small bugs with the previous version. Most of them caused issues when reading existing FXR files.

v6.0.0

31 Mar 16:00
0ec52c0
Compare
Choose a tag to compare

Highlights:

  • The library now stores information in a way that is independent of the format and the game. This has the following effects:
    • The FXR.read function now takes an extra argument that tells it which game the file is from. It defaults to Elden Ring.
    • The FXR.toArrayBuffer function also takes a game argument that tells it which game sturcture and format version to generate.
    • Nodes, Effects, and Actions have been reworked significantly internally to be able to work with this new system.
    • The Node.scale and Node.recolor functions now work with all of the supported games.
    • Due to these changes, any effects created or read with the library can be written for any of the supported games, meaning you can use it to convert sfx from one game to another.
    • Note that some features are missing from some games, so don't expect things like effects that change based on the time of day in Elden Ring to work exactly the same way in Dark Souls 3.
  • Added subclasses for actions 10012 (DynamicTracer) and 10015 (RichModel).
  • Most things were reworked or entirely rewritten for this update, which means that there might be some bugs hiding somewhere...