Jump to content

  • Log In with Google      Sign In   
  • Create Account

Interested in a FREE copy of HTML5 game maker Construct 2?

We'll be giving away three Personal Edition licences in next Tuesday's GDNet Direct email newsletter!

Sign up from the right-hand sidebar on our homepage and read Tuesday's newsletter for details!


We're also offering banner ads on our site from just $5! 1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Like
35Likes
Dislike

Life of a Level Designer

By Szymon Barchan | Published May 14 2013 11:07 AM in Game Design
Peer Reviewed by (CRFaithMusic, Josh Vega, Prinz Eugn)

level design fps unreal 3d udk scripting

When somebody asks me what I do, I try to explain it in a few simple sentences. “I design levels, I place walls, enemies etc”. In return I usually hear “Wow! That’s a great job, you are playing for a whole day and you get paid for it“. Ehhh… both statements don’t represent how it really is.

It’s easy to imagine that making a level is a piece of cake. What’s difficult about putting in a few walls, placing some enemies, adding dialogues, cutscenes or an event like a dragon riding a sledge? A day’s work and tadam! I’m drinking beer, playing my super mega marvelous level, delighted how it came out, knowing players will be exited when they play it. Honestly, it’s a shame that this couldn’t be further from the truth…

Don’t get me wrong. I love my job and I don’t see myself anywhere else, but I assure you it’s no picnic and nothing like you imagine. You want to know why? Read on.


Attached Image: lifeofanld01.jpg
This is what you see in game

Attached Image: lifeofanld02.jpg
This is how it looks behind the scenes


Only the very beginning of the process is how you might imagine it. It involves making a sketch of a level, basically planning all the cool events from start to finish. This is the nice part. It’s also the most important phase of level creation. But that’s not necessarily because you’re planning the chain of events. It’s because it’s the time when you have to think a few months up front and analyze gameplay problems, technicalities and memory issues – how this will affect that, is this doable, will this work just as you planned etc. All this is necessary if you want to avoid huge problems in the future and have a fun and well-done level.

You need to know everything. What is this room? How will this sequence look like? How many enemies do you plan to have here? Where are they going to walk out from? What will distinguish this fighting arena from the next 12 arenas? You have to be able to present it to others, show them a huge gray block moving and explain that you imagine this as a half-car half-monkey mutated alien baby…

But also this must be achievable for programmers, meshers and be certified by your lead, production and most important of all – the Creative Director. After couple of suggestions, a few changes, trying several different approaches, scenarios, correcting this, changing that, after another and another round of meetings, corrections etc you can finally finish your sketch… uff. You think: now for the easy part… You couldn’t be more wrong. You didn’t even start your work yet. You need to start making more complex geometry and script everything.


Attached Image: lifeofanld03.jpg
The LD's vision - paper sketch of great fighting arenas


Let’s get to work. We have a simple situation to script: player’s character and his friend (sidekick) walks out on the street from a building, he says 3 sentences and after few steps forward they fight with Skull gang members. After that, around the corner they fight against Creeps. Sounds simple? Ok then let’s get to the scripting you have to do.


Attached Image: lifeofanld04.jpg
This is a sketch made in the editor, try to explain others what do you see...


When the player enters the area you need to spawn four Skulls, hidden from the player's view and additional two when player kills any of the living ones. Scripting this is simple. Now you have to organize the arena, but placing four crates and marking cover places for the enemies isn’t good enough. It takes a lot of time, a lot of playthroughs, checking different enemy types, and various cover changes to make a single arena really interesting and fun.

Besides enemies, you also need to check if a player’s sidekick behaves properly and doesn’t disturb the player. Don’t forget he also needs places to take cover, other than the ones the player is using. If you want some piece of the cover to be destructible, you need to remember to script the enemies and sidekicks not to use that cover after it’s been destroyed. You want enemies to flank a player if he stays in one particular area for too long? You have to script it.


Attached Image: lifeofanld05.jpg
Example of scripting something easy


Nearly every little detail you want to be happening on your level, you have to script yourself. This is not as easy as giving enemies a “flanking” command and they know everything they need to do. You have to determine a path they will be moving on, you need to tell them where to take cover, where to stop and when to start shooting. What about a situation in which the player shoots them during the maneuver? What should they do? Shoot him back, take cover, ignore? If he leashes one of them should he get up and still run to the destination point? That wouldn’t make much sense, would it?

What if the player rushes forward and kills Skulls at the end of the arena and sees your two additional Skulls spawning out of thin air three meters away from him? What if he doesn’t kill any of them and rushes even further into next arena where you spawn 6 Creeps? 10 enemies at a time? Will the player make it? Maybe. What about the memory? It may be too much and the game will crash. Yes, yes we need more scripting…


Attached Image: lifeofanld06.jpg
Things get a little more complex


Maybe the player won’t charge, and instead he goes back to the room he was in before going out on the street. The simplest thing to do is to close the door when player walks through it, but did you forget that the sidekick needs to do it as well? Script, script, script…

The level designer needs to analyze the player’s every possible move, check every scenario and be sure he controls everything, there is no place for leaving some unpredicted situation unsecured or taking chances. It’s a little like playing god, but above all the player cannot see your fingers, because he will feel cheated. How would it look like if player walked out through a destroyed door, turned around and saw a brand new metal door materializing, just because you wanted to block his way back? He was feeling the mood, he believed he was a soldier and you just reminded him that this is just a crappy made game. Look, no hands! Pure magic!


Attached Image: lifeofanld07.jpg
Editor view - this is where you spend 90% of your time


When you are working as an LD you need to remember that there is always a small chance that something will go wrong and you need to be ready for it. For example what if a sidekick got stuck somewhere and won’t ever walk out that door which you wanted to close so badly? What if a sidekick was supposed to open a door to the next building? He won’t do it now. You need some scripted safety teleport mechanism, but again watch your fingers so the player can’t notice them.

You planned in your sketch that Gray was suppose to say 3 sentences about classical ballet before the fight starts. What if he rushes into battle and the ballet chit-chat is still playing like nothing happens? You didn’t think about that during sketch phase – your bad. Now how will you fix it? You could just stop him in the middle of a sentence, but this sounds unnatural. You are adding extra “WTF? Skulls!” after the stop, but it doesn’t always fit. You have to think of some other way to solve that problem.

You need one music track before battle, a different one for the fight. Slowly your scripting grows like a tangle of vines. You want the Skulls to drink beer and have a chit-chat before they notice the player, then to scatter, push over tables, make covers out of benches and you want the sidekick to kick the first one on the left? Ok, now you’ve got a jungle you need to script yourself. Besides there is a case of making objects, animations, sounds, particles… but that’s something I’ll write about another time.


Attached Image: lifeofanld08.jpg
The final scripting of a complicated longer event


How much do you think it takes to make one level from the beginning till the final version? A 45 minute level, nothing special, no player in aircraft-tank-boat facing King Kong, just a normal bit of shooting. The answer is: months of hard work. This piece of gameplay I just described above would take about 1min 30sec for the player to pass it. But there is still 43min and 30 sec of gameplay scripting to do and we work on 3 levels at the same time, so there isn’t much time.

The more you script the more variables and scenarios you get, the more complicated your scripting is and the probability of bugs rises. You need to take care of everything, test it, polish it and make it unbreakable, safe and most importantly – fun and interesting to play. You are not only coming up with ideas, but also you are the one that needs to make them work and work well. Scripting is just a part of a level designers work. There is more, but hopefully this gives you have a better idea of what we really do.

The bottom line is a Level Designer does 1001 things that an average player won’t ever notice! Even if at times it is hard and time consuming I wouldn’t change it for anything else, because it gives me satisfaction like no other job before.


Reposted with permission from the PCF Blog



About the Author(s)


Szymon Barchan is a Polish Level Designer at Peop,e Can Fly. He hates getting up early, loves 90's rap music and claims to drink vodka with Aliens.

License


GDOL (Gamedev.net Open License)




Comments

Really interesting and straightforward! 

Create a world of your own.  Like God.

Good article. Level designing is really difficult , and that's actually something most beginner developers know because of all the in-game level editors and mod kits.

 

However, I think what you describe can be made more sensible by adding some general coding (specially AI) which takes care of things without the need to script everything.

 

For instance:

 

What about a situation in which the player shoots them during the maneuver? What should they do? Shoot him back, take cover, ignore?

 

There should be a simple state AI system that can take care of decisions like that so the level designers can concentrate on level designing.

I have no words to describe how much I appreciate this. 

I have myself attempted at doing some deathmatch maps back in time. Even with reduced scripting and complexity one must have a very clear vision of what's going to happen. Layout, flow, item placements. I think the most difficult thing for me was that I had to consider both the low-level (can I render this?) and high-level (what about a BFG there?) problems at the same time.

It makes up for a lot of potential iterations.

Just to clarify - when you say "scripting", do you mean in a programming sense? This is news to me, I didn't realise that Level Designers had duties that involved writing code. or perhaps you mean something else?

I'm not a level designer (I have only played with some mod tools). However, when you create a level you also have to define how the entities in the level should respond to player actions and more general events. This is called scripting. You do not have to use real world scripting languages, they can be visual or very specific, but I guess it can be considered "programming". 

Just to clarify - when you say "scripting", do you mean in a programming sense? This is news to me, I didn't realise that Level Designers had duties that involved writing code. or perhaps you mean something else?

By the posted screenshot he is working with Unreal Engine, level designers would not likely write code, but they do script, the complex graph full of lines and boxes you see at the end of the article is a script created through assisted programming, the editor provides pre programmed functional blocks that you connect between each other and pass on level variables such as entities and such.

The philosofy here is that whatever behavior is specific to the level and its environments, should be coded this way, and by the level designer, if the level designer needs a functional object that does not exist yet, like say trigger a sound (of course this exists, just an example), he must ask the programmers to do it and then he can use it in the level script.

A bloody good article describing the real deal with level design. Perhaps telling people that their necks and shoulders will suffer is the only thing missing :)

I'm not a level designer (I have only played with some mod tools). However, when you create a level you also have to define how the entities in the level should respond to player actions and more general events. This is called scripting. You do not have to use real world scripting languages, they can be visual or very specific, but I guess it can be considered "programming". 

Yes it is programming. Let us say you need to make a bot chase you character. Then you need to player.getPosition() and set this as the bots destination. Also you might think about letting the bot stop a few units before hitting the position and do some ray casting to find a target to chop/shoot at etc. Scripting feels a lot like simple programming(I use Torque). 

 

If you need to spawn some bots and make them disappear again when leaving a trigger area then triggers with a lot of if the else clauses are set up etc. Of course this is all just talk so here is a simple code for detecting a players action(moving into the trigger and if set to 1 or it return else it spawn) and spawning some nasty bots:

 

function DefaultTrigger::onEnterTrigger(%this,%trigger,%obj)
{
    if(trig1.triggerOff == 1)
    {
      return;
    }
    if(!isObject(bot1))
    {  
      aiplayer::InGameSpawn(bot1, botspawn1, 0);
    }
    if(!isObject(bot2))  
    {  
      aiplayer::InGameSpawn(bot2, botspawn2, 0);
      bot2.goal=bot2goal;
      trig1.triggerOff = 1;  
    }
    if(trig2.triggerOff == 1)
    {
    if(!isObject(bot3))
    {
      aiplayer::InGameSpawn(bot3, botspawn3, 0);
    }
    if(!isObject(bot4))
    {
      aiplayer::InGameSpawn(bot4, botspawn31, 0);
    }
    if(!isObject(bot5))
    {
      aiplayer::InGameSpawn(bot5, botspawn32, 0);
    }
    if(!isObject(bot6))
    {
      aiplayer::InGameSpawn(bot6, botspawn33, 0);
       }
    }
}

Good article. Level designing is really difficult , and that's actually something most beginner developers know because of all the in-game level editors and mod kits.

 

However, I think what you describe can be made more sensible by adding some general coding (specially AI) which takes care of things without the need to script everything.

 

Yeah, I thought of that as well. It's actually explained in the comments section of the original blog post this was reposted from. The AI of the enemies allows them to respond in a general manner to things like attacking, taking cover, but when you want them to behave exactly the way you want, then the surest (but also cumbersome) is to script every possibility.

 

In the game projects I've completed (granted, most of them have been on the Commodore 64 :) ) I've been content with just placing enemies, setting their health, weapon and perhaps initial AI state at most, so this article was kind of eye-opening, and also depressing in a way.


Note: Please offer only positive, constructive comments - we are looking to promote a positive atmosphere where collaboration is valued above all else.




PARTNERS