Releases: EvenTorset/fxr
Releases · EvenTorset/fxr
v10.0.1
- 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
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
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
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.
- You can find this new tool at https://www.npmjs.com/package/fxrjson
v8.0.0
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
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
This update fixes a few small bugs. Most are related to AC6, but some affect FXRs for all games.
v6.1.0
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
This update fixes several small bugs with the previous version. Most of them caused issues when reading existing FXR files.
v6.0.0
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...