The Great Gif Exchange, Week 13

Work has been really busy, so I’ve been burnt out on working on Galavant. Thankfully, the game at work is now live, so things are much slower.

It’s very surreal to have worked on and released my first professional, actual-game-industry game. It was a console port, so we didn’t build it from the ground up. Total development time was something like nine or ten months, besides the continual post-launch maintenance. I was part of a team that started out with only three programmers inclusive, which then expanded to seven programmers at peak development.

Anyways, here’s my simple .Gif for week 13 (I skipped many weeks due to crunch at work):

This is demonstrating my new Entity Component System, which was designed to replace the Object Component System. It’s much more flexible in terms of managing memory and requires less boilerplate.

The entities in the .gif only have a single component attached to them. The component handles actor creation and movement, which at the current time just has them randomly fly around.


The Great Gif Exchange, Week 9

I’ve been crunching at work, so I haven’t gotten much done in several weeks.

More progress .gifs, mainly working on terrain:

The Great Gif Exchange, Week 7 (+SURPRISE)

Here’s my .Gif for week 7:

I got the ProceduralMeshComponent from the wiki to work. I didn’t quite figure out how to get reliable collisions (weird things where chunks spawned in the editor didn’t line up etc.).

I will have to redo my texturing scheme, because Marching Cubes doesn’t work with just UV coordinates. I’m thinking I need to use triplanar texturing, so I’m going to have to figure out how to do that.

I couldn’t for the life of me get movement to work how I wanted. I really need to drain some time into that so that I can actually have something game-y.

BONUS! World Tree Design Doc

Here’s my cut-and-pasted notes on how I am going to design the world representation for AI:

For the large scale AI, everything is in a tree. Something like this:

  • world
    • region
      • town
        • building
          • person
            • merchant
              • item
                • food
                  • bread
                    • steal
                    • buy
                    • pay 10 money
                    • trade
                • building materials
              • job
                • money
                  • get money
            • cannibalism
              • food
        • building
          • person
            • blacksmith
              • item
              • job
              • employ
            • cannibalism
              • food

Every node has difficulty associated with it, which can be relative to the agent searching the tree (e.g. thieves are open to stealing, cannibals don’t care about eating people, species tend to do things certain ways etc.).

By representing the entire problem like this, it becomes so much simpler. Just fill in all the nodes, plug in A*, build actions from path, and you’re done (obviously, this is still going to be fucking hard).

Agents could think about the future by having surplus as an additional heuristic on nodes, so they’ll buy more food than they need in order to not get hungry all the time.

Anyways, I’m super excited about this, because it breaks down the problem really well. It’ll take work, but I want to make it so that voxel data isn’t required for low LOD AI simulation. The AI would only use the tree for their position/actions. This would be huge in terms of memory and performance savings. However, converting from low LOD to high LOD when the player gets near could be difficult (e.g. if the AI “built” something in low LOD, it may not have been possible to build that thing in high LOD).

The Great Gif Exchange, Week 5

My Gif for Week 5 of the Great Game Dev Gif Exchange:

This is four separate chunks updating in real time in the editor. Their editor position determines the position of noise. This is shown when I move it slightly, showing that the (noise) world stays the same, but visual surface representation changes.

I really wanted to get chunk spawning working so that I would have an infinite/very big world, but I got stuck on Unreal’s SpawnActor function and trying to get code Autocomplete to work.

I didn’t know Gfycat limited my videos to 15 seconds until just after I made this Gif, which is why it cuts off at the end.

The Great Gif Exchange, Week 4

After two consecutive weeks of failure (no .gif), I have broken my streak.

Here’s my Game Dev Gif Exchange .gif for week 4:

In case you missed my last post, a coworker and I have challenged each other to create a .gif each week showing progress we made on our games. This is so we’re both held accountable for weeks that we slack off.

I’ve done poorly thus far, but I’m going to get better.

What the .Gif is Demonstrating

My .gif production values weren’t high because it was getting late.

You’re seeing the default Unreal character falling through two chunks of voxel terrain. They’re generated with a 2D simplex noise heightmap. He falls through because I haven’t figured out how to get collision hooked up.

Theoretically, they’re position sensitive, so where ever I put the object in the editor, the noise will be picked for that position (so if they’re the right distance away, it’ll be seamless).

I say “theoretically” because it was getting late and I didn’t have time to actually line them up and see if the right noise was being picked.

I used Marching cubes for surface extraction, which is why there are 45 degree angles instead of blocks. If I copied over the normals from PolyVox the terrain would look smooth (and if I increased the voxel resolution).

Behind the scenes, I’m linking to Galavant’s third party wrapper to get noise for the chunks. The wrapper is built by Jam and put in a static library, which Unreal then links to.