Starcraft Mapmaker's Guide
by Dead horse/Renolan
moritaron@hotmail.com

Contents:

  Part I: Frequently asked questions

  Part II: Tips and aesthetics

  Part III: Type-specific

  Part IV: Special utilities

This is a guide to using the starcraft campaign editor to make your own
maps. It covers how to use it in order to make a map, but it also
discusses what it is that makes a 'good' map (yes, I know that's a
loaded and opinionated word, but bear with me =P). I've tried to avoid
the technical stuff because MPeyrard's FAQ already covers that pretty
well (and more thoroughly than I would have the energy to do besides)
except for some specific questions that seem to come up a lot. This
focuses more on how to make the map look interesting, not how to make
the map functional (if that makes any sense =P).


Part I: Frequently asked questions

How do I use different tilesets? When the editor starts it always gives
me the badlands terrain.

To use different terrains, or to resize the map, go to new, and then
select the size and tileset that you want.

Why is it that whenever I tell it to place a certain terrain, it puts
some other terrain around it?

Some types of terrain require certain other types - for example, on the
badlands tileset, the structure terrain type can only be placed over
asphalt. If you try to place it over ordinary dirt, the editor will
create a section of asphalt, and put the structure over it. There's no
way to get around it (except maybe with a special utility) that's just
the way it goes.

Why can't I place structures?

Different types of terrain are at different elevations and may or may
not be able to be built on. The entire installation tileset is
unbuildable - no structures are allowed unless you are using a special
campaign editor. (more on that in the special utilities section)

How do I change a unit's starting health, shields, and stuff like that?

To edit the properties of units - % of HP, energy, whether they are
invincible, etc. - right click to turn the unit into a cursor, the
double-click on the unit(s) that you want to edit. You can use shift
and/or dragging and drawing rectangles to select multiple units. You
can also delete units by selecting them and then clicking on the 'x' on
the toolbar (or by selecting clear from Edit). Properties of units can
also be edited using triggers - any of the 'modify' type triggers will
work.

What is the purpose of the starting location?
Starting location is what part of the map the player first sees when
the game starts. In a non-use map settings game, it is also where the
players command center/hatchery/nexus starts. Random start location
means that the starting location for each player within a force is
picked randomly from among all the players' starting locations within
that force.

Why don't any of the units I place show up?
This probably because you are not playing use map settings. The only
units that get carried over into normal melee, free for all, top vs.
bottom, or whatever, are mineral fields, vespene geysers, critters, and
starting locations.

How do I get doors and floor/wall traps to work in installation maps?

Use the 'set doodad state' trigger, and put the location around the
doors/traps you want to affect. An enabled door is one that is closed,
and a disabled door is one that is open. A left door is one that starts
low on the left and slopes upward to the right. A right door is one
that slopes upward to the left. A pit door is one that is over
substructure, and part of the substructure doodad set. An upper level
door is one that is part of the wall doodad set, and over a normal
floor. Enabled guns and flamethrowers attack anything hostile, disabled
ones don't.

I made a map with a computer player in it, but it doesn't do anything.
How do I make it gather/build?

If you're making a map with computer towns, use AI scripts. This is
one of the most common mistakes. In order for the computer to gather
or build, you have to define the location for its base first. It
doesn't have to encompass the whole base, just the hatchery/nexus/
command center and maybe a few paces around it. Then, use the 
'run AI script at location' trigger, select that location, and then the
script that you want. Obviously, you want it to be the same race as the
computer player in question. If you want it to use brood war units, the
script has to have 'expansion' in its name. Expansion here does NOT
mean the script for an expansion into a second resource node - it means
the brood war expansion pack. If you want it to gather but not build
(like in an expansion) then make sure the script has the word 'town' in
it. Using the 'town' script on a main base will mean the computer will
never build anything, so don't. Wonderfully intuitive, isn't it?

How does elevation for locations work?

Basically, anything that can block line of sight for a ground unit is
considered an elevation change. That means dirt to high dirt on the
twilight tileset is an elevation change, while sunken ground to crushed
rock is not. The lowest elevation possible on a map is considered low
elevation (surprise), and it goes up through mid to high from there.

When I start a map I made using map settings in a multiplayer game, the
briefing displays but it acts like I hit start and ends right away.
Why?

Actions in a trigger inside a briefing or the game itself happen right
after another. You need to put in 'wait' triggers to make it so only
one thing executes at a time.

Why don't the computers attack each other when I put them in separate
forces?

Computers are allied by default in all game types except free for all.
You have to use the 'set ally status' trigger to make them enemies.

What's with 'modify resource amount' and 'modify hangar count'?

Resource amount is used for mineral fields and vespene geysers only, it
sets the resources remaining in them. You cannot set it to 0 and
eliminate it, but you can set it to 1 and it will give about the same
effect. You can also you it to make sure certain resource patches never
run out. Hangar count is for carriers and reavers only, it modifies the
number of interceptors/scarabs it has in storage.

Why do my triggers only execute once?

Triggers are by default one-time only happenings. If you want the map
to continue checking the trigger, you will have to include 'preserve
trigger' in the actions part.

Part II: Tips and aesthetics

This part contains general tips on how to make your map function well,
and look good interesting.

Terrain and doodads: 
In order to make your hills or temple walls thinner, create one, then
set the brush to its 'parent' terrain - whatever it is that the higher
ground sits on. Then, put that terrain one square away from the hill
or wall. It will remove one half of that wall and replace it with the
lower ground. This is nice if you want to create a maze-like feel, or
if you just want thinner walls to accomodate more buildings. Units will
be unable to move on top of it, but they won't be able to move through
it either. Using this, you can even create 'pillars' where 3/4 of the
hill/wall has been shaved off by surrounding terrain. Of course, you
could just use a doodad pillar instead.

If you want your map to have a lot of detail, don't use the infernal
ash world tileset. High ground and the fog of war blend into one black
mess, and it is hard to distinguish anything when you are on low ground
surrounded by cliffs.

If you want to have something going in a straight line (say a walkway)
do it on a diagonal. This may be somewhat inconvenient for you, but it
is much better for the person who has to look at it and play on it.
Because of the way the editor is set up, terrain running straight up
and down or to the side will take on a squiggly, and, in my opinion,
ugly look. There is a utility that lets you place terrain nice and
geometric, but it does this by sacrificing edges and making everything
look generally uglier and artificial (again, that's my opinion).

If you have too many of those straight lines and are doing something
other than a space or installation map, you should stop it. You want
your map to look like a real world, and nature does not use nice and
straight coastlines or hillsides. Don't make your map predictable -
that's one step away from boring. (I'll stop saying in my opinion now,
from now on that should just go without saying =P) Make lines terrain
boundaries slightly irregular, and vary the terrain types. If you're
doing space and installation, it's somewhat more excusable, since this
is manmade stuff we're talking about, but you should still use
different types of terrain even if it's not necessary for your units to
move around.

Doodads work the same way. Scatter them over the map, even if you don't
need them, and don't use a whole bunch of the same type in one area.
Don't make so many that it would block buildings or units, though.

Mission briefings:
It's hard to estimate how long it will take text to scroll. Keep
testing different wait times until you find a speed that you like. You
do not want it to go too slowly, or the players will get bored, but
you do not want it to go too quickly either. If it's any consolation,
few people ever read mission briefings anyway, even if it's their first
time playing that map. Don't ask why. You never ask why on Battle.net
;).

Some people like to put long waits at the end of their briefings,
others like them to just end when they end. There are pros and cons to
either choice. If you put a long wait then a player who isn't ready to
start yet isn't forced to press start until he is ready, but if you
don't put in a wait at the end at all then it's impossible for a player
to screw up the game by never pressing start or by dropping out in the
middle of the briefing.

Put useful information in the mission objectives - don't just say 'made
by ____'. Tell the player what they have to do to get to the next
stage, and to win. If you have space, also put general gameplay
information in there that they can refer to - even if they do read the
mission briefing they probably won't be able to remember all of it.
Keep anything you say short and to the point.

Triggers:
Name your switches, and comment your larger blocks of code. Not only
does it make it easier to understand, it also saves space. Comments
are lines of text that appear in place of the trigger body when you're
in the triggers menu.

Organize your code well. Put triggers that have something to do with
the same thing (like, say, handling a player's level ups in an RPG) in
the same place. It makes it easier for you to find things and harder to
forget about crucial triggers that you haven't seen because all your
triggers are in obscure places. You might even create blank triggers
(using the 'never' condition) with comments saying what each set of
triggers does. Example: Condition -Never, Actions -Comment: Triggers
for controlling Mrs. Claus (that's from one of Blizzard's old holiday
maps). This is the only real use for the 'never' condition, actually.

Explosions. Yes, everyone loves explosions. They make a map look cool
and spice up those dramatic moments. To simulate an explosion, choose
a unit with a rather explosive death sequence (like the archon or dark
archon) and create them and kill them at the same time. Spider mines
also work well. It looks something like this.

Condition: -Player brings at least one men to 'Explosion activation'
Actions:   -Create 1 Exploder at 'Explosion area' for player
           -Kill all Exploder at 'Explosion area' for player
This trigger, and the others like it inside this guide, is incomplete.
It depends on which player you want to use, and what type of unit you
want to use as the exploder.

You can create fog or mist using a similar effect - create a
hallucinated unit via the 'create unit with properties' trigger and
then kill it immediately afterward. Some maps create some pretty
graphic displays of blood by killing marines/medics/zerglings/whatever.

Don't use long wait triggers, they may be convenient but they have the
potential to screw up every other trigger on the map by keeping them
waiting. Only use them in mission briefings, where everything is
scripted and always does the same thing. For gameplay triggers, use
alternatives instead:

Original trigger:
 Condition: -Player brings at least one men to 'start'
 Actions:   -Wait 30,000 milliseconds.
            -Do X (yeah, this is major pseudocode)

Countdown timer. The game keeps track for you, but you can only have 1
timer running at a time.
Modified triggers:
 Condition: -Player brings at least one men to 'start'
 Action:    -Modify countdown timer: Set to 30 seconds

 Condition: -Countdown timer is at most 0 seconds.
 Action:    -Do X

Patrol counter. Have an invincible, neutral, and preferable invisible
unit patrol between two points. When it comes back to its starting
position, resolve the trigger.
Modified triggers:
 Condition: -Player brings at least one men to 'start'
 Actions:   -Create one observer at 'patrol start' for neutral
            -Order all observer at 'patrol start' owned by neutral:
             Patrol to 'patrol end'
            -Set 'patrol'

 Condition: -Neutral brings at least one observer to 'patrol start'
            -'patrol' is set
 Actions:   -Clear 'patrol'
            -Do X

Unit counter. This is a bit more complicated than the others, but it's
my personal favorite because it lets you keep a more precise track of
time than the patrol thing without having to use the countdown timer.
It goes something like this:

Modified triggers:
Condition:  -Player brings at least one men to 'start'
Action:     -Set 'start counter'

Condition: -'start counter' is set
Actions:-Create one burrowed, invincible, neutral zergling at 'counter'
         (via 'create unit with properties')
        -preserve trigger

Condition: -Neutral player brings at least 20 zerglings to 'counter'
Actions:   -clear 'start counter'
           -remove all zergling for neutral at 'counter'
           -Do X
Yes, it is complicated. But it works. The computer checks triggers
about once every 1.5 seconds, so it will come out to about 30,000 mils.
This concept is similar to the for loop in programming.

Part III: Type-specific

There are many different maps on Battle.net and elsewhere, and more are
created every day. They vary a lot, but there are some map types that
pop up again and again. This section deals with tips for *some* of
those specific types of maps.

Melee
This is the standard 'build up and kill your enemy' map.

If you are doing it for fair matchups (i.e. humans vs humans) then you
should try to make the map roughly symmetrical. No player should have
access to more resources than any other player, and no player should be
able drop tanks on an opponent's ledge when their own base lies on the
high ground. In other words, you want it to be fair. Use Blizzard's
maps as examples. Don't go too heavy on the doodads or rough terrain,
part of the fun of terran is being able to plant fortified outposts
wherever you want.

Keep in mind what type of map you want while you create it. If you want
players to have a lot of minerals, you should scatter the map with
expansions or maybe go the big game hunters route. If you want the
whole game to be a desperate scramble for resources, you should limit
the expansions and put those in heavily contested areas like the center
of the map for some fun. Most maps are somewhere between the two.
Similarly, you have to decide how easy it is for players to attack each
other. Do you want winding paths and high ground protecting each base,
or the cutthroat, no-holds-barred feel of hunters? It's up to you to
decide.

Madnesses
This is a map type where players get unlimited men and have to destroy
their enemies' bases.

You should put in some anti-rush mechanisms here, because maps like
these can see the tide turn very quickly. Using a bunker or other
defensive structure as the spawn point is a good idea. Give the
structure a lot of health and armor. (Go to scenario in the menu, then
unit and hero settings)

Keep in mind your unit counters. Don't make one side so horribly
unbalanced against everyone else that they always lose. In other words,
don't put vultures in the midst of dragoons and goliaths.

Do something that makes it unique. There are so many madnesses out
there that are essentially the same thing: a bunker as a spawn, and
players getting infinite units out of it. Add upgrades. Give them an
SCV, drone, or probe so that they can build. Make it so that they get
cash for kills. Changing the names of your units to the names of
characters in a popular game does NOT automatically make it as good as
that game - none of the final fantasy madness maps I've seen come
anywhere close to living up to their namesake. Actually, in my opinion,
it is impossible to make a madness unique, but you can certainly try.

RPGs
These are maps where each player controls one powerful unit that has to
defeat an array of lesser enemies.

Actually, the definition of an RPG is so fuzzy that there are a number
of ways of doing any particular thing. As a result, this guide will end
up making certain assumptions. I have nothing against trying something
new in map making - I'm all for it. But it's hard to predict the
unpredictable, so you'll have to bear with me here.

Because these maps generally involve little building, you can go
overboard with the doodads and terrain types. If there is any patch of
ground that looks too plain to you, just throw some doodads on it or
brush on a different terrain type on top of it. An RPG which consists
of one long, winding dirt road that is separated off by one-block
length dirt walls is very boring. You should put in alternate paths for
the player even if they don't lead anywhere except more enemies or
minor treasure. You want to give the players some choice in things.

In general, you want to give the players plenty of opportunity to heal.
Put it in the town or main base, or somewhere that is easily
accessible. There are some RPGs that do without this entirely - The
Nearly Impossible RPG is one example.

Keep the players balanced. If you plan on giving each player a
different unit, make sure those unit are of relatively even strength.
Don't just look at numbers, think about versatility, speed, and special
abilities as well. Two units you should perhaps avoid using entirely
are the marine and zergling. These units have fast attack, normal
damage, and can get incredibly powerful. They are much better off
being computer units. If you do decide to give them to the players,
limit their damage and their bonuses.

Disable special abilities like spawn broodling or stasis field. You
don't want the computer casting it on the players, and you don't want
players casting it on enemy bosses. To disable units, upgrades, or
special abilities for a specific player, go to player in the menu, then
settings. Whether you decide to get rid of lockdown, parasite, and
other less harmful abilities is up to you. You should definitely give
the players the ability to get medics and restoration if you leave
lockdown enabled.

If you allow the players to upgrade their units, make them take as
little time as possible. You want the players to spend as much time as
possible actually playing, not sitting around waiting for a green bar
to advance.

There are a number of times in an RPG where you might want to create
cutscenes. To prevent players from trying to do anything during these,
either give their units temporarily to a neutral player, or create
barriers that block movement like rows of crystals or invincible
neutral dark templar. Of course, by doing this, you are now forced to
make those cut scenes interesting, or else the players will become
annoyed and bored.

Many RPGs involve giving the player money for kills. Doing so is
relatively simple. It uses the kills score (or the kills and razings
score, if you'd rather use that). Every unit in starcraft already has
a point value, used in calculating the scores in games. You can also
take advantage of it in your maps.

Condition: -Player kills score is at least 50
Actions:   -Modify score for current player: subtract 50 kills
           -Modify resources for current player: add 5 ore.
           -Preserve trigger
Of course, doing this is rather slow. In large battles, the player will
end up with a much higher score than 50 and this only exchanges 50
every 1.5 seconds or so. You'll have to add in some others for larger
amounts of kills. You will have to use the 'score' type condition and
action, and then select the score type. Note that kills score is
different from kills - kills is just the number of kills the player has
for any type of unit, regardless of their point value.

Condition: -Player kills score is at least 250
Actions:   -Modify score for current player: subract 200 kills
           -Modify resources for current player: add 20 ore
           -Preserve trigger
Condition: -Player kills score is at least 1250
Actions:   -Modify score for current player: subtract 1000 kills
           -Modify resources for current player: add 100 ore
           -Preserve trigger

And so on. If you want, you can even modify the score value of specific
units. For example, the hydralisk ordinarily gives 350 points when
killed. However, by using this trigger,

Condition: -Player kills score is exactly 350
           -Modify score for current player: subtract 350
           -Modify score for current player: add 500 custom
           -Preserve trigger
the hydralisk now gives 500 when killed. This is one of the many uses
of the custom score. This is risky, though, because the player might
end up getting 350 by killing a combination of lesser units.

Give the RPG a gentle learning curve. Don't force a player to do too
many unfamiliar things at once. The first few battles, dungeons,
stages, whatever, should be winnable without the players having to use
special spells or stuff like that. Don't bombard the players with
text - phase in gameplay or plot information one block at a time.

Update the mission objectives each time the plot advances so the
players can remember what it is exactly that they're doing. It's easy
to lose track of things in the midst of monster bashing and leveling.

Some maps allow the players to use spells or special abilities that are
different from the ones in normal starcraft. These effects are entirely
trigger-driven. Usually, there is an area off to the side of the map
where the player has a unit and a set of beacons the player can bring
the unit to. Each one of those beacons represents a spell. Let's take
a common example: A player moves the unit to a beacon, and an infested
terran appears at his hero's location. A message appears on the screen
saying 'fireball cast' or something like that.

If you are going to use spells, you will need something to keep track
of mana or the number of spells the player has left. You can't have the
players constantly using their spells with no penalty. Most maps use
vespene gas to represent mana, and subtract from it every time a spell
is cast.

To keep the mana recharging:
Condition: -Player accumulates less than 200 gas
Actions:   -Modify resources for current player: add 1 gas
           -Preserve trigger

To keep track of where the hero is:
Condition: -Always
Actions: 
           -Center location labeled 'hero' at (whatever unit the hero
            is) owned by current player
           -Preserve trigger

and to do the actual spell-flinging:
Conditions:
   -Player brings at least one selector to 'spell beacon'
   -Player accumulates at least 50 gas
Actions:
   -Move all selector at 'spell beacon' to 'spell ready area'
(this is so the player doesn't inadvertantly cast the spell more times
than s/he wants to)
   -Modify resources for current player: subtract 50 gas
   -Modify energy for all units owned by enemy at 'hero': set to 0%
   -Modify energy for all (hero) owned by current player at 'hero':
    set to 100%
   -Display for current player: "MP Drain cast"
   -Preserve trigger
   -Comment: 'Cast MP Drain'
This is only an example, of course. You can make whatever spell effects
you want.

Another thing that vespene gas is used for to keep track of experience
levels. It is extremely convenient to do it this way because then you
can set all upgrades so that the player needs to be of a certain level
to use them.

Conditions: -Player kills score (experience) is at least 1000
            -Player kills score is at most 5000
Actions:    -Modify resources for current player: set to 2 gas
             (2nd level)
            -Preserve trigger, so that it keeps the gas at 2 when it is
             spent.
Then, you can just set your upgrades using scenario -> upgrade
settings. If you want it so that the player can upgrade his weapons at
levels 2, 7, and 12, then set the initial gas cost of the weapon
upgrade at 2 and make the factor 5.

Part IV: Special Utilities
You might have to do some searching around to find these. I suggest
http://www.google.com/.

StarGraft: This tool lets you edit tech trees, unit dependancies,
create new commands, stuff like that. I don't know much about it.

StarDraft: I don't know much about this either. It lets you modify
unit graphics, properties, (like having a hunter killer with cloaking)
etc.

Both StarGraft and StarDraft were created by Camelot Systems.

Emerald StarEdit: This special version of staredit allows you to place
units of all three races for a single player without having to use the
create trigger. It also introduces a whole bunch of new units and AI
scripts, including target nuke and recall. Some versions also allow you
to ignore building placement restrictions and have up to 255 upgrades.

Map Colors: Allows you to color the text in mission briefings, unit
names, and trigger messages. Simple, yet neat.



This guide was written by Carl Morita August 2001.
You can copy or excerpt it as much as you want, but give credit where
it is due, and do not give credit where it is not due.

MPeyrard: I know that you asked that no one else write a FAQ for the
campaign editor, but I had already started working on this before I saw
that note. I am not doing this out of any mean spirit... mostly, I just
want to share my knowledge and experience the same reward you did. I
have tried limit the overlap. If you still would rather not see it,
email me at moritaron@hotmail.com and I will ask GameFAQs to take it
down. (if CJayC decides to post it in the first place, which is
questionable... saturation of information and all that)
