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!
[New Mod!] UniPalUI v0.1 DEV Available! [Palworld Mod]
Finally, after a TON of work, UniPalUI is finally here and ready to release! As typical, this took a bit longer than expected but also turned out much more advanced than I had originally planned. UniPalUI went through 3 different re-writes just so I could make sure things were done right the first time, and I'm VERY happy I did! Into chatting about UniPalUI, the newest Palworld framework mod you all voted for!
Unified Palworld User Interface for Mods, or UniPalUI for short, is a new framework mod for Palworld which adds a gameplay enabled menu for mods to add and interact with. UniPalUI also comes with an input handler, meaning mods can use UniPalUI to also handle keybindings and shortcuts for whatever they please without having to roll their own! The original goal of UniPalUI was to create a unified interface for my own mods since creating a unique menu for each one was a ton of work and didn't really seem feasible, however now UniPalUI is a universal framework ready to be used by any modder that takes interest! UniPalUI also doesn't stop mods from having their own implementations and is created with a large amount of flexibility so modders are free to use it as they see fit. Personally been using UniPalUI over the last month during test builds and it's freakin' awesome! (Though, I may have some bias... ^-^)
This is a revised changelog based on the the last few major revisions since Integrated versions, some details may be missing or vague and all previous changelogs were discarded (UniPalUI went through a near complete re-write, so old logs were irrelevant anyways)
Added :
Notification System, this displays messages in the top left for a few seconds then disappears on their own, useful for gameplay or debug functions to show information during gameplay
Mod Menu System and Register, press Shift+Y to open up a new menu on the left side of the screen and show the mouse cursor, can interact with the menu using the mouse, has a universal back/mod selection/exit button, gameplay continues while the menu is open and you can use the middle mouse button to rotate the camera (Some gameplay actions can change controls/menu focus which may lock UniPalUI's function, simply close the menu with Shift+Y to fix)
Added several menu box types for the menu
- "Text" BoxType, this generates a text box with interactions
- "Toggle" BoxType, this generates a toggle box with interactions
- "Select" BoxType, this generates a box with a left and right selection
- "Header" BoxType, this generates a text box without any border or interactions
- "Custom" BoxType, this generates an empty box for inserting your own widgets, has no interaction handling
Input Handler and Register, UniPalUI now has its own input handler which can register inputs and listen for them, delivering a callback when necessary, the Shift+Y menu inputs use this input handler
Callback Functions Interface used by mods to receive UniPalUI callbacks, this interface, called "UPI_InterfaceFunctions", is required to receive said callbacks properly
API System, created several functions for mods to use for interacting with or adding to UniPalUI, check the SDK for more details on each function
- "PalPlayer"/"PalPlayerController" Variable for convenience
- "HideUI" Variable which says whether UniPalUI is attempting to hide the base-game's UI (careful toggling this yourself)
- "UPI_RegisterMod" API Functions, registers a mod with UniPalUI
- "UPI_RegisterInput" API Function, registers an input with UniPalUI
- "UPI_SetInputActive" API Function, sets whether the stated input is actively listened for
- "UPI_EnterInputState" API Function, adds an input state to the top of the stack
- "UPI_ExitInputState" API Function, removes an input state regardless of position within the stack
- "UPI_SendNotif" API Function, sends a notification to the Notification System
- "UPI_OpenMenu" API Function, opens a new mod menu (or enters a new page)
- "UPI_CloseMenu" API Function, closes the active mod menu (or goes back a page)
- "UPI_AddMenuOption" API Function, adds a new menu box to the active menu
- "UPI_UpdateMenuOption" API Function, modifies a menu box with new information
- "UPI_UpdateDescBox" API Function, sets the text to show in the Description Box
- "UPI_ResetMenu" API Function, clears the menu and sends an open callback without closing the page/menu
- "UPI_ExitMenu" API Function, forces UniPalUI to close the menu
- "UPI_Callback_KeyPressed" Callback, called when a registered input is pressed
- "UPI_Callback_KeyHold" Callback, called when a registered input is held
- "UPI_Callback_KeyReleased" Callback, called when a registered input is released
- "UPI_Callback_MenuOpened" Callback, called when a menu is opened
- "UPI_Callback_UIHover" Callback, called when a menu box is hovered
- "UPI_Callback_UI" Callback, called when a menu box receives an interaction
- "UPI_Callback_MenuClosed" Callback, called when a menu is closed
- "UPI_SecureCode" Interface Function, called for securing mod details
- "UPI_MenuGenBox" object added to SDK, this is the reference object for a generated menu box and comes with a list of variables to access
Added credits section to the mod menu which is currently only accessible manually (will be exposed to the API when system is polished up, currently it requires manual sets which could cause issues if done improperly)
Removed :
Code for Integrated versions removed and cleaned up for public release, Altermatic users will want to update to 0>4 DEV or newer
The Origins of UniPalUI
There's a universal requirement for mods once they get to a certain complexity, the need for user interaction and configuration that is separated from the game it's for. Sure, you can get by with simple input commands, external file edits, or even hacking in-game menus but eventually it just makes more sense to use a mod menu system of some kind. However, Palworld didn't really have one that fit my own needs, so I looked into making my own solution. Project Sugar Cake actually had a sort of simple-but-hacky menu that sort of served this purpose well enough but the mods I was working on expanded outside of SCake's realm, and SCake's menu had become extremely annoying to update as it took a lot of manual work at each step. The solution? I unified ui for all my mods, but I decided to ask the community if they thought this should be another framework style mod and the results said yes!
The Visual Design
The visual design is somewhat basic just to get things rolling, but could see improvements over time if necessary. The general idea is to take inspiration from the in-game menus but create a distinct look to ensure mod elements separate themselves from the game itself. This isn't to everyone's liking of course so there could be different visual options in the future, but I do think this is a better choice. It also means we can keep the same visual design even if PocketPair changes their UI design or assets since all of UniPalUI is standalone.
The design centers around simple squares and sharp shapes to give an almost 'system console' feel while also having some elements from the game's menus with their stretched squares found throughout their elements. This caries through to the main color chosen which is the accent light blue PocketPair seemed to use in many of their menus which seems to make things fairly readable. If you've seen SCake's placeholder menu design, you'll probably notice the similarities, but the entire system is written completely differently and is much more expandable/flexible.
The design feels quite slick, but I do have some concerns about colors and readability so in the future I'd like to have some configuration options that allow you to change menu transparency and colors. There is a bug I ran into with UE5.1 however, where changing tint-color at run-time causes any image elements to 'block out' and change background/.border color as well and even if disabling tint afterwards there'll be a black square stuck behind the element. This kind of makes customization a bit more difficult, so I'll need to figure out some work-arounds for this if we want full customization of every element.
The Methodology
When designing UniPalUI I used my game development knowledge to build a menu system normally implemented into games but with a more mod-friendly approach and with as little manual work as possible. The method I went with is generally called a "call and callback" system where you call specific functions to start an ops and await a callback before taking another action. More specifically, with UniPalUI you register your mod to receive callbacks, then when receiving these callbacks the mod is able to run whatever logic it needs as well as registering for more callbacks. This type of design is used in all sorts of game systems but works especially well for menu and navigation systems since you can create open-ended systems with-out major limitations.
In terms of steps, the first thing a mod does is register with UniPalUI. To do this, we set up some form of object that can take Events and implement a Unreal Engine Interface (an interface is a set of functions/events which you can apply to any object and call regardless of the parent class). This interface (called UPI_FunctionsInterface) gives the object all the callback events UniPalUI will want to call, you can then easily apply these events to your chosen object's script and UniPalUI's callbacks will call them when appropriate. After you set up the interface you register the mod with UniPalUI with the object you chose and some basic mod details, you can also register to show up in the mod selection menu in the same function. After this you're set up for all callbacks! Now you can register for other callbacks, such as setting up callbacks for when certain inputs are pressed, or when the menu is open you call functions to generate buttons that ultimately just give a front-end to sending specific callbacks!
Strengths and Weaknesses
Alright, now let's talk about some Strengths and Weaknesses, starting with the latter since that's most likely the most important. First off, we're using UE Interfaces, this means to register a menu you do need to have a custom object of some form which can have Events/Functions. This isn't a huge requirement but does mean lua-only mods won't be able to have a menu without making a simple object in UE first since Interfaces need to be compiled with a blueprint object. After that however, you can use Lua exclusively and I'm looking into a method to skip this requirement by having a 'lua mods' object set up automatically but this requires a special register which is separate from the current register since they will all register on the same object (basically a standalone mod object that handles multiple lua mods automatically).
Second major drawback for newer modders will be complexity. UniPalUI was designed to be very flexible which comes with a trade-off, you're expected to handle all the logic yourself. Now for some, such as myself, this is actually a huge benefit since this flexibility allows modders to implement any type of system they want without having to 'work around' a limited and rigid system. For new modders however this part could prove challenging to some as it'll be much more in-depth than simply creating a JSON list. I have added some simple examples in the SDK however, and will most likely try and expand these examples or make new ones/tutorials if other modders take interest in UniPalUI, but for now I'll be playing it by ear, see how things go and see what really need articulating the most before spending time on my signature in-depth technical write-ups.
Strengths however, are a plenty. Currently there are limited button types pre-built with UniPalUI which does make things 'seem' somewhat limited on the surface, however these basic button types allow any type of functionality since we can add custom logic in any way we see fit. But even more useful is the ability to add custom widgets within the UI itself using the "Custom" BoxType which is an empty menu box where you can add your own widget. This does require you to set up your own handling (will probably improve in the future) but you could add any button type you want! I've also added some complex logic to these few basic types in SCake's menu for more advanced functionality already as well, such as creating percentage-based sliders using the "Select" BoxType (the one with left/right arrows), and I've also used logic to generate menus based on dynamic listings such as having an entry for every pal by pulling data from the monster params data table.
That's all possible because menus are not 'loaded' but rather 'generated' at run-time. Modders define what menus get created and what entries do, all UniPalUI 'does' is create the front-end and handle all the callback functionality while modders can handle all the response logic. This also makes UniPalUI a powerful tool that could even implement gameplay functionality, especially with input handling. SCake is the best example as of writing given it's had the most development, porting stuff was also a breeze once UniPalUI was ready for release as well! For instance, when SCake starts an animation it enters its own input state which handles the new free cam and has a menu button on R by default, this opens a standalone menu with adjustment and animation switch settings in an easy to use menu.
There's a few more strengths to using UniPalUI that still need more development but already have quite a benefit. This includes the Input Handler's conflict management which only allows a single mod to use a keybind, as well as support for modifier keys. This still needs development since the current version doesn't allow key rebinding (will get its own custom button type) however modders could handle this themselves if there's a need before re-binding is enabled. But that's probably as much as I'll write into this post, UniPalUI is a very interesting project for me personally as it's another dive into building frameworks and systems which are intended for others to use. I've got a lot to learn in the space still, but so far so good... right?
What's Next?
I'm not really sure where to go with UniPalUI since, currently, it works as I'd like it to. I'd like to finish implementing the Slider BoxType which didn't get finished before release so I could implement it and maybe some customization options so people can customize the menu a bit for readability, but outside of that I'm not really sure. As mentioned, UniPalUI was created primarily for my own use as a way to unify menu implementations across all my Palworld mods, like SCake and Altermatic. I may also expose my JSON save/load functions using UniPalUI in the future as well as that could prove useful for those looking to save settings in a way that can be externally edited, but that still requires a lot of manual work to use properly. Either way, I'm sure I'll think of stuff to add in over time, but unless other modders use UniPalUI I imagine it'll be updated much less frequently than other mods.
Current Road Map
1 ) Finish implementing slider box types 2 ) Implement some customization to help with readability 3 ) Whatever else comes next?
See something you like? Subscribe to see even more!
Subscribe Now
Creator Stats
122 subscribers
41 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.