Join for free to receive email notifications about new posts submitted to paid tiers
Join for free to receive email notifications about new posts submitted to paid tiers
Join and get full access to supporter content and the exclusive supporter role "Demi-God" on our discord!
Altermatic Version 0.4.0 DEV
Note :
- This version comes with the all new detection methods for faster, more performant, and hopefully more reliable detections for swaps! If you notice new issues with these detection methods, please let me know ASAP!
- This version completely changed the internal structure (again) as well as the save system, all previous saves before this version will invalidate and swaps will re-roll as they re-appear
Added :
- When SCake is also installed, Altermatic will attempt to re-roll characters if their Gender is switched through SCake's systems (functions through a dispatcher)
- All new detection system which uses several in-game hooks to try and catch characters the frame they become visible, improving not only the visual experience but potentially performance as well (Still has the old method as a fallback but runs much less frequently which should result in a performance improvement)
- All new save handler system has been added which should speed up save processing by using a custom object with less processing required while saving (stuff is saved into data-maps dynamically then converted into JSON when saving rather than working on validated/invalidated data when saving, should speed up the saving process drastically but is more error prone so requires much more testing/maintenance)
- New menu using UniPalUI which shows the default keybind for re-rolling meshes and contains a new configuration menu
- "InvalidID Attempts" config setting added, this changes how many times Altermatic will try and process an ID that's found but initially invalid
- "Fallback Frequency" config setting added, determines how often Altermatic will use a fallback method for catching exceptions
- "Reload Config JSON" setting to configuration menu which loads the current config JSON
- Added config save JSON file called "_Altermatic_Config.json" which stores global Altermatic settings, this file should be created when editing the configuration settings and exiting the menu (If you edit this externally while the game is running you'll want to enter the menu and select the "Reload Config JSON" option to apply the changes, otherwise any changes you make won't take effect until you reload your save and if you change settings the config file may be overwritten)
Changed :Removed :
- Changed the values for the Best Matching System so that PrefTrait matches now take precedent over no PrefTrait matches and also prevent 'IsRarePal' from being swapped with non-rare pal swaps (Behavior for "Rare" trait is unchanged)
- ReqTrait match is now -25 degrade
- PrefTrait match is now -5 degrade while a non-match remains +5 degrade
- IsRarePal non-match is now -110 degrade
- Rewrote the entire internal structure to use custom objects and expand the use of pointers rather than duplicating data, also required rewriting much of the swap logic as well (this includes a full re-write into the new save handler)
- New save handler is much more aggressive in checking for characters that should persist (Player and Pals) however it is also much more strict in what it considers persistent (This should mean obvious pals that should persist like party summons should persist much more reliably but could also mean some edge cases may not meet the requirements of the new system, please let me know if you find things that should persist but do not!)
- No longer displays a message when SCake is detected (reduces notification spam, will move this info into the menu)
- SkelMeshSwaps without a SkelMeshPath defined will now fail to validate (The null shortcut, "SkelMeshSwap":"", still functions but is highly discouraged as it causes many technical issues, especially with manual swaps)
Fixed :
- Now properly sends notifications through UniPalUI instead of trying to run through SCake (Also fixed a potential crash when a JSON error was detected but SCake was not installed to send the error to the UI)
- Integrations for SCake/UniPalUI now has proper guard-rails to prevent them running when they are not installed and causing errors/crashes (I think the only crash was the one mentioned just above, but now it should be much less likely to happen again)
- Improved randomization for SkelMeshSwap by not relying on shuffle functions and allowing match pairings to search further
- MatReplace should no longer accept null entries
- Fixed certain NPCs and Pals from events being accidentally marked as persistent (the game does not properly flag all NPCs/Pals which caused strange and hard to debug save bloat, stricter requirements and new manual persist methods work around this issue)
- Added a delay to saving to help reduce potential stutter from saving at the same time as the game does (reduces processing on a single frame and splits it up a bit better)
Altermatic Version 0.3.1 DEV
Note :
- This is the last update which uses this detection method, keep a back-up even after newer versions are released just in-case something breaks
- Attempted to fix the fomod, however it's been reported that Vortex still doesn't install things correctly with a corrected fomod since the logic for Palworld is custom and doesn't follow a 'root' directory, so whatever X.x
Added :
- Ability to swap just materials in the JSON config with the "MatReplace" param, this is a set array of material changes with "Index" being the index of the material to swap on the model, and "MatPath" which is the path to the Material Instance to swap in with the same format as SkelMeshSwap
Changed :
- Checks have reverted back to being time-based but now with a slightly more complex system to hopefully now fix issues when framerate is too low for the frame-based system to work properly, this change also made checks slightly more frequent to ensure higher framerates will still work correctly as well
- Backend data management has had another upgrade to be more flexible and hopefully faster even with more data stored
- Updated Integrated UniPalUI to 0.0.2 DEV INTEGRATED
Fixed :
- Minor optimizations made through-out (most likely won't be notice-able)
Altermatic Version 0.3 DEV
Notes :
- This update completely changed the internal Data Structure for Altermatic and updated how newly spawned characters are checked, this new system is much more consistent and easier to work with but may have new unforseen issues
- Saves from before this version have been invalidated to prevent save errors persisting in future versions and causing confusion, if you'd still like to carry over your persist save then change the "ALTR_MODversion" param in the Altermatic_Persist file to "3000"
- Attempted to include a fomod for the weirdos still trying to use Vortex, however Vortex has a ton of issues and can break your installation so I don't recommend using it at all (Vortex doesn't install Altermatic correctly by default, no idea if this fomod will help)
Added :
- Integrated UniPalUI for all UI and Input handling (Integrated version is an unreleased alpha)
- Standalone now displays notifications with UniPalUI, simply shows Altermatic is running with the version number
- Input "Shift+O" will now target the looked at character to reroll their current SkelMeshSwap, also added an in-game notification showing the keybind (This function is temporary until a UI system is implemented for this purpose, doesn't currently target summoned pals because of a UI limitation)
Changed
- Checks and 'OnTick' system is now based on framerate to better capture events that happen within specific frame ranges, this also increases the rate at which Altermatic checks validity and swaps meshes which could affect performance (When calculating based on delta some events became inconsistent based on framerate, using frames will make the checks more frequent at higher framerates resulting in higher weight but will hopefully avoiding the inconsistency issues)
- Split up mesh swap and memory clearing/validity checks to run on different frames to help alleviate performance issues such as potential stutter on lower end CPUs (Investigating better async and event based methods for validity)
- Inverted method for storing what should persist, now instead of saying what 'should' persist, Altermatic keeps a list of what 'shouldn't' persist and skips it in the save process (Although this is slightly heavier in the save code it's much lighter in other areas and should be more reliable/easier to work with)
Fixed :
- Should no longer attempt to re-apply meshes every second which caused wild pals (since they have persistence disabled) to randomly switch skins every second if multiple were available
- Fixed the Create_Load_List.bat file not working in file paths with spaces in them
- When paths become invalid (like when a pak updates or is removed) the persist loader will now correctly skip loading that path and re-roll the swap for those characters (was still assigning a path but wasn't aligning with currently loaded mesh paths, meaning it 'could' assign a random SkelMeshSwap and mess things up, if you were affected by this you'll want to delete your persist file)
- Should now properly detect captured Pals and toggle them for persistence while SCake is installed (Was accidentally skipping this step before >.<)
- No longer tries to process an empty save if the save file either isn't found or fails to load from the system
- No longer tries to apply no swap when no matches are found (Just a simple optimization, shouldn't have any gameplay/visual impact)
- Persist save should no longer replicate morph data over multiple entries that shouldn't have morph data (This bug has happened twice now in the save system and it's caused by a UE5.1.1 JSON handling bug which I keep forgetting about >.<)
Altermatic Version 0.2 DEV
Added :
- Altermatic now has persistance through a save JSON system, saves as "Altermatic_Persist[worldID].json" (if you want to reset persistance you can delete this file and everything will reset)
- With the new JSON saves, added internal systems for tracking which pals have changed to which model to enable consistency between loads/sessions/ect, you can delete/modify the JSON save file to reset/change this behavior ('model' being used is tracked by file path, if file paths conflict then this behavior may be inconsistent, if a file path is no longer registered the character's associated model will be reset)
- "ReqTrait" to SkelMeshSwap, defined Trait Names in this arary are required for the swap to apply to the Pal/NPC
- "PrefTrait" to SkelMeshSwap, for each of the defined Trait Names in this array the pal doesn't posess the match quality decreases by 5
- "Disable" to SkelMeshSwap (and future swap types), when setting "Disable":"True" the entry will be skipped (useful for quick testing without clearing data in the JSON, can also be useful for users that don't want to clear JSON data but would like to disable certain skins)
- Passing Null for SkelMeshPath (specifically "SkelMeshPath":"") now counts as a 'do not swap' entry and adds the default model to the random swap pool (In other words, when a SkelMeshPath is specifically excluded, this will add an entry where the current default model/skin is applied, if multiple skins are set up for the same parameters then the default skin is now added to the randomization, if you're using 'naughty' models and need them to have bits I recommend still setting the default path for the swap so it can be more easily removed if undesired in the future)
- __Create_Load_List__.bat will now try to scan .json files for SkelMeshSwap to try and predict if the json config actually contains swap data (this param would be required for any swap data to be in the JSON so this will prevent invalid json files from even attempting to load, future checks for different swap types will be added in the future, unless I forget X.x)
- "MorphTarget" param added for SkelMeshSwap, defined as an array of sets which allows the assignment of Morph Targets on the model
- "Target" is the name of the Morph Target on the model to alter
- "Set" is a hard value to apply (clamps to min/max), if excluded then a random value between Min/Max is applied instead
- "Min" is the lowest value allowed, if excluded then "0.0" is applied
- "Max" is the highest value allowed, if excluded then "1.0" is applied
- "Type" allows either "Free" or "Restrict" to be defined, Free means the value can be anything between Min and Max, Restrict means the value will either be Min or Max, if Type is excluded then Free is applied (Free is useful for body morphs, Restrict is good for feature or Accesory On/Off morphs)
- Non-Persist flagged characters are now also tracked for more advanced features (not really relevant to the average user yet, more just noting some internal changes that allows much more flexibility and could be utilized by external mods in the future, also worth mentioning that because of technical limitations for performance there is a limit and eventually enough matched params will all equate together, though this value shouldn't be reached by normal means)
- Best Match system now allows requirements to improve match quality (added new offset value to keep/allow optimizations while allowing a dynamic 'perfect match' value)
- Added 'Fallback' for SkelMeshSwap Gender parameter to allow better compatibility with and without SCake installed, now Gender is allowed to not match but with a degraded match quality under specific conditions (Should only apply mis-matched genders if no gender matching swap is found)
Changed :
- In SkelMeshSwap, increased Match Quality penalty when not matching to Rare Pal by 4 times (5 > 20)
- The "Best Match" system now accounts for met requirements such as ReqTrait, ReqTrait improves match quality so meeting multiple requirements will result in a higher match quality at this comparison step (Note that other factors could still increase the Match Quality so just because a swap matches multiple requirements doesn't mean it will always be selected)
Fixed :
- SkelMeshSwap should now properly apply to NPCs that are not Pals (When testing I had enabled a check for pals only and forgot to disable this check before release, sorry!)
- SkelMeshPath will now check for full reference paths and assume they are correct without trying to add the reference script values (as in, paths that start with " /Script/Engine.SkeletalMesh' " will be assumed as already formatted correctly for loading in-game and no additional formatting will be applied, this change is technically an add, but given it fixes undesired behavior I'm classifying it as a fix)
- __Create_Load_List__.bat will now properly run in admin mode for all users regardless of your environment set up (while in windows at least)
- __Create_Load_List__.bat now properly checks for the .json extension before adding to the list
- Captured pals/NPCs should now be flagged to Persist, preventing pals switching models after being captured then summoned
- Pal/NPC validity is now checked before saving to prevent unexpected behavior in save output
- Optimized Best Match / Random selection system to fail quicker when comparing matches so less data is processed per compare