You might know me from my commercial work but I spend my free time making libraries to help developers.
GML is something of a quirky language and has led me to evolve particular techniques to establish a personal "best practice". You can read some of my thoughts on the nuances of developing in GameMaker here.
![]() |
Scribble Deluxe Powerful, fully featured text renderer Optimised for dynamic effects and dialogue |
![]() |
Input Comprehensive cross-platform input Now maintained by offalynne |
![]() |
Scribble Jr. Fast and lightweight text renderer Optimised for UI text and performance |
![]() |
Vinyl Live updating modular audio system |
![]() |
SNAP Struct and array export/import and utilities |
![]() |
Chatterbox Narrative scripting tool |
![]() |
Dynamo Dynamic data loading |
![]() |
Snitch Logging and crash handling system |
![]() |
iota Miniature fixed timestep library |
![]() |
Bulb 2D lighting and shadows |
![]() |
Texan Texture group manager |
![]() |
DoLatercall_later but with arguments |
![]() |
Clean Shapes Antialiased primitive drawing |
![]() |
db Simple savedata database |
Bonk | 3D collision and response-to-collision. Presumes a Z up coordinate system |
Ugg | Basic 3D shape drawing. Useful for debugging and whiteboxing |
Basic Quaternions | Basic 3D quaternion functions. Useful for managing complex rotations in 3D |
dotobj | .obj loader. Supports out-of-spec vertex colours |
Scribble Deluxe | Feature-packed text renderer, optimised for dynamic effects and dialogue |
Scribble Jr. | Lightweight text renderer. Fewer features than Scribble Deluxe but far faster |
Chatterbox | Branching narrative engine. Loosely based on version 2 of the YarnScript language |
Buffer-based string operations | Faster bulk string deletion/insertion using buffer operations |
Ngram | Ngram fuzzy string matching |
Levenshtein | Levenshtein fuzzy string matching |
Ltxt | Localization experiment. Probably not suitable for serious use |
Text Utilities | Various language processing tools for Arabic, Thai, Hindi (Devanagari), and Hebrew. Not fully explored |
LoadOTF | .otf file loader. Incomplete |
MSDF Tool | MSDF font tool. Incomplete |
PictureFrame | Camera/view/GUI/window/application surface calculator |
Beady Eye | Camera helper. Has a selection of modes and screenshake options |
Resolution Library | Library of different resolutions for different devices. Useful for testing reactive interfaces etc. |
Vinyl | Multi-purposes sound playback. Supports live mixing |
BorkBork | Advanced audio emitters. Supports lots of different shapes including boxes, lines, and polygons |
Waveform View | Audio waveform viewer. That's all! Might be useful for games where the player can import their own music |
Clean Shapes | Antialiased shape drawing. Has a nice batching mode for efficient rendering |
ColorMod | High performance palette swapper |
Bulb | 2D lighting and shadows, including "infinite range" directional lights. Has a tonemapper and HDR mode |
Splat | Vertex buffer-based decals |
Kawase | Kawase blur solution. Much faster than high radius Gaussian blur |
LUT | Simple 4K LUT (32-bit 1:1 colour swap) to colour grade images as a post-processing effect |
Shockwave | Per-pixel ripple effect |
Texan | TEXture mANager. Tool to help unload/load textures in a sensible and efficient way |
Pixel Art Upscaling | Filtered pixel art upscaler. Allows you to scale pixel art by non-integer values without distortion and with minimal blurriness |
Scalers | Various pixel art scaler shaders. Not general purpose. The shaders are opinionated and look very different to each other |
Homographic Sprite Drawing | Distortion-free sprite skewing. Solves the texture stretching problems when using skewed two-triangle primitive |
Matrices | Various matrix operations |
Morph | 2D matrix emulation. Helpful for performance-sensitive situations where full fat matrix functions would be too slow |
Pinocchio | State-based animation system. Was inteded for use with GUIs |
Lattice | Textmode-style rendering functions |
gl_FragDepthEXT | Simple example of gl_FragDepthEXT use |
Snitch | Logging and crash handling system. Can interface with sentry.io, GameAnalytics, Bugsnag, or whatever custom service you're using |
Unity Analytics | Unity Analytics integration. Uses the REST API so should be cross-platform |
Google Analytics 4 | Google Analytics 4 integration. Uses the REST API so should be cross-platform |
SNAP | Data format converters. Can read/write JSON, YAML, CSV, Messagepack, XML, INI, VDF, QML. Can read/write other formats too (pure binary, NSV, basic GML, grid and 2D arrays, GameMaker tilemaps) |
Extending JSON | Two JSON-like formats that are easier for a human to write |
Iago | JSON schemas. Doesn't have full coverage |
db | Simple database system that runs JSON underneath |
Sphinx | Simple encryption system. Not mega secure but will deter unserious attackers |
Protect Your Savefiles | HMAC-based savefile security. Doesn't encrypt savefiles but does prevent them from being editted |
Dynamo | Live data updating. Helpful to build system that allow you to edit game parameters whilst the game is running |
Elephant | Struct serialization system. Retains constructor type for structs when deserializing. Includes versioning system |
SHA and HMAC | SHA and HMAC implementations. Covers SHA-256 and SHA-512 |
Postie | Ordered, accumulated, and simulated network packets. Very useful for emulating dodgy network connections to stress test multiplayer games |
PRNG Functions | Suite of PRNG functions. Very helpful for networked multiplayer and procedural generation |
PRNG Finder | Set of macros to discover native GameMaker functions that update the internal PRNG. Useful to discover places where game behaviour might diverge due to different random seeds |
BIG | Big integer solution. Contains converters to and from strings and decimals |
Mundi | Dijkstra floodfill solution. Also contains pathfinding |
Delaunay Triangulation | Triangulation algorithm that tends to generate visually pleasing triangle decompositions. Also contains pathfinding |
Computational Geometry | My first ever piece of open source code. Covers nearest point on path, path smoothing, geometry simplification, and sprite edge tracing |
iota | Fixed timestep delta timing solution. Has variable interpolation for generating frames between logic steps |
DoLater | Better call_later() |
Coroutines | Asynchronous code execution. Useful for cutscenes |
Bento | GUI framework. Incomplete (for now) |
Textbox | Monospaced multiline text entry. Not especially well tested |
Painfully Learned Lessons | General advice for using GameMaker |
Thoughts On GameMaker | More specific advice for using GameMaker based on my own beliefs and experiences |
GameMaker Libraries | GameMaker libraries made by other people! |
CrapPointer | Crappy pointers. Maybe you need these but you probably don't |
Gumshoe | Cross-platform file finder |
Mobile Haptics | Very basic haptics for mobile devices. Probably obsolete these days |
MemTrack | Memory usage tracking. Records when and where data structures, vertex buffers, surfaces etc. were created and whether they have been destroyed or not |
A Message from Amalthea | Music toy made for the 2019 Meditations project (9th September). Designed to run in the browser on multiple platforms |
GitHub Release Notifications | Silly system for checking for repo updates on GitHub |