Skip to content

Lightweight, cross-platform, 2D game engine | ECS; Lua Console; Physics; Tile based

License

Notifications You must be signed in to change notification settings

JerboaBurrow/Hop

Repository files navigation

Hop

A lightweight 2D game engine, in C++ with embedded Lua

Features

  • Free, MIT open sourced..
  • Use as a standalone engine or as a drop in component (e.g. with SFML)..
  • Entity component system (ECS) based.
  • Physics (Discrete element method):
    • collision primitives (circles, rects).
    • collision meshes built from primitives (rigid and soft).
    • configurable friction, gravity, drag, and restitution.
    • super-sampling.
    • (good) multithreading.
    • Cell list collision detection.
    • Quad tree collision detection.
    • Object-object and object-world collisions.
    • collision islands and other optimisations.
  • Rendering (provided by jGL, Vulkan is a WIP):
    • OpenGL.
    • Vulkan.
    • sprites (atlasing, and animateable atlases).
    • collision primitives (circles/rects).
    • Freetype fonts.
    • shapes (it is in jGL).
    • lightmaps and shadows.
    • msaa.
    • particle effects (it is in jGL).
    • texture management.
    • (compressed) texture asset packs.
    • Engine UI (Dear ImGui).
  • Window management:
    • Single window creation.
    • Multi-window.
    • Key and mouse events.
    • Frame limiting.
    • Snapping and resizing.
    • Screenspace bbs.
  • Worlds:
    • Perlin (marching squares).
    • Tile maps.
    • object-world collisions.
    • editable.
    • saveable.
    • tile textures.
  • Lua console
    • ECS bindings (object management).
    • Compressed script asset archive support.
    • Live in game console
  • Cross platform:
    • Linux.
    • Windows.
    • macOS.
    • Android.
    • IOS (mostly held up by jGL rendering).
  • Tooling
  • mesh editor.
  • Lua script packer.
  • World editor.
  • Texture packer.

Documentation

Checkout the docs here, and also the jGL docs here

Setup

  • clone, and init the submodules (you can use submodules.sh)
  • the build.sh can be used to build

OSS Dependencies and Licenses

  • Freetype is licensed under the The FreeType Project LICENSE
  • GLEW is licensed under aModified BSD License, the Mesa 3-D License (MIT) and the Khronos License (MIT).
  • GLFW is licensed under the zlib/libpng
  • GLM is licensed under the MIT License (but also, no bunnies have been made unhappy)
  • Lua is licensed under the MIT license
  • Miniaudio is licensed under the MIT-0 license
  • stduuid is licensed under the MIT license
  • vorbis and ogg is licensed under a BSD license
  • zlib is licensed under the zlib license

Thanks to all the OSS developers: David Turner, Robert Wilhelm, and Werner Lemberg (Freetype), Milan Ikits <milan ikits[]ieee org>, Marcelo E. Magallon <mmagallo[]debian org>, and Lev Povalahev Brian Paul, The Khronos Group Inc (GLEW), Marcus Geelnard and Camilla Löwy (GLFW), G-Truc Creation (GLM), Lua.org, PUC-Rio (Lua), David Reid (Miniaudio), Marius Bancila https://github.com/mariusbancila/stduuid#MIT-1-ov-file (stduuid), Xiph.org Foundation (vorbis, ogg), and Jean-loup Gailly and Mark Adler (zlib).