Jul 31, 2022 - Why I gave up on Nim

Comments

For a number of years, I’ve been looking for a great new programming language to make games with. When I came across nim, it felt like a breath of fresh air and my search seemed to be over. However, after trying it for a month or so, I have sadly concluded that it’s not the right language for me.

Disclaimer

Nim is a great language, in fact out of the languages that have come onto the scene in the last decade or so, nim is one of the more promising. This is not meant as a critique of the language overall, only that in its current state, and for my purposes, it is not the right choice.

Read more

Mar 23, 2022 - How may sprites do different perspectives need?

Comments

I love 2D sprite-based games; they are easy to read and a great way to showcase beautiful art and character designs. A major downside is that drawing each sprite is a significant amount of work, and it can grow exponentially depending on the game perspective!

Choosing the right game perspective has a big impact on your game’s art budget. Here’s a rundown of different 2D game perspectives and how many different sprites you need to budget for.

Summary

Perspective Sprites Needed Genres Examples
Top-down (vertical) 1x action, arcade, puzzle, vertical scrollers Galaxian Centipede GTA 2
Side view 1-1.5x beat-em-up, fighting, infinite runner, metroidvania, platformer, run-and-gun, side-scrolling Knytt Mighty Final Fight Flashback
Isometric (4 directions) 2-2.5x business simulation, turn based strategy, turn based tactics Super Mario RPG Theme Hospital Tactics Ogre
Oblique 3-3.5x action RPG, overhead shooter, RPG, RTS Seiken Densetsu 3 Z Zelda Four Swords
8-directional 5-5.5x 8-directional shooter, real time tactics Gauntlet 2 Super Contra Syndicate
Read more

Jan 22, 2022 - RPG Game Loops

Comments

Role playing games come in many different flavours but the game loop is a common element in all of them. Whether the game is combat oriented, or it focuses on stats and progression, exploration, or story telling, almost all RPGs follow this simple loop:

rpg loop

The terms and mechanics may differ between games but the loop is the same. The dungeon may not be a literal dungeon, but a forest, ruins or wilderness.

What’s interesting is how different RPGs use mechanics to compel players through this loop. Let’s look at a few classic mechanics:

Quests ❗️

There wouldn’t be much of a game if there’s no reason to enter the dungeon where you can get killed. Most RPGs have a main quest, the call to adventure that compels the player to venture forth.

yendor

But RPGs, especially Western ones, have lots of side quests, big and small, which give players a more immediate reason for fighting. They could be as mundane as killing 20 rats, or as involved as pulling off a heist.

the ultimate heist

In Oblivion, The Ultimate Heist is a 7-part quest that involves stealing a unique item from the most heavily guarded location in the game.

Read more

Jun 30, 2021 - How to Finish Your Jam Games

Comments

…on time, every time.

I’ve been game jamming for many years, from physical jams like Global Game Jam and online ones like Ludum Dare, as a solo jammer and in teams, using lots of different engines and tools. Some games did really well, others not so much, but most were fun, and every one was a useful learning experience.

And I’d like to share some wisdom with you!

One of the toughest challenges in game jams is how to finish on time. Everyone tells you the same advice - keep your scope small, have a plan or schedule, be flexible, use the tools you know best, take breaks and sleep - and after a few jams this advice quickly becomes experience… but somehow we keep having trouble finishing on time! Making something in such a short timeframe is really tough.

But here’s the one trick that has worked really well for me: make something you’ve already made before.

I know; that sounds wrong! Aren’t you supposed to make something new and innovative! What about the jam theme, are you just going to ignore that? Hear me out.

Read more

Feb 24, 2021 - BSP Lock and Key

Comments

I’ve been working on C-Dogs SDL lately, and one thing that often bothered me about that game is that its default random map generator provides an uneven experience. It’s exciting at the start when everything’s unexplored and there are many corridors and rooms to visit, but in the late stage when you are hunting for keys and objectives, backtracking all over the map, it can be quite tedious.

C-Dogs’s map generator is quite configurable and produces a wide variety of maps, but at its core it’s pretty simple:

  • Start with an open area
  • Randomly place rooms around the place
  • Randomly lock some rooms, and place keys in the rooms

C-Dogs map

The lock-and-key system is in series: the yellow key is in an unlocked room, the green key is in a room locked with the yellow key, the blue key is in a room locked with the green key and so on. Here’s a tree to illustrate this simple structure:

C-Dogs map graph

Because the keys (and objectives) could be in any one of several randomly placed rooms, you may need to criss-cross the map many times to collect them all. That’s a lot of backtracking! Another issue is the structure - rooms are isolated from each other, all leading outside. This gives all maps a similar feel. What if there were a map generator that could:

  • Provide a more interesting structure
  • Feel more like an indoors experience, like a building interior or dungeon?

I was first inspired by sauer2, maker of many C-Dogs SDL custom campaigns, which often take place indoors. These have cool features like:

  • Corridors linking many rooms
  • Rooms connected directly to each other
  • Locks separating entire sections of the map at a time
  • Branching pathways
  • Minimal required backtracking

Space Pirates map

Searching online, I came across a neat technique that uses binary space partitioning to generate a building interior. The algorithm recursively splits the area in half, placing a corridor at the split, and continues splitting (while alternating horizontal/vertical splits). Areas left unsplit are then filled with rooms. It’s a simple yet flexible technique.

BSP algo

As the structure of the map is a deeper tree, by finding a critical path that starts and ends at leaf nodes but passes through the root, we can get a fairly long main path, with shorter branches along the way. Here’s what that looks like, in my initial adaptation:

BSP interior demo

Read more