Project Sugar Cake v0.3 DEV Released! (BETA) [Palworld Mod]

I think I’ve just settled into doing large updates for SCake, honestly. Wasn’t really the plan but, honestly, there hasn’t been enough movement in lewd Palworld modding to really justify more intense releases or pressing features. But you’re not here for the preamble, so let’s get sweet!

Alright, so this is another big version release similar to SCake 0.2 DEV, though there’s no ‘breaking’ compatibility like last time (those JSON changes were necessary though >.<). This update focused on getting some validation working properly, implementing preferences and gender options, as well as requested feature additions like animation selection/switching. My personal favorite additions this update is the custom gender settings and the new expressions settings for animations. With custom gender settings you can define how a M/F character will actually be recognized by SCake, this allows you to make all pals, regardless of the in-game gender, be recognized as a single gender, swapped genders, futa types, ect! This will be super helpful if you use replacers which replace both in-game genders, or if you want some futa body goodness. Expression settings (FaceExpress/Climax) allows animators to set the facial animation of characters in an animation, which should help make some animations more expressive and interesting!
Download Links!
GDrive Folder : https://drive.google.com/drive/folders/1vYfgMom7UJs2OmJ5B4FGQTMYEOR0n9Vr?usp=drive_link
Mega Folder : https://mega.nz/folder/9hZQ2IIR#Ou77tq4qQxw9UBQsozh6zg

- Project Sugar Cake -
- Full Changelog -
SCake Version 0.3 DEV (Beta)
(Note : This version temporarily removes the Animation Montage validation when registering animations. If you're making anim packs, ensure the animations play properly in-game before releasing your pack if possible.)

Added : Whether Sexual Heat is rising or lowering is now recorded by the save file (was just defaulting to always increase)
Added : API Function "SCake_StartAnimEvent" which gives access to all animation options at once with defaults (Passing no EventID will scan for a random animation to play, similar to other start anim functions)
Added : API Function "SCake_ValidForAnim" which checks if a character is valid to start an Animation Event (I'm transitioning validity checks into these kinds of functions for more general use and reduce redundancy)
Added : API Function "SCake_GetCompatEvents" which returns the EventID for compatible animations for the passed params
Added : FaceExpress and FaceExpressClimax to JSON for animations while allows setting the facial expression for while the animation is playing and for orgasms respectively (check the templates for possible settings)
Added : A hidden setting "Set_ReportRegFails" was added to the SaveSystem file, switch this to true and a long string will be sent to the report output covering all failed Anim/Event Register returns, may be useful if animations fail to register and you need to debug which failed (Note : The parser wasn't designed with these returns in mind so it may not always return useful data, to enable you must edit the SaveSystem JSON for the save you are testing on)
Added : Compatibility checker now checks the Size parameter registered with Animation Events
Added : "Excluded Tags" is now functional when starting animations through the API
Added : "Preference Settings" submenu to SCake's main menu (Note : Most preference settings will be checked with the compatibility checker, if a mod starts anims while bypassing compatibility checks these may not function as intended)
Added : "Block Female Only Anims" to Preference Settings, attempts to block/invalidate anims with 'Female on Female' intentions
Added : "Block Male Penetrated Anims" to Preference Settings, attempts to block/invalidate anims with 'Male on Male' intentions
Added : "Block Straight Anims" to Preference Settings, attempts to block/invalidate anims with 'Male on Female' or 'Female on Male' intentions (This also blocks all futa animations if futa flags are set)
Added : SCake's UI now supports menu pages, can navigate between pages through a defined count
Added : Animations should now fail to start with characters that are knocked out/dead (Technically a fix for characters partially reviving when triggering SCake animations as well)
Added : Animations will now fail to start with characters that are in a sleeping state (Technically also a fix for sleep animation issues, if you want to start animations with sleeping characters try waking them up first)
Added : Animations now end when a character involved takes damage
Added : SCake now has the ability to assign arbitrary genders separate from the game's assignment, only used when specifically checking gender through SCake
Added : "Change Gender Assignments" to the Preference Settings which 'should' list all possible CharacterIDs and allows manual assignment of SCake genders, which should save into the SaveSystem JSON file. (Note : All 'human' characters share the same ID within SCake, which includes the player as human)
Added : "Game Settings" submenu to SCake's Main Menu which covers Palworld native settings
Added : "Auto Save Frequency" to the Game Settings menu which alter's the in-game auto save frequency (In effect also changes SCake's auto save frequency since SCake saves alongside the game's normal save)
Added : When animations switch during playback (like when switching stages) compatibility will be re-checked and slots re-assigned (allows dynamic Animation Event switching and arbitrary animation playback, as well as fixes slots not aligning properly through events)
Added : Human NPCs (well, non-pals at least) now show their BP_Class when their name is displayed for easier finding/editing in SCake's settings (This change will most likely be temporary until better solutions are found, most notable place this shows up is in the control animation menu)
Added : If no facial expression is set for an animation, default behavior will now take over with 'HalfClose' defaulting for animation playback and "Close" defaulting for orgasms
Added : The Animation Control menu now shows the currently playing animation event
Added : Placed an example LoadList in the AnimJSON folder, "_LoadList_Example.json" which shows how to build the load list and includes all currently known released anim packs

Changed : SCake now loads animations synchronysly instead of async like before, this will cause the loading screen to stall and take a bit longer. (Discovered some odities and people kept complaining about the async loading, so we're just going to do it all in a single frame for now)
Changed : SCake's default loading method for spawning the "ProjectSugarCake" actor (Using a new Subsystem Injection method which should have SCake load sooner than before but also load more reliably in multiplayer by bypassing UE4SS's injection method, UE4SS is still required and the old method is used as a fallback should subsystem injection fail)
Changed : Sexual Heat is now gained during Erotic Animations independant of natural Sexual Heat gain, this rate is x25 stronger than natural generation and stacks
Changed : Moved validity checks outside of the Animation Player so it runs before an animation even tries to start (this is an optimization, if you bypass the API and try to start an animation directly from the EventComp, it may now fail to start/play correctly, if there's a valid reason not to use the API ensure you are validating everything is compatible beforehand)
Changed : "Valid For Animation" checks and systems overhauled for better modularity and additions (should also perform faster in situations where multiple compatibility checks must take place within reasonable actor limits, however large numbers of actors (more than 4) in a single scene may perform worse in some situations but will not suffer from random failures)
Changed : Character arrays passed for animation playback should now act in a deterministic way (Compatibility is now done in a non-random way, previously while the functions were linear in comparing compatibility they were passed as TMaps, which do not resolve into a deterministic array meaning outcomes where seemingly random, the Pal Character Array is now passed directly and not altered through-out the process.)
Changed : "Settings" are now "System Settings" to help differenciate between other new settings menus
Changed : Animation List and Animation Event List in the menu now divides into pages with 20 entries per-page (Should be much easier to navigate, note the page sorting is not consistent because of how UE5 handles hashing)
Changed : In instances where the game doesn't assign a gender, 'Male' will now be used by default (Only affects like, 2 human NPCs at the time of writing, felt this was the best option to make compatibility settings work closer to expectation but may still cause some strangeness. More advanced methods/exceptions will need to be implemented in the future.)
Changed/Fixed : Minor UI related things (spacing, readability, typo fixes, ect)
Changed/Fixed : While in an Erotic Animation, characters who orgasm will now continue decreasing in Sex Heat and no longer gain the increase for being in the animation itself until reaching zero or triggering an increase in Sex Heat from another source to trigger Sex Heat back into a rising state.

Removed (Techincally?) : Removed multiplier to Natural Sexual Heat generated while in Erotic Animations (Was technically broken in 0.2.1 since I had incomplete changes left in there)
Removed : API Function "SCake_StartAnimEvent_Advanced" is no longer available, use the new "SCake_StartAnimEvent" API Function which includes all the same variables and more
Removed : Register no longer validates if Animation Montage paths are valid (This validation step will become a debug option in the future, the current validator causes some issues for some players and extends loading time as it calls the Asset Registry, no idea why)
Removed : Characters no longer play the "Happy" action after anims (This also added SAN and affected AI behavior, may replace with a more dynamic system)

Fixed : Sexual Heat triggering a decrease when values were too close to 0.0 (Float percision error I didn't account for, now fixed)
Fixed : Natural Sexual Heat progression should now properly increase instead of constantly causing a decrease. (was caused by float percision error)
Fixed : "Valid For Animation" checks should no longer suffer from sporadic behavior/failures when comparing actor counts above 3
Fixed : After checking the Animation Event List, closing the menu without backing out first, then entering a player involved animation should no longer get the description box stuck on-screen with the details of the last viewed Event item
Fixed : Animation Events should now properly cull duplicate tags (worked before, but some variable changes broke the function somehow)
Fixed : Player should no longer have duplicate references within the tracker, fixing a number of issues (May not be fixed for mulitplayer, was caused by extra IDs being coded to point toward players when loading a game, current fix makes an exception and ignores these IDs)
Fixed : Aroused morph for the player should no longer act unpredictibly or 'flicker' (caused by duplicate reference fix)
Fixed : "SCake_ED_PalAroused" will now only call if a character went from not aroused to aroused as intended (Was calling any time Sex Heat changed before)
Fixed : Sex Heat getting stuck increasing after a character had been in an Erotic Animation
Fixed : The animation player now calculates its on-tick/per-frame functions after physics have applied, preventing a couple of issues (Fixes some odd positional flicker when playing at high framerates, fixes expressions not always applying correctly, fixes some logic interfering with other functions which tick during physics)
Fixed : CharacterID should no longer parse incorrectly within SCake's logic code fixing strange inconsistencies and lucky/alpha pal compatibility (For example, 'JetDragon' should not register as compatible with other other IDs that end with 'Dragon')
Fixed : Automatic compatibiltiy checker for CharacterIDs should now work for Lucky/Boss/Variants properly (Fixed with internal CharacterID processing fix)
Fixed : SCake should no longer run as if it's in-game when entering a game then heading back to the title screen (implemented a better title screen detection method)
Fixed : Animation Events now correct slots while switching animations/stages so Events that don't have slots aligned through-out should now correct themselves during playback (as-in, if slot 1 switches to slot 0 from stage 1-2, the animation should correct itself rather than breaking or stopping the animation)
Fixed : Animation Events not starting with proper offsets configured on an animation's start (was only applying offsets after the first stage had started, should now load properly on the first stage as well)
Fixed : Animation Player should now properly track how many characters have orgasmed and how many times
Fixed : Expressions not applying to all characters in an animation at all times, also fixed expressions applying too rapidly causing some strangeness (Most notice-able on the player if their expression was forcefully changed)
Fixed : Animation Player calculating character positions multiple times per-frame
Fixed : Animation Player causing some AI weirdness (SCake's Action Override had some flags set that could change AI behavior in some rare cases)

What’s Next?
Ok, so I’m going to talk a lot on ‘what I would like to do’ but can’t guarantee any of this will actually become a reality soon or anything. My goals from last week didn’t end up happening as priorities shifted as requests for the same few features did show up a lot, so in regards to SCake itself I’m effectively on the same goals as last release. However, there’s some other things I’d like to work on besides just SCake, specifically I want to actually get some animations out (I’ve been really slow about it X.x) and introduce breeding/lusting. Breeding may end up being part of SCake itself as an integrated feature, which would make sense, but for Lusting this would be a gameplay module where different pals would automatically ‘lust’ after other characters automatically as their Sexual Heat rises higher and higher while also introducing random sexual encounters. We’re still lacking a lot of animation compatibility so one feature I was looking at implementing was a system for “animation sets”, TemTemLover has been making animations that are cross compatible with each-other to cover a large number of pals all in one go. While I had talked about this type of things in the past and started my own system for it, I think integrating this kind of thing for automatic configuration in SCake would be a great idea as well, but I don’t know how complicated this would be to implement in a user friendly way so I’m still not sure if I want to officially add this to the plans quite yet.
Additionally, I spent a rather embarrassing amount of time researching and reverse engineering Palworld to learn more about its internal systems beyond what I needed to just see what was possible and, man, there’s a LOT that’s possible. One of the more interesting things I investigated related to SCake however, is the idea of making a more dynamic and SCake compatible model replacer mod framework. There is currently 2 frameworks that sort of do this kind of thing, one is for player textures and another is for pals and their models, however both of these are limited in ways I don’t really like and may not be sufficient in the long-term should Palworld lewd mods ever really take a strong hold. So, I’ve been discussing the possibility of shifting some focus on making a model/texture replacer framework that is much more dynamic with json configuration and SCake integrations with additional unique features like supporting additional genders (SCake integration exclusive) or configuring body morphs and clothing set-ups. This would, of course, be another massive project so I’m not promising anything, but the more I think about it the more interesting it sounds, so I may take a stab at it to see where it leads!
Current Road Map
1 ) Create Lust Module
2 ) Work on making some animations (seriously)
3 ) Research sockets system for dynamic attachments and furniture support
4 ) Investigate/prototype model replacer framework
On Hold ) Work on multiplayer support
On Hold ) Introduce a built-in SCake Notif-system for animations to trigger certain effects (like changing arousal meshes or changing eyes/mouth)