/ObEngine

2D Game Engine with Lua Scripting made on top of SFML !

Primary LanguageC++MIT LicenseMIT

ÖbEngine

Discord GitHub license Github All Releases Codacy Badge

CI/CD status

CI/CD name Build status
GitHub Actions Build Status
Travis Build Status
AppVeyor Build status
Azure Pipelines Build Status

Useful links

What is ÖbEngine ?

ÖbEngine is a 2D Game Engine made on top of SFML ! I'm working on this engine in my spare time, it might not be really stable right now but I'm working on it.

How do I build it ?

You will need SFML :

  • SFML 2.5.1 (Display, Input, Network, Sound and much more)

There are other third-party libraries but they are included in the repository (extlibs/ folder). Check this tutorial to learn how to build ÖbEngine : Building ÖbEngine

Bundled dependencies

C++ dependencies

Library Description License
11zip minizip wrapper based on Vili Petek's work MIT License
Catch2 Test Framework Boost Software License
dynamicLinker Dynamic Libs wrapper MIT License
fmt Formatting library BSD 2-Clause "Simplified" License
Sol C++ binding library to Lua MIT License
Lua 5.3 Scripting language zlib License
RichText sf::Text extension MIT License
spdlog Logging library MIT License
Vili Homemade Data language (YAML-like) MIT License
zlib & minizip zip archives zlib license

Lua dependencies

Library Description License
debugger.lua Embeddable Lua debugger MIT License
inspect.lua Human-readable representation of Lua tables MIT License

What I can do with ÖbEngine ?

You can do everything with it as long as it's in 2D. ÖbEngine doesn't handle 3D (maybe partial 3D support in a future update). You can do some platformers, RPGs, 2D racing games, visual novels, roguelikes, metroidvanias, etc..

If you want to check out games made with ÖbEngine, you can check out those 🍆open-source projects🍆 !

Is it free ?

Yes it is, completely free ! There is no premium, in-app purchase, forced splashscreen or anything. You can sell your game made with ÖbEngine with no royalties either ! Since the engine is based on the MIT license, you can modify the sources, do anything you want with the engine as long as you keep the original license file somewhere. We rely exclusively on donations so if you want to support the development you can find the sponsor page right here !

On which platforms can I export my game made with ÖbEngine ?

ÖbEngine has been tested on the following platforms :

  • Windows XP, 7, 8, 10
  • Linux (Debian, Arch)
  • MacOS

ÖbEngine will have export for Android, iOS and HTML5 available in a future update.

Give me some interesting features

Here you go :

  • Event-based scripting (with Lua)
  • Neat map editor
  • Animations
  • Native plugins (You can extend the engine with C++ with automatic bindings and documentation generator)
  • Canvas (You can draw stuff using a simple API)
  • Network support
  • Scene / GameObjects system
  • Workspaces and Packages system
  • Layering system with parallax support
  • Polygonal Collisions with full collision detection support
  • Integrated CLI to manage your project
  • Custom package manager with online repository
  • Gamepad support
  • Bindable actions with support for complex key combinations
  • Shader support
  • Audio with many formats supported (OGG, MP3, WAV, FLAC and much more)

Future features which are also really cool ?

  • 3D support
  • 2D skeletal animations
  • Collaborative map editor
  • Light & particle system
  • Script the engine with the langage of your choice
  • Multiple windows
  • Android, iOS and HTML5 export
  • Tiled Map Editor support

ObEngine's versions

Each major release will have a name based on a translation of the word "Eggplant".

ÖbEngine just follows semver rules which means any version will be tagged (X.Y.Z) with X: Major, Y: Minor and Z: Patch.

Version number Version name Word origin Release date Description
1.0.0 Melanzana Italian ? First production release of ÖbEngine

Right, can I see how does scripting looks ?

Sure, here are some simple GameObjects :

Hello-World object

This one is really simple, it just prints "Hello World" in the console

function Local.Init() -- Called when object is created
  print("Hello World");
end

Every GameObject can have a Sprite associated (it's cooler when your object appears in the game right ?).

Rotating goat

Let's imagine you want to create a rotating goat in your game, no problem :

function Local.Init()
  -- Set the animation for when the goat is flying to the right (You can imagine it already right ?)
  This.Animator:setKey("GOAT_FLYING_LEFT");
end

function Local.Update(dt) -- Local.Update is a function called every loop and dt is the DeltaTime
  This.Sprite:rotate(dt * 45); -- Rotate of 45 degrees each second (You multiply with the DeltaTime here)
end

Drawing stuff

The engine includes a Canvas lib to draw stuff in real time and using it is really straightforward !

function Local.Init()
  local canvas = obe.Canvas.Canvas(400, 400); -- Creating a 400x400 canvas

  canvas:Rectangle("background") { -- Dark grey background
      layer = 2, x = 0, y = 0, width = 250, height = 100,
      color = { r = 50, g = 50, b = 50},
  };

  canvas:Text("firstPlayer") { -- First player's score label
      text = "Player 1 : 0 points", size = 22
  };

  canvas:Text("secondPlayer") { -- Second player's score label
      text = "Player 2 : 0 points", size = 22, y = 50
  };

  canvas:Circle("green") { -- Small green circle
      color = "0F0", -- Green color
      radius = 7, x = 200, y = 5
  };

  canvas:Circle("yellow") { -- Small yellow circle
      color = "FF0", -- Yellow color
      radius = 7, x = 217, y = 5
  };

  canvas:Circle("red") { -- Small red circle
      color = "F00", -- Red color
      radius = 7, x = 234, y = 5
  };

  canvas:render(This.Sprite()); -- Drawing all the stuff !
end

Check the Wiki for more examples !

How can I contribute ?

Interested in contributing to ÖbEngine ? Great ! We always need help on various tasks !

A good first step would be to join the ÖbEngine's Discord server to chat with us and discuss how you could contribute depending on your preferences and skills.

Not talkative ? I understand ! You can also check the ÖbEngine issues and more particularly those tagged with "Good first issue" or "Help wanted".

If you noticed a bug, want to ask for a feature or anything else you can always open an issue.

If you want to go even further you can fix the bug yourself by forking ÖbEngine and making a pull request. I will personally review every pull request opened.

Contributors / Thanks

Sygmei
Sygmei

✍️💻
PierrickLP
PierrickLP

💻
Skealz
Skealz

💻
TeddyTrqt
TeddyTrqt

💻
Arthapz
Arthapz

💡💻
LePatissier
LePatissier

💻
Tzupy
Tzupy

💻
mjopenglsdl
mjopenglsdl

💻
julio-b
julio-b

💻
ZanyMonk
ZanyMonk

💻
Mari0nV
Mari0nV

💻
Darnagof
Darnagof

💻

Sponsors

A big special thanks to my sponsors who are allowing me to spend more time on this project !

Companies

Orness
Orness

❤️🏢
GitHub
GitHub

❤️:octocat:
JetBrains
JetBrains

❤️🧠
DigitalOcean
DigitalOcean

❤️🦈
PVS-Studio
Viva64

❤️🦄

Individuals

Mari0nV
Mari0nV

❤️❤️
GuillaumeCailhe
GuillaumeCailhe

❤️🍆
Uriopass
Uriopass

❤️🚗
Nowyce
Nowyce

❤️🎃