| CI/CD name | Build status |
|---|---|
| Travis | |
| AppVeyor | |
| Azure Pipelines |
- ÖbEngine's Wiki
- ÖbEngine's Website
- ÖbEngine's Documentation
- ÖbEngine's Discord
- ÖbEngine's Development Boards
ÖbEngine (ÖbE is shorter) is a 2D Game Engine made on top of SFML ! I'm creating this engine in my spare time, it might not be really stable right now but I'm working on it.
You will need SFML :
- SFML 2.5.1 (Display, Input, Network, Sound and much more)
There are other libraries but they are included in the repository (extlibs/ folder) :
| 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 |
Check the following tutorial : Building ÖbEngine
Well, you can do approximatively 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🍆 !
Of course, you can even sell your game made with the engine, no royalties (If you want to give us some money it's okay though). You can also modify the sources. There's no need to write somewhere that your game is made with ÖbEngine (but it's nice if you do it !). The engine is MIT licensed so you're free to do whatever you want with the engine.
Ö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.
Here you go :
- Neat map editor (With a grid for precise map edition)
- Animations
- Native plugins (You can extend the engine with C++)
- Canvas (You can draw stuff using a simple API)
- Network support
- Scriptable GameObjects
- Workspaces and Packages system
- Lua scripting
- Layering system
- Parallax
- Home-made data language (Vili)
- Polygonal Collisions with full collision detection support
- Developpement console with coloration and scripting support
- Custom package manager with online repository
- Extendable toolkit with a lot of functionalities
- Gamepad support
- Normal maps
- 3D objects in 2D scene
- Skeletal animations
- Collaborative map editor
- Light & particle system
- C++ GameObjects
- Multiple windows
- Android, iOS and HTML5 export
- Tiled Map Editor support
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 |
Sure, here are some simple GameObjects :
This one is really simple, it just prints "Hello World" in the console (not the game console)
function Local.Init() -- Called when object is created
print("Hello World");
endEvery GameObject can have a Sprite associated (it's cooler when your object appears in the game right ?).
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)
endThe engine includes a Canvas lib to draw stuff in real time and using it is really straightforward !
function Local.Init()
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("fstPlayer")({ -- First player's score label
text = "Player 1 : 0 points", size = 22
});
canvas:Text("scdPlayer")({ -- 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:setTarget(This:Sprite()); -- Canvas result will render in object's Sprite
canvas:render(); -- Drawing all the stuff !
endCheck the Wiki for more examples !
Sygmei ✍️💻 |
PierrickLP 💻 |
Skealz 💻 |
TeddyTrqt 💻 |
Arthapz 💡💻 |
LePatissier 💻 |
Tzupy 💻 |
mjopenglsdl 💻 |
julio-b 💻 |
ZanyMonk 💻 |
A big special thanks to my sponsors who are allowing me to spend more time on this project !
![]() GitHub ❤️ |
JetBrains ❤️🧠 |
DigitalOcean ❤️🦈 |
![]() Viva64 ❤️🦄 |
Mari0nV ❤️❤️ |
GuillaumeCailhe ❤️🍆 |
Uriopass ❤️🚗 |
Nowyce ❤️🎃 |


