2D... Why Not 3D

I show off my 2D game engine, it handles both side scrolling and top down representation for maps and Tiled2D for editing them. Then I decide to make a 3D game engine, because why not?

May 2nd - 2D Side Scroller Engine


I’ve been focusing on revamping the 2D game engine. I ported the Side-Scroller engine over and rewrote the game launcher concept. Now all 2D games will be loaded from the game launcher built into the OS - but it’s properly configured for the OS directly rather than being a standalone game launcher concept that runs in Windows.

This means to port the games in the future, I will need to bundle them with a headless or minimalized version of the game launcher OS-specific API that contains the saving and loading mechanisms.

No other APIs will be needed beyond maybe GPI support which can be empty for the blank API if I ever need to port these games as standalone…

LD8hFwJgB7 1 Some assets used are not created by me, and will not be in the final game, this is developer footage only

May 4th - Scope Minimizing


I’m thinking of minimizing the scope of this project to be two games instead of multiples. I think between the two, plus maybe a handful of minigame style games, that will be more than enough to handle the narrative, plus juggling the open world gameplay concepts I’ve been mulling over.

Obviously, they need to be similar enough but still different so I’ve come up with the perfect plan. Legend of Zelda style 2d top-down dungeon crawler, similar to The Binding of Issac. And of course the classic Super Mario World style 2d side scroller with physics.

The scope being smaller and more manageable means I can focus my efforts on everything being specifically written for this project. I’m going to merge the 2D API so it’s running fully within the OS environment as a dependency. Previously they both were entirely independent, but I want to make development easier and cut-through any abstraction layers I’ve previously written. I do not want to be limited in how I can communicate between the game layer and the OS layer itself.

With that being said, the Top-Down game is working pretty well. The port is essentially where it was minus clipping which would be nice to get working. The Side Scroller game I’m still working on even getting the map loaded in. Luckily we have a physics engine written so I can plug that in once I get clipping ported over again.

I’m also not using any asset embedding currently. I’ve written it in a way where I can turn it on but I’ve decided to keep it simple for now and bypass loading from the compiled asset cache as I don’t really like how it’s written. Packing everything into one file is just not as fast as I thought it would be compared to letting the file system manage these things. Another thing I’m going to consider is modability. Having everything packed into a custom format would just limit what is possible, until community made tools were available. This goes against the spirit of this project.

If I pair the tiled map editor attribute system with Lua I would be able to let maps have way points that load other maps entirely, such as houses, new locations, etc. That would be nice.

Here’s the progress so far, both games are running fine side by side.

Some assets used are not created by me, and will not be in the final game, this is developer footage only

May 5th - 2D Animations


I’ve been porting over the animation system from an old 2D fighting project I had started but never finished, the inspiration for it was super smash bros, but the NDS homebrew versions. The animation engine ported over really nicely - in the same state I had previously - The animations are working perfectly. Which isn’t saying much as they are just 2D sprite sheets, but still. Glad to have it working.

Currently the engine supports tiled map editor for the game world. You can freely zoom in and out of the main world like it’s a map. This feature is probably not going to make it to release, but I’ll enable it for the maps.

The next step is fixing physics, as it sucks. Then introducing some basic map for the first initial zone.

There is no NPC AI, or smart objects yet such as spawn in points, win condition zones, zones that load to specific areas, etc. But the idea I have is I can configure those within Tiled Map Editor attributes and have them as specific keywords. Like one can be a door to load a new map for example. So we can have maps that load between each other, bypassing the main overworld selection.

Some assets used are not created by me, and will not be in the final game, this is developer footage only

May 24th - What’s Fun & Offscreen GPU


The concept of what’s fun to me varies a lot, but these days I really appreciate a good 3D game. Something about walking around in a world that you are exploring in real-time is exciting to me. Having interactions, in first person, or even third person, feels a lot more engaging to me than a 2D interaction does. Since I started the 2D games concept, I felt like something was missing…

I had a thought earlier today - what if there was a 3D game, but it rendered everything off-screen. Utilizing the GPU to display it, capturing this data as an image, and then display it inside of the OS.

After some trial and error, I came up with a prototype, and it works. Flawlessly. And it has the added benefit of working in both the OS GPU renderer and the software renderer.

There are a lot of unfixable (wont fix) issues with the OS GPU renderer implementation. It’s taken this long to get where it is and I fix it when I can, but I have to dedicate the majority of my development time on new concepts.

There are a lot of positives to swapping to a full 3D game. Currently the 2D games are software rendered, not a major issue, as we could just make the 2D games render on the GPU now. But they were not designed for that, so it would be starting from the beginning, as now we can use proper technology such as shaders. This opens up everything to entirely new possibilities. Keep in mind though, the scope was originally meant to be small.

My thought is halving the work again, instead of two 2D games, or even one. I make a single 3D game. I can still make a handful of smaller 2D games, but my idea is to focus on one singular 3D game.

And also, in my gut I felt 2D wasn’t right. I tried a bunch of times to get it right, but I couldn’t shake the fun you get from playing a well made 3D game.

May 25th - 3D Editor


3D Editor, Drag N Drop Functionality, Scene With Tree Graph. These are the features I’m trying to throw together on a Saturday night. From scratch completely off scope…An entire editor? Yes. Models and Images can be imported directly, but the map, NPC initial locations, starting zones, collision zone regions, etc. All of these will be much easier with some kind of graphical editor and I figure the best way for that would be within the engine itself.

We would have two game entry points, one for the editor to load the scene, and one to play the scene. The engine can include both and we just opt out of one being usable during regular gameplay.

Obviously a lot will have to be changed for release (assets will need to be packed and I’m not planning on supporting a way for users to use this tool currently) but the concept should work if I wanted it to be used by other devs, or by users in the future for some god for saken reason. There is no dynamic programming and there never will be, it’s going to be purely hardcoded re-action thing. But we’ll see how far it goes.

x5dPiMQZsS

Some assets used are not created by me, and will not be in the final game, this is developer footage only

May 28th - SM64


I’ve been playing with the 3D engine but 30 FPS is trash. On a larger screen it will be even worse.

I’m truly debating removing the option to use the OS GPU render full time, and leaving it in for cinematic events only. I think this will be a great middle ground to solve the performance issues I’m encountering. I also think people would turn the effect off eventually, if it was on the ENTIRE time.

With that being said, there are some major issues with the CPU render, now that the GPU isn’t forcing a screen refresh I’m experiencing weird refresh issues with random parts of the screen just refusing to update. Very annoying.

One example is closing an application the damn ‘hover’ bar still show up on the last like 4 pixels of the very bottom of the UI.

os-bug - Annoying!

Some positive news, progress with the 3D engine has been going so well, that I’ve been thinking of how I could implement the technology in other ways. I’ve had plans for a dynamic wallpaper system for ages, maybe I could render the desktop wallpaper using it - some kind of live 3D experience directly on the desktop. I’ll explore this at a later date, but it’s on my mind.

I can drag an asset in - it copies it to my data folder. Then it displays it in the asset viewer. From here I can drag the asset from the viewer into any scene I have loaded in. Then I can position the assets within the 3d world space. And preview physics / basic walking by switching from editor mode to gameplay mode.

sm64 Some assets used are not created by me, and will not be in the final game, this is developer footage only

As you can see, the editor works quite similar to a modern game engine, I’m doing my best to keep things simple, while still focusing on the core components. Positioning, rotation & scale are added. Unique scene object tagging is done. Assets that are in the scene are loaded on demand as needed. The idea is I can build up a 3D scene and use the editor to build and test the map / game.

As it stands I’m only going to be making one game with this engine, but it’s written in a way where it’s reactive to everything. So beyond global settings (gravity etc) the whole engine could power other games in the future. But I have absolutely no plans for anything else right now, as I want to make a 3d horror game with this.

If you have been able to tell by the name, SM64 refers to Super Mario 64. My loose goal is to create a low poly game that feels and works similar to Super Mario 64. Starting with the overworld being a 3d castle with paintings that then load other scenes (levels) that need to be completed by doing re-active gameplay (obtain objects thru platforming puzzles, go to X,Y,Z and kill boss, etc)

This means the majority of the game will be made thru the editor. Maybe I can build some kind of packaging system where the assets are packed into the scene itself. So users could share custom levels with custom assets just by sharing the scene - how would it be loaded though? No idea.

May 30th - Game Development


2nd last day of the month and the progress feels like I’m finally getting to build the game mechanics part of the game.

I’ve been focusing on the story a lot lately, this year is my first time writing thought provoking scripts. Normally I write comedy. I think I’m a better at being funny than I am at being a serious writer, but I’m trying hard. We’ll find out if it’s scary enough.

It’s been really awesome being able to get this game engine made. I’ve had a vision in my head since January in 2024 about a 3D Game Engine. Like Unity I drag my assets in, then I can drag them into the scene and move them in the 3D world. The game engine would handle everything for you.

I’ve decided if I’m going to make a 3D game, I need to have a 3D map editor, and I might as well just make the rendering engine the game engine, and re-use the game engine as the renderer the players use.

This means players could have the benefit of editing maps, but that’s not my entire goal. My goal is to make a simple editor that in which I can create fun, low poly games. I’m going to follow how Unity handles everything in a Scene, these scenes can be loaded in as prefabs, or they can be directly loaded as the next level you play. Lots of the ideas behind this engine are heavily inspired by Unity and Godot.

I’ve decided that due to the way the 3D game engine works, high frame rate is important. This means I’ve shelved the option to toggle the OS GPU Renderer. It still exists in the code as a way for cinematic scenes to be displayed, but I’m no longer including the user option to enable it all the time. (Technically you can pass -forcegpu on startup, and it will still work, but you didn’t hear that from me)

In other news, camera objects are fully functional and can be added into the scene as needed. 2D UI is handled through a new Camera being added in the 3D world space, and then it will render whatever it sees in of the 3D world space (You can assign objects to cameras). To me, it makes working with 2D in 3D painless, and they blend seamlessly with this technique.

May 31st - Month End Summary


410 Completed Tasks


I’m also no longer tracking my stuff on the project as well as I should be as I’m focused more on trying to make progress in the moment with what makes sense / what is fun. It’s an experimental stage that I haven’t planned for, so I’m just embracing it and testing things out.