Please confirm you are at least 18 years old of age. Otherwise leave the website.
Sign up
Log in
18+
michaelpstanich
I work in various mediums and will be releasing content ranging from safe for work to R18+ content including Art, Video Game Mods, Video Games and Dev builds, Technical Articles, Game/Tech related videos, AI Work, and whatever else I fancy and Subscribers request!
Project Sugar Cake v0.0.3DEV Released! (New JSON Parser and easier imports!) [Palworld Mod]
(entry also available on my personal site : https://www.michaelpstanich.com//blogpost/2024-03-21_Project_Sugar_Cake_0.0.3_DEV_Released.html ) It’s been a good while since I’d made a string parser, but I’m glad I at least had some sort of previous experience! Would have certainly taken longer if I hadn’t (manually managing search depth is a pain >.<) even if it still took longer than expected. What am I referring too? Project Sugar Cake can now register animations through .json files! I’ve added a quick how-to to the ReadMe and placed templates in “~mods/AnimJSON” within the mod’s release package and install. Now SCake comes with the previously mentioned AnimJSON folder where these register .json files will be placed, any .json files you wish to have load in-game must be added to the new “_LoadList.json” file, then when SCake loads in-game it will use that load list to pull the appropriate .json files, parse the .json as a string and properly pass that string to the register to parse and convert into animation data. I won’t go over all the metadata stuff here (there’s a lot) but one of the templates explains each parameter and those templates show how to format things, so it shouldn’t be too difficult to get started! I recommend using a JSON editor with auto-correction and error checking, I used the online editor https://jsoneditoronline.org/ to help speed up the process, and I recommend it! (Easy to understand interface and has both a raw text mode as well as a ‘tree’ mode with more intuitive visuals).
What’s really exciting about this is that .json import options are not just for animators, but users as well! Users can edit or create their own .json metadata files to customize existing animations, create alternate versions, and make their own full events using any combination of animations they like! In the future I’d like to have a UI for this, but that’s still quite far off, but the .json importer does have support within the API so once a UI is up we can implement a ‘refresh .json import’ option or something so you can edit .json files and have them re-import without having to reload your game!
I also updated the Scake_BasicsAnimPak to be compatible with the new version and now supports .json import options. SCake SDK got updated to the new version with the new API call for .json imports.
- Project Sugar Cake - - Full Change Log - SCake Version 0.0.3 DEV Note : Data structure had changes this update, BP mods will need to be recompiled with the newest SDK release
Added : JSON string and data parser for registering animations, now you can create JSON files and place them in the ~mods/AnimJSON then add the file name to the "_LoadList.json" - - - - - If any errors are in the JSON file's formating it will fail to load (BP limitation) - - - - - Animations no longer need to be LogicMods and can be installed like any replacer mod, though BP registeration is still available - - - - - Users can create their own JSON files or edit existing ones to create their own events or customize animations - - - - - Templates are now included with SCake's main installation - - - - - "_LoadList.json" is required, however it is split up in distribution to prevent overwritting player's customized json when updating the mod Added : SCake_RegisterAllJSON to the API, call this to re-register all JSON animations listed in the _LoadList Added : "Speed Default" in registered animations now functional Added : "StartTime" in registered animations now functional Added : "Speed Mod" in Stages now functional Added : Keybind K (Start animation between 2 targets) will now try to start a solo animation if the same character is selected twice Added : "AddTags" in AnimEvent now functional (Appends additional tags to the event in addition to those added in the animations) Added : Animation Register now sends a total successful registered count whenever there is a pause while registering
Changed : Simplified "Act Types" and introduced "Act Location" to make registering animations easier and allow easier future additions Changed : "HasPostClimax" for registering events is now set to false by default Changed : "EquipLocation" is now a 'name' variable type to support socket/bone names and not just presets (Equip system is still non-functional) Changed : When characters path to animate, even a failed move (When 'Move Failed' would display) will still trigger the animation (characters will just teleport, helps the mod feel less inconsistent and buggy. This issue isn't really with the framework, it's just the quick and dirty AI which bugs out a lot.)
Removed : Anim and AnimEvent Registered messages from showing in ReportUI (Still shows failed registers with error codes) Removed : Equip Location enum is removed and now invalid (we parse a name variable now instead to allow custom bone/slot names)
Fixed : Sexual Pleasure going into the negatives after an animation (accidentally shipped the wrong build which had this bug >.<) Fixed : Register component not automatically starting after a game load if a register API function is never called Fixed : "Stage Order" being ignored and erroring out if the animation playing didn't play through stages linearly - - - - - Note : This Stage Order bug also broke things like play-time, animaiton playback, post-climax anims, all should hopefully be fixed now Fixed : Stage Duration for non-looping animations setting to 0 seconds when the number of stages exceeded actor count (Was a very silly mistake X.x) Fixed : AnimVersion number not working properly (Technically also fixed the internal version number not working correctly, but this means nothing front-end)
- SCake SDK - - Full Change Log - 0.0.3 Updated for Data Structure changes in SCake 0.0.3 Removed "EquipLocation" Enum as it's no longer used by SCake Added SCake_RegisterAllJSON function Added missing register functions to the example mod Updated ReadMe with variable types
- SCake_BasicAnimPak - - Full Change Log - BasicsAnimPack 0.0.3 Added : Now includes SCake_BasicAnimPak.json for installing with SCake's json importer Changed : Recompiled for SCake 0.0.3 DEV Changed : UniqueAnimID and name information Changed : Updated Climax metadata
JSON Handling Limitations / Struggles
There’s some limitations to JSON handling in regards to mods, in a normal game project you would just create your own tools and custom nodes to handle this kind of thing or import a plugin but when working with Palworld modding I’ve decided to stick entirely to BP mods to ensure maximum compatibility and hopefully ensure better future support. This leads to some problems, because UE5’s file handling blueprints for files outside the typical asset register (which would require packaging then assets to pull from) is extremely limited, we have to use UE5’s native JSON importer. “So what’s the big deal, doesn’t UE5 have JSON parser nodes already?” Why yes, it does, except they don’t actually function properly! UE5’s native JSON support is abysmal, so instead I use it only to load the JSON and convert it into a string, then I built a fully custom string parser that searches through the string and pulls the data into a data map, which we can then search and use. I take advantage of search depth (tracking start and end points of datasets to separate them) and any with a depth above 0 would be parsed as a JSON string, then I parse those strings whenever the data needs to be pulled and put it into its own datamap. As this process goes on, I store the data pass it into the Animation Register. Well, technically I pull the full JSON string and pass that to the register, then the register calls the parser functions, but you get the idea! (probably?)
Either way, I’m super happy with this method as it’s very flexible and surprisingly fast, and it’s not even had an optimization pass yet! (I need to re-sort fail states so things fail faster if they are going to at all, add null checks to skip logic, and use more skips in places so repetition isn’t required and we don’t process unneeded variables.) Because we parse things into a data map, we can even ignore arbitrary data left in the .json so people can leave comments in there if it helps, similar to how I have the description template set up, though I recommend keeping them to a minimum or remove them before distribution to reduce memory overhead. I also have it planned to process them in batches, currently it just tries to load them all at once which isn’t that great memory wise, but given we’re still lacking animations that can come in a later update!
But there are limitations.
Most of UE5’s file tools for blueprints is actually a plugin, and palworld doesn’t include it! This means we’re very limited on what we can do via blueprints (and I am still not confident C++ mod support will uphold compatibility, especially since SCake needs to have the SDK easily accessible/usable). This has 2 major effects, first we can’t dynamically pull arbitrary assets that are not within pak files and part of the regular asset registry so we have to put the .json into the provided _LoadList.json file so we know which files to pull. We can define a custom path to load from, but we can’t efficiently search a directory without either C++ or plugins (we can technically do it through manual crawling, but by doing so many search calls we could trigger anti-virus safety protocols, it’s also extremely slow). The second issue is when getting the strings themselves. When loading assets it needs to be a defined type, in C++ we just define the type but this isn’t exposed to blueprints without the optional plugin which we can’t use, so this is why I use the JSON function within UE5 to pull the asset itself. This means we have to follow UE5’s JSON import rules, which are very strict and it means JSON files can’t have any formatting errors at all or else it will fail to import. If I could pull the asset directly I could just pull it as a string and try to auto-correct small errors (I already do this to a certain extent with how my parser is built) but I don’t currently know a method within my current scope and limitations. Hopefully we can get around these 2 hurdles at some point, maybe I’ll cave and finally do some C++ stuff while keeping this fallback in-case things break in the future, but for now I think these 2 issues are ones we can live with and things are more than usable! (I just like to make things the best they can be >.< Why do I have to care so much Q.Q)
What’s Next?
I’m still following the same plan, but will most likely work on the next few steps in a more free-flow fashion. I want to start implementing very basic versions of various functions to try and get more of the framework filled out and create the baseline, as shown here with how much sooner this update released compared to the last version change, once the base structure is built and complete it becomes much easier to put out new additions and modifications. While making the parser and researching how UE5 handles files via blueprints I found some major leads toward what I could do about persistence and this could pave the way for the rest of the framework to truly be out of Alpha! Though, I shouldn’t understate how much work is really still left to do, I have a feeling a lot of the other parts of the framework will still need to be entirely custom and there’s still planned features for the animation player that isn’t complete yet, there’s also gender swapping systems that could help (it was believed the OK Framework was going to be the solution, but it requires more manual work and isn’t all that flexible so a new solution may still be required. Having it built into the framework also isn’t a bad idea.)
Oh, I got completely side tracked, the actual next step, like, right after I make this release, is to work on tutorials for importing animations into Palworld and how to integrate them with SCake! There’s still not really any good resources for this, so it look like it’s my time to step up and take the torch. Let’s burn some stuffs!~ ^-^ (Fire is pretty.. what were we talking about again?)
Current Road Map 1 ) Create basic tutorials for importing animations and registering them with SCake 2 ) Investigate / implement equipment altering system (for unequipping weapons/armor) 3 ) Implement a basic UI with settings control (including position adjustments for anims) 4 ) Investigate persistence more and try to get stat persistence between save/loads 5 ) Investigate multiplayer compatibility
Palworld Mod – Project Sugar Cake v0.0.2 DEV Released (SDK now available!)
Finally got things done and stable? I think? Multi-character animations are now fully functional! Did a ton for this update, including the API system, new backend structures to make future additions much easier, the framework for a cache system to speed things up once we have thousands of animations, new validation systems for animation gathering/searches/playback, new complex climax animation handling, maybe more things? (Changelog a bit below ^-^)
Changed the default hotkeys for the temporary gameplay module integrated into SCake as well for triggering anims and such.
Input Definitions - L : Start solo player anim event - O : Stop any anim event involving player - U : Show player sexual pleasure in reportUI - K : Start anim event between player and target - J : Select 2 targets and start an anim event between them - I : Stop any anim event involving the target In the future, once we have a UI and persistence these will be configurable. ^-^ (hopefully these work for now >.<)
- Full Change Log - ~ SCake Version 0.0.2 DEV ~ Note : Essentially Rebuilt the entire animation player and added the API systems, not everything is accessible yet but adding things in the future will be much easier once we know what to add
Added : Animator now supports multiple characters at once (can play Human X Human, Pal X Human, Pal X Pal, whatever!) Added : AI Handler to animator to help prevent AI breaking animations / conflicting (still has minor issues) Added : Position handling to animator, should keep animation in the same place even if characters are pushed or pulled Added : New validator should auto-sort and organize animating characters Added : Additional validation for incompatible animations, should prevent any non-compatible animation (that have proper metadata) from playing Added : More advanced climax handler, now supports specific slots orgasming to trigger specified animations within a registered animation event Added : Pleasure gain for all characters in animations (was just the host player previously) Added : Support for Post Climax animation playback after climax animations, skips and just ends if no post anim is found Added : Support for 'included tags' and optionally requiring those tags when starting animations Added : Basic stat tracking for characters where it's neccesary (no persistence between save loads yet >.<) Added : Optimization systems to stat tracking so we only track what's needed (Basic so far, needs more advanced systems in the future) Added : API Base for other mods to call and use SCake functions (such as starting/stopping animations, needs to be expanded on) Added : API Call "SCake_StartAnimEvent_Basic" - Starts an animation between the supplied characters with minimal information Added : API Call "SCake_StartAnimEvent_Advanced" - Starts an animations between the supplied characters with more advanced information Added : API Call "SCake_StopAnim_PalTarget" - Stops any animation event the target character is involved in Added : API Call "SCake_SendReportMessage" - Sends a report message to SCake's report UI, visible to the player Added : API Call "SCake_CheckStat_Pleasure" - Returns the current Sexual Pleasure of the sent character Added : API Call "SCake_Stat_AddPleasure" - Adds the specified amount to the target's Sexual Pleasure Added : "Start animation between player and target" with default key "K" Added : "Start animation between 2 targets" with default key "J" Added : "Stop animation target is involved in" with default key "I" Added : Pals play their "Happy" emote/action when animation events end (more advanced emotion handling could be added in the future)
Changed : "Start solo player animation" default key changed to "L" Changed : "Stop player involved animation" default key changed to "O" Changed : "Report player's sexual pleasure" default key changed to "U" Changed : SyncPosition animation setting now defaults to disabled Changed : Animation player was re-built and has much more advanced functions now with better duration tracking Changed : Orgasms now add additional animation time so they don't conflict with normal stage progression Changed : Reduced how quickly Sexual Pleasure decays when outside an animation event
Removed : A lot of debug notifications should no longer show up in the release build (sorry if I missed any >.<)
Fixed : Fixed animations only ever registering as "female solo human" animations Fixed : Animation player getting stuck and freezing indefinately if cancelled improperly Fixed : "Pals in Animation" tracker getting stuck if animation event was cancelled improperly Fixed : Animating characters getting pushed/pulled or continueing movement if already in motion when animation starts Fixed : Typos/misspellings in data structure
The SCake SDK / API
With this update came the SCake SDK! This SDK makes it very easy for other modders to access SCake’s API to trigger animations, stop them, or pull/modify data related to SCake! The API is a bit more limited for now, but the main functions (starting/stopping animations) is there, so if you’re a modder that’s interested it may be worth looking into.
To use the SDK, you’ll still need to set-up a modding environment for Palworld with UE5, but once that’s out of the way you just download the newest SCake SDK version, then extract the “mod” folder into your environment’s “Content” folder. Inside is a small example mod along with the “ProjectSugarCake” folder, which you do NOT want to include with your mod when you export your mod. The SDK functions by creating “dummy” assets where you can call within your blueprints/c++ mods, then when you run your mod in a game with SCake installed it will access the SCake API and run the required logic. It’s a fairly simple processes once you’re familiar with UE5, but if you ever need help don’t be afraid to reach out or post for help over in our discord! ^-^
Here’s some examples of how to use the API (check the SDK Readme or the SDK itself for more API calls and specifics)
What’s Next?
I’ve been modifying my road map a bit, so things are in a bit of a different spot than before, primarily I want to try focusing on getting more animations onto the framework and getting the mod noticed a bit more. I need to contact a mod on Nexus Mods and see if the mod would be allowed over there (there’s some restrictions on Palworld mods and I’m not sure if Sugar Cake runs afoul to these) and will start making proper download pages on places like LoversLab since the mod is now properly usable, with one exception… That exception being animations. Currently we’ve still not had any animators output any animations for the framework, but in order for things to really get going we are going to need those, so we’re a bit stuck. It’s a 2 way issue, you need the framework for proper animations, but you need animations for the framework to be meaningful. So, I’ve shifted focus slightly to try and account for this and will most likely be making a few of my own animations (though I am very slow at it Q.Q).
Current road map 1 ) Create string parser for registering animations without BP modding 2 ) Investigate / implement equipment altering system (for unequiping weapons/armor) 3 ) Implement a basic UI with settings control (including position adjustments for anims) 4 ) Investigate persistence more and try to get stat persistence between save/loads 5 ) Investigate multiplayer compatibility
? ) Work on building new animations and tutorials for it
Not sure exactly what I’ll focus on after that, but we’ll see how things go over the next couple weeks and see what people request the most! If you have suggestions, please send them my way!
*cough* new model release *cough* uhg… No, that’s not subtext or anything, I’ve just been coughing a lot this week! >.<
So yeah, this week kinda sucked as I ended up getting rather sick quickly entering Tuesday, which really drained the rather great start and excitement. That means I really didn’t accomplish nearly enough for myself this week, but that doesn’t mean I didn’t get something done! In the US there were severe weather conditions all over, and here was no exception. So, to counter the cold I decided to work a lot on AI for a few days. (using my PC as a little space heater! 2 bird, 1 device!) I went into it with the goal of working on a model merge that’s been giving me trouble, and that’s when I hit some major breakthroughs and was finally able to say it was ready to release! That model became “SpiritMix – Poly Cube” which is a 3D Anime Image Model / Checkpoint! It’s rather impressive and gave me some good motivation at the start of the week! Then I got sick, and spend the vast majority of my time sleeping and struggling to focus on projects. I’m still somewhat recovering, struggling to stay awake as I type this weekly update even, but I did have energy earlier today for a bit and I’m not coughing nearly as much! Hopefully it clears up soon... >.<
Releases
> New AI Image Model – SpiritMix – Poly Cube (3D Anime) <
I’m actually really excited for this one! Anyone who’s spoken with me regarding AI image generation knows I’ve been doing a lot of research and work into learning and understanding models and how they work. This new model is a culmination of all I’ve learned so far, blending various techniques such as fine-tuning, block merging, and what I’ve started calling micro-merge corrections. Poly Cube is still a model merge (only fine-tune is the same fine-tune from previous models, since that was merged in) but it really is the kind of model to go beyond your typical merge. My other merges were also unique and/or complex in their own ways, but Poly Cube is a model with a lot of really cool features and results not really expected of SD1.5 base models. One of my favorite features is the ability to retain art style and noise consistency through raw latent upscaling, something I only discovered after already finding a release candidate! This means the model responds really well to upscaling and keeps visual consistency relatively easily while generating at a base resolution of 768x or even 1024x really well for SD1.5.
Major set-back this week with being sick, so not much progress after the break-through I mentioned with Poly Cube. I spent a lot of time this week just messing with AI and some minor database type stuff, just couldn’t keep myself focused long enough to really get good work done once I started feeling the effects of whatever cold strain I got. The major victim here is the Game Jam project which I’ll have to cut-back quite a bit as things are barely rolling. I still don’t have a proper name for it, though I did come up with a couple ideas, but we’ll just keep using the project name, Corrupted Cube. (ironic naming given my model release name, but I assure you it was entirely coincidence, as I’ll explain! >.<)
Project : Corrupted Cube I’ve had to pair back things quite a bit as I really didn’t dedicate the time required, but here’s the current plan. Corrupted Cube sees you playing a dishonored knight who is mislead into raiding a village under the king’s order along with several other knights. When entering the village they are told to kill monster in sight, as they are horrendous terrorists, the commander of the unit holding up a shining stone that glimmers with a faint yellow aura. From here, the knights slay the monsters that resided there, burning down structures, destroying every crop, and eventually breaking down the doors to the massive shrine that lay in the back of the village. The first one to enter is our knight, the one to reach for a mystical artifact that lay otherwise undisturbed in this dark shrine, and suddenly the truth meets his eyes. After seeing how the yellow gleam was a sight of deceit, this knight is now imbued with the powers of corruption, and swears to take revenge on the king to end this yellow glimmer once and for all.
Originally I had plans to create a small explorable map (2D JRPG style) but with time now even more limited and me questioning my capabilities to actually get things rolling how I want them I’m limiting scope. The central mechanic is the fighting gameplay which revolves around the knight ditching sword and shield and instead embracing the cube for combat. In combat the cube creates smaller cubes in a grid, the player selects cubes adjacent to corruption points to corrupt all cubes of the same color/shape (shapes are included for color blind accessibility). Each corrupted cube is counted toward an action count, when enough action points are gathered the knight can attack with different skills, the more corrupted cubes the player can manage the more powerful the skill. There’s some other mechanics here I will need to play with, but that’s the general idea, so for this project I am going to entirely focus on this idea. So the map is ditched and will instead just be a linear path between combat encounters with a light reset mechanic from death, where corruption is gained the farther the player gets and a small corruption map is expanded as the player gets stronger and expands their strengths as a light RPG mechanic. The idea is to spread the corruption far enough to reach the king and put an end to the glimmer that misguides so many.
Upcoming Content / Plans :
Simple this week. 1 : Work on Game Jam game (Project Corrupted Cube) 2 : Touch up some AI images to release 3 : Finish setting up another Demi-God pack (didn’t do this last week >.<)
See something you like? Subscribe to see even more!
Subscribe Now
Creator Stats
125 subscribers
42 posts
Goals
$71 of $500
per month
(Monthly Goal) Would ensure part-time work on projects and ensure a constant flow of updates to content without worries of financial strain or burn-out.
$71 of $800
per month
(Monthly Goal) Would provide the potential to go full time, working on projects and producing content as seen fit by subscribers!
SubscribeStar and its trusted third parties collect browsing information as specified in the Privacy Policy and use cookies or similar technologies for analysis and technical purposes and, with your consent, for functionality, experience, and measurement as specified in the Cookies Policy.