Skip to content

Releases

Eagle v0.2.0

Choose a tag to compare

@github-actions github-actions released this 29 Sep 02:57
705ff8a

The first packaged release of Eagle, a Crystal-native 2D/3D game engine. It includes prebuilt CLI binaries for macOS (arm64), Linux (x86_64) and Windows (x86_64), plus a Windows installer.

Install

# macOS and Linux
curl -fsSL https://raw.githubusercontent.com/joeyrobert/eagle.cr/main/install.sh | sh
eagle init mygame --yes && cd mygame && eagle run
# Windows (PowerShell), or run eagle-setup.exe below
irm https://raw.githubusercontent.com/joeyrobert/eagle.cr/main/install.ps1 | iex

Or add it as a shard:

dependencies:
  eagle:
    github: joeyrobert/eagle.cr
    version: ~> 0.2.0

Highlights

  • Getting started:
    • One-line installers for macOS, Linux and Windows, plus a Windows setup program.
    • eagle init project wizard.
    • eagle export exe|web|app.
  • Physics3D: capsules, static triangle-mesh colliders, distance, ball, hinge and fixed joints, and body sleeping.
  • UI: scroll containers, drop-downs (OptionButton), and rich text with colours, bold and links.
  • Touch:
    • Multi-touch events, drag and gesture recognizers (tap, double tap, long press, swipe, pinch, rotate).
    • An on-screen virtual joystick and buttons.
    • Mouse emulation, so existing games work on phones.
  • Text input: IME composition and a cross-platform Clipboard, including on the web.
  • 3D audio: spatial sources with panning, distance models, interaural delay, head shadow and doppler.
  • Rendering: shapes and text share draw calls. A text-heavy scene went from 9 draw calls to 2.
  • Algorithms library: A* and flow fields, noise, Poisson disk sampling, flocking, shadowcasting FOV, minimax and more.
  • New examples:
    • Joyride: an infinite streamed city driving game.
    • Neon Bastion: a first-person shooter.
    • Voxel Island.
    • Tilt Maze.
    • A touch demo and an algorithms demo.
    • Checkers now has AI levels and forced-capture options.

Fixes

A bug sweep across the engine and every example before this release:

  • Engine: config flags like vsync: false were ignored; nodes freeing themselves mid-frame skipped siblings; look_at failed straight up or down; shadows broke when the shadow light wasn't first; OBJ relative indices loaded wrong; Image.load ignored res:// paths.
  • Physics and audio: hinge and fixed joints now converge; stacks fall asleep; AudioStream#volume is applied; chained Ogg files decode.
  • UI: TextInput mishandled multibyte text on Backspace, and drop-downs could open off-screen.
  • Examples: game-over, restart and undo states, and mouse and gamepad look direction.
  • Crash: an intermittent GL crash, caused by Crystal's scheduler moving the main fiber to another thread, is fixed without patching Crystal: games build with Crystal's single-threaded runtime. The eagle CLI passes -Dwithout_mt for you, and builds without it get a clear error instead of a crash.

CI now runs the spec suite (over 450 specs) and smoke-runs every example headless on Linux.

Known limitations

  • Windows: best effort. The release build is compiled and smoke-tested (eagle version) on Windows CI, but games have not been run on a real Windows machine yet.
  • Touch: tested with synthetic events and Chrome device emulation, not yet on real phones. Button hover highlights can stick after a tap.
  • Web IME and clipboard: tested with synthetic events only. iOS Safari may not raise the keyboard on the first tap. Clipboard.text on the web only sees text copied or pasted inside the page.
  • Web platform: no file system or threads, pointer lock needs a click, and audio starts after the first user gesture.
  • Physics3D:
    • Mesh colliders are static only.
    • Joints have no limits, motors or springs.
    • Sleeping is off by default.
    • There is no continuous collision detection, so very fast small bodies can tunnel through thin geometry.
  • UI: scroll containers have no kinetic scrolling, and drop-downs have no type-to-search.
  • Crystal: requires 1.21. Plain crystal/shards builds should pass -Dwithout_mt (the eagle CLI adds it), so the game stays on the thread that owns the window. That means Fiber::ExecutionContext isn't available in games.