The Follow Through

I made some progress with Cannons, but I decided to pivot back to working on CarCoder until it’s ready to be released on Steam. I’m not expecting some crazy success, but I feel like it would be fun to try. I believe the game has a lot of potential, but in its current state, I don’t think anyone will buy it. My guess is the work needed to polish up this game will take more time than its original development. Here’s my punch list so far:

Game Improvements

  • Use a better car model
  • Improve sounds
  • Make cameras more realistic and add nice transitions (CRT shader?)
  • Add dialogs
  • Fix lighting and terrain textures
  • Make streets and intersections more realistic
  • Improve UI (add a way to delete single instructions)
  • Improve the pedestrians
  • Add more levels (games like angry birds have over 700, IIRC I have around 14)
  • Optimizations and beta tests

Other Work That Isn’t Game Development

  • Add SSL to this website
  • Check on any legal issues from the assets in the game
  • Apply for Steam dev license/agreement
  • Marketing!

Thanks for reading!

Cannons

Progress 1

I’ve been making an effort to post all my projects to GitHub because in the past I’ve lost a lot of work not making backups. I very much regret that I no longer have the code for:

  • A Quake 2 mod where you fight other players using the Q2 AI characters (similar to TABS)
  • The custom maps for the Q2 mod
  • A series of interactive 3D ASCII art I was making for an “installation”
  • A helicopter game I made when I was 14
  • A top-down military game like Rescue Raiders
  • A 3D wireframe game engine
  • Several raycasting engines
  • Anyway, you get the point!

Among those games, is one I started at least ten years ago that I called Cannons. It’s a mashup of Minecraft and an old DOS game called Scorched Earth (30 years old this year btw). I’m not sure, but I always liked the concept and it seemed like fun to make, so I started remaking it last night using the latest version of ThreeJS. So far, I haven’t used any of the old code but I’m hoping to somehow. The new version also uses NPM but I’m shying away from things like React for performance sake. Anyway, you can expect the next few posts here to be updates about this project. I want to add voxel-based physics to the game, but I still need to add terrain chunks and other “basic” Minecrafty biome mechanics. At the moment, it’s just one giant mesh with a single layer of blocks, and the tank is just suspended in the air at an arbitrary point to make it look like it’s on the ground. Later!

Let There Be Sound!

So, I really love playing Spellbook, but something I have always wanted to add since I originally considered building it was AI generated music; specifically, old school 8-bit video game music that matched the current mood of the story. It may be possible to take the data from this site and create new music the same way the game creates images. I have no idea how to train CLIP, but I did recently learn how to train a transformer for a work project, so hopefully I can make this happen. I’ll let you know if I make any progress. Hope I don’t break the internet.

Spellbook

My latest foray into the mysterious world of generative adversarial networks has yielded interesting results:

Don’t worry, it doesn’t make any sense when you zoom in

As illustrated (pun intended) in this post, it seemed possible to create an interactive story writer with actual graphics using GPT-3 and VQGan/CLIP, and the screen shot above proves that maybe I’m not as lazy as I thought I was. Hmm.. anyway, as a game it’s simply ahead of its time, but as an experiment it’s frickin’ cooler than dolphins with lasers. The prompts are hard coded, and as of yet I can only get it to continue the story for one or two additional prompts without devolving into madness, but it is sooo very very neat that I can just hit refresh and see a new opening passage along with a relevant image (after a few minutes of course). I can’t help but wonder how long it will be until content like becomes realistic and performant enough to replace the handmade games we have now.

VQGAN Caveats

VQGAN assumes you want “low” quality images if you don’t include “unreal engine” in your prompts. Engine bias? Example:

Prompt: Busy medieval tavern

Prompt: Busy medieval tavern unreal engine

Menu on the right.. below the name of the tavern. IINEDU? INEOU? Innuendo? Hmm..

I obviously need to increase the resolution of the images it creates as well, but the difference is obvious. Also, I noticed that while it generated this image the tavern was “built” first and then it started adding people. If you compare one of the first generated images to this one you’ll see what I mean:

Guess they haven’t opened yet

I’m going to let this prompt run its course and I’ll post in the result later. Also, I’m running this is colab and I want to see how well my new computer performs in comparison.

GPT-3 + (VQGAN+CLIP)

I’m working on another experiment using AI to generate game content. I’m attempting to use GPT-3 to create a text-based adventure game with actual graphics provided by VQGAN + CLIP. Here’s my first attempt at a “hand-made” POC adventure (original prompt stolen from AI Dungeon):

You are Jack, a wizard living in the kingdom of Larion. You have a staff and a spellbook. You finish your long journey and finally arrive at the ruin you’ve been looking for. You have come here searching for a mystical spellbook of great power called the book of essence. You look around and see several skeletons and ghosts of the dead. This is going to be dangerous. You need to find the book before you can leave, but you have to be careful, or you may end up a skeleton too.

Using another GPT-3 prompt I wrote to extract the setting from the text above, I got this:

An enchanted ruin in the kingdom of Larion

I then fed that into a Colab notebook which, after a few minutes, generated this:

An enchanted ruin in the kingdom of Larion
An enchanted ruin in the kingdom of Larion

Let’s see if we can keep this up. I need to tell GPT-3 what I’m going to do next. In order to keep generating the main storyline, the perspective has to be reversed, so in order to say something like:

I explore the ruins looking for a library.

Instead, you say:

You explore the ruins looking for a library.

Here’s the next sequence from GPT-3:

Suddenly, a ghost appears. It says, “I am the ghost of the old wizard and I will not let you pass. I will stop you with my magic.”

Now, we need to see what my setting extraction prompt does with this:

The ruins of a wizard’s tower in the kingdom of Larion.

Not exactly what we wanted… I need to somehow rewrite my prompt so that it favors the latest actions of the players. After some experimentation, I got this:

A wizard searching for a magical spellbook in a ruined ruin called the Book of Essence.

This would have been a better prompt to use when we generated the first image, but what we want is a simple summary of what just happened in our story, so something like:

The ghost of the old wizard appearing in an enchanted ruin in the kingdom of Larion.

I was able to get GPT-3 to focus on the current events in the story by simply providing it with examples of this in the setting extraction prompt, and I managed to generate this:

A ghost appearing to a wizard in a kingdom of Larion.

That’s more like it, and although it does not include the true setting, which in this case should be a ruin in the kingdom of Larion, we now have a better idea of the type of prompt we need to do this. Here’s the result from the image generator using the new prompt from GPT-3:

A ghost appearing to a wizard in a kingdom of Larion.
Ohh-kayyy. I don’t know whether to quit now or hang this on the fridge. Wow. And please ignore the ghost king in the foreground.

Despite the third-grader aesthetic, the novelty is undeniable. Both of these images seem relevant enough to the story to make me think that this experiment could be made into an actual game. Given that the sequence above was generated manually, my plan now is to attempt to automate this process and see where I can take it, but, unless you like waiting 10 minutes for each frame of gameplay to be generated, it won’t be featured on Steam any time soon. 😉

Quick Update

Added some terrain:

Also, a new discriminator that attempts to judge the traversable area with a generated structure but doesn’t really work. The generator cares not for the terrain so I’ve basically placed the structure itself in the world by hand. I’m still trying to figure out how to give the generator some terrenity.

The next steps are adding openings (windows/doors) to the generation schema and then I want to use a pathfinding algorithm to favor structures with proper doors and windows.