Home

Awesome

ÖbEngine

Discord GitHub license Github All Releases Codacy Badge

CI/CD status

CI/CD nameBuild status
GitHub ActionsBuild Status
TravisBuild Status
AppVeyorBuild status
Azure PipelinesBuild 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 ?

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

LibraryDescriptionLicense
11zipminizip wrapper based on Vili Petek's workMIT License
Catch2Test FrameworkBoost Software License
dynamicLinkerDynamic Libs wrapperMIT License
fmtFormatting libraryBSD 2-Clause "Simplified" License
SolC++ binding library to LuaMIT License
Lua 5.3Scripting languagezlib License
RichTextsf::Text extensionMIT License
spdlogLogging libraryMIT License
ViliHomemade Data language (YAML-like)MIT License
zlib & minizipzip archiveszlib license

Lua dependencies

LibraryDescriptionLicense
debugger.luaEmbeddable Lua debuggerMIT License
inspect.luaHuman-readable representation of Lua tablesMIT 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 :

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

Give me some interesting features

Here you go :

Future features which are also really cool ?

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 numberVersion nameWord originRelease dateDescription
1.0.0MelanzanaItalian?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

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 ? 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 !

<table> <tr> <td align="center"><a href="https://github.com/Sygmei"><img src="https://avatars1.githubusercontent.com/u/3835355?v=4" width="100px;" alt="Sygmei"/><br /><sub><b>Sygmei</b></sub></a><br /><a href="https://github.com/ObEngine/ObEngine/commits?author=Sygmei" title="Creator / Code">✍️💻</a></td> <td align="center"><a href="https://github.com/PierrickLP"><img src="https://avatars1.githubusercontent.com/u/19671805?v=4" width="100px;" alt="PierrickLP"/><br /><sub><b>PierrickLP</b></sub></a><br /><a href="https://github.com/ObEngine/ObEngine/commits?author=PierrickLP" title="Code">💻</a></td> <td align="center"><a href="https://github.com/Darnagof"><img src="https://avatars3.githubusercontent.com/u/4027974?s=400&v=4" width="100px;" alt="Darnagof"/><br /><sub><b>Darnagof</b></sub></a><br /><a href="https://github.com/ObEngine/ObEngine/commits?author=Darnagof" title="Code">💻</a></td> </tr> </table>

Special Thanks

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

<table> <tr> <td align="center"><a href="https://github.com/Skealz"><img src="https://avatars3.githubusercontent.com/u/11155537?v=4" width="100px;" alt="Skealz"/><br /><sub><b>Skealz</b></sub></a><br /><a href="https://github.com/ObEngine/ObEngine/commits?author=Skealz" title="Code">💻</a></td> <td align="center"><a href="https://github.com/TeddyTrqt"><img src="https://avatars3.githubusercontent.com/u/25806305?v=4" width="100px;" alt="TeddyTrqt"/><br /><sub><b>TeddyTrqt</b></sub></a><br /><a href="https://github.com/ObEngine/ObEngine/commits?author=TeddyTrqt" title="Code">💻</a></td> <td align="center"><a href="https://github.com/Arthapz"><img src="https://avatars1.githubusercontent.com/u/27437334?v=4" width="100px;" alt="Arthapz"/><br /><sub><b>Arthapz</b></sub></a><br /><a href="https://github.com/ObEngine/ObEngine/commits?author=Arthapz" title="Help / Code">💡💻</a></td> <td align="center"><a href="#"><img src="https://i.pinimg.com/originals/cb/bd/af/cbbdaf63fa8d5b246441e9e38bee0059.jpg" width="100px;" alt="LePatissier"/><br /><sub><b>LePatissier</b></sub></a><br /><a href="https://github.com/ObEngine/ObEngine/commits?author=LePatissier" title="Code">💻</a></td> <td align="center"><a href="https://github.com/Tzupy"><img src="https://avatars0.githubusercontent.com/u/12645020?v=4" width="100px;" alt="Tzupy"/><br /><sub><b>Tzupy</b></sub></a><br /><a href="https://github.com/ObEngine/ObEngine/commits?author=Tzupy" title="Code">💻</a></td> <td align="center"><a href="https://github.com/mjopenglsdl"><img src="https://avatars1.githubusercontent.com/u/3438296?s=460&v=4" width="100px;" alt="mjopenglsdl"/><br /><sub><b>mjopenglsdl</b></sub></a><br /><a href="https://github.com/ObEngine/ObEngine/commits?author=mjopenglsdl" title="Code">💻</a></td> <td align="center"><a href="https://github.com/julio-b"><img src="https://avatars1.githubusercontent.com/u/16379308?v=4" width="100px;" alt="julio-b"/><br /><sub><b>julio-b</b></sub></a><br /><a href="https://github.com/ObEngine/ObEngine/commits?author=julio-b" title="Code">💻</a></td> </tr> <tr> <td align="center"><a href="https://github.com/ZanyMonk"><img src="https://avatars2.githubusercontent.com/u/3920186?v=4" width="100px;" alt="ZanyMonk"/><br /><sub><b>ZanyMonk</b></sub></a><br /><a href="https://github.com/ObEngine/ObEngine/commits?author=ZanyMonk" title="Code">💻</a></td> <td align="center"><a href="https://github.com/Mari0nv"><img src="https://avatars3.githubusercontent.com/u/23618241?s=400&v=4" width="100px;" alt="Mari0nV"/><br /><sub><b>Mari0nV</b></sub></a><br /><a href="https://github.com/ObEngine/ObEngine/commits?author=Mari0nV" title="Code">💻</a></td> <td align="center"><a href="https://github.com/TerensTare"><img src="https://avatars.githubusercontent.com/u/37905314?s=460&v=4" width="100px;" alt="TerensTare"/><br /><sub><b>TerensTare</b></sub></a><br /><a href="https://github.com/ObEngine/ObEngine/commits?author=TerensTare" title="Code">💻</a></td> <td align="center"><a href="https://github.com/AugustasV"><img src="https://avatars.githubusercontent.com/u/7377334?s=460&v=4" width="100px;" alt="AugustasV"/><br /><sub><b>AugustasV</b></sub></a><br /><a href="https://github.com/ObEngine/ObEngine/commits?author=AugustasV" title="Code">💻</a></td> <td align="center"><a href="https://github.com/eXpl0it3r"><img src="https://avatars1.githubusercontent.com/u/16379308?v=4" width="100px;" alt="eXpl0it3r"/><br /><sub><b>eXpl0it3r</b></sub></a><br /><a href="https://github.com/ObEngine/ObEngine/commits?author=eXpl0it3r" title="Code">💻</a></td> <td align="center"><a href="https://github.com/kevle"><img src="https://avatars.githubusercontent.com/u/8260484?s=460&v=4" width="100px;" alt="kevle"/><br /><sub><b>kevle</b></sub></a><br /><a href="https://github.com/ObEngine/ObEngine/commits?author=kevle" title="Code">💻</a></td> <td align="center"><a href="https://github.com/nfarid"><img src="https://avatars.githubusercontent.com/u/54642193?s=460&v=4" width="100px;" alt="nfarid"/><br /><sub><b>nfarid</b></sub></a><br /><a href="https://github.com/ObEngine/ObEngine/commits?author=nfarid" title="Code">💻</a></td> </tr> </table>

Sponsors

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

Companies

<table> <tr> <td align="center"><a href="https://www.orness.com/"><img src="https://raw.githubusercontent.com/ObEngine/Wiki/master/Sponsors/orness_square.png" width="100px;" alt="Orness"/><br /><sub><b>Orness</b></sub></a><br /><a href="https://www.orness.com/" title="Sponsor">:heart::office:</a></td> <td align="center"><a href="https://github.com/"><img src="https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png" width="100px;" alt="GitHub"/><br /><sub><b>GitHub</b></sub></a><br /><a href="https://github.com/" title="Sponsor">:heart::octocat:</a></td> <td align="center"><a href="https://gitcoin.co"><img src="https://s.gitcoin.co/static/v2/images/presskit/logotype.f06a89bd4582.svg" width="100px;" alt="Gitcoin"/><br /><sub><b>Gitcoin</b></sub></a><br /><a href="https://gitcoin.co" title="Sponsor">:octocat:🪙</a></td> <td align="center"><a href="https://www.jetbrains.com/"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/JetBrains_Logo_2016.svg/1200px-JetBrains_Logo_2016.svg.png" width="100px;" alt="JetBrains"/><br /><sub><b>JetBrains</b></sub></a><br /><a href="https://www.jetbrains.com" title="Sponsor">:heart:🧠</a></td> <td align="center"><a href="https://www.digitalocean.com/"><img src="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/SVG/DO_Logo_vertical_blue.svg" width="100px;" alt="DigitalOcean"/><br /><sub><b>DigitalOcean</b></sub></a><br /><a href="https://www.digitalocean.com/" title="Sponsor">:heart::shark:</a></td> <td align="center"><a href="https://www.viva64.com/en/pvs-studio/"><img src="https://files.pvs-studio.com/static/images/logo.svg" alt="PVS-Studio"/><br /><sub><b>Viva64</b></sub></a><br /><a href="https://www.viva64.com/en/pvs-studio/" title="Sponsor">:heart:🦄</a></td> </tr> </table>

Individuals

<table> <tr> <td align="center"><a href="https://github.com/Mari0nv"><img src="https://avatars3.githubusercontent.com/u/23618241?s=400&v=4" width="100px;" alt="Mari0nV"/><br /><sub><b>Mari0nV</b></sub></a><br /><a href="https://github.com/Mari0nv" title="Sponsor">:heart::heart:</a></td> <td align="center"><a href="https://github.com/GuillaumeCailhe"><img src="https://avatars0.githubusercontent.com/u/1500051?s=400&v=4" width="100px;" alt="GuillaumeCailhe"/><br /><sub><b>GuillaumeCailhe</b></sub></a><br /><a href="https://github.com/Sygmei/GuillaumeCailhe" title="Sponsor">:heart:🍆</a></td> <td align="center"><a href="https://github.com/Uriopass"><img src="https://avatars3.githubusercontent.com/u/5420739?s=460&v=4" width="100px;" alt="Uriopass"/><br /><sub><b>Uriopass</b></sub></a><br /><a href="https://github.com/Uriopass" title="Sponsor">:heart:🚗</a></td> <td align="center"><a href="https://github.com/Nowyce"><img src="https://avatars2.githubusercontent.com/u/1354475?s=460&v=4" width="100px;" alt="Nowyce"/><br /><sub><b>Nowyce</b></sub></a><br /><a href="https://github.com/Nowyce" title="Sponsor">:heart:🎃</a></td> </tr> </table>

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