Doomerang is a fast-paced 2D action-platformer built with Go and the Ebitengine game engine.
- Go 1.21+
- OS-specific dependencies (see Ebitengine installation)
make runThe project follows a standard ECS (Entity Component System) pattern:
/components: Data-only structures (e.g.,PlayerData,AnimationData)./systems: Logic operating on entities (e.g.,UpdatePhysics,Render)./factory: Entity creation functions using archetypes./scenes: Game state management (Menu, World)./assets: Tiled maps, spritesheets, and audio./config: Global constants, states, and input bindings.
For a deeper dive into the ECS implementation, see ECS_AND_DONBURI.md.
- Zero-Allocation Rendering: Reuses drawing options to eliminate per-frame GC pressure.
- Asset Caching: Centralized system prevents redundant asset decoding.
- Memory Safety: Uses pointer wrappers (
ObjectData) for stable physics references during ECS reallocation. - Type-Safe States: Centralized
StateIDenum prevents typo-related bugs. - Input Abstraction: Decouples raw input from logic via action mapping.
macOS Note: The Makefile uses
CGO_CFLAGS="-w"to suppress Metal backend warnings.
Assets are a mix of assets I sourced and some that I created. The following asset packs are used in making this game: