Skip to content

ObEngine/ObEngine

Repository files navigation

ÖbEngine

Discord GitHub license Github All Releases Codacy Badge

CI/CD status

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

Useful links

What is ÖbEngine ?

ÖbEngine is a free and open-source 2D game engine ! It focuses on making game development accessible and fun. ÖbEngine is not only a framework, it is a fully-fledged engine with everything you might need including a map editor, a plugin system and so much more !

And by the way, it is pronounced | ˈɒb ˈendʒɪn |, the umlaut on the Ö is just there because it looks like a surprised face, it doesn't influence the pronounciation.

How do I build it ?

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

  • You may also need alsa-lib (if you're on Linux)

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.4 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
  • Projects 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

Do you have a roadmap I can check ?

Sure ! For now we use GitHub Project system as a planning / roadmap tool which is available here.

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

---@class HelloWorld
local HelloWorld = GameObject();

function HelloWorld: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 :

---@class RotatingGoat
local RotatingGoat = GameObject();

function RotatingGoat:init()
  -- Set the animation for when the goat is flying to the right (You can imagine it already right ?)
  self.components.Animator:set_animation("GOAT_FLYING_LEFT");
end

function Event.Game.Update(evt) -- Event.Game.Update is a function called every loop and dt is the DeltaTime
  self.components.Sprite:rotate(evt.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 !

---@class PongScoreboard
local PongScoreboard = GameObject();

function PongScoreboard: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(self.components.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 ? We understand ! You can also check the ÖbEngine issues and more particularly those tagged with "Good first issue" or "Help wanted".

If you are thinking about contributing to ÖbEngine, we highly recommend you to check out the Code of Conduct and the Contibuting pages for more details.

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. We will review every pull request opened.

Contributors

Those are the core contributors of ÖbEngine, you could become one too !

Sygmei
Sygmei

✍️💻
PierrickLP
PierrickLP

💻
Darnagof
Darnagof

💻

Special Thanks

ÖbEngine would not be the same without the helpful contributions from the following awesome people !

Skealz
Skealz

💻
TeddyTrqt
TeddyTrqt

💻
Arthapz
Arthapz

💡💻
LePatissier
LePatissier

💻
Tzupy
Tzupy

💻
mjopenglsdl
mjopenglsdl

💻
julio-b
julio-b

💻
ZanyMonk
ZanyMonk

💻
Mari0nV
Mari0nV

💻
TerensTare
TerensTare

💻
AugustasV
AugustasV

💻
eXpl0it3r
eXpl0it3r

💻
kevle
kevle

💻
nfarid
nfarid

💻

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:
Gitcoin
Gitcoin

:octocat:🪙
JetBrains
JetBrains

❤️🧠
DigitalOcean
DigitalOcean

❤️🦈
PVS-Studio
Viva64

❤️🦄

Individuals

Mari0nV
Mari0nV

❤️❤️
GuillaumeCailhe
GuillaumeCailhe

❤️🍆
Uriopass
Uriopass

❤️🚗
Nowyce
Nowyce

❤️🎃

Want to become a sponsor ? Please check out the GitHub Sponsor and the ÖbEngine OpenCollective