Tiny game #7: Ascent – my first game jam!

This is my submission for the GameDev.tv 2022 10-day Game Jam – first game jam ever. It’s been intense, but totally worth it!

You can download a Windows executable (and the Unity source code, if you’re interested) at the above link, or play the game in your web browser by clicking on the image below:

click on the image to open the game in a new window – webgl-enabled browser required!

The theme for the game jam was “Death is just the beginning”. I’ve always been fascinated about the great circle of life – how life began from nothing, and evolves in a constant cycle of reproduction and decay, where the deceased provide the raw materials for the next generation of life. Struggle for survival and pressure to evolve.

So, huge concept, and almost no time – an ideal combination 😀

The major challenge (and charm) in doing these “game thumbnails” is to find a way to boil your highflying ideas down to a workable solution. Narrow the scope to a central mechanic that expresses the idea. And don’t forget it should be fun to play!

Game mechanics

What I came up with is a game about evolving a tiny deep sea creature, to eventually reach the surface and leave the ocean behind. It’s meant to be a rather chill experience, so the game play is not too tough. I had to throw away most of the ideas popping into my head all the time, but the major elements of the concept are there:

  • Your creature starts as a baby on a primitive level, feeding on the plankton floating around. It’s vulnerable at this stage, likely to get eaten by bigger fish.
  • Once grown up, go look for a mate! The only phase of the game where there’s some time pressure.
  • To produce offspring, the player needs to collect biomaterials left behind by deceased sea creatures. These get more complex as evolution progresses.
  • The baby becomes the new incarnation of the player, slightly more evolved, and the cycle continues.

I had this idea about a “spark of life” or “soul” that exists independently of the body. That made it into the game as a sort of failsafe:

  • When the player creature dies (gets eaten, for instance), you enter a “netherworld”, where your spirit needs to find a new suitable body.
  • Only baby creatures of your own species are suitable. Find one and the game continues, the only penalty being thrown back one evolution level.
  • Touching any other adult creature in that state means “Game Over”. The only way you can truly die in this game.

Lessons learned

These mechanics are still pretty complex, and not anything players will be familiar with from the get go. So, the major problem turned out to be how to communicate what’s going on to the player. All the required sprites and animations would have broken my back for sure – so in the end I had to resort to text messages explaining some things to the user. That actually worked out ok, and I ended up with “only” around 50 handdrawn sprites.

The scope of the game felt just right coding-wise: Develop the concept at speed, disregarding a lot of production code best practices, just to make it work in time. Knowing the code is discardable anyway made this a very relaxing and fun experience (of course, there was still cursing and pulling of hair).

Prototyping the prototype: I spent the first 2 days just thinking and making notes on paper. The first implementation used squares and circles as sprites, no animations. That approach really paid off, and saved a lot of time, even when the final result is still just a prototype.

This was the first game where I was able to add sound! Had to resort to free assets available on the internet, but it adds so much. Learned a lot about how to do sound mixing in Unity.

So what?

All things considered, I’m pretty happy with the result. Just exploring the concept conjured up a vision of “the real game”, which would be at least 10x larger, involve majestic underwater visuals, tons of cool creatures, more challenges, etc. This could look fantastic in Unreal Engine, with partly procedurally generated 3D creatures, lighting effects, and so on. There’s a project!

Also, I’m absolutely planning to participate in more game jams. It’s intense and exhausting, but a priceless experience. And who knows, someday there might be real commercial game coming out of one of these.

Tiny game #6: Bones

A tiny edutainment game, inspired by the “find & click” prompt from the list of prompts from an RMIT Games class. Learn about the human skeleton!

click on the image to open the game in a new window – webgl-enabled browser required!

This took a lot longer than expected – I jumped at the opportunity to 3D model a basic human skeleton in Blender (it’s rough, but still anatomically correct), and went a little further than strictly necessary with designing the 3D environment as well.

Also, even though this is a simple game, the interaction handling proved really complex. Very limited use of physics simulation (otherwise, there’s bones flying about everywhere), defining and dealing with attachment points on the skeleton, user feedback (the talking skull, color markers, colored bones), auto-aligning a bone when the user picks it up, etc. The devil’s in the detail!

On a side note, I went almost insane about MeshColliders with WebGL again. Only by chance, after hours of frustration, I discovered I had to check “read/write” in the import settings of the skeleton model. Otherwise, the MeshColliders in the WebGL build simply wouldn’t collide. Everything was running just fine in the editor, of course.

Pocket Observatory at Make Munich

Pocket Observatory at Make Munich! Slipped in at the very last minute, and probably had the tiniest desk in the hall. But the response was great, I am still totally overwhelmed by the positive response and all the enthusiasm. A huge THANK YOU to everyone who came over to check out the app on Gear VR! Nice people, great conversations, useful feedback, and even more ideas for future development. After two days working the desk non-stop (together with my wonderful GF) I feel a little spent but very inspired 🙂

Pocket Observatory released for Gear VR

On 3/16, Pocket Observatory has been released to the Oculus App Store for Gear VR! It has taken a lot longer than expected, but in the end, the additional iterations and feedback have improved the product tremendously. Of course, this is only version 1 – there are tons of additions on my list already, and I am open to suggestions 🙂

Here’s a link to the product page in the store.

Venturing into social VR with Pocket Observatory!

The past few weeks I’ve been working away on a really exciting feature for the upcoming Gear VR version of Pocket Observatory: You will be able to invite a friend (on the Oculus platform) and start a voice chat beneath the stars! GPS coordinates are exchanged between the app instances, so players can visit each other’s GPS locations. This is currently under review, and will hopefully be up in a few weeks in the Oculus Store.

To my knowledge, this is the very first social VR astronomy app ever! I’ve been thinking about this for quite a while during initial development, but didn’t realize how easy it would be to integrate using the Oculus platform SDK. Mind you, setting up peer-to-peer networking can still be nerve-wrecking, given the unreliable nature of network communication, but still… managed to pull this off in just a few weeks. Happy!

Check out the updated page at https://pocketobservatory.com for the details. Here’s a screenshot of the chat UI: (thinking about avatars and a shared space experience, too, but that’s for later.)

Educational VR molecules

Now that I’ve gained some experience with Virtual Reality and my astronomy app, I’m thinking educational software for VR could be a worthwhile field for future projects. So I’ve started tossing ideas about, one of which involves playing with molecules in a VR environment.

Aspirin molecule

Pocket Observatory for Google Cardboard

Just finished and submitted the iPhone / Google Cardboard version of Pocket Observatory! It really paid off to use Unity – porting from Android with the Oculus SDK to iPhone with GoogleVR turned out to be really easy.

Here are the quirks I encountered, might be useful to know if you’re embarking on a similar project:

  • In Gear VR, system messages (e.g., asking for permissions) are displayed properly and can be confirmed while you’re in VR. On the iPhone, a standard system dialog pops up. To deal with location service permissions, I trigger the message from within a special startup scene, before entering VR mode in the main scene.
  • Texture compression support has to be adjusted with the platform. On the iPhone, compression defaults to PVRTC, which requires square textures. The Unity importer stretches non-square textures to make them  compressible with PVRTC. This results in awful artifacts, so I had to go over the compressions options for all of my (non-square) textures.
  • Make sure the text for camera use permission is set in the iOS player settings – in GoogleVR, there is a UI button to allow the user to switch viewers. This will activate the phone’s camera in order to scan the QR code on the viewer. Not setting the text will result in an app crash.
  • Unfortunately, the Cardboard app doesn’t run in the simulator – there is no suitable architecture of the gvr library, so the app crashes at startup. I guess it would be possible to build the library from source, but haven’t tried that yet.

Visit https://pocketobservatory.com for details regarding app features and release plans!

Pocket Observatory: Finalizing!

Yes, I have decided on a name for my upcoming Gear VR astronomy app: Tadaa – Pocket Observatory! Seems it is getting to a decent stage… it’s hard to stop adding features when new ideas pop up every five minutes, but this all has to wait for future releases. Now, it’s all about polishing and optimizing!

I found a really, really helpful guide to optimizing Gear VR apps on the Oculus developer blog: https://developer3.oculus.com/blog/squeezing-performance-out-of-your-unity-gear-vr-game/. This certainly saved me a few headaches.

Here’s a very first video impression of the app: https://youtu.be/G4tHM2v0NyY I was actually wondering how I could do a video such as this, but it turned out to be super easy: Integrate the platform menu provided with the OVR toolkit, and the function is available in the platform menu by pressing the back button 🙂

The sun, the stars, the sky

Slowly, but steadily, it’s coming together. Since my upcoming stargazing app is also featuring a nice landscape and daylight, I am currently spending quite some time adjusting lighting and the complexity of the scene. After all, this has to run with a steady 60 fps on the Galaxy S6 with the Gear VR headset.

Mind you, the scene is not complex by today’s standards, but hey, this is still a phone!

Still loads of stand-in textures and placeholder objects, but getting there…