gooey: a simple, sprite-based Gamemaker UI library
A downloadable gooey for Windows, macOS, Linux, and Android
Welcome to gooey, a simple UI library for Gamemaker 2023+
Latest version is 2024.12.
NEW: 2024.12 version released - added many fixes, convenience functions and event drill-through capability, and uprgraded ScribbleDX 9.3.4
DISCLAIMER: gooey is provided as is. Few/no new features will probably ever be added, and updates will only be provided if there are serious, game-breaking bugs and I have enough time and energy to deal with them.
Download the latest version (PLEASE DOWNLOAD FROM BELOW AS THE DIRECT LINK SEEMS TO BE TEMPORARILY BROKEN)
Access the API documentation (online)
(Download offline HTML documentation below)
What exactly is gooey?
gooey is a small UI library that lets you create menus, HUD and other UI elements in Gamemaker, with a few lines of code, using sprites.
gooey currently supports the following widgets:
- Panels (the containers for everything else)
- Groups (to group stuff together)
- Grids (to layout stuff in Panels or Groups)
- Buttons
- Canvases (surfaces)
- Checkboxes
- Dropdowns
- Option Groups
- Progress Bars
- Sliders
- Sprites
- Tabs (tabbed Panels)
- Text Boxes
- Text (labels)
- Spinners [NEW FOR 2023.8]
gooey has the following features:
- Drag and drop setup - see below
- Intuitive code for setting up the UI - focus on the What, not on the How
- Struct based, with a set it and forget it manager object
- Setters/getters for properties
- Fluid interface (i.e. you can chain methods together)
- Kenney's amazing UI asset pack sprites are included for testing
- Text based on JujuAdams's superb Scribble renderer
Who is gooey for?
gooey is suitable for developers making prototypes, jam games or small projects. gooey is probably not suitable for big scale production or commercial games.
Who made gooey?
gooey was made by manta ray, an intermediate Gamemaker hobby developer from Mexico.
How can I use gooey in my project?
- Download the .YYMPS file and import it as a local package in your project.
Drag the UI manager object into your first room. Make sure it's created before other objects that create/interact with UI, by using Instance Creation Order.If you are using 2024.6 or newer you don't need to do this step anymore! Just go to step 3
3. Use gooey's structs and methods to create and set up your widgets.
- Note you will need at least one sprite. gooey is 100% sprite-based. gooey includes Kenney's UI asset pack.
For example, to create a simple draggable/resizable panel, type this line of code in an object's Create event or similar place (make sure it only triggers once):
var _panel = new UIPanel("Example", 20, 40, 400, 300, blue_panel);
This will create the panel at (20,40) from the top-left anchor point of the GUI layer (be sure to read about available anchor points for more info), of size 400x300, using sprite `blue_panel` (again, from Kenney's included UI pack), and name it Example
.
I will also post a video in the coming days demonstrating actual use of gooey on a game project.
What are some caveats to understand before using gooey (spoiler: a lot)?
- gooey is currently in alpha/preview version. Bugs will inevitably pop up. Use the comments section below or contact me directly in Discord or email if you find one.
- gooey is built for Gamemaker 2023+. If you don't have this version, you should probably look elsewhere.
- gooey is based on JujuAdams's Scribble for rendering text.
- Scribble is actually included in the local package file. The file will be periodically updated as new versions of Scribble come out.
- if you want to use a different version of Scribble for whatever reason in your project, you can remove the built-in one and use whatever version you need. If you do that, it is recommended to set the following macro variables in Scribble configuration scripts:
#macro SCRIBBLE_ALLOW_TEXT_GETTER true
(in__scribble_config_behaviours
)#macro SCRIBBLE_DEFAULT_HALIGN fa_center <br> #macro SCRIBBLE_DEFAULT_VALIGN fa_middle
(in__scribble_config_defaults
)
- gooey is not fully optimized and will probably never be.
- gooey's documentation is currently very basic, I plan on expanding it on the future.
- gooey's setters and getters do not currently have validations on input, so exception handling is harder right now.
- gooey is designed for, and currently aimed at, mouse or touch only games, so it doesn't currently handle controller or keyboard navigation natively at the moment, and probably never will.
- gooey uses the GUI layer to draw GUI, so it's mainly for non-diegetic UI.
- gooey is 100% sprite based. You cannot draw UI components with primitives or basic shapes using gooey.
- There's probably more...
What export platforms are supported?
Theoretically all of them. However, gooey has only been unit-tested on Windows, Opera GX, HTML5 and Android at the moment.
Does gooey support live reloading/editing?
Not natively. However, I highly recommend pairing it with YellowAfterlife's mind-blowing GMLive extension.
Where can I find the documentation for gooey?
The latest documentation on every gooey widget and function can be found here.
Why doesn't gooey have feature ___?
I made gooey for my own use, with the scope intended, and decided to share it with the community. I do have a backlog, but honestly at this point I'd rather spend my time using it for creating games than actually developing it further.
Also, as the famous mantra says:
Done is better than perfect
Why isn't gooey super polished?
See the mantra in the question above.
Why is the code not consistent/a bit ugly/etc.?
See mantra above (heh). Jokes aside, this is the third iteration already, and I had to change stuff on the fly and didn't think about all the implications of certain features from the beginning. Hence, some of the code is not abstracted correctly / is redundant / etc.
Can I fork it / improve it?
Be my guest. I have a BitBucket repo if you want to check it out.
Why is this called gooey?
GUI is an homophone with gooey. Compare here and here.
What license does gooey have?
MIT (https://choosealicense.com/licenses/mit/). Do whatever you please with it, just don't blame me if things go awfully wrong :)
Note that Scribble's license is also MIT and and Kenney's UI asset pack is CC0.
Changelog
2024.12 | Upgraded to ScribbleDX 9.3.4 Added convenience functions for interacting with UI object (i.e. ui_get(), ui_exists()) which safely check and auto-create the UI object if needed Added event drill-through capability per widget and global Added capability via configuration macro to render GUI on Draw GUI End instead of Draw GUI Begin Refactored event code into separate scripts for easier maintenance Fixed some bugs related to the mouse cursor |
2024.7 | Upgraded to Scribble 9.1 Fixed bug with automatic UI object deployment |
2024.6 | UI manager object is now automagically created; Uses Scribble 9.0.0 beta Fixes bug with REVEAL behavior of progressbars Fixed mouse events working over clipped grids Improved mouse enter/leave cursor behavior |
2024.1 | Fixed a bug where children widgets would not scroll in many cases, when scrolling the parent |
2023.11 | Optimizes the way callbacks are handled, which in turn circumvents a Gamemaker bug which prevented directly assigning function names to callbacks |
2023.10 | Fixes a problem with UIProgressBar widgets set to repeating behavior and adds "click to set" option (instead of "click to modify value") to UISlider widgets |
2023.8.1 | Fixed (hopefully all) invalid reference type errors when using gooey with Gamemaker 2023.8.145 runtime (or later). |
2023.8 | Greatly improved slider feel and usage, added a UISpinner widget, added support for Scribble typists within UIText elements and fixed a few bugs. |
0.1 alpha | gooey Preview version. |