[4] Super project

Youtube | Twitter

The goal for now is to start shoving some agents into the game. The world won’t feel very alive if the player is all alone! Thankfully, artificial intelligence is kind of my specialty. It’s one of the things I feel most comfortable making. In fact, something I learned how to do several years ago will likely come in handy right now! That something is called goal oriented action planning. It’s absolutely perfect for whats needed. That ‘need’ is AI that are easy to create, can adapt to their environment and have personality.

The beauty of GOAP is that it’s not what you might call hard coded. It’s flexible instead of rigid. I’ll even throw the buzzword dynamic into the mix! It’s about as close to alive as I can imagine a pile of code ever being. Your average AI, or at-least the ones I usually make, are typically ran by one gigantic wall of code. You can basically think of this wall as a check list. The AI simply goes down this check list every frame and accomplishes its tasks in order. It has to have a answer for every edge case scenario in order to prevent it from getting stuck or worse. I’ve you ever seen a computer controlled player running endlessly into a wall its not a bug. It’s a lack of logic. It wasn’t given a way to detect that its stuck or a method to correct itself. This fact is what causes problems as it means even a fairly simple AI can quickly become a mess of spaghetti code.

The problem with this checklist method is that the bigger the checklist grows the more complicated things become. It will quickly end up looking like an overgrown tree instead of a linear path due to all the branches of thought constantly being added. This type of AI is common because its easy to make – but it becomes harder to maintain as the game expands in complexity. It just doesn’t scale well at all. The worst part is that there’s basically nothing you can do about it. There’s no magical way to implement a checklist style AI (usually referred to as a finite state machine) without the resulting spaghetti code. Either throw more code at it and dig your hole deeper or have crap AI.

This is a pseudocode example of a finite state machine. The aforementioned check list! This is actually based on real code that I use for most of the monsters in my games! If you were to convert it into real code then it should work right out of the box. You can already see the branches starting to form despite being such a simple AI. It shoots enemies when they’re present and searches for them when they’re not. That’s it.

Let me give you a test scenario. The AI needs to eat. It will die in a few turns from starvation if it doesn’t! Let’s also say a enemy is nearby. What does the AI do? Does it risk fighting the enemy them before they starve to death or do they run to find food? There’s no guarantee they can quickly defeat the enemy so the obvious answer is to find food. They have a good amount of health left and can tank some damage, after all. However, they don’t know where the food is! They have to randomly explore and hope for the best. They might starve while looking for it or be killed by the pursuing enemy. What if the poor AI is low on health, too? If they run to find food the enemy might kill them. If they fight the enemy it might kill them. If they do either they might starve and die anyway The choice isn’t so easy now, huh? This is one of the many problems with finite state machines. They need a hard coded response to every imaginable scenario and more often than not a clear answer doesn’t exist. Even if a answer does exist then its going to result in predictable agent behavior on top of being annoying to program.

That’s where GOAP comes in. In a way, it’s similar to a finite state machine. It’s not sentient or anything. It still uses the code you made! The difference is that this code is modular. The evil checklist is gone and there’s literally no consequence to making the AI smarter or the game deeper. I can not only give it a response to every feasible situation without the spaghetti code but it will also respond to said situations all on its own. The modules can be thought of as tools and the AI automatically picks the right tool for the job. There’s no such thing as too many tools, either! I can fill that toolbox to the brim without consequence. This is because each of the tools are entirely independent.

The best part is that these tools, being modular, can be added or removed at will. For example, let’s say a civilian, someone that has no experience fighting, just found and picked up a grenade. That grenade contains the code needed for the AI to use it and the act of looting it means the civilian is now capable of throwing it! This is a powerful system that lets the AI better react to its immediate environment. This thing might as well be a procedural chaos generator. Let it loose in a sandbox setting and enjoy!

The way it works is pretty simple. The name goal oriented action programming kind of explains things on its own. Every AI has a few goals and they automatically work to achieve said goals when needed. The need is based on some stats – so a hungry agent will look into a eating food. There’s not a wall of code guiding them, though. Instead, it’s the goal itself helping them. Each of the goals can basically be thought of as miniature finite state machines. They contain just enough code to help.

It does this by analyzing all of the agents options. If the agent is starving and the goal they’ve selected is to eat then every means of acquiring food will be considered. The best option will cost the least points and thus be chosen. If the agent is lost out in some random desert, for example, then there’s not going to be a restaurant anywhere nearby. That means getting fast food will be given an undesirably high cost. It doesn’t just stop their, though. The analysis goes all the way down the list in regards to the option of getting take out. That means it will also take into consideration the cost of buying it. If the agent doesn’t have any money then the cost will be raised even further! The next option could be hunting. There’s some camels nearby! Even though it’s dangerous that would probably end up being the best option available – unless they’re a vegetarian! If that’s the case then they might resort to killing a nearby trader and stealing his cookies.

Phew! That was a wall of text. In the next part I’ll start adding GOAP.

(PART 3) Super project

Let’s move on, though. The next step is getting the local maps up and running. These maps are where the majority of real gameplay takes place. The fact that I’m adding them means we’re getting close to actually being able to do stuff. I’m going to start with making the city because it’s going to serve as sort of quest hub. Everything the player does will revolve around it for the time being. I’ll be using the color to terrain method that we used earlier to make the overworld.

Okay, well, here’s the city! The strange appearance is by design. It’s visually stylized after Favela. Lot’s of buildings are tightly crushed together and there’s little more than claustrophobic alleyways between them for movement. This city style is a real hive of scum and villainy. If you want to buy drugs, fence stolen goods, talk to informants or hide from the law then this is the place to go. They’re not entirely safe, though!

Gangs endanger everyone with their senseless territorial warfare, lurking bounty hunters patiently wait in the shadows for their target, undercover operatives search for rebel collaborators hiding among the poor masses and there’s the ever looming threat of yet another alien uprising triggering a deadly military crackdown. The player might be a rebel but that doesn’t mean everyone else is. The Verge aren’t the only bad guys, either. Criminals or just people in general aren’t guaranteed to be your friend. They all have their own goals in life and the rebels are just one faction among a sea of others.

Here are some videos of me walking around the city. The first video is with just fov enabled and the next is with both fov and explored tile memory. The difference in playability is pretty drastic. The memory lets you see where you’ve already been which makes navigating not only easier but less annoying. It’s not really enough, though, is it?

Exploration sounds cool on paper but in reality it usually sucks. I think it would get old pretty fast having to blindly navigate these mazes. The player is going to be visiting a ton of maps and more often than not it will be a place they haven’t been before.

In our world we have all sorts helpful ways of dealing with these problems so it only makes sense for the future to have some modern conveniences too! The first idea that popped into my head are scout drones. The player can buy and deploy them when needed to explore areas on their behalf. I like this idea because it helps tie the player to the world by giving them meaningful reasons to interact with it. If you want some drones you’re gonna have to go make some money and then find someone that sells them!

That’s enough for today, though. In part 4 we’ll start adding some agents!

(PART 2) Super Project

Youtube | Twitter

Maintain depth but reduce scope. That’s the current plan. I’m hoping this strategy will help me avoid the pitfalls that caused my previous attempts to run out of steam. I’ll be able to immediately work on the parts of my vision that interest me without being overwhelmed by the sheer scale of things. I’ll go ahead and build my living breathing world but it’s going to have humble beginnings. Instead of a galaxy sized rebellion we’ll simulate a rebellion at the smallest reasonable scale I can imagine: a city.

Let me tell you about my opening strategy. I’m going to start by making the overworld map. That map will contain a city surrounded by a small but varied wilderness. This wilderness isn’t really needed yet but it only takes a few minutes to add so I might as well toss it in.

There’s also going to be a local map which is where the real gameplay happens. In fact, there’s going to be a ton of local maps! Every single one of them has to be simultaneously active in order to properly simulate the world and its inhabitants. This has some serious performance implications but we’ll cross that bridge when we get to it.

Then I’ll start working on the following things. First, I need to immediately give the player a way to express their desire to rebel. It’s one of the core aspects of the game so without that there’s not going to be much in the way of gameplay! I’ll start with basic criminal elements such as vandalism or thievery to keep things simple but as time goes on more complex ways to fight the system will seep in. I intend to support different ways to rebel beyond just combat. Espionage has many facets, after all.

The next focus is ensuring the game has that butterfly effect thing going on. Their needs to be a palatable cause and affect or action and reaction. This way the player can see and feel how their activities (and those of others!) are affecting the world. I consider this to be a vital addition. If you’re fighting for a cause but never see any results then whats the point?

That’s enough exposition, though. It’s time to follow the golden rule of show don’t tell.

Here’s the first real step of progress. It’s a screenshot of the aforementioned overworld map. There’s no procedural generation going on here yet. I’ve decided to keep things simple on the map generation front in order to expedite progress in more important areas.

This is how it’s made, by the way. The overworld map begins as a image I created in paint where each color represents a different tile. I then load the image in game for processing and assign each pixel of color to a corresponding terrain.

It’s not that interesting but I’ve always been proud of it. I use this method for designing static maps in my roguelikes as it speeds up map design. It’s much quicker then manually placing every single tile. The map is 20×20 so that would be 400 lines of code! It’s also easy to edit since I just need to open the image back up in paint and change the colors. This is only a temporary system that will eventually be replaced by procedural algorithms.

Okay, so now I have a functioning overworld map! It’s not that exciting, though. The only real purpose of the overworld map is to make travel easier. This is fine for now but in the future you’ll probably want to use a personal vehicle or purchase transport. The maps are going to be pretty big so walking long distances won’t be reasonable.

Continued in part 3.

(PART 1) Super Project

Youtube | Twitter

I have a super project that I’ve been wanting to make for a long time. This idea is actually one of the original reasons I learned how to program in the first place. The problem is that my idea is so complicated that I don’t know where how to begin.

Imagine trying to make something as complex as Dwarf Fortress but on a galactic rather than planetary scale. Then consider I want to individually simulate all the agents, species, factions, and planets so everything that happens in the game is real.

I say real due to a lack of a better word. Dynamically, perhaps? Naturally? I don’t know.

Let me try to explain it with an example.

That contract you see on the black market to recover a stolen item wasn’t generated out of thin air. It was created because a starving citizen stole said item out of desperation. It wasn’t created specifically for you, either. It was generated as a natural consequence of events.

If you don’t do it then someone else will. The game aims for a certain type of realism that can be summed up as things happening for a reason. It’s built on the idea of the butterfly effect. You’re just a cog in the machine of a living breathing world.

If that sounds daunting then you don’t know the half of it. It’s not like I haven’t tried, either!

Every one of my previous attempts has ended for basically the same reason. I put a bunch of work into building something only to realize I’ve barely accomplished anything. The end goal is so far away that no amount of work makes it seem feasible. That’s usually when my inspiration fizzles out until the next wave of motivation hits.

The problem is that it would probably take years of work to establish what I would only refer to as the foundation. The amount of time I would have to spend building this foundation so I can work on the actual fun stuff is what keeps crushing my spirit.

The obvious answer is to build it in baby steps but my question to you is: what’s the first step? Every time I start from what I believe is the bottom-most step I end up realizing there are another thousand floors beneath me. I just can’t get close to the metal.

Anyway, let me try and explain this so-called super project.

I’m going to use Star Wars as an example setting. It sucks, but it’s a setting that just about everyone knows and it can be compared to my idea in a thousand different ways.

The main similarity is that Star Wars has a classic big bad faction vs little good faction. Or, more specifically, the Empire vs the Rebellion. The entirety of my game revolves around this concept. The player is apart of the Rebel Alliance and the goal of the game is to defeat the Empire. That’s not as simple as just crawling through a dungeon and defeating the end boss, though. It will require more than I can even begin to reasonably explain. Imagine how you would go about winning a guerilla war of galactic scale.

Would you bribe politicians to remove laws that harm your movement? Blow up fuel refineries to cripple the Empires fleet movement? Take out generals so enemy forces are without leadership? Free slaves so they join the Rebel Alliance alliance? Sabotage top secret research to delay the release of terrifying new weapons? Steal enemy clothing/documentation so you can sneak into their base to plant false evidence? Lure an enemy patrol into a minefield you recently built? Hack a orbital defense laser to destroy other such lasers so the planet is open to invasion? Befriend distant alien races for unique technology? Pay smugglers to help you escape through an Imperial blockade? Antagonize civilian unrest so they riot in the streets? That commotion sure would make your assault on the capital easier!

The answer is all of the above and then some. The rebs will have to engage is just about every form of espionage imaginable to accomplish their goal. I intend to support as many strategies as possible. If you can think of something then it should be a possibility.

Here’s the problem, though – remember what I said earlier? I want things to be more natural. I don’t want the player walking up to random dudes with quest markers floating over their head telling them where to go and what to do. I want a more realistic setting where there’s no real guidance or obvious gamification. The purpose behind this reasoning will be explained further below. It can be summed up as making your own destiny, though.

Imagine looting a data disk from some high ranking imperial officer you just took out. You weren’t sent to target him specifically or anything. You were just following an encrypted signal that lead you into the forest where him and his crashed ship were waiting. Turns out you were following a distress signal! It could of just as easily been a bandits trap or random noise from a malfunctioning droid. He was shot out of orbit a few hours ago by pirates. They were bested by the officers escort ships but not before they shot his transport down.

These pirates didn’t know about the data disk or anything. They just wanted the treasures his well guarded ship may have contained. The officer didn’t just randomly spawn with it, either. There’s no random loot table non-sense. He was trusted with its transport by his superiors – whom are also as fully simulated as he is!

I’m going to stop the what if shenanigans here as this could go on for awhile. Finding a way to access the data disk and then actually make use of its contents is another couple of paragraphs on its own. The point was to show you the ever expanding web of interactivity that results from even the simplest of things in such a setting. It was also to try showing you the potential depth of a setting where everyone is living their own lives.

You could call all of this random chance but it nevertheless happened on its own. It’s chaos, sure, but it’s automatic chaos. It’s about as close to a living breathing world I can imagine code being.

It wasn’t something I specifically programmed to happen. I didn’t spawn the pirates. They were poor civilians that turned to piracy as a means to an end. I didn’t tell them to attack the officer. They needed money and knew a guarded transport might contain riches. I didn’t give the officer a top secret data disk full of information. He was trusted by his superiors due to outstanding performance. I didn’t lure you towards the officer with that signal. You just happened to be in the right place at the right time. I think that’s great and it’s the underlying basis for the whole game. This concept is the meat and potatoes of my super project and it extends to everything.

I’ll basically create the initial universe and then let things go off the rails on their own. The cool thing is that this simulation happens in a live setting. There’s no history to pregenerate. You help shape history by being apart of it rather than just living in the afterglow. I just spawn the planets, factions and other necessary set pieces and let the AI take care of everything else. They’ll all just start living their little silly lives and chaos will unfold by itself.

Is it worth it, though? I think so. The potential for story really interests me. This system gets around the constraints of being a person. There’s only so much content I can add and my creativity is limited. I’d rather make a chaos generator than code a thousand missions or random events by hand. I think the end result would be better.

I think the reason for my obsession with this idea is that a lot of sandbox games feel empty. If you play them long enough you realize a lot of stuff is being faked behind the scenes. That fleet you just destroyed, for example, doesn’t really matter. The game will just replace it with another one when you leave. In my ideal game it would matter. Their would be consequences instead of illusions. The Empire would have to spend resources to rebuild it. That means time, money, metals, labor. Their would be a whole production chain going on that you can interrupt at any level. If implemented properly you’d be able to not only do some genuine espionage but also experience the consequences of your actions! For example, if you keep raiding those ore mines then Imperial ship production will genuinely slow down.

That brings me to my final point of the day: consequences. This is where a lot of games that do what I’m trying to do end up falling short. They create this elaborate background system but fail to make the player adequately aware of it. Thus, everything they see or interact with might as well be random. To get around this problem I’ll be doing a lot of work to help reveal the worlds complexity to the player. I could add graphs so the player can see the long and short term effects of their actions or individual unit history logs so they can see what others have been up to. I think that kind of stuff would go a long way to helping players realize the richness of the setting and their impact upon it. There’s no point having an interconnected universe when you can’t examine the connections.

That’s all for today. This wall of text was several hours in the making. I should probably spent my time coding instead of talking but sharing my ideas helps motivate me. I don’t know what we’ll be talking about next. I might start going into detail about how I’ll be actually implementing this or just talk about more abstract stuff that only makes sense to me. Who knows?

If I do any actual coding progress I’ll be sure to let you know. I intend to document the process with videos because the idea of having its creation history on record from start to finish interests me.

Continued in part 2.

Zombie Update 1

I’ve decided to start sharing change logs! This is just a compilation of the most recent notable changes. I’ll make proper full change logs that detail every single thing in the future once its released. For now, though, you only need the essentials! The current goal right now (and probably for the foreseeable future) is to get a basic zombie apocalypse simulator up and running. I’ll add the fancy stuff once the foundation is up!

  • Zombies now chase survivors. They’re not very good at navigating complex spaces as expected. Move intelligently and you can lose them!
  • Zombies randomly lose interest in targets they cant detect anymore. Leave their line of sight and they’ll eventually stop following you.
  • Zombies have better pathfinding now that results in them surrounding targets. Move carefully or you’ll find yourself in the middle of a horde.
  • Zombies can now attack and kill survivors.
  • Survivors will rise as a zombie after a few turns if killed by one.
  • Zombies eat fresh corpses and most will ravenously swarm it.
  • Zombies will ignore most distractions while eating. Take advantage of this to escape or alternately put a few easy zombies into the ground. Or, if you’re a real meanie, kill someone to really distract them with a fresh meal.
  • Zombies use rects for target selection instead of fov calculations. This is less realistic but dramatically more performance friendly.
  • Improved tile drawing speed by only processing the bare minimum. This means only tiles that are both visible and within the camera viewport.
  • The game now starts with no zombies. Instead, a few survivors begin as infected. They randomly succumb after a few turns and turn into zombies.
  • More survivors spawn at a random location if there’s too few of them.
  • If there’s no zombies left then a few random survivors are artificiality infected to give the apocalypse a reboot.
  • I added a zombie spawn limit since it was getting to a ridiculous point where almost every single tile was filled with them in really long games.
  • Greyops random event has been added. They’re a squad of elite zombie slaying special forces that enter from a random map edge and carve a path of destruction to random waypoints. They prioritize zombies but will engage survivors that get too close. They have some special anti zombie items and high end military gear.

The undead masses

I implemented a swarming behavior today for zombies! They now actively surround targets. If you’re not careful then you’ll end up in the middle of a ravenous horde. You can actually see this happen to several survivors here.

The zombies ignore me so just pay attention to the yellow S’s in game or the yellow squares on the minimap. This is a natural result of how their pathfinding works so its still very performance friendly as there’s no need for flanking calculations or other frame devouring non-sense.

Previously, they would just form a nice and orderly line due to how their pathfinding worked. It’s like they’re patiently waiting for their turn to get a bite. You could sit their for a million turns and those zombies would never move. It just looked wrong and doesn’t seem very zombie like to me. They’re stupid, sure, but they’re also hungry! In media zombies will usually bunch up together in tightly crowded packs or even climb over one another. They never just patiently form a orderly que when fresh brains are present.

This is happening due to how the zombies move. They path by searching their neighboring tiles to find which one is closest to their target. Then they move to it! That’s literally it. They ignore walls and other movement blocking terrain when analyzing these neighbors. However, if said tile is occupied by a fellow zombie then they don’t move. That’s where the problem came from! I shouldn’t really call this pathfinding since there’s no real thinking involved but I don’t know what other term to use.

I had to give them a form of pathfinding that was not only believably stupid but also capable of somewhat trailing a target. It also had to be performance friendly since there’s potentially hundreds if not thousands of zombies active at once depending on the map size. If you look at this example again and look in the corner you’ll notice a counter displaying how many zeds are present. It would of been easier to just give them astar or dij-whateverthefuck but then they would of been too smart.

The way I made this possible is actually pretty simple. If the tile a zombie wants to move to is occupied by another zombie they will choose a new random neighbor and move to it instead of waiting in line like gentlemen. This clears up traffic jams which enables the swarming behavior as a result.

Minimap goodness

I added a minimap to the game. It was originally just to help me with debugging but it’s actually pretty useful for normal game play. The minimap allows you to see the whole map at once. This lets you find errors with terrain generation, pathfinding anomalies and all sorts of general wonkiness that you might otherwise miss.

For example, here’s a minimap view of a few survivors pathfinding to random waypoints. There’s something wrong going on, though. Try to see if you can find it!

I’ve now got it specifically set to not clear each frame which causes a noticable trail affect. This allows us to see everywhere the survivors have moved instead of only where they’re currently at. Can you see the problem, now?

The little buggers are pathing through walls! That’s no good. I do plan to eventually add ghosts (to be discussed in a future monster post!) but now isn’t the time. I wasn’t aware of this issue previously, so without the minimap, who knows how long it would of taken to discover?

The source of this problem was the path map. I accidentally created it using (y, x) coordinates instead of (x, y). That means it was basically flipped or mirrored. Or, in other words, the path map did not align with the terrain map. Here is an example of what that looks like. The left example is the messed up path map.

The beings use this path map for path calculations. The terrain map is just so I know where to draw what. It otherwise has no bearing on gameplay. This is what was causing them to path through walls. They were actually doing exactly what they’re supposed to do. It was my fault for feeding them the wrong information.

Also, just for the heck of it, here’s a bunch survivors moving around while the bug is still active. This makes it far more obvious. It also makes it look like a busy subway map! The minimap is a incredibly useful tool and I strongly suggest other developers implement it for visual debugging.

Here’s the same trail affect using a corrected path map. Much better!

Let me show you some other fun stuff I shoved into the minimap! Here is a heat map. This first video is just the heat map on its own.

This is the heat map overlaid on the terrain map.

Every time a survivor moves they add a 20 to their location in the heat map. Every turn all the values in said array are reduced by 1. The more beings that visit the same tile the hotter it gets as that locations value doesn’t have enough time to fade away. This allows you to see the most active portions of your map.

The side walks near the middle of the map are obviously the most traveled areas followed by building corners. The least traveled areas are the map edges and building interiors. This remains true no matter how many times I randomize the map as shown in the video. The last example in the video was actually the worst. The buildings were so big that their weren’t many roads to use. This also caused a noticeably lag spike.

This heat map could actually help me with fine tuning the map generator. Everyone is sticking to the roads because they’re really the only path from point A to B. The buildings never connect to a neighboring building so they’re all dead ends. That’s just asking for disaster in a zombie apocalypse! Moving through buildings, across roofs and other less visible or otherwise alternate paths is a common trope in zombie media. I need to give buildings more doors, add alleyways between buildings, convert some buildings to empty plots and more to better support that. I’ll show you the results of these improvements in a later post!

The heat map could also be used for game play purposes. I could have cautious survivors avoid pathing through areas with a lot of zombie activity. I could also have zombies move towards areas with high survivor activity. Maybe animals want to avoid any activity all together! There’s a lot of potential uses.

The minimap works by drawing everything on a 1×1 pixel level instead of 12×12 ascii tiles. That allows me to see an entire level at a glance even if its pretty big. I can fit up to a 720×720 sized map on a 1280×720 screen using the minimap. That’s 518400 tiles! I can only fit a 60×60 area of the map on screen at the current 12×12 ascii font size so you can see why the minimap is handy. That’s 3600 compared to 518400 visible tiles.

If you were wondering, this is what a 720×720 minimap looks like.

It’s also stupidly fast since I’m using pygame surfarrays to just straight up blit the numpy terrain array. That means I don’t have to manually loop over every single tile and draw them. I can’t do any efficiency calculations, such as drawing only tiles that are within the camera viewport, as we’re purposely drawing the whole map. Even for the default map size, which is a moderate 200×200, that’s 40,000 tiles! I did a test to see how slow individually drawing all those would be and it knocked my frame rate down to unplayable single digit numbers.

Here is a standard minimap in its native habitat. That’s pretty hard to see, huh?

I realized that, too. I’m going to add some controls that will let the player scale the minimap by pressing the + and – keys. Later I’ll be adding a more traditional full screen style overview map that the player can zoom much closer to and also drag their view around. I’ll probably let them doodle on it, too. That way they can mark supply caches, zombies hordes or just draw dicks. Implementing this feature will make it easy to later add support for other beings having maps that the player can loot and analyze for information. Maybe you can find treasure maps, paths to hidden safehouses, directions to settlements and more. That’s all for another day, though. I need a writing break!

Foray into game development

I’ve decided to start talking about the various projects I’m both currently making or planning to eventually make. Today we’ll be talking about my zombie roguelike. I know, I know. The whole zombie thing is old hat these days. Everyone is sick of the undead. I need a simple project to get started with, though, and you can’t get much simpler than zombies!

I’m going to be giving my game a unique spin or two. This will help separate it from the competition and give it reason to live. The first attempt at doing so will be giving the player unfettered customization options. Everyone has their own opinion of what a zombie apocalypse entails so I’ll be giving players the proverbial keys to the city. This way they can setup a campaign to their exact preferences by having access to just about every variable that exists.

Want a day zero kind of situation? Then you can crank up the survivor numbers while limiting the zombies. The zombies will be highly infectious but relatively limited in number. Then spawn a good amount of military personnel to simulate them trying to maintain order. Turn up the event weights for military road blocks, patrols and special forces endeavors. Maybe throw in some scary men in hazmat suits performing field research. Increase survivor panic levels so they’re more prone to fighting one another or otherwise engaging in criminal activity like looting businesses. Then have utilities like water or power start going offline as infrastructure fails. Boom! Those tweaks alone should give a decent first contact vibe. The outbreak has just started and all hell is breaking loose. You can force the game to remain in this state or have it slowly transition to a different one over time by adjusting times. In media this initial chaos usually slides into a more typical zombie apocalypse setting after a few days to weeks.

Maybe you want a far off post apocalypse? Everyone has become used to zombies in such a setting. They’re more of a nuisance than a threat. Their numbers are much lower as many of them have simply decayed away into nothingness. Human numbers are low enough that new zombies are rarely made. The few that do exist, though, might be unusually tough or have mutated in some unique way. Gangs fight one another for territorial control of what little resources are left. Mother nature has made good progress reclaiming her land. The many abandoned cities dotting the world are now full of wildlife. It’s becoming hard to tell where the concrete jungle begins and the forest ends. The great highways of our time are lost beneath grass, vines and roots.

Their aren’t many vehicles left as they’ve all been scrapped for building material. The same goes for furniture and practically anything else that could be of use. If you want something then you need to trade for it or make it yourself. More natural predators such as wolves are a greater concern than zombies now. The power vacuum left by humanity teetering on the brink of extinction has allowed the animal populations to explode. The outbreak could of evolved, too, so perhaps now there’s undead animals roaming the wilds. Good luck with that undead black bear! There’s a few well known bastions of human life that provide some degree of stability. I imagine each of them belonging to a unique faction and having their own atmosphere. The adversity of survival would guarantee they’re all different.

I originally had paragraphs of faction examples here but I’ll save that for a future post. This one is already a miniature book. Nevertheless, I think its important to have a world full of grey zones rather than strict good or bad morals. I thus try to sprinkle it into everything I make. These settings would give your campaign a more Fallout, Metro or Stalker like vibe to it. The coolest part is that only a handful of settings would need to be changed in order to make it happen. Make zombies less common but more powerful or unique. Increase the number of factions. Enable the gang warfare system. Turn up the ruination level so buildings are damaged. Turn up the overgrowth factor so its bleeding into civilization and animals are more common. It’s really not that hard.

Or you could just shoot for a more average but perfectly acceptable range of settings. The good old survive for as long as you can in a ever worsening situation. Supplies are becoming ever rarer. Survivors are getting aggressive out of desperation. Zombies more numerable. That kind of thing. This will probably be the initial goal I’ll shoot for. Then once the basic foundation is laid I’ll begin adding customization options and expanding the scope of possibilities and supported play styles.

The biggest things I’ve learned over the years is starting simple. The things I’m talking about doing might sound hard to create but they’re really not. The difficulty comes from trying to do it all at once from the get go. Take baby steps and you’ll arrive at the desired end product naturally!

None of this is above my skill level. I’ve been making roguelikes as a hobbyist for at-least a decade now. I started right after quitting the waste of time that was college in order to independently learn how to code so I could work from home. Then I got wrapped up in caring for mentally ill family members so I’ve had nothing but time on my hands to learn. The last couple of years was almost literally nothing but making all sorts of roguelikes. I have several rather extensive roguelike libraries full of code built up because of this and have made probably around a hundred or so prototype stage games over the years. I’m probably under exaggerating on that number, too. I’m planning to go through a lot of those really old projects and write about them in the future. It will be a fun trip down embarrassingly bad code memory lane.

I just lacked the experience all those years ago to fully realize them. That’s the problem, though. I haven’t actually released anything. It’s one of the main reasons I’m starting this whole project. I need developer experience. I need to learn how to patch games, take bug reports, share the executable and all that hullabaloo. Hopefully you’ll help me get it!

I probably should of started doing this a long time ago but I was in that infinite loop of waiting until I was better. That moment of feeling ready never came, though. I don’t think any creator ever feels fully satisfied with their works. I kept noticeably improving in all sorts of ways but never felt like it was time to go public. That’s why I’ve decided to just go for it. It’s scary but I’m taking the leap!

Anyway, that’s enough for today. I’ve already spent too much time writing and not enough coding. I don’t want to be one of those budding developers that make promises and then never deliver. Come back later! I’ll either be talking about more personal behind the scenes game design stuff or sharing actual game progress.

Also, a teaser: