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 |


















