This tutorial will teach you how to setup the
necessary insertion zones, actors, and mission objectives for all 12
Raven Shield game modes.
This tutorial assumes that you are already
familiar with UnrealED and know how to perform basic functions in the
editor and how to load a simple custom map into Raven Shield. If this is
not the case, take a look at my earlier tutorial,
Building Your First Raven Shield Map, and then come back to this
one.
Note: If you're working on a
multiplayer-only map and don't care about single player or coop mission
objectives, I recommend you read the first section of this
tutorial--where we build the basic geometry of our sample map--then skip
down to Part III. which covers Adversarial game types. (But keep in mind
that everyone has a different game type that they love, so if you choose
not to support certain game types, you will alienate players would have
otherwise downloaded and enjoyed your map.)
Let's get started. Create a builder brush cube
sized Height=640,Width=2048,Breadth=2048. With this cube, subtract a
total of six rooms, each spaced 512 units apart, and each with a
different texture. Then, subtract a hallway sized
Height=320,Width=320,Breadth=14848 which connects all six rooms (make
sure you align the floor of the hallway with the floor of the rooms).
Your map should look roughly like this:
Now we're going to designate a name and purpose to each room; this may
seem silly at first, but I promise it will help us to keep the rooms
straight throughout this tutorial, and it will help you to keep track of
each of the insertions and objectives that we setup for each of the 12
game types. In the static mesh browser, open "Garage_SM.usx", choose
"Cars", and select "PoliceVan". Right click anywhere in the first room
and choose "Add Static Mesh: 'Garage_SM.Cars.PoliceVan'". I'll refer to
this room as the Front Street. In the static mesh browser, choose the
"Bureau" category and select the "Bureau" model. Right click anywhere in
the second room and choose "Add Static Mesh: 'Garage_SM.Bureau.Bureau'".
This room will be the Mayor's Office. In the third room, place the
'Garage_SM.Trees.plante_02' static mesh. This will be the Courtyard. In
the fourth room, place the 'Garage_SM.cafeteria.Snak_Machine' static
mesh. This room will be the Cafeteria. In the fifth room, place the 'Garage_SM.Bureau.BossTable'
static mesh. This will be the Conference Room. Open the Actor Classes
browser, expand "Emitter | R6SFX", and select "R6SmokeExtraction". Right
click anywhere in the sixth room and choose "Add R6SmokeExtraction
Here". I'll refer to this room as the Back Alley. Adjust the positioning
of the static meshes as necessary, making sure especially that each one
is aligned with the floor.
In the Actor Classes browser, expand "Info" and select "ZoneInfo". Right
click somewhere in the hallway and choose "Add ZoneInfo Here". Make sure
the ZoneInfo isn't embedded into the floor. Open the ZoneInfo
Properties, expand "ZoneLight", and set AmbientBrightness to "150". Hold
[Ctrl] and left click to select the hallway floor and the floor of each
room together. Right click and choose "Surface Properties (7 selected)".
Set Main Floor and Sec. Floor to "100" and select the "Walkable"
checkbox. Click the "Apply" button and close the Surface Properties
window. Right click in the first room and choose "Add Path Node Here".
Place path nodes throughout the map, ideally at least six in each room
and 20 spaced throughout the hallway (remember that if your path nodes
are spaced over 1000 units apart you will see a warning message when you
rebuild the map). Rebuild and save the map.
Part I. - Single Player
Single Player Story Mission
Let's add our first insertion zone. Open the Actor Classes browser,
expand "NavigationPoint | SmallNavigationPoint | PlayerStart |
R6AbstractInsertionZone", and select "R6InsertionZone". Right click in
the middle of the Front Street and choose "Add R6InsertionZone Here".
Double-click on the insertion zone (represented as a yellow square) to
open the properties window, and expand "Display". Change
m_bOutlinedInPlanning to "False". Change DrawType to "DT_StaticMesh".
Scroll down and select "StaticMesh". Click the "..." button, and browse
to "Garage_SM.Deployement_Zone.Deployement_Zone_01". Then go back to the
properties window and click the "Use" button. In the 3d view, the yellow
square will change to a larger square with the word "plan" plastered
over it. Reposition and rotate the insertion zone as necessary so that
it does not overlap any walls or the police van. Vertically, this
insertion zone should sit slightly above the floor. Back in the
properties window, expand "R6Planning". Change m_iPlanningFloor_0 to
"100" and change m_iPlanningFloor_1 to "100". Select m_PlanningColor,
click the "..." button, select the dark red color in the fourth row,
first column, and click the "OK" button. Expand R6Availability. Set
every game type to "MFO_NotAvailable" except for m_eStoryMode (after the
first one, press [DOWN ARROW], then the "m" key, [DOWN ARROW], then the
"m" key, etc. to do this quickly). Note that 'StoryMode' refers to the
single player practice mission while 'MissionMode' refers to the Coop
mission game type
Let's create four evil terrorists for our mission. Open the Actor
Classes browser, expand "R6DeploymentZone", and select "R6ZonePoint".
Right click in the Mayer's Office and choose "Add R6ZonePoint Here".
Open the properties for this terrorist and expand "R6ZoneTerrorist".
Expand "m_Template", expand "[0]", and change m_szName to "Oil-1". Set
m_eEngageReaction to "EREACT_AimedFire". Expand "R6Availability" and set
every game type to "MFO_NotAvailable" except for m_eStoryMode. Close the
properties window. With this terrorist still selected, press [CTRL]+w
three times to create duplicates of the R6ZonePoint. Drag one into the
Courtyard, one into the Cafeteria, and one into the Conference Room,
leaving the fourth in the Mayor's Office.
We're going to make this a pretty complex mission, so that I can
demonstrate different types of mission objectives. First we're going to
place a hostage, then a bomb, then a mission-critical laptop computer.
Select the terrorist in the Cafeteria and press [CTRL]+w. Open the
properties for the new copy; we're going to change him into a hostage.
Expand "R6ZoneTerrorist" and set m_iMaxTerrorist and m_iMinTerrorist to
"0". Expand "R6ZoneHostage" and set m_iMaxHostage and m_iMinHostage to
"1". Expand "m_HostageTemplates", expand "[0]", and change m_szName to
"Suit2-1". Move this hostage partway across the room from the terrorist.
Let's add an extraction zone so that we can rescue this hostage without
having to neutralize all of the terrorists. Open the Actor Classes
browser, expand "NavigationPoint | R6AbstractExtractionZone", and select
"R6ExtractionZone". Right click in the middle of the Back Alley and
choose "Add R6ExtractionZone Here". Double-click on the extraction zone
(represented as a yellow square) to open the properties window, and
expand "Display". Change m_bOutlinedInPlanning to "False". Change
DrawType to "DT_StaticMesh". Scroll down and select "StaticMesh". Click
the "..." button, and browse to
"Garage_SM.Deployement_Zone.Deployement_Zone_01". Then go back to the
properties window and click the "Use" button. Change DrawScale to "1.5"
to resize the extraction zone. Expand "R6Planning". Change
m_iPlanningFloor_0 and m_iPlanningFloor_1 to "100". Select
m_PlanningColor, click the "..." button, and select the solid green
color in the fourth row, third column, and click the "OK" button. Expand
R6Availability. Set every game type to "MFO_NotAvailable" except for
m_eStoryMode.
Next, we're going to place a bomb. Open the Actor Classes browser,
expand "R6InteractiveObject | R6IActionObject | R6IOObject", and select
"R6IOBomb". Right click in the Conference Room and choose "Add R6IOBomb
Here". We could change the static mesh of the bomb if we wanted to, or
we could hide the bomb actor and place it right on top of a visible
static mesh to represent to bomb, but I think the default model will
work fine here. Open the properties for the bomb and expand
"R6ActionObject". Set m_blsActivated to "True" to arm the bomb. Expand
"R6Availability". Set every game type to "MFO_NotAvailable" except for
m_eStoryMode.
Now we'll place the laptop computer. Return to the Actor Classes
browser, expand "R6InteractiveObject | R6IActionObject | R6IOObject",
and select "R6IODevice". Right click on the desk in the Mayor's Office
and choose "Add R6IODevice Here". Open the properties for the device and
expand "Display". Select StaticMesh and then click the "..." button.
Open "Island_SM.usx", choose "BreakableObject", and select "LapTop".
Return to the properties window and click the "Use" button. Expand
"R6ActionObject". Set m_bRainbowCanInteract to "True" and m_eAnimToPlay
to "BA_Keyboard". Expand "R6Availability" and set every game type to "MFO_NotAvailable"
except for m_eStoryMode. Reposition the laptop to sit nicely on the
desk, so that the Rainbow operatives will be able to reach it.
Let's place some mission intelligence icons to indicate the location of
our three objectives on the map. Open the Actor Classes browser, expand
"R6ReferenceIcons", and select "R6HostageIcon". Right click near the
hostage in the Cafeteria and choose "Add R6HostgeIcon Here". Open the
properties window, expand "R6Availability" and set every game type to "MFO_NotAvailable"
except for m_eStoryMode. Expand "R6Planning". Set m_iPlanningFloor_0 and
m_iPlanningFloor_1 to "100". Drag this icon directly over the hostage.
Return to the Actor Classes browser, expand "R6ReferenceIcons", and
select "R6ObjectiveIcon". Right click near the bomb in the Conference
Room and choose "Add R6ObjectiveIcon Here". Open the properties window,
expand "R6Availability" and set every game type to "MFO_NotAvailable"
except for m_eStoryMode. Expand "R6Planning". Set m_iPlanningFloor_0 to
"100" and m_iPlanningFloor_1 to "100". Drag this icon directly over the
bomb. Press [CTRL]+w to make one copy of the R6ObjectiveIcon. Hold
[SHIFT], drag the copy into the Mayor's Office, and place it directly
over the laptop computer (you may want to raise it a bit off the floor).
Note that in single player games, objective icons appear in both the
planning stage map and the in-game map, whereas hostage icons only
appear in the planning stage map.
Next, let's assign terrorists to interact with each of these actors.
Select the R6DZonePoint terrorist in the Cafeteria and open his
properties. Expand "R6DZoneTerrorist" and set m_HostageShootChance to
"80". Select m_HostageZoneToCheck and click the "Add" button. With [0]
selected, click the "Pick" button, then carefully left click the
eyedropper on the hostage in that same room. Now there is a high
probability that the terrorist guarding the Cafeteria will try to kill
the hostage when he realizes he's in danger.
Enabling terrorists to toggle (interact with) bombs and IODevices is a
little more complicated; we need to use InteractiveObjects to tell them
what to do. Open the Actor Classes browser, and select
"R6InteractiveObject". Right click next to the bomb in the Conference
Room and choose "Add R6InteractiveObject Here". Then, open it's
properties. Expand "Advanced" and set bDirectional to "True" and bHidden
to "True". Expand "Collision" and set bBlockActors, bBlockPlayers, and
bCollideActors all to "False". And before we forget, expand
"R6Availability" and set every game type to "MFO_NotAvailable" except
for m_eStoryMode. Expand "R6Action" and select m_ActionList. Click the
"Add" button. Select New, choose "R6InteractiveObjectActionGoto", and
then click the "New" button. Expand "Goto", select m_Target, click the
"Pick" button, and then click the eyedropper on the InteractiveObject
actor (not the bomb). Select m_ActionList again. Click the "Add" button.
Select New, choose "R6InteractiveObjectActionPlayAnim", and then click
the "New" button. Expand "PlayAnim" and set m_vAnimName to "RelaxValve_b".
Select m_ActionList once more. Click the "Add" button. Select New,
choose "R6InteractiveObjectActionToggleDevice", and then click the "New"
button. Expand "ToggleDevice". Select m_aIOBombs and click the "Add"
button. With [0] selected, click the "Pick" button and left click the
eyedropper on the bomb.
Now reposition the InteractiveObject actor so that it sits a foot or two
above the floor, exactly where you want the terrorist to stand when he
sets off the bomb, and make sure the red arrow points right at the
keypad on the bomb so that he'll face in the proper direction. Now,
Select the R6DZonePoint terrorist in the Conference Room, open his
properties, and expand "R6DZoneTerrorist". Select m_InteractiveObject,
click the "Pick" button, and then left click the eyedropper on the
InteractiveObject actor we just created (not on the bomb). That's it!
Now, at the first sign of trouble, the terrorist in the Conference Room
will run to the bomb and fiddle with the mechanics to immediately
detonate it. He won't waste any time, so I recommend placing him a good
distance from the bomb. If you needed to slow him down, you could add
additional animations to the ActionList and increase the
m_fActionInterval value.
If we wanted to, we could order the terrorist in the Mayor's Office to
run to and toggle the laptop in a similar manner, but we're actually
going to make that laptop a victory condition, rather than a failure
condition of the mission. In other words, I'm going to require the
Rainbow team to place a bug in the laptop as part of their mission. (Of
course this doesn't make much sense outside of a recon mission, but I
want you to see how it's done since we won't be creating a recon mission
in this tutorial.)
Let's go setup all the victory and failure conditions now. Open the
"View" menu in the editor, choose "Level Properties", and expand
"R6MissionObjectives". Select m_aMissionObjectives and click the "Add"
button. Select New, choose "R6MObjObjectInteraction", and click the
"New" button. Expand "R6MissionObjectiveBase". Change
m_bIfCompletedMissionIsSuccessfull to "False". (Because this is not the
only mission objective, we don't want the mission to automatically end
as soon as the bug is planted.) Set m_szDescriptionInMenu to "PlaceBugInTheComputer"
and m_szFeedbackOnCompletion to "TheComputerHasBeenBugged". (Both of
these settings pull text from a localization file which I'll mention in
more detail later). Expand "R6MObjObjectInteraction" and set
m_bIfDeviceIsDeactivatedObjectiveIsCompleted to "True". Select
m_r6IOObject, click the "Pick" button, and left click the eyedropper on
the laptop. If we were to test the map at this point, the mission would
end successfully as soon as you or one of your operatives bug the
computer, regardless of whether the terrorists are still alive, and
regardless of whether the bomb has detonated.
Don't close the Level Properties window yet. We're going to create our
hostage rescue mission objective. Select m_aMissionObjectives again and
click the "Add" button. Select New, choose "R6MObjGroupMission", and
click the "New" button. The 'GroupMission' objective allows you to group
multiple objectives together for situations where an objective can be
accomplished through more than one avenue. For example, hostages can be
rescued by escorting them to an extraction zone, or by neutralizing all
terrorists. Expand "R6MissionObjectiveBase". Set m_szDescriptionFailure
to "HostageWasKilled" and m_szDescriptionInMenu to "RescueTheHostageToExtractionZone".
Expand "R6MObjGroupMission". Select m_aSubMIssionObjectives and click
the "Add" button. Select New, choose "R6MObjRescueHostage", and click
the "New" button. Expand "R6MissionObjectiveBase" and set
m_szFeedbackOnCompletion to "AllHostagesHaveBeenRescued". Select
m_aSubMissionObjectives again and click the "Add" button. Select New,
choose "R6MObjNeutralizeTerrorist", and click the "New" button. Expand
"R6MissionObjectiveBase" and set m_szFeedbackOnCompletion to "AllTerroristHaveBeenNeutralized".
Note that m_iMinSuccessRequired is set to "1", so that if either of our
two sub-objectives are accomplished, this "GroupMission" objective will
be accepted as complete.
Finally, let's create our disarm bomb mission objective. Scroll up,
select m_aMissionObjectives once more, and click the "Add" button.
Select New, choose "R6MObjGroupMission", and click the "New" button.
Because there is only one terrorist with orders to detonate the bomb, we
can prevent detonation either by disarming the bomb or by killing that
terrorist. Expand "R6MissionObjectiveBase" and set
m_bIfFailedMissionIsAborted to "True". This will cause the mission to
end immediately if the bomb detonates. Set m_szDescriptionInMenu to "PreventOneBombDetonation".
Set m_szFeedbackOnCompletion to "BombDetonationPrevented". Expand
"R6MObjGroupMission". Select m_aSubMissionObjectives and click the "Add"
button. Select New, choose "R6MObjPreventBombDetonation", and click the
"New" button. Expand "R6MObjObjectInteraction". Select "m_r6IOObject",
click the "Pick" button, and left click the eyedropper on the bomb in
the Conference Room. Select m_aSubMissionObjectives again and click the
"Add" button. Select New, choose "R6MObjNeutralizeTerrorist", and click
the "New" button. Expand "R6MObjNeutralizeTerrorist". Select "m_depZone",
click the "Pick" button, and left click the eyedropper on the terrorist
in the Conference Room.
Before we close the level properties window, take a look at the
m_szMissionObjLocalization setting. This setting references a
localization file in the "\Ravenshield\system\" directory named
"R6MissionObjectives". (For most of you, the file will have an .INT
extension.) All of the menu descriptions and success and failure
messages we specified are being pulled from this file. In this sample
mission, we were fine using the standard mission objective descriptions
and messages, but for a very unique or specific custom mission (prevent
the release of SmallPox, prevent the assassination of George Bush,
etc.), you'll probably want to create your own localization file.
Overall, the Mission Objectives settings are pretty flexible and should
allow for some very creative custom missions.
It is important to note that the victory and failure conditions we
specified in this part of the tutorial only apply to the single player
and coop "Mission" game types. All other game types will automatically
inherit the correct mission objectives as long as you setup the proper
insertion zones, extraction zones, hostages, and devices.
If you made it this far, you'll coast through the rest of this tutorial.
Let's test out our new single player mission. Make sure you load the map
as a "Practice Mission" since we haven't setup any other single player
game types yet. Important Note: If you
still have the map open in the editor, do NOT launch Raven Shield from
the Joystick button in UnrealED; launch it from a desktop icon instead.
If you launch RvS from the Joystick button, your mission objectives
won't show up in-game. I don't know why this occurs but it had me
puzzled for hours, and I want to save you my pain.
Press [ESCAPE] occasionally while playing to monitor your
objectives and pay close attention to what triggers completion of each
mission objective.
Single Player Terrorist Hunt
For our Terrorist Hunt, we could use the exact same insertion zone that
we created for the single player mission. All we'd need to do is set
R6Availability.m_eTerroristHunt to "MFO_Available". But what fun would
that be? After all, the point of a game type like tango hunt is to
extend the value of the map, to mix it up a bit. So let's start the
player in a different area. Select the insertion zone we created in the
Front Street and press [CTRL]+w to create a copy of it. Hold [SHIFT] and
drag the new insertion zone all the way into the Cafeteria. Expand
R6Availability. Change m_eStoryMode to "MFO_NotAvailable" and set
m_eTerroristHunt to "MFO_Available".
Now, let's add some random terrorist insertions points. Note that while
you can use RandomPoints, ZonePoints, and ZonePaths in StoryMode, you
only use RandomPoints in the TerroristHunt, LoneWolf, and Hostage Rescue
game types. Open the Actor Classes browser, expand "R6DeploymentZone",
and select "R6ZoneRandomPoints". Right click in the Courtyard and choose
"Add R6ZoneRandomPoints Here". (You only need to do this step once, no
matter how many random terrorists you wish to spawn.) Open the
properties of the actor that was just created (the larger blue man).
Expand "R6ZoneTerrorist". Expand "m_Template", expand "[0]", and change
m_szName to "Garage-1". Expand "R6Availability" and set every game type
to "MFO_NotAvailable" except for m_eTerroristHunt. Expand "Object" and
set Group to "RandomTangos". Expand "R6DZone". Select m_aNode and click
the "New" button to create a new node (represented by the smaller blue
man). Each RandomPointNode provides another random spot where a
terrorist could spawn. Select m_aNode and click the "New" button eight
more times so that we have a total of ten RandomPointNodes created.
Select all ten RandomPointNodes, open the properties window, expand
"R6Availability" and set every game type to "MFO_NotAvailable" except
for m_eTerroristHunt. Expand "Object" and set Group to "RandomTangos".
Now, drag each RandomPointNode to a different area of the map (but don't
place any in the Cafeteria, unless you want a dangerous insertion).
That's all there is to setting up a terrorist hunt. However, on a full
size map, you should place at least 50 RandomPointNodes, and I recommend
placing closer to 200 so that it seems like terrorists are never in the
same place twice. Load up the map in game, and try a terrorist hunt with
5 terrorists. (Note that if you set the game to 10 terrorists or more,
all 10 of our RandomPointNodes will be utilized and there won't be
anything random about it.) When you're done testing, go back to the
editor.
Now is a good time to show you one nice feature of the editor. Open the
"Visibility" menu and choose "Story Mode (Campaign)". Notice that all of
the actors we just placed have become hidden. Open the "Visibility" menu
again and choose "Terrorist Hunt". Now, the RandomPointNodes appear, but
the hostage, bomb, and laptop computer are all hidden. Open the
"Visibility" menu once more, and choose "All Mode" to display all actors
again.
Single Player Lone Wolf
For our lone wolf game, let's start the player in the back alley and
then force him/her to cross the entire map to reach the Police Van.
Select the insertion zone we created in the Cafeteria and press [CTRL]+w
to create a copy of it. Hold [SHIFT] and drag the new insertion zone
into the Back Alley. Expand R6Availability. Change m_eTerroristHunt to "MFO_NotAvailable"
and set m_eLoneWolf to "MFO_Available". If this insertion zone is too
large for your tastes, expand "Display", and change the DrawScale
setting (this only affects how large the zone will appear in the
planning stage). Next, select the extraction zone in the Back Alley and
press [CTRL]+w to create a copy of it. Hold [SHIFT] and drag the new
insertion zone all the way into the Front Street. Expand
"R6Availability". Change m_eStoryMode to "MFO_NotAvailable" and set
m_eLoneWolf to "MFO_Available".
Since we already have random Terrorist Hunt deployments placed
throughout the map, it makes sense to reuse them for Lone Wolf mode.
Search out and select all ten RandomPointNodes and the
R6DZoneRandomPoint (the larger blue man) that we placed in the
Courtyard. (It's not the end of the world if you miss a RandomPointNode
or two, but it's important you you get the R6DZoneRandomPoint.) Since we
added these all of these to the same Group, the easiest way to reselect
them all is to first make sure you don't have any actors selected, then
open the Groups browser, click the "Refresh Group List" button, select "RandomTangos",
open the "Edit" menu, and choose "Select Actors". Once all 11 actors are
selected, open the properties window, expand "R6Availability", and set
m_eLoneWolf to "MFO_Available".
Single Player Hostage Rescue
For our hostage rescue game, let's use our Lone Wolf Back Alley
insertion zone, plus let's reuse both extraction zones we created
earlier, so that the player can choose to escort hostages to the Front
Street or the Back Alley. Select the Extraction Zone in the Front Street
and the Insertion and Extraction Zones in the Back Alley together. Open
the properties window, expand "R6Availability", and set m_eHostageRescue
to "MFO_Available". Be careful not to touch any other settings, or we'll
screw up the other game types.
We could use the same hostage from the single player mission, but I
think it would be more fun to create two new hostages in different
rooms. Select the hostage in the Cafeteria and press [CTRL]+w to make a
copy. Hold [SHIFT] and drag the new hostage into the Conference Room.
Open the properties window and expand "R6ZoneHostage". Expand "m_Template",
expand "[0]", and change m_szName to "CasualWoman2-1". Expand
"R6Availability". Change m_eStoryMode to "MFO_NotAvailable" and set
m_eHostageRescue to "MFO_Available". With the new hostage still
selected, press [CTRL]+w to make one more copy. Hold [SHIFT] and drag
one of these new hostages into the Courtyard.
Let's also place two mission intelligence icons to indicate the location
of our two hostages. Select the R6HostageIcon in the Cafeteria and press
[CTRL]+w to make a copy. Hold [SHIFT] and drag the copy into the
Courtyard. Open the properties window and expand "R6Availability".
Change m_eStoryMode to "MFO_NotAvailable" and set m_eHostageRescue to "MFO_Available".
With the R6HostageIcon still selected, press [CTRL]+w to make another
copy. Drag one icon over the hostage in the Courtyard, and the other
over the hostage in the Conference Room.
I guess we need some bad guys to guard these hostages. Let's use the
same random terrorists once more. Select all ten RandomPointNodes and
the R6DZoneRandomPoint in our "RandomTangos" group. (If you use the
group browser, make sure you don't have any actors selected first.) Open
the properties window (confirm that the top of the window indicates '11
selected'), expand "R6Availability", and set m_eHostageRescue to "MFO_Available".
We don't need to assign any terrorists to guard specific hostages as we
did in single player mission mode; in the Hostage game type, the
terrorists will automatically start gunning for the hostages once you're
spotted.
Part II. - Cooperative
Coop Mission
Since we already have all of our StoryMode actors in place, we just need
to make these same actors available in coop mode, as well as create some
additional insertion zones. Open the "Visibility" menu and choose "Story
Mode (Campaign)". Select the laptop, bomb, InteractiveObject,
terrorists, hostages, intelligence icons, and extraction zone together
(basically everything except for the insertion zone and our static
meshes). Expand "R6Availability", and set m_eMissionMode to "MFO_Available".
Be careful not to touch any other settings. Open the "Visibility" menu
again and choose "All Mode".
Notice that we are not sharing the same insertion zone that StoryMode
uses. Coop insertion zones are a little different, so let's create one
from scratch. Open the Actor Classes browser, expand "NavigationPoint |
SmallNavigationPoint | PlayerStart | R6AbstractInsertionZone", and
select "R6InsertionZone". Right click somewhere in the Front Street near
the StoryMode insertion zone and choose "Add R6InsertionZone Here".
Double-click on the new insertion zone to open the properties window,
and expand "Display". Select "Texture" and click the "..." button (if
the texture browser doesn't automatically open, open it manually).
Browse to "R6_Common.MP_Coop" (you may need to click the "load entire
package" button to see 'MP_Coop'). Then go back to the properties window
and click the "Use" button. Expand "R6Planning". Change
m_iPlanningFloor_0 to "100" and change m_iPlanningFloor_1 to "100".
Expand "R6Availability". Set every game type to "MFO_NotAvailable"
except for m_eMissionMode.
Notice that the yellow square has changed to a smaller blue square with
the letter "C" on it. With the Coop insertion zone still selected, press
[CTRL]+w seven times. Reposition your eight new coop insertion zones so
that they are close, but not too close together. Don't be afraid to
overlap these insertion zones with the single player mission insertion
zone (in fact I recommend placing them all in the same general space as
the single player insertion in a staggered formation). Now, load the
game and test the map in Coop Mission mode.
Coop Terrorist Hunt
If you've gotten this far in the tutorial, you should know exactly what
needs to be done to enable our terrorist hunt to work in coop mode.
First, select all 11 actors in the "RandomTangos" group. Open the
properties window, expand "R6Availability", and set m_eTerroristHuntCoop
to "MFO_Available".
We could use the same coop insertion zones as the Coop Mission Mode, but
I think it would be better if the Coop Terrorist Hunt ran pretty much
the same as the single player Terrorist Hunt, inserting the team into
the Cafeteria. Select one of the Coop insertion zones in the Front
Street and press [CTRL]+w. Drag the new copy into the Cafeteria. Open
it's properties and expand "R6Availability". Change m_eMissionMode to "MFO_NotAvailable"
and set m_eTerroristHuntCoop to "MFO_Available". Then press [CTRL]+w
seven times and reposition the resulting eight coop insertion zones.
Coop Hostage Rescue
Select the hostage in the Courtyard, the hostage in the Cafeteria, both
extraction zones, and all 11 actors in the "RandomTangos" group,
together. Open the properties window, expand "R6Availability", and set
m_eHostageRescueCoop to "MFO_Available". Select one of the Coop
insertion zones in the Cafeteria and press [CTRL]+w. Drag the new copy
into the Back Alley. Open it's properties and expand "R6Availability".
Change m_eTerroristHuntCoop to "MFO_NotAvailable" and set
m_eHostageRescueCoop to "MFO_Available". Then press [CTRL]+w seven times
and reposition the resulting eight coop insertion zones.
Part III. - Adversarial
Adversarial Team Survival
For a Team Survival game on a single floor map like this one, it makes
sense to place the two team's insertion zones on opposite sides of the
map. We'll start the Green Team in the Front Street and the Red Team in
the Back Alley. Since I know some of you have skipped the single player
and coop portions of this tutorial and jumped directly to this
paragraph, we'll create the adversarial insertion zones from scratch.
Open the Actor Classes browser, expand "NavigationPoint |
SmallNavigationPoint | PlayerStart | R6AbstractInsertionZone", and
select "R6InsertionZone". Right click somewhere in the Front Street and
choose "Add R6InsertionZone Here". Double-click on the new insertion
zone to open the properties window, and expand "Display". Select
"Texture" and click the "..." button (if the texture browser doesn't
automatically open, open it manually). Browse to "R6_Common.MP_Green"
(you may need to click the "load entire package" button to see 'MP_Green').
Then go back to the properties window and click the "Use" button. Expand
"R6Planning". Set m_iPlanningFloor_0 and m_iPlanningFloor_1 to "100".
Expand "R6Availability". Set every game type to "MFO_NotAvailable"
except for m_eTeamDeathmatch (after the first one, press [DOWN ARROW],
then the "m" key, [DOWN ARROW], then the "m" key, etc. to do this
quickly).
Close the properties window. You'll notice that the yellow square has
changed to a smaller green square with a 'G' on it. Note that since
multiplayer insertion zones don't show up anywhere in-game, the texture
that you assign in the Display properties has no effect whatsoever on
the functioning of your map. The sole purpose of assigning these
textures is so that you can keep everything straight in the editor. With
that said, I highly recommend assigning the appropriate R6_Common
texture to each and every multiplayer insertion zone that you create.
With the new insertion zone still selected, press [CTRL]+w seven times
to create seven copies of it. Reposition your eight Green Team insertion
zones so that they are close, but not too close together. In general,
make sure insertion zones don't ever overlap geometry or static meshes,
but there's no harm in them overlapping other insertion zones from other
game types.
Now, let's create insertion zones for the Red Team. Select one of the
Green Team insertion zones and press [CTRL]+w. Hold [SHIFT] and drag the
new copy all the way into the Back Alley. Open this insertion zone's
properties and expand "Display". Select "Texture" and click the "..."
button (if the texture browser doesn't automatically open, open it
manually). Select "R6_Common.MP_Red". Then go back to the properties
window and click the "Use" button. Expand "Rainbow" and set
m_iInsertionNumber to "1". Note that this is first time in this tutorial
that we've touched the m_iInsertionNumber setting. Single player, coop,
deathmatch, and green team insertion zones all use the default insertion
number of "0"; an m_iInsertionNumber set to "1" always designates the
red team for adversarial games. Close the properties window. You'll
notice that the green square has changed to a red square with an 'R' on
it. With the insertion zone still selected, press [CTRL]+w seven times
to create seven copies of it. Reposition your eight Red Team insertion
zones so that there is some space between each one. (If necessary, feel
free to rearrange the single player and coop actors to make room for
these new insertion zones.)
Adversarial Deathmatch
The Deathmatch game type (also referred to as 'Survival') is one of the
easiest game types to setup. Select one of the Green Team insertion
zones in the Front Street and press [CTRL]+w to create a copy of it.
Hold [SHIFT] and drag the new copy into the hallway. Open the properties
window and expand "Display". Select "Texture" and click the "..." button
(if the texture browser doesn't automatically open, open it manually).
Select "R6_Common.MP_DMatch". Then go back to the properties window and
click the "Use" button. Expand "R6Availability". Change
m_eTeamDeathmatch to "MFO_NotAvailable" and set m_eDeathmatch to "MFO_Available".
Close the properties window. You'll notice that the green square has
changed to a yellow square with a 'D' on it. With the insertion zone
still selected, press [CTRL]+w 15 times to create a total of 16
deathmatch insertion zones. Drag each insertion zone to a different area
of the map.
Ideally, you should place deathmatch insertions so that no player can
see another at the start of the game (but that would be tough to do on
our 6-room map). It's been suggested to me that you might want to place
far more than 16 insertion zones for deathmatch games, to add a random
element and prevent players familiar with the map from ever predicting
exactly where another player will spawn.
Adversarial Pilot
For our Pilot game (also referred to as 'escort'), we'll reuse the same
insertion zones as Team Survival, and require the pilot to make his way
from the Front Street to the Back Alley. Hold [CTRL] and select all of
the Green Team and Red Team insertion zones together. Open the
properties for all 16 zones and expand "R6Availability". Set m_eEscort
to "MFO_Available". We don't need to do anything special to spawn the
'pilot'; he will automatically spawn in one of the normal Green Team
insertion zones.
Now, let's reuse the extraction zone we created for Mission and Hostage
Rescue games; double click the extraction zone in the Back Alley to open
it's properties. Expand "R6Availability" and set m_eEscort to "MFO_Available".
(If you skipped the single player
portion of this tutorial, place a new extraction zone as follows: Open
the Actor Classes browser, expand "NavigationPoint |
R6AbstractExtractionZone", and select "R6ExtractionZone". Right click in
the middle of the Back Alley and choose "Add R6ExtractionZone Here".
Double-click on the extraction zone (represented as a yellow square) to
open the properties window, and expand "Display". Change
m_bOutlinedInPlanning to "False". Change DrawType to "DT_StaticMesh".
Scroll down and select "StaticMesh". Click the "..." button, and browse
to "Garage_SM.Deployement_Zone.Deployement_Zone_01". Then go back to the
properties window and click the "Use" button. Expand "Display" and set
DrawScale to "1.5". Expand "R6Planning". Set m_iPlanningFloor_0 and
m_iPlanningFloor_1 to "100". Select m_PlanningColor, click the "..."
button, select the solid green color in the fourth row, third column,
and click the "OK" button. Expand "R6Availability. Set all game types to
"MFO_NotAvailable" except for m_eEscort.)
Test out the map in pilot mode if you'd like (choose the Green Team, and
if you're the only player you'll automatically become the pilot).
Notice, if you haven't before, that extraction zones are automatically
visible in the in-game map (this is the case regardless of the game type
and is not based on any settings that we assigned).
Adversarial Bomb
For our Adversarial Disarm Bomb game, let's place bombs in the Front
Street and Courtyard. Open the Actor Classes browser, expand
"R6InteractiveObject | R6IActionObject | R6IOObject", and select
"R6IOBomb". Right click in the Courtyard and choose "Add R6IOBomb Here".
Open the properties for the bomb and expand "Display". Select StaticMesh
and click the "..." button. Browse to
"R6ActionObjects.MpBomb.MpBomb_01". Return to the properties window and
click the "Use" button. Expand "R6ActionObject". Select m_ArmedTexture
and click the "..." button (if the texture browser doesn't open
automatically, open it manually). Browse to
"R6_Textures_ActionObject.MpBomb_RED_SHDR". Return to the properties
window and click the "Use" button. Set m_fDisarmBombTimeMax and
m_fDisarmBombTimeMin to "6". Change m_fGainTimeWithElectronicsKit to
"3". Expand "R6Availability". Set every game type to "MFO_NotAvailable"
except for m_eBomb. With the bomb still selected, press [CTRL]+w to
create a copy. Hold [SHIFT] and drag the second bomb into the Front
Street. Open the properties of the second bomb and expand "Display".
Select StaticMesh and click the "..." button. Browse to
"R6ActionObjects.MpBomb.MpBomb_02". Return to the properties window and
click the "Use" button.
Let's place some reference icons so new players will know where to find
each bomb. Open the Actor Classes browser, expand "R6ReferenceIcons",
and select "R6ObjectiveIcon". Right click near the bomb in the Courtyard
and choose "Add R6ObjectiveIcon Here". Open the properties window, and
expand "Display". Select Texture and click the "..." button (if the
texture browser doesn't open automatically, open it manually). Browse to
"R6Planning.Icons.PlanIcon_Bomb_A". Return to the properties window and
click the "Use" button. Expand "R6Availability" and set every game type
to "MFO_NotAvailable" except for m_eBomb. Expand "R6Planning". Change
m_iPlanningFloor_0 to "100" and change m_iPlanningFloor_1 to "100". Drag
this icon directly over the bomb and raise it off the floor a bit. Press
[CTRL]+w to make a copy. Hold [SHIFT], drag the copy into the Front
Street and place it over the second bomb. Open the properties of the
second bomb and expand "Display". Select Texture and click the "..."
button (if the texture browser doesn't open automatically, open it
manually). Choose the "R6Planning" package, choose the "Icons" group,
and select "PlanIcon_Bomb_B". Return to the properties window and click
the "Use" button.
Since the Green Team needs to defend the bombs, let's reuse the same
insertion zones as before, starting the Green Team in the Front Street
and the Red Team in the Back Alley. Hold [CTRL] and select all of the
Green Team and Red Team insertion zones together. Open the properties
for all 16 zones and expand "R6Availability". Set m_eBomb to "MFO_Available".
Adversarial Hostage
For our Adversarial Hostage game, we'll place hostages in the Mayer's
Office and Cafeteria, and start the rescuing Green Team in the Back
Alley. Open the Actor Classes browser, expand "R6DeploymentZone", and
select "R6ZonePoint". Right click in the Mayer's Office and choose "Add
R6ZonePoint Here". Open the properties for this actor; currently he's a
terrorist, but we're going to change him into a hostage. Expand
"R6ZoneTerrorist" and set m_iMaxTerrorist and m_iMinTerrorist to "0".
Expand "R6ZoneHostage" and set m_iMaxHostage and m_iMinHostage to "1".
Expand "m_Template", expand "[0]", and change m_szName to
"CasualMan1-1". Expand "R6Availability" and set every game type to "MFO_NotAvailable"
except for m_eHostageRescueAdv. With the hostage still selected, press [CTRL]+w
to create a copy. Hold [SHIFT] and drag the second hostage into the
Cafeteria.
Let's place some hostage icons so new players on the map will know where
to go. Open the Actor Classes browser, expand "R6ReferenceIcons", and
select "R6HostageIcon". Right click near the new hostage in the
Cafeteria, and choose "Add R6HostgeIcon Here". Open the properties
window, expand "R6Availability" and set every game type to "MFO_NotAvailable"
except for m_eHostageRescueAdv. Expand "R6Planning". Set
m_iPlanningFloor_0 and m_iPlanningFloor_1 to "100". Drag this icon
directly over the hostage. With the R6HostageIcon still selected, Press
[CTRL]+w to make a copy. Hold [SHIFT], drag the new icon into the
Mayor's Office and place it over the first hostage.
Now let's make new Back Alley insertion zones for the good guys, the
Green Team. Select one of the Green Team insertion zones in the Front
Street and press [CTRL]+w to create a copy. Hold [SHIFT] and drag the
new copy all the way into the Back Alley. Open it's properties and
expand "R6Availability". Set m_eHostageRescueAdv to "MFO_Available" and
change every other game type to "MFO_NotAvailable". Then press [CTRL]+w
seven times and reposition the new insertion zones so that there is some
space between them.
Since it's the Red Team's job to guard the hostages, let's create new
Red Team insertion zones in the Mayer's Office and Cafeteria. Select one
of the Red Team insertion zones in the Back Alley and press [CTRL]+w to
create a copy. Hold [SHIFT] and drag the new copy into the Mayer's
Office. Open it's properties and expand "R6Availability". Set
m_eHostageRescueAdv to "MFO_Available" and change every other game type
to "MFO_NotAvailable". Then press [CTRL]+w seven times so that we have a
total of eight Red Team insertion zones in the Mayor's Office. While it
tends to encourage teamwork, there is no rule that says that all
teammates need to be inserted in the same area of the map. So, let's
drag four of these new Red Team insertion zones into the Cafeteria and
reposition the other four in the Mayer's Office.
To make the game more interesting, I think we should offer the Green
Team two possible hostage extraction zones, on either ends of the map.
Select the extraction zone in the Front Street and the extraction zone
in the Back Alley together and open the properties window. Expand
"R6Availability" and set m_eHostageRescueAdv to "MFO_Available".
(If you skipped the single player
portion of this tutorial, no problem: Select the Pilot extraction zone
in the Back Alley and open it's properties. Expand "R6Availability" and
set m_eHostageRescueAdv to "MFO_Available". With the extraction zone
still selected, press [CTRL]+w to copy it, hold [SHIFT] and drag the
copy all the way into the Front Street. Open the properties window,
expand "R6Availability", and change m_eEscort to "MFO_NotAvailable.)
Conclusion
One of the most important concepts I can stress in this tutorial is
that, like other actors, you can share insertion and extraction
zones between game types, but you don't have to. It all depends on where
it makes sense strategically for the insertion and extraction zones to
be, and on how much variety you want to add to each game type
experience.
Now that you've mastered every game type, I encourage you to enable the
maps you create to support every mode possible (in some small maps, not
all game types will make sense). The more game types your map supports,
the more lasting value your map will have. Note that if your map does
not provide support for any of the 12 game types, make SURE that you
remove the appropriate 'GameTypes=(package=R6Game,type=GameTypeHere,maxNb=16)'
lines in your .INI file so that those game types are disabled in the
game.
|