immutaball-core: Immutaball platformer game (prototype version)

[ games, library, program ] [ Propose Tags ] [ Report a vulnerability ]

The Immutaball platformer game is a rewrite of Neverball in Haskell. (Prototype version.)


[Skip to Readme]

Modules

  • Control
    • Monad
      • Trans
        • Control.Monad.Trans.MaybeM
  • Data
    • Data.LabeledBinTree
  • Immutaball
    • Ball
      • Immutaball.Ball.CLI
        • Immutaball.Ball.CLI.Config
      • Immutaball.Ball.Game
      • Immutaball.Ball.Level
        • Immutaball.Ball.Level.Render
      • Immutaball.Ball.LevelSets
      • Immutaball.Ball.Main
      • State
        • Immutaball.Ball.State.Game
        • Immutaball.Ball.State.LevelSelect
        • Immutaball.Ball.State.LevelSets
        • Immutaball.Ball.State.Play
        • Immutaball.Ball.State.Preplay
        • Immutaball.Ball.State.Title
    • Immutaball.Prelude
    • Putt
      • Immutaball.Putt.CLI
        • Immutaball.Putt.CLI.Config
      • Immutaball.Putt.Main
    • Share
      • Immutaball.Share.AutoPar
      • Immutaball.Share.Config
        • Immutaball.Share.Config.Parser
        • Immutaball.Share.Config.Printer
      • Immutaball.Share.Context
        • Immutaball.Share.Context.Config
      • Immutaball.Share.Controller
      • Immutaball.Share.GLManager
        • Immutaball.Share.GLManager.Config
        • Immutaball.Share.GLManager.Types
      • Immutaball.Share.GUI
      • Immutaball.Share.ImmutaballIO
        • Immutaball.Share.ImmutaballIO.BasicIO
        • Immutaball.Share.ImmutaballIO.DirectoryIO
        • Immutaball.Share.ImmutaballIO.GLIO
        • Immutaball.Share.ImmutaballIO.SDLIO
      • Immutaball.Share.Level
        • Immutaball.Share.Level.Analysis
          • Immutaball.Share.Level.Analysis.LowLevel
        • Immutaball.Share.Level.Attributes
        • Immutaball.Share.Level.Base
        • Immutaball.Share.Level.Parser
        • Immutaball.Share.Level.Utils
      • Immutaball.Share.Math
        • Immutaball.Share.Math.Core
        • Immutaball.Share.Math.X3D
      • Immutaball.Share.SDLManager
        • Immutaball.Share.SDLManager.Config
        • Immutaball.Share.SDLManager.Types
      • Immutaball.Share.State
        • Immutaball.Share.State.Context
      • Immutaball.Share.Utils
      • Immutaball.Share.Video
        • Immutaball.Share.Video.LowLevel
        • Immutaball.Share.Video.Shaders
      • Immutaball.Share.Wire

Flags

Manual Flags

NameDescriptionDefault
add-default-compiler-flags

Add default set of compiler flags.

Enabled
Automatic Flags
NameDescriptionDefault
internal-wires

Instead of an external wires dependency, use an internal implementation sufficient for this package. Useful since as of now, the latest version on Hackage is not up-to-date with the latest versions of its dependencies, so it would not build with this project without a manually modified local build of this external dependency.

Disabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1.0.4.1, 0.1.0.5.1
Change log CHANGELOG.md
Dependencies array (>=0.5.8.0 && <0.6), async (>=2.2.5 && <2.3), base (>=4.9 && <9.5), bytestring (>=0.11.0.0 && <0.13), containers (>=0.6.0.1 && <0.8), curl (>=1.3.8 && <1.3.9), directory (>=1.3.8.4 && <1.4), filepath (>=1.4.2.2 && <1.6), gl (>=0.9 && <0.10), i18n (>=0.4.0.0 && <0.5), immutaball-core, JuicyPixels (>=3.3.9 && <3.4), lens (>=5.3.2 && <5.4), libvorbis (>=0.1.0.2 && <0.2), mtl (>=2.2 && <2.4), OpenGL (>=3.0.3.0 && <3.1), parallel (>=3.2.2.0 && <3.3), parsec (>=3.1.17.0 && <3.2), pipes (>=4.3.16 && <4.4), prettyprinter (>=1.7.1 && <1.8), sdl2 (>=2.5.5.0 && <2.6), sdl2-ttf (>=2.1.3 && <2.2), stm (>=2.5.1.0 && <2.6), text (>=2.1 && <2.2), time (>=1.12 && <1.15), transformers (>=0.5.0.0 && <0.7), unbounded-delays (>=0.1.1.1 && <0.2), wires (>0.2.1 && <0.3) [details]
License 0BSD
Copyright 2024-2025, Byron Johnson
Author Byron Johnson
Maintainer bjohnson@nibzdil.org
Category Games
Home page https://nibzdil.org/
Bug tracker https://nibzdil.org/
Source repo head: git clone https://github.com/nibzdil/immutaball
Uploaded by ByronJohnson at 2025-07-17T02:51:41Z
Distributions
Executables immutaputt, immutaball
Downloads 3 total (0 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
All reported builds failed as of 2025-07-17 [all 2 reports]

Readme for immutaball-core-0.1.0.5.1

[back to package description]

Prototype

Currently this project only implements basic parts of the game: minimal GUI, basic physics, and a basic renderer. Much of the game is currently unimplemented (audio, goals, complete moving body physics, gameplay mechanics, etc.), but this project still serves as a useful example of a purely functional FRP application. Currently the physics has a few bugs.

Immutaball

Immutaball is a rewrite of Neverball in Haskell. It is useful for gaming and studying a purely functional FRP application. It does not use IO except for interfacing with external dependencies and ‘base’/‘haskell2010’ IO primitives like writing to a file (including concurrent evaluation).

Screenshots and demo

screenshot: readme-screenshot0-v0.1.0.1.png

Demo video: https://byronjohnson.net/immutaball/immutaball-v0.1.0.1-demo.html. (Demo recorded before BSP physics algorithm.)

Usage example

(cd -- "${HOME}/git" && git clone https://github.com/Neverball/neverball)  # clone neverball
(cd -- "${HOME}/git/neverball" && make -j7)      # build neverball
cabal run immutaball -- -d ~/git/neverball/data  # run immutaball