Origin Engine
- 9 Devlogs
- 74 Total hours
A 3D pixel-art cross-platform game engine that runs natively on Windows, Linux and Web! Used to develop the Janitor Space Program
A 3D pixel-art cross-platform game engine that runs natively on Windows, Linux and Web! Used to develop the Janitor Space Program
As a prize for your great work, look out for a bonus prize in the mail :)
version 0.19.3
First ship is coming up soon! Even tho ive been working on really
exciting stuff, i really would like to focus on actually learning and
having a deep enough understanding of vulkan and other stuff like the
best engine’s architecture before actually logging and building
something open and usable, thats why i feel this is a good place to
finally ship this project as it is and maybe come back to it at some
point
I’ve updated the website! now you have a few new sections with new
information like the game i build using this engine and other cool
stuff!
published a new version to the github releases page (0.19.3 i think),
with the binaries for the demo game and the sandbox for both windows and
linux! the web build is still there on the website but it is marked as
legacy tho
Its been super fun to work on this and ive learnt a lot but i really
really really think i could make something so much better with all the
knowledge i now have and with some serious research, this is pretty much
what ive explained in most of all the previous devlogs (the last 2 or
3)
I’ve been working on applying some of the stuff ive been working on to
the engine, like the new renderer class its now pretty much ported
nicely! ive also tested that everything worked cross platform and yay!
the project is very ready to hold any new game or project you might
wanna do with it, although i might wanna make a quick tutorial on how to
work with the engine on a github repo cuz its not very intuitive
I’ve been trying to add support to the engine for builtin shaders but
ive realized that its a super deeper problem than what i was expecting,
id honestly do something like making all the shaders be done with
something like slang and then compile them to spirv without any glsl
intermediary
PD: the video you see is a demo scene you can find at
assets/scenes/physics.scene if you wanna try it by yourself!!!
I’ve finally managed to port enough of the original engine to setup an imgui layer to have this little built-in launcher! it currently only works when using opengl, but its completely supported by both the windowing backends (glfw & sdl3) Its hard to make videos like this on a steamdeck so please like lol.
I completely restructured the new engine architecture to be a layered system, the engine holds a stack of layers and updates them independently! each layer holds stuff like OnAttach OnLateUpdate OnEvent etc, which is a much better approach compared to what we had before!
I created a completely new custom file system, as the sandbox and games use completely different files and base directories, you can now mount/dismount different “aliases” for each program, so you can find your assets easily with custom virtual paths like sandbox://settings.json or project://scenes/scene.json
Literally ported the scene/entity system right from the previous version, but it is a lot smaller currently, because the previous one wasnt really good, we now can load scenes from a file but now those get added to a scene stack, which is a lot more efficient if you wanna load them again!
Overall the project’s code quality is so much better too!!
After these bases are set im gonna be focusing on getting a full render layer working with at least opengl, even tho the vulkan renderer is already setup…
PD: Origin Zero is just the new “protoype” name i gave it, just like with when i started this project i called it Origin “Zeus” lmao
I’m sorry in advance that these and probably the next few devlogs wont have very exiting things or new and awesome information but sometimes you gotta focus on boring structural stuff that its just not really fun…
The engine is now very dependent on the sandbox editor, sort of like a symbiotic relationship between the sandbox and your code editor, because thats where you will not only handle your assets but also play the game. The previous version just had the sandbox to be a tiny map editor tool that not even i would use half of the time
The project (also called environment) then would have its own “environment” literally where all your assets would be included, with very little naming restrictions, this would make working on the project super easy and itd be easy too to use git with it (maybe build a builtin git UI??? it could be cool)
I’ve already built the base for it and I’ve already added support for ImGui only for the OpenGL backend, i was thinking of adding a different UI system but this one will do for now :))
I’m building a huge update for the origin engine! it might even be considered a new engine all together. The same philosophy is still there but I’m re-writting and refactoring the base structure of the whole engine. For now this refactor is close source tho, ill publish it once its ready for ship!
I have the structure already though:
A new project-based system where all the shader compilation and asset handling is done for each project, this + a simple abstraction layer should allow the sandbox to be a hugely more important tool as you will be able to play your game right in the editor!
Compile time switch between SDL3 or GLFW for windowing, input is not yet “ported” if you consider it that way
Runtime api switching between OpenGL, Vulkan and DirectX3D 11. even tho for now i have a super basic abstraction layer and only opengl is even able to initialize so….. maybe too hard i hope i manage to do it tho
, was thinking of doing a similar thing for switching between physics engines like bullet3, physicsX or Box3D, this is very much in the future of course
Project export/ editor previews
This is a major step and im learning a lot!! but its very difficult to handle new stuff like vulkan with other new c++ architectural stuff, hope it goes well
Another update to the best game engine there is that starts with the letter “O”
(i think). Today’s devlog is small, bust most likely will be start of a new series of very much needed updates to the engine!. It’s important to note that most of the things ive been working on are not yet finished :((
New things that are completely finished:
Fix the sandbox UI, it was missing imgui flags from previous bug fixes i had to do because the docking branch of imgui was broken, they fixed it so i just rolled back!
Cleaned up the rendering class, specially important for the new updates im working on, because im gonna need to do a hell lot of abstraction!
Im taking the current base of the engine to make a new “modular” system just for the love of the game, the most basic thing ive done is to allow the user to choose between SDL3 or GLFW for windowing, although input is currently only handled with SDL3 regardless….
There’s a lot of exiting stuff coming SOON^(TM), hope you like them!! (vulkan?, probably not lmfao)
PD: yes! this is the origin engine running nicely in a steamdeck!!!
Yippi
another round of improvements to the best and certainty not over engineered game engine out there! Out of all the things ive been working on with the engine ive only really finished one, but it was rather a big change tho
I’ve added a new action-based input system that handles by itself connected devices (because we now support gamepads!!!
), input modes and preferences, keybinds and settings all in one simple system
The new system instead of reading “raw” input from SDL3 now instead has a wrapper that sets all input to “actions”. All actions have assigned a certain key/button/axis etc…
It allows you to use keyboard/mouse and gamepad all at the same time
Games can now have support for handheld devices like your steamdeck!
This is still work in progress!! The engine itself supports the compiled GLSL files very quickly but the problem is to get those shaders to compile in the first place
The shader class gets the relative path for the shader, before actually compiling it, it checks if theres a file with the same name but that ends with “.spv”, in that case it uses that one
Right now theres not an easy utility script that will handle compilation for you, that needs to be done next!!
Very early and of course WIP, I still haven’t done much but i have a pretty good idea of how this will work: You bake the local position of all the vertex of a terrain model and then, when you require it, you get all the triangles close to the player in real time (with a basic “chunked” system), then Bullet3 generates that mesh collider rather quickly as the mesh is not so big (this will probably require multi-threading
). More on this on the next devlog
PD: This picture is from my other project that you should check out! It showcases the new terrain system (WIP)
I’ve been adding some quality of life changes that make working with this engine a lot easier, which means more abstraction in some cases which is not always the best but whatever. Ive also worked very hard on fixing and improving the physics (even considered porting it to now use Box3D instead of Bullet3, but that will probably happen in the far future, and Bullet3 will be kept as a fallback)
Added the ParentEntityComponent, a very simple work around for the lack of parent-child entities on my engine, this will probably be deprecated sooner or later but its a decent solution instead of doing all the work all at once
Added GetRefreshRate to window class, so for example, your game can set the target fps based on this
Fixed a super hard to find bug where models vertex and physics-engine vertex would have shifter coords and would make the objects act weird on real time, this is such a huge change, it makes physics really good to play with, see the video!!
Added functions to apply force, impulse and torque to a dynamic rigidbody
Added the teleport function for kinematic rigidbodies
Added getLinearVelocity and getAngularVelocity
Added options to freeze rotation on independent axis
HUGE: allow the engine to support different physics worlds to live in one same game in real time! this needs some work tho, not featured in the video
PD: This is getting super nice but also growing in complexity, once i finish with my game i will surely start improving the overall structure and start thinking about more serious changes, maybe another graphics api????
Yippie!
another update to the engine powering my game, i’ve added quite a lot of things but also managed to clean up some dead code in the way. The most excinting new thing is probably the new postprocessing layer system!
Postprocessing layer: you can now code different vertex & fragment shaders that drawn on top of the main buffer, you can stack as many as youd like in order to create many new cool effects
spent hours trying to fix the sandbox editor’s rendering being completely broken, took about 3-4 days lol
added new getters to camera like a directly inversed view matrix or setMat4() and setTexture() functions with shaders
add localToWorld() and worldToLocal() to the transform class
fixed specular lighting leaking to some dark areas
fix handle untextured materials in model import
added a built-in user settings save/load system based on json serialization
refactor a part of the audio system to now have built-in fade ins/out, volume control and async background music
The biggest change coming up would probably be to develop a dynamic rendering system that allows me to use different cameras rendering at the same time, as I’ll probably need it for JSP
PD: this engine is being used for my current main project (almost 100 hours!), please check it out! JSP: https://stardance.hackclub.com/projects/14066
This is my custom engine that im using for my other big project, the Janitor Space Program (go check it out!: https://stardance.hackclub.com/projects/14066), most of these changes come from having to create or update an engine feature so that the game im building is easier and faster to develop, and in the meantime im also upgrading this engine to something more powerful and mature, although i feel like im making it also a bit more complex or spaghetti, ill work on that later
over this last 2 weeks ive added so many features like:
lookAt() method to the camera componentLateLoop(), which obviously happens after Loop() and its mainly used for UI and stuffsetTargetFps() so that gpu doesnt work to 100% if vsync is disabledassets/shaders/builtin
This was fun but if they gave me an euro for every seg fault ive endured elon musk would be small next to me. i love to see how this small side project i started long ago is now something a lot bigger than i expected, this literally started as a learnopengl tutorial :))