Category Archives: Game design

7dfps

7dfps 2013 : Writing a raycaster

When the first 7 day FPS challenge was launched in 2012, I remember wishing I could participate but knowing full well that I didn’t have the skill to make anything of it. I’d never done any serious 3d programming and had no experience with the asset pipeline required for a 3d project. I decided I’d learn how to use a simple 3D engine in my free time over the following year and participate next time.

Well, it’s one year later, 7DFPS is back in business, and I still have no experience in any of the above areas. I had already resigned myself to missing out again, but I happened to stumble across this article on writing a “pseudo-3d” engine such as is used in Id Software’s early games, including Doom. I decided to give it a shot. Here’s my progress for the first two days.

1

The first step is figuring out where the walls are. The above screenshot shows that not happening.

 

2

A bit of an improvement.

 

yays

Wall segments are being drawn, but in completely the wrong places.

 

omgyays

Segments are now positioned correctly. I changed the texture to a standard pink/black checkerboard for debugging, but it isn’t showing up right. In addition, the perspective is “fisheyed”, causing curved lines at the periphery of the field of view.

 

nofish

Better.

 

perfect

The elusive “perfectly textured wall” in its native environment.

 

sexyhotness

Some awesome modern art I created while trying to fix textures.

 

textures

The final result as of this writing. At this point the engine is basically done and I can get to work on some gameplay.

trigger

Slide

My OneGameAMonth entry for July is a puzzle game called Slide.

You can download the game here. The music is from the amazing General Fuzz’s album Miles Tones, which you can download for free on his website.

I’ve never made a puzzle game before, so this was a great way to broaden my horizons. It turns out that coming up with puzzles is really, really hard at first. If the systems of the game are straightforward it can be difficult coming up with problems that don’t have immediately obvious solutions, but a puzzle game with opaque mechanics is never fun to play. Eventually, the process clicked and I was coming up with puzzle ideas faster than I could open a new level in the editor (the vast majority, alas, never made it past their first iteration before being scrapped).

Since the mechanics in Slide are pretty simple (strictly speaking there are exactly three of them), designing levels was all about challenging the way the player would . It was really interesting to think about what the obvious move in a certain scenario would be, and then subvert that idea and require a move that was slightly different in order to solve it. I still remember playing Rush Hour at the age of 12 or 13 and suddenly having the realization that just because a piece could be moved all the way to the other side of the board, in some cases it was necessary to stop one square short. Most of the levels in Slide are based on this kind of approach; get the player used to behaving in a certain way, and then introduce a situation where that behavior won’t result in the desired outcome after all.

Of course, in order to be able to solve a puzzle one must first understand the systems involved. Slide’s tutorial follows my design philosophy of teaching through curiosity; when shown a screen that is empty save for an interesting or out-of-place item, the player will eventually be drawn to that item and will try to interact with it. This kind of exploratory learning is something I try to encourage in all my games, and I think it is especially suited to puzzle games.

There’s no clear point where Slide’s tutorial actually ends; after a certain point it simply stops introducing new systems. I didn’t want to communicate to the player at any time that there was no more to learn, because a puzzle game can only last as long as it is able to expand on itself in interesting ways. I had originally planned to ship the game with a minimum of 25 levels; it ended up having only 16, and I think that 16 was enough. I might come back and add some more someday, and I included the Ogmo editor project file with the release bundle in case anyone else feels like creating some of their own, but I’m satisfied with the final count. I feel that going further would have resulted in the inclusion of a bunch of levels that rehashed old mechanics and added nothing new to the experience.

When I started work on this project I had no idea what it was supposed to end up like — my entire plan consisted of the words “puzzle game” and “colored squares”. Fortunately the design seemed to flow naturally as I worked, and I’m very happy with the way it’s turned out.

If you liked the game, or if you created a level and want to share it, please let me know!

I’m an international superstar

Of all the games I’ve made so far, Hypothermia has seen the most success. I somehow managed to get reviewed by both Indie Impressions and IndieStatik shortly after release, which drove a lot of traffic to my site that I just wouldn’t have had any way of attracting otherwise. I check back on the download counter every now and then and it’s fun to see that it’s still being downloaded over six months after I released it.

Today I did a search to see if there was any coverage I had missed out on and found this:

http://www.bilibili.tv/video/av441497/

Someone from China did a Let’s Play of my game.

This is the best feeling in the world.

I know how to count to three in Chinese, and that’s about it. Watching this video was really interesting for me, because even though I didn’t understand his words I could still tell what he was feeling as each phase of the game played out; worried tension as he got close to losing, and then surprised relief as he finished the game and got the good ending. It really makes me happy that I was able to create something that someone from a totally different culture could enjoy and relate to.

When I design games I try to use as few words as possible while still conveying the story. I like my games to be accessible to as wide an audience as possible; particularly one that might not be able to speak English. Baseborn and Humphrey’s Tiny Adventure were both designed in this way, and I’m while Hypothermia’s two endings each have their fair share of text, the rest of the gameplay didn’t rely on any dialogue. Until today I’ve never had the kind of reach where this kind of accessibility mattered, but this makes it all worthwhile.

slime

Game design by necessity

I started work on a game called Gunbuilding about a week ago with the purpose of stress-testing #Punk, a C# port of Flashpunk that I’ve been developing. Nothing puts a framework through its paces like using it for a game jam, and if nothing else I ended up fixing a lot of bugs that would have inevitably bitten me later on. On the downside, though, my idea for the game changed drastically to fit inside my schedule, and I’m not thrilled with the way it came out.

If you want to play it, go here.

The first thing to go was the mechanic that gave the game its name. I created a system that assembled bullets by passing data through a set of components that could be swapped out at any time. In theory, this could have allowed for a crazy number of combinations, resulting in bullets that homed in on enemies and spawned others to ricochet around after impact. The system technically works as it is, but I didn’t have time to create more than one component for each category. I’d like to explore this type of system again in the future, though; it seemed like it had potential to be a lot of fun.

The next feature to be cut was the enemy AI. I’m pretty happy with the way my little guys hop around (the quadratic curve movement system they use was one of the first holdups I encountered), but they don’t do anything to avoid each other and always ended up clumping together into a group as they moved towards the player. As a solution (though at the time it was a joke) I made them explode when they touched each other, and then made that explosion chain to other nearby enemies. The chaining was super simple and easy to do thanks to #Punk’s extensive message broadcasting capabilities, and it turned out to be a lot more fun than the approach I had been using, so in one sense I’m glad I ran low on time to implement the rest of the game systems.

The last thing I didn’t have time for was to put any effort into graphics. Everything in the game is made up of colored squares, with the  exception of a grass tile I used for the background and a tiny image for the particle effects. I generally try to prototype with as few art assets as possible to avoid getting stuck perfecting them before any gameplay is in place. In one sense that worked out this time — I can’t imagine what else I would have had to cut had I spent all kinds of time on art early on — but I feel like shipping the game in such an incomplete state is a real shame.

Overall I’m disappointed with the way the game turned out, but this was never about the game. I’m pleased with the number of bugs I was able to fix in the framework, and that was the whole point anyway, so I’d call this experiment a success.

Ludum Dare 26 theme brainstorming: Round 1

I’m probably not going to be able to take part in Ludum Dare this time around, but I always like voting for the themes anyway. I thought it would be a good exercise to come up with a game idea based on each theme, and it turned out to be a lot of fun. Here’s what I came up with for the first round.

Afterlife: Roguelike where you fight your way down into a dungeon. When you die, you become a ghost and are sent to the bottom floor. You must now use your ghostly powers to sneak back upstairs to find your body and carry on.

Against the Rules: The story of a man working a dead-end job for a faceless megacorporation in a cyberpunk city where routine is law. The game really starts when he disregards protocol and finds himself on the run from the authorities.

Alternative Physics: Platformer where you’re swimming through a coral reef while wearing a life vest. You have to strain against its flotation and propel yourself down under the water.

Ancient Ruins: An endless racing game starring Nevada Clarke, intrepid explorer. Climb out of a collapsing pyramid and collect valuable artifacts before being swallowed up by the desert.

Apocalypse: Play as the earth as you try to divert earthquakes, floods and other natural disasters to areas where they’ll do the least amount of damage so the humans will have enough time to get to safety. Beware of rising panic levels leading to mass suicides and hysteria.

Chaos:  Orchestrate the perfect jailbreak and take over a high-security prison with hundreds of your fellow inmates. Could be a good application for a flocking algorithm.

Colony: A city building game set in space after an exodus from Earth due to resource scarcity. Terraforming is a key component.

Dreams: A point-and-click adventure in which you play a young girl who can interact with other peoples’ dreams. The items necessary to progress can be summoned by influencing her sleeping family into dreaming about them.

Electricity: You play a malevolent storm cloud. Use various types of lightning to rain destruction down on a peaceful city; lightning strikes cause chaining through water towers, sheet lightning blinds meteorologists, etc.

Everyone Is Dead: Survival horror where you are the last living person in a plague-stricken city. Your character mutters to himself about watching out for zombies and mutants. Plot twist: There’s nothing in the game that can hurt you.

Flammable: A god game in which you play a fire god. Your only means of communicating with your followers is by setting things on fire. Lead them in the winter and show them where to avoid in the summer.

Going Backwards: A stealth game in which your character can only moonwalk. Timing becomes paramount as you must move between hiding spots without being able to look in the direction you’re moving.

Industrial:  A rhythm game where you play a technician in charge of training assembly line machines. As you successfully perform each procedure, you move further down the line onto the next step in the line, each more complicated than the last.

Journey:  An adventure game where you play a sword. Throughout your owner’s quest, you must decide whether his cause is just and influence his fighting skill accordingly.

Keeping Control: An action game starring a brain. You have to suppress the right synapses and stimulate others in order to keep your owner, a mental patient on parole, from being recommitted.

Lifecycle: A tron-like in which you try to capture the most plots in a graveyard to raise an undead army.

Lost: Survive on a desert island after being marooned by your mutinous pirate crew. Survive long enough to signal a passing trade ship or settle down for the long-term.

Mutation: An RPG beat-em-up set in a science facility where you gain new powers by imbibing various chemicals and cultures from genetic experiments.

No Weapons Allowed: You play an assassin who specializes in penetrating highly secure government facilities. Your latest mission requires you to enter through the front door with a group of tourists, so bringing in weapons is out of the question. You’ll have to improvise with whatever you can find throughout the compound.

Point of No Return:  A metroidvania where every room is sealed after you exit it.

Rediscovery: A point-and-click detective story where the crime scene is slightly different every time you return.

Rise and Fall: A dating sim in which you play the Sun and try to find true love with the Moon.

Seasons: An art game in which you play a tree. You must balance your ability to survive the cycle of the seasons with your desire to cause happiness in people who look at your leaves and pick your fruit.

Surrounded: A simulation game where you manage a resort on a tiny tropical island.

Underworld: A tycoon game where you play a mob boss in his bid to become the kingpin of crime by rubbing out the competition.

Art post

Rigel

Rigel from Legacy. Inkscape.

I don’t like this one as much as the one I did for Vex, and I think it’s largely to do with the fact that I don’t really have a color scheme in mind for Rigel. I wanted to make him very pale – almost albino – because it’s an uncommon choice for big, macho warrior characters, but the colors for his armor and gun were chosen arbitrarily.

I actually think my favorite part of this image is the ammo cartridge for the weapon. It’s a “shockgun” (get it? shotgun? shock….eh…), which shoots bursts of chain lightning. I’ve wanted to use the idea in a game for quite some time, and now I have a setting that makes sense to feature them.

Related: Every single piece of armor I’ve ever drawn has been super uninspired and boring.