Based on Zach Barth’s minimalist-game-framework these seem to be the minimum features needed to have a game framework to serve as a base for additional game specific features.
Core
- Game loop with delta time tracking
- Window creation and management (fullscreen toggle)
- Fixed internal resolution with letterboxed scaling
Rendering
- Primitive drawing (lines, empty/filled rectangles)
- Texture drawing with:
- Position, size, rotation, pivot, mirroring
- Source rect selection
- Blend modes & scaling modes
- Resizable (nine-slice) texture drawing
- Text rendering with caching (alignment & measurement)
Asset Loading
- Load textures (BMP, GIF, JPEG, PNG, SVG, TGA, TIFF, WEBP)
- Load resizable textures (with slice offsets)
- Load fonts (TTF, FON) at specific point sizes
- Load sounds (WAV, OGG)
- Load music (WAV, OGG, MP3, FLAC)
Input
- Mouse:
- Position, motion, scroll wheel
- Button down/held/up queries
- Mode setting (visible, hidden, locked)
- Keyboard:
- Key down/held/up queries (with optional autorepeat)
- Typed text input
- Gamepad:
- Connection detection
- Sticks, triggers, and button down/held/up queries
- Multiple player support
Audio
- Play/stop sound effects (looping, fade in/out)
- Play/stop music (looping, fade in/out)
- Handle multiple sound channels
Math & Types
-
Vector2: 2D vector math (length, rotation, normalization, dot, cross, operators) -
Bounds2: Axis-aligned rectangle (contains/overlaps checks) -
Color: RGBA color struct with named constants and alpha adjustment