Skip to content
View JujuAdams's full-sized avatar
🌈
🌈

Block or report JujuAdams

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
JujuAdams/README.md

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.

Popular Repos

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
SparkleStore
Cross-platform file management
db
Simple JSON-based savedata database
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
Clean Shapes
Antialiased primitive drawing
DoLater
call_later but with arguments

All The Repos

3D

Bonk3D collision and response-to-collision. Presumes a Z up coordinate system
UggBasic 3D shape drawing. Useful for debugging and whiteboxing
Basic QuaternionsBasic 3D quaternion functions. Useful for managing complex rotations in 3D
dotobj.obj loader. Supports out-of-spec vertex colours

Text & Localization

Scribble DeluxeFeature-packed text renderer, optimised for dynamic effects and dialogue
Scribble Jr.Lightweight text renderer. Fewer features than Scribble Deluxe but far faster
ChatterboxBranching narrative engine. Loosely based on version 2 of the YarnScript language
Buffer-based string operationsFaster bulk string deletion/insertion using buffer operations
NgramNgram fuzzy string matching
LevenshteinLevenshtein fuzzy string matching
LtxtLocalization experiment. Probably not suitable for serious use
MonikerArbitrary, internationalized player name rendering
Text UtilitiesVarious language processing tools for Arabic, Thai, Hindi (Devanagari), and Hebrew. Not fully explored
LoadOTF.otf file loader. Incomplete
MSDF ToolMSDF font tool. Incomplete

Camera & Resolution

PictureFrameCamera/view/GUI/window/application surface calculator
Beady EyeCamera helper. Has a selection of modes and screenshake options
Resolution LibraryLibrary of different resolutions for different devices. Useful for testing reactive interfaces etc.

Cross-platform

SusSingle user system for single-player games
AllchievementsBasic achivements wrapper for cross-platform games
PodiumShared API for native leaderboard systems
MonikerArbitrary, internationalized player name rendering

Graphics

Clean ShapesAntialiased shape drawing. Has a nice batching mode for efficient rendering
ColorModHigh performance palette swapper
Bulb2D lighting and shadows, including "infinite range" directional lights. Has a tonemapper and HDR mode
SplatVertex buffer-based decals
KawaseKawase blur solution. Much faster than high radius Gaussian blur
LUTSimple 4K LUT (32-bit 1:1 colour swap) to colour grade images as a post-processing effect
ShockwavePer-pixel ripple effect
TexanTEXture mANager. Tool to help unload/load textures in a sensible and efficient way
Pixel Art UpscalingFiltered pixel art upscaler. Allows you to scale pixel art by non-integer values without distortion and with minimal blurriness
ScalersVarious pixel art scaler shaders. Not general purpose. The shaders are opinionated and look very different to each other
Homographic Sprite DrawingDistortion-free sprite skewing. Solves the texture stretching problems when using skewed two-triangle primitive
MatricesVarious matrix operations
Morph2D matrix emulation. Helpful for performance-sensitive situations where full fat matrix functions would be too slow
PinocchioState-based animation system. Was inteded for use with GUIs
LatticeTextmode-style rendering functions
gl_FragDepthEXTSimple example of gl_FragDepthEXT use

Audio

VinylMulti-purposes sound playback. Supports live mixing
BorkBorkAdvanced audio emitters. Supports lots of different shapes including boxes, lines, and polygons
Waveform ViewAudio waveform viewer. That's all! Might be useful for games where the player can import their own music

Analytics & Bug Tracking

SnitchLogging and crash handling system. Can interface with sentry.io, GameAnalytics, Bugsnag, or whatever custom service you're using
Unity AnalyticsUnity Analytics integration. Uses the REST API so should be cross-platform
Google Analytics 4Google Analytics 4 integration. Uses the REST API so should be cross-platform
indieopImplementation for indieop, a new feedback/bug report collection service

Data Handling

SNAPData 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 JSONTwo JSON-like formats that are easier for a human to write
IagoJSON schemas. Doesn't have full coverage
dbSimple database system that runs JSON underneath
Sparkle StoreCross-platform player savedata
SphinxSimple encryption system. Not mega secure but will deter unserious attackers
Protect Your SavefilesHMAC-based savefile security. Doesn't encrypt savefiles but does prevent them from being editted
DynamoLive data updating. Helpful to build system that allow you to edit game parameters whilst the game is running
ElephantStruct serialization system. Retains constructor type for structs when deserializing. Includes versioning system
SHA and HMACSHA and HMAC implementations. Covers SHA-256 and SHA-512

Networking

PostieOrdered, accumulated, and simulated network packets. Very useful for emulating dodgy network connections to stress test multiplayer games

Number

PRNG FunctionsSuite of PRNG functions. Very helpful for networked multiplayer and procedural generation
PRNG FinderSet 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
BIGBig integer solution. Contains converters to and from strings and decimals

Pathfinding & Geometry

MundiDijkstra floodfill solution. Also contains pathfinding
Delaunay TriangulationTriangulation algorithm that tends to generate visually pleasing triangle decompositions. Also contains pathfinding
Computational GeometryMy first ever piece of open source code. Covers nearest point on path, path smoothing, geometry simplification, and sprite edge tracing

Timing & Scheduling

iotaFixed timestep delta timing solution. Has variable interpolation for generating frames between logic steps
DoLaterBetter call_later()
Promise.gmlJS Promises for GameMaker, after work by YellowAfterlife
CoroutinesAsynchronous code execution. Useful for cutscenes

UI

BentoGUI framework. Incomplete (for now)
TextboxMonospaced multiline text entry. Not especially well tested

Other

HotgluePackage manager for GameMaker 2024.14
Painfully Learned LessonsGeneral advice for using GameMaker
Thoughts On GameMakerMore specific advice for using GameMaker based on my own beliefs and experiences
GameMaker LibrariesGameMaker libraries made by other people!
CrapPointerCrappy pointers. Maybe you need these but you probably don't
GumshoeCross-platform file finder
Mobile HapticsVery basic haptics for mobile devices. Probably obsolete these days
MemTrackMemory 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 AmaltheaMusic toy made for the 2019 Meditations project (9th September). Designed to run in the browser on multiple platforms
GitHub Release NotificationsSilly system for checking for repo updates on GitHub

Popular repositories Loading

  1. Scribble ScribblePublic

    Efficient, internationalized, multi-effects text renderer for GameMaker

    Game Maker Language 416 46

  2. Chatterbox ChatterboxPublic

    Narrative design language for GameMaker

    Game Maker Language 175 22

  3. GameMakerLibraries GameMakerLibrariesPublic

    A big ol' list of GameMaker libraries, extensions, tools etc.

    JavaScript 123 15

  4. Bulb BulbPublic

    2D lighting and shadows for GameMaker

    Game Maker Language 106 8

  5. SNAP SNAPPublic

    Data format converters for GameMaker LTS 2022

    Game Maker Language 101 18

  6. Coroutines CoroutinesPublic

    Coroutines for GameMaker

    Game Maker Language 84 4