May 2019 Update - Big Announcement

So I have a big announcement to make, skipifzero is now a “real” job for me. At least partially. I still work most of my time at my current “real job” (which brings in the money), but I now spend two days (plus weekends) working at skipifzero (which unfortunately does not yet bring in the money).

Does this mean I’m a professional indie gamedev now? Or do I have to actually ship something before it counts? I don’t know, but it is exciting nevertheless!

Truth to be told, this is more of a trial thing. I’m trying to find out whether I can get enough work done in 2 days a week to get some real progress done. I’m also trying to find out if working like this could be long-term sustainable economically (but that’s more of a personal thing that I’m not really going to talk about in this blog). All in all this trial will continue for at least a couple of months, but potentially longer than that (maybe permanently?) if everything clicks.

So this is nice and all, but what does it mean for you, the reader? Well, first up I have decided to try to document my journey with regular updates on this blog. More specifically, I’m going to be posting a progress update each month (this being the first). I’m also going to be posting more in-depth posts (similar to my previous ones) whenever I have something interesting to cover. Further into development I plan to post some public demos you can try out yourself!

I’m also going to attempt to post smaller updates on my Twitter, so please follow me there if you are interested! I will of course be linking new blog posts once they’re available there as well, so it is a convenient way of keeping up with the blog.

Projects

I currently have three main projects I’m working on which I will cover in these monthly updates. These projects are:

The most important of these projects is of course the game project, which is the end product after all. But this does not mean the other ones are not important. If you know me or have read my blog previously, you should know I’m fairly specialized in low-level programming and computer graphics. Using your own engine is not the most productive thing to do, but hopefully I should achieve some benefits in the long run that are hard to accomplish with conventional engines. But mostly I do it because it is fun and I want to.

Project Apocatropics (working title)

First up, let me summarize the current state of Project Apocatropics:

As you can probably tell, it is very early in development. It is not quite as bad as it looks, Phantasy Engine currently requires a lot of boilerplate and such for each project. Most current work has been on architectural stuff and is not really visible when looking at the current output. This will change soon.

What is it?

But this is the announcement of the game, so let me start over. What is Project Apocatropics? Project Apocatropics is an action-RPG with Legend of Zelda style dungeons and overworld exploration set in a (global-warming induced) post-post-apocalyptic world among the remaining islands on a vast, desolate, sea.

When I say RPG I place the emphasis on role-playing parts. In fact, it might be a misnomer to call it an RPG at all. Maybe “adventure” is the correct genre, I dunno. Essentially there will be a lot of story and dialogue. Maybe some branching dialogue, but probably not an extensive amount and it will probably not affect the overall story that much. There will not be any (visible) stats, no level-ups, etc. The only form of improvement to the character will be in form of upgrades (think Zelda or Metroid style upgrades) acquired through exploration and adventuring.

The main gameplay will consist of exploring the various islands on the vast sea. For the most part, each island will be a self-contained adventure with its own mostly self-contained story. Many of them will have Zelda-style dungeons filled with puzzles and combat. Others will have other forms of gameplay.

The name

Project Apocatropics is the current working title for the game. It is a concatenation of apocalypse and tropics. It is a pretty bad name, so I’m trying to come up with a better one. The problem is that there are a million names related to the sea and such already, so no matter what I come up with it sounds super cliche.

Setting

Making a story-heavy game is somewhat frightening for me. I have a very vivid fantasy, as a child I often got lost in my own mind. I would explore fantasy worlds I made up for hours in a row. I still do that sometimes, but not as often anymore (being an adult sucks). Thing is, I have not really attempted writing in any serious manner. It might turn out I’m really bad at it. But no matter how it turns out, it will at the very least be fun to make an attempt.

The game takes place on Earth (kinda, some some alternate history from world war 2 and forward), 300-600 years in the future. Sometime in the distant past (about our time) the polar ice-caps melted and most land was drowned under the sea. This event is known by many names throughout the sea, but the most common is just “the apocalypse”.

It is not known exactly what caused the apocalypse. Man-made global warming definitely played a part. But the fact that world war 3 broke out just a mere weeks before the apocalypse promptly ended it muddies the water. Was there some other cause? Some unknown doomsday weapon from some of the factions involved in the war?

Regardless, the facts regarding the apocalypse no longer matters. The world was destroyed, and then rebuilt atop the islands which were previously mountains. The people adapted and created new societies. There is no living person who still remembers or misses the world as it was before the apocalypse… or is there?

Inspiration

There is that famous Picasso (and then later Steve Jobs) quote: “Good artists copy; great artists steal”. The setting, plot and gameplay of the game is heavily inspired by a number of other works of media I have consumed during the years. I will of course try to bring my own contribution to make it something new. But I still think it’s a good idea to (at least attempt) to keep track of the inspiration. In this early stage it is also useful in order to give people an idea of what I’m trying to accomplish.

So, I’m probably going to forget a number of works. But this is my current main inspiration for the game:

Setting is far from the same, but I like a lot of the ideas. Among other things the whole mystery aspect where we (the viewer) have some idea of how it all might have started out, but the characters does not because it all took place so long ago from their perspective.

Phantasy Engine

As mentioned many times by now, Phantasy Engine is my game engine. Calling it a “game engine” might be a bit misleading, it is more like a framework for making games in. Far from all functionality expected of a modern game engine is available (or planned), the user is expected to do a lot of application specific architectural work themselves in C++.

Phantasy Engine has existed in some form or another for over 3 years now. It has been rewritten once, the original version is still available here. It actually used to have a real-time raytracer written in CUDA, probably a bit deprecated now since the new raytracing APIs are available.

The development has been a bit unfocused and the goal has changed a couple of times. But the current goal is simple. In the short term, support the development of Project Apocatropics. In the long term, allow reusable technology to be reused for the next game and make it easier to back port engine enhancements to earlier games. In other words, I don’t really expect anyone else than me to use the engine for actual projects.

Out of these, the one that sticks out the most is probably “Web”. Yep, that’s right, it is possible to compile and then run Phantasy Engine (and thus Project Apocatropics) in a web browser. It is really cool, unfortunately it is also a huge pain. I am currently in the process of evaluating whether its worth maintaining Emscripten support. It tends to break all the time, limits the architecture of the overall engine and takes a lot of time to debug and maintain.

I also know somewhere out there is a Linux user going “Hey, you support all these weird platforms! Why not Linux?”. There is a simple answer to that question, I no longer run Linux at home. I used to run Arch Linux on my main machine for a while, and I have used (and do use) Linux professionally at my “real job”. At some point I just got tired of all the tinkering, graphics drivers not working as well as on other platforms, etc. Phantasy Engine should probably compile and run fine on Linux with a small (less than half a day’s) amount of work, but I personally don’t care right now. If it turns out there are a lot of Linux users interested in the project I might re-evaluate this stance, but otherwise I’m not going to spend any effort to support Linux. You are, of course, free to fix it yourself and do a pull request. It is open source after all!

ZeroG

A long time ago in another lifetime I learned 3D programming using OpenGL. I got really good at it. Good enough to be course assistant in the computer graphics course at Chalmers. Then I moved on to CUDA and had a really good time there, excellent API. Things were good for a time, but unfortunately CUDA was limited to NVIDIA hardware, and I wanted to deploy to other things, such as macOS and iOS.

Soon Vulkan was released, and I decided to try my hand at it. The extreme verbosity and the fact that there was still no official support for macOS or iOS eventually killed my interest. I now entered the time of 3D API limbo, I no longer knew what API to use.

I decided that the most reasonable course of action was to create multiple rendering backends in my game engine and use whatever was most appropriate for each platform. This also turned out to be kind of a pain with a lot of annoying maintenance work, so I got tired of it as well. 3D API limbo continued.

I found out about bgfx, a cross-platform 3D API implemented on top of pretty much all other APIs. The idea intrigued me, had I finally found the way out of 3D API limbo? Unfortunately, it turned out bgfx was not for me. Too much legacy support and not enough support for the newest features. But an idea had been lit.

What if I made my own 3D API implemented on top of other 3D API’s? I did not need all the legacy support, I only really needed to support 3 APIs:

D3D12

Metal

(Vulkan)

And out of these 3 API’s only the first 2 are truly important for the platforms I care about. This sounded a lot more reasonable the more I thought about it. And thus ZeroG was born. I’m not going to post the complete mission statement, it is available on Github.

Out of these 3 projects I’m covering, I suspect ZeroG is the one that might be most interesting to keep track of if you are interest in computer graphics. It is completely self-contained, no external dependencies, designed to be easy to integrate into your project, etc. Unlike Phantasy Engine which is mainly developed for use by me, ZeroG is developed to be as easy to use as possible by anyone (familiar with at least basic 3D programming).

ZeroG has had a lot of work this year, and it is almost ready to enter early alpha stage. The development has currently slowed down a bit while I focus on getting Project Apocatropics started, but will likely ramp up once I start focusing on the graphics in the game.

Phantasy Engine does not yet use ZeroG, so that initial integration will be a bit of a challenge. One of the main questions is what to do about the Emscripten support. There are plans to support WebGPU with ZeroG in the future, but the catch is that WebGPU is not yet available. Should I support two rendering backends, one with OpenGL (WebGL compatible) and one with ZeroG? Should I drop the OpenGL backend and only use ZeroG, betting on the fact that WebGPU will become available soon? Should I drop Emscripten support completely and only deploy Phantasy Engine on “real” platforms?

End of the blog post

This is the end of the blog post. Like the last ones I have written, it got pretty long. Hopefully these should become more concise in the future when I can perhaps assume people have read earlier ones, or maybe I can just refer to earlier ones for details and background.

For next month I should have some actual updates on what has happened since today instead of just a huge info dump, look forward to it!