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 |