//Welcome to the swamp tutorial campaign. Since it is, in fact, a tutorial, I've decided to fully annotate this as I go through it, so as to teach the more adventurous the campaign system as well.
map=tutorial0
//We start by calling the map. Since everything starts out fine, no zombies or broken things should exist yet. Though it feels as though thiscampaign only has 2 maps, in in fact calls 3.
level=1
//If a high level player enters this campaign it will be much more difficult than it should, due to the limitted availability of weapons, health and armor combining with the scaled zombie health increase for more experienced players. As this is meant to be a tutorial, startin everyone at level 1 seems the logical way to fix this.
no respawn
//According to the story, a small neighborhood is zombified. IT breaks immersion somewhat for the player to keep killing the same people over and over again. The limmitted amount of ammunition and health means you will have a greate deal of difficulty killing all the zombies present regardless.
start timer
//I use timers to trigger the tutorial messages. I find having information trickle in in small bursts is preferable to giant blocks of text, but unfortunately doing multiple say commands results in speech ignoring all but the last message in the stack. You can use brackets to review, but that's not really the kind of user experience you want out of a tutorial mission.
play sound ambience\WallBreak.wav
//Starting off with a bang!
add amb 32,61 fire1
//the numbers are X and Y coordinates. This is how to make sure a sound sits in a specific spot on the map. These concepts apply to placing items and zombies as well.
set music=Music\sniper.mp3
//Wanted something upbeat for the beginning section. This was the closest I found.
quest=You just can't deal with this now. Maybe in the morning, Yes. Sleep first, panic later. Find your way home and colapse into bed.
new var keys=0
//Checks to see if you have the keys when you try to leave.
change beacon id=13 50,91 your Bed
//The first clever thing I do. Since this is a barely modified LMS map, the beacons are all meant to mark entry points like broken windows and the like. Since the bed is a goal and the windows aren't, this makes the objective easier to find even though we don't necesarilly talk about beacons durring this section.
zone1 event Sidewalk
say=There's several different houses in this neighborhood. To find the specific one you're looking for, use the shifted number row to activate a beacon. For instance, shift-0 is your house. Press B to hear the location and distance of the selected beacon relative to you.
time event m=0 s=6
say=You extract yourself from the twisted wreckage that was once your car. What a disaster! This, [player.name], is why you never drink and drive.
time event m=0 s=10
say=To move around, use the d and a keys to sidestep, s to go backwards, and the right mouse button to move forwards. You can also use the mouse to turn your character, as well as shift-d and shift-a to snap to the nearest of the 8 cardinal directions. Press w to hear the direction you are currently facing.
time event m=0 s=20
say=Try this now. Your house is about 20 steps south of you. Get your poor drunk ass to bed! Feel free to explore the map; this is a good, all-American, crime free neighborhood, andif you get lost just restart the campaign and you'll be back here.
time event m=0 s=26
say=If you forget what you are supposed to be doing, you can press q at any time to hear your current objective. If you forget where you are, press V to hear the zones you occupy. Shift+v will give your exact map coordinates.
time event m=0 s=32
say=Swamp uses SAPI speech by default. If you use the JAWS, Window-Eyes, or NVDA screenreaders, press the tab key until it announces the name of your screenreader, and Swamp will use it. IF you are using SAPI, the page up and page down keys change the speaking rate.
block time event m=0 s=40
say=Game Messages are often silenced prematurely by keypresses or drowned out by sound effects. Use the [ (left bracket) and ] (right bracket) keys to review them. TO revew messages sent over the radio, use , (comma) and . (period).
stop timer
end event
//We stop this timer because it is done. As you will see, I use multiple timers. NO need to have redundant code going on.
zone2 event your house
say=to hear what's around you, use the radar. This is activated with the arrow keys. Shifting the arrow keys makes the radar more long range. E gives you a 360 degree view.
zone1 event Bedroom
say=The radar makes three sounds. The highest pitch one indicates open space. The bleep indicates a solid wall. The single-note beep indicates an obstacle, such as cars, windows, bridge railings, trees, tables, and the like. Obstacles can be shot through; walls cannot.
block zone1 event Bed
map=tutorial
jump to 50,91
d=270
set music=music\warehouse2.MP3
put sound 69,78 ambience/windowBreak.wav
say=Whoa! What was that? That sounded like one of your windows smashing. Nervously, you take your handgun out of the bureau and pocket two clips. Just in case...
give item 1 Glock 17
give item 34 9mm ammo
quest=It sounds like someone's breaking into your house! Better go investigate.
add zone2 canine=1 your house
end event
//Now we're on the main map, which is the LMS map packaged with the game, accept that "Debby's" is replaced with "your." The first map is a pristine version of the LMS map that has all the other houses closed up. Technically, the "right" way to do this would be to program in about 69105 tile changes, but this was easier. For me. Less easy for Aprone. Thanks by the way! The next two commands move the player to the bed and face him north. The rest should be self explanatory.
location event 59,76,65,85
say=To change weapons, use the number row. To fire, hit the left mouse button. Press R to load a clip into the weapon you've chosen. You can do this at any time without losing ammunition. Press z to hear the amount of ammo you have.
//This means that the instant the player enters the kitchen or dining room (between him and the spawned enemy) he will hear the information about how guns work. Nothing stops him from wandering into the dining room before that, which breaks imersion a bit, but I don't really care.
block kill event=canine
say=That dog was crazy! You jump, surprised by the sound of your old VHF radio. You grab it off a wall and take it with you.
radio=charlie says, "Hello? Hello? Does anyone hear me? Just say hello if you do!" TO open the chat console, press / (slash).
quest=GO find Charlie. The only survivor?
add random stalker=2
add random normal=2
add random canine=1
add ally spot 3,3,20,41 name=Charlie gun=Browning Citori
set ally aggression Charlie=full
set ally ammo Charlie=24
set ally aim Charlie=8
add zone2 reaper=1 Charlie's house
start timer2
end event
//Since these enemies are being spawned "off screen" in separate places, I could just as easily have added them durring the map change block event. I'm trying to create a progression that stops players from getting ahead of themselves.
block time2 event m=0 s=10
say=If that wild mutt hurt you, pressing x will tell you how much. Wearing armor reduces the damage you take from enemies. If your health drops below 70%, your items might break whenever you are attacked.
pause timer2
end event
block chat event=hello
radio=You briefly give Charlie a rundown of the past few minutes; he tells you that the whole neighborhood's been taken over. Most of the people are staying in doors but that won't last long.
radio=charlie says, "Look, I think we'll do better if we stick together, alright? Come and get me, I'm at my house." 
quest=GO find Charlie. Or a gun. Or a way out. Or some drugs, maybe...
end event
block zone2 event Charlie's house
start timer2
radio=charlie calls out, "Okay, I think I hear you now, tell me to leave and we'll get out of here.
say=You can tell humans from zombies by pressing shift+enter to track human players with a beep. To find a specific player, use the player tracker: select the player with o and p, then presss i to hear a bleep at that player's location. Press shift+i to play the beep continuously.
start timer2
end event
block time2 event m=0 s=11
say=The best thing to do with friends is make them do your bidding! Press f to open the voice command menu, then w to say hello. TO get your ally to follow you, use f then s. To make Charlie wait, press f and then c. There are many more commands you can use but not all of them are useful all of the time.
stop timer2
end event
block ally location event 24,11,25,45 Charlie 
say=You both discuss possible options for where to go next.
radio=Charlie Fortunately, we live in AMERICA. FUCK YEAH! And in AMERICA, (FUCK YEAH!) we still have goddamn guns, god dammit. My buddy Bob bought an AR15 that he's illegally modified to fire three-shot burst. He's always going on about it, the crazy bastard. If he's alive, he'll be the safest person to hang around, and if he's not, you sure could use it.
quest=Explore the other houses for useful items.
radio=You nod, then mention to him that your friend Stacy might have some medical supplies in her house. Amber just boughta car a few  weeks ago you'd love to steal, but you have no idea where she keeps her keys.
add random normal=7
add random stalker=7
add random canine=3
add item 4 3,3,93,93 *
end event
ally death event Charlie
say=Oh, no! The bastards were too much for your friend. If only he had used a quieter, faster weapon, he might not have run out of ammunition at the critical moment. Learn these lessons now, before learning them the hard way.
block zone2 event Bob's house
add item 1 8,78,8,78 AR15
add zone2 giant=1 Bob's house
say=You take items by walking over them. If you get lost in a building, toggle the building helper with shift+space. As you move, it will play one of two sounds. The lower pitched sound means you are moving towards an exit, whereas the higher pitched one indicates you are moving further inside the building.
end event
block pickup event AR15
say=Poor Bob. However, his loss is your gain! To activate your new assault rifle's three-shot burst mode, press the t key. All weapons have a secondary fire mode that is accessed this way.
quest=Get healed if you need to, then find a way out of here.
end event
fire event AR15
say=Nice shootin', Tex! Keep in mind though, you don't have much ammo for that thing, and it's very loud. Loud people often become food. Often times it's better to avoid conflict, or use the axe to both conserve ammo and make less noise.
block zone2 event Stacy's house
add item 1 68,3,68,3 Field kit
add item 3 48,3,77,7 Med kit
add zone2 lamprey=1 Stacy's house
end event
block zone1 event Garage
say=Some spots have special events that trigger when you press enter. Here, for instance. Amber's car appears to be in perfect working order, but the keys are missing, and you don't know a thing about hotwiring. Maybe her car keys are somewhere in her house? When you find them, press enter here to leave.
end event
block zone2 event Amber's house
add item 1 48,19,50,25 -Amber's car keys
add zone2 Matriarch=1 Amber's house
add zone1 tyrant=1 Garage
end event
block pickup event -Amber's car keys
set var keys=1
say=These should be useful, if you can find her car. It's probably parked in her garage.
quest=Find Amber's car and get the heck outta dodge.
end event
pickup event Field kit
say=Healing works the same way as shooting. You access your field kit with the ` key, load it with r, and use it with the left mouse button. IN multiplayer, this will also heal other players that are within a 7 tile radius of you.
pickup event Bloody clothes
say=Uh, oh! You, you unlucky person you, just got the zombie's blood on your clothes. The more blood you get on you, the easier a time tehy have spotting you and coming after you. You can get rid of them by using cleaning solution in your medkit.
//here's probably the most complicated command in the campaign.
block while keys=1 and location enter event 81,40,84,48
stop timer2
start timer3
level up
play sound Ambience\Truck.wav
map=multi1
set music=music\map1.mp3
quest=Press enter in the safe zone to get into the safe zone menu. Explore that menu, then explore the map.
add random normal=20
add random Reaper=20
add random Giant=20
add random Lamprey=20
add random Stalker=20
add random Tyrant=20
add random Matriarch=20
add random canine=20
add zone1 guard=1 Infront of the Safe zone
add item 150 1 3,3,[map.width],[map.height] *
set outpost1 title=Welcome to the outpost!
set outpost1 story=Every map with or connected to a safe zone has an outpost. You can buy equipment there and read more messages but are otherwise the same as any other location; you can shoot, or be eaten, and you will not be healed or have your clothes cleaned here.
set outpost2 title=The day was not going well.
set outpost2 story=I awoke to the sound of gunshots in the distance.  My neighborhood was filled with panicked screaming people, running back and forth everywhere.  No one knew what was happening!
set safe1 title=further reading
set safe1 story=The rest of the options are messages that are meant to give you information about the environment. This is how the plot is developed, as well as alerting you of changes from map to map. There is one safe zone per map and each have different gear, missions and plot.
set safe2 title=radio
set safe2 story=Typically, this game is played online, with multiple players from around the world, and for some strange reason these aliens don't always use English. Use < and > (less-than and greater-than signs) to change the radio's channel until you find one that suits you. If you find the radio annoying, silence it with alt slash. Pressing that again puts it in standby, meaning the radio will beep to indicate received messages but not read them. A question mark (?) tells you what players are connected.
set safe3 title=commands
set safe3 story=In addition to talking to people, the radio is also used to type commands. All of them begin with slash (after the first slash that opened the console). /e sends your message as an emote. /announce informs you when new missions are created. /R, /P, and /S is a rock, paper, scisors game and /roll rolls dice, both of which gamble reputation. /w <playername> <message> sends a private message to someone. /where, /deaths, /crates, /kills, and /stats <playername> all give information about a player.
end event
//Originally this info was all dumped at the end with timed events. I much prefer this approach. Since you are triggering the text yourself, you are in a more accepting mindset for receiving info dumps, which allows me to offload most of what I need to cover about the multiplayer and other stuff I had no other way to integrate.
time3 event m=0 s=7
say=You drive like a mad person until you come across a group of survivors. Now you are safe, in the safe zone. A pair of guards greet you from behind mounted machine guns. You don't see any zombies getting through there, and so safety your weapons. 
//The extra time, similar to the first timer, is to give the sound effect time to play so the speech isn't drowned out.
time3 event m=0 s=13
say=The safe zone heals you from damage and cleans your clothes if needed. More importantly, you may buy and sell equipment or upgrade your character here. Press enter to access the safe zone menu.
time3 event m=0 s=18
say=Quests give you an item to search for on the map that you can then donate for a sizeable reward. For instance, the car keys are considered a quest item. Try donating them now.
donate event -Amber's car keys
say=IN addition to donating items, you also earn reputation (and experience) from killing zombies. The more dangerous the kill, the more reputation you will receive. Reputation is used to go on quests, buy equipment, or join other peoples' missions.
block time3 event m=0 s=25
say=Now that you have leveled up, you have a skill point, which you can put into one of the many skills available. Manage your skills under "View your character."
stop timer3
end event
zone1 event Infront of the Safe zone
say=When you build enough reputation or find cans of fuel, you will be able to join or create warehouse missions. These involve teamwork to collect several crates for a large reward of reputation and experience pointsshared equally amongst your team. The other mission types have no cost, and offer no reward.
stop timer3
death event
say=That, in a nut shell, is swamp! Examine your keyconfig.ini file for suplamentary key commands not mentioned here, then when you feel confident of your skills, create a character, and join the multiplayer. We all look forward to seeing you there. Thanks for playing!