fungen
A lightweight, cross-platform, OpenGL-based 2D game engine in Haskell
FunGEn: the oldest Haskell game engine
A BSD-licensed, OpenGL-based game engine written in Haskell since 2002, small enough to be a gentle entry point, with maintenance now looking for new hands.
An engine with history
FunGEn, short for Functional Game Engine, is a BSD-licensed, cross-platform, OpenGL-based game engine written in Haskell. The README dates it to 2002 and calls it the oldest Haskell game engine, created by Andre Furtado. With very few dependencies and two example games, it is presented as one of the easiest ways to start with Haskell game development. The project is licensed BSD-3-Clause.
The feature list
The capability list reads like a small engine's essentials: initialization, updating, removing, rendering, and grouping routines for game objects, definition of a game background or map with texture-based maps and tile maps, reading keyboard and mouse input, collision detection, time-based functions and pre-defined game actions, loading and displaying 24-bit bitmap files, and some debugging and performance evaluation facilities.
Maintenance and a call for help
Maintenance is described plainly. Simon Michael provides infrequent maintenance and chat support in the haskell-game community, with no issue tracker and no email support. The author's own note is candid: no time to do more with it, but the package is still useful and could attract users with some care and a better homepage, so maintainers or co-maintainers are wanted.
Getting it running
Setup means installing the OpenGL C libraries if they are not already present, with an Ubuntu or Debian example in the README, and if you are unsure whether they are installed, trying the next step and watching for missing C library errors. With the right binary path on your shell, either the stack or cabal location, you can run the example games.
The design philosophy
The history section explains the engine's thinking. A game engine is a library that provides game facilities, letting the programmer say when game events happen rather than how they are implemented. The README argues Haskell suits games because of its abstraction and concise code, and recounts how the first FunGEn version was not as functional as desired, still handled imperatively. The response was a shift in philosophy, describing a game as a set of specifications, and a plan to rebuild following the Clean Game Library concepts, a project the README admits demands time.
Editorial conclusion
The most human part of the README is the honesty: an old engine, lightly maintained, with its original author openly looking for someone to take it over.
Community notes