|
This tutorial will assume that you
are comfortable working with Windows folders and unrecognized
file types. This tutorial also assumes that you have completed
my first tutorial, Building
Your First Raven Shield Map, and have a basic RvS map
created named "mymap.rsm".
Important Note: RvS does not deal well with extra
spaces in the .ini file. If you copy/paste text from this
tutorial, make sure you remove all extra spaces from the end
of each line. Also, confirm that your operating system is set
to display file extensions for all files (if you normally do
not see file extensions when browsing files, open the "Tools"
menu in windows explorer and choose "Folder Options", select
the "View" tab, then scroll down and uncheck "Hide file
extensions for known file types".)
If you want to get your map working in-game quickly,
you can simply copy the .ini file of an official map and
change a few settings. You can also download Revraz's
MapHelper utility, which provides an easy to use interface
and automatically creates the necessary files. However, in
this tutorial we are going to create a new map .INI file from
scratch in order to learn what each line does.
Create
a new text file in the "maps" directory and rename it to
"mymap.ini". Open the file in notepad. To start, enter these
two lines:
|
[Engine.R6MissionDescription] version=2
|
These two lines should be
included for every map.
This needs
to match the name of your .RSM file.
The
ShortName is used in the filename of saved Plans (planning
stage details). I recommend assigning a three character ID
that you are sure is unique (not shared by any of the official
maps).
|
LocalizationFile=mymappack
|
This line pulls the menu name
and mission info from a separate localization file, which can
be shared by your entire mod or mappack. Localization provides
support for multiple languages, based on the install. For
example, the French version will use mymappack.fra if present.
If the install is not localized, or if no localized file is
found, it will look for mymappack.int (.INT stands for
International) and use this as the default text. We are going
to create that file now.
Save your .INI file, and then create a new
text file in the RavenShield "system" directory and rename it
to mymappack.int. Open mymappack.int in notepad and enter the
following lines:
This should match
the name of your .ini and .rsm file.
|
ID_MENUNAME=My Custom Map
|
This is the formal mission name
(i.e. Oil Refinery, Parade, etc.) that you wish to appear when
selecting maps for Multiplayer or Custom Missions.
|
ID_CODENAME=Roaring Elephant
|
This is the cool codename that
sounds like the title of a Clancy novel. It will appear on the
loading screen and on the mission briefing page.
|
ID_DATETIME=2003.3.19 - 1300
ID_LOCATION=Philadelphia PA, North America
|
These will appear on the mission
briefing page and on the the loading screen in both
singleplayer and multiplayer
|
ID_CONTROL=First line of text.\n\nSecond line of
text. ID_CONTROL1=The conclusion of a whole lot of
text ID_CLARK=Kill terrorists. Got it?
ID_SWEENY=We are dealing with dangerous people. Kill
them. ID_NEWSWIRE=A covert operation rescued a cat
out of a tree early yesterday. ID_MISSION_ORDER=Your
mission is kill terrorists.
|
This
is the text that appears on the mission briefing page. If you
omit a line, that "person" will simply be grayed out. "\n"
will produce a line break in the text. The "ID_CONTROL1" line
is actually unnecessary in this example, however I wanted ot
illustrate that anytime your text is over 500 characters long,
you need to enter the first 500 characters normally (i.e.
"ID_CLARK") and then the next 500 characters as a new line
("ID_CLARK1"). Note that while the mission orders text is
entered in this mappack .INT file, the corresponding audio
files will be assigned later in our map .INI file. If you are
creating a multiplayer only map, you can skip these lines
completely.
This .INT file can be used for all the
maps in your mod or mappack. You would simply add the settings
for the second map right below the first.
Now, save your .INT file and return to the
mymap.INI file we created earlier in the "maps" directory. Add
the following lines:
|
m_TMissionOverview=Texture'R6MenuBG.CampainImage.Parade'
m_RMissionOverview=(X=0,Y=0,W=230,H=130)
|
This specifies the image that
you want to appear when someone selects the map name on the
Custom Missions page. Note that this image must be stored as a
map texture in the identified package in the editor (which may
be explained in a future tutorial, but is outside the scope of
this one). The 2nd line allows you to crop the image. I
believe the reason for the cropping is that the standard size
of mission snapshots in the unreal engine is 256 x 256 units,
however the RvS in-game menu is designed for 230 x 130 images.
If you look at the screenshot textures for the official
campaign missions from within the editor, you'll see that they
are 256 x 256 graphics but everything outside the 230 x 130
area is just blackspace.
|
m_TWorldMap=Texture'R6MenuBG.MissionConf.RS_M15_Parade'
m_RWorldMap=(X=0,Y=0,W=196,H=98)
|
This specifies the "movie" that
plays on the mission briefing page. The animated texture must
be stored in the identified package. The total size of the
graphic should be 256 x 128 units, however the viewable area
will only be 196 x 98. I must admit I have had zero success in
getting this line to actually load the movie, even when I know
that the movie exists in the location specified. If you have
had success with this, please let me know how.
|
m_MissionArmorTypes=Class'R6Description.R6DescLightGreyCamo'
m_MissionArmorTypes=Class'R6Description.R6DescMediumGreyCamo'
m_MissionArmorTypes=Class'R6Description.R6DescHeavyGreyCamo'
m_MissionArmorTypes=Class'R6Description.R6DescLightBlueCamo'
m_MissionArmorTypes=Class'R6Description.R6DescMediumBlueCamo'
m_MissionArmorTypes=Class'R6Description.R6DescHeavyBlueCamo'
|
These lines control which armor
types you wish to make available for singleplayer missions.
The armor types available with the retail game are:
|
R6DescLight
|
R6DescMedium
|
R6DescHeavy
|
|
R6DescLightGreyCamo
|
R6DescMediumGreyCamo
|
R6DescHeavyGreyCamo
|
|
R6DescLightBlue
|
R6DescMediumBlue
|
R6DescHeavyBlue
|
|
R6DescLightBlueCamo
|
R6DescMediumBlueCamo
|
R6DescHeavyBlueCamo
|
|
R6DescLightEuroCamo
|
R6DescMediumEuroCamo
|
R6DescHeavyEuroCamo
|
|
R6DescLightGreen
|
R6DescMediumGreen
|
R6DescHeavyGreen
|
|
R6DescLightGreenCamo
|
R6DescMediumGreenCamo
|
R6DescHeavyGreenCamo
|
|
R6DescLightWinter
|
R6DescMediumWinter
|
R6DescHeavyWinter
|
|
R6DescLightWinterCamo
|
R6DescMediumWinterCamo
|
R6DescHeavyWinterCamo
|
|
R6DescLightTan
|
R6DescMediumTan
|
R6DescHeavyTan
|
This section
will not affect multiplayer uniform options at all. Moving
on...
|
GameTypes=(package=R6Game,type=R6PracticeModeGame,maxNb=16)
GameTypes=(package=R6Game,type=R6LoneWolfGame,maxNb=1)
GameTypes=(package=R6Game,type=R6TerroristHuntGame,maxNb=16)
GameTypes=(package=R6Game,type=R6HostageRescueGame,maxNb=16)
GameTypes=(package=R6Game,type=R6MissionGame,maxNb=16)
GameTypes=(package=R6Game,type=R6StoryModeGame,maxNb=16)
|
Each line "turns on" an
additional single player game type for this map. If you skip
these lines, you will have a multiplayer only map. Personally,
if you've put a lot of time into a map, I think you should try
to implement every game type to maximize the value of your
map. Believe it or not, there are folks who play multiplayer
pilot missions 24 hours a day as well as those who play
nothing but single player tango hunts. However, if you turn a
game type on, make SURE you have the appropriate insertion
points and actors created in the map or you will run into
trouble.
The Practice, Lone Wolf, Tango Hunt, and
Hostage Rescue game types match the options on the Custom
Missions page. I'm really not sure about "Misson" and
"StoryMode", although Mission probably identifies a map as
part of the official campaign (however, there's definately a
lot more involved in adding to the official campaign, which is
beyond the scope of this tutorial). It appears that changing
the maxNb setting for single player games does not have any
effect (Lone Wolf is still 1 operative, and Tango Hunt is
still 8 operatives regardless).
|
GameTypes=(package=R6Game,type=R6TerroristHuntCoopGame,maxNb=16)
GameTypes=(package=R6Game,type=R6HostageRescueCoopGame,maxNb=16)
GameTypes=(package=R6Game,type=R6HostageRescueAdvGame,maxNb=16)
GameTypes=(package=R6Game,type=R6DeathMatch,maxNb=16)
GameTypes=(package=R6Game,type=R6TeamDeathMatchGame,maxNb=16)
GameTypes=(package=R6Game,type=R6TeamBomb,maxNb=16)
GameTypes=(package=R6Game,type=R6EscortPilotGame,maxNb=16)
GameTypes=(package=R6Game,type=R6NoRules,maxNb=16)
|
Each line "turns on" an
additional multiplayer game type for this map. If you skip
these lines, you will have a singleplayer only map. Again, if
you turn a game type on, make SURE you have the appropriate
insertion points and actors created in the map. The gametypes
above are self explanatory, with two exceptions: "Deathmatch"
appears as "Survivor" in-game, and I sure wish I knew what the
"NoRules" gametype was for.
I really like how this is
all configured. I hope that people working on total
conversions will utilize the framework that is established
here. (i.e. "package=JohnsTotalConversion, type=PinTheTailOnTheTango")
|
m_AudioBankName="Voices_MenuMiss9"
m_PlayEventControl=Sound'Voices_MenuMiss9.Play_ControlM09'
m_PlayEventClark=Sound'Voices_MenuMiss9.Play_ClarkM09'
m_PlayEventSweeney=Sound'Voices_MenuMiss9.Play_SweeneyM09'
|
These are the audio files used
on the mission briefing page. This example borrows the audio
from mission 9 so you can see the proper format. There's no
harm in skipping these completely, since they normally would
just be used to echo the text we created in the mymappack.int
file. However, if you are feeling ambitious, you would need to
record and store the files in the identified package in the
editor (Which is outside the scope of this tutorial). These
files are not used at all in multiplayer games.
|
m_InGameVoiceClarkBankName="Voices_Clark_Mission09"
m_PlayMissionIntro=Sound'Voices_Clark_Mission09.Play_Mission09_Intro'
m_PlayMissionExtro=Sound'Voices_Clark_Mission09.Play_Mission09_Extro'
|
These are the audio files played
upon insertion into a map, and upon successful extraction from
a mission. These clips only play during MIssionMode game types
(including Practice and Coop missions).
This section assigns
uniforms to each team for mutiplayer games. Team 1 is always
referred to as the "green" team, and Team 2 as the "red" team.
If you omit these lines completely, or if you enter invalid
uniform names, default blue and tan uniforms will be used. To
modify the team uniforms from this example, change instances
of "R6RainbowMediumTan" and "R6RainbowMediumBlueCamo" to any
of the following:
|
R6RainbowLight
|
R6RainbowMedium
|
R6RainbowHeavy
|
|
R6RainbowLightGreyCamo
|
R6RainbowMediumGreyCamo
|
R6RainbowHeavyGreyCamo
|
|
R6RainbowLightBlue
|
R6RainbowMediumBlue
|
R6RainbowHeavyBlue
|
|
R6RainbowLightBlueCamo
|
R6RainbowMediumBlueCamo
|
R6RainbowHeavyBlueCamo
|
|
R6RainbowLightEuroCamo
|
R6RainbowMediumEuroCamo
|
R6RainbowHeavyEuroCamo
|
|
R6RainbowLightGreen
|
R6RainbowMediumGreen
|
R6RainbowHeavyGreen
|
|
R6RainbowLightGreenCamo
|
R6RainbowMediumGreenCamo
|
R6RainbowHeavyGreenCamo
|
|
R6RainbowLightWinter
|
R6RainbowMediumWinter
|
R6RainbowHeavyWinter
|
|
R6RainbowLightWinterCamo
|
R6RainbowMediumWinterCamo
|
R6RainbowHeavyWinterCamo
|
|
R6RainbowLightTan
|
R6RainbowMediumTan
|
R6RainbowHeavyTan
|
This section assigns
a uniform to all operatives playing a coop game on this map.
If you omit these lines completely, default blue uniforms will
be used.
That's it! Save your mymap.ini file. Launch
the game, open the Custom Missions page, select Practice
Mission, and look for "My Custom Map". Try it out! (If the
missing loading screen bothers you too much, just copy one of
the existing .TGA files in the maps folder, and rename it to
mymap.tga.)
In conclusion, here is the bare minimum
requirement needed in your .INI file if you just want to pop
in to explore and test a new map:
|
[Engine.R6MissionDescription] version=2
m_MapName=mymap
m_MissionArmorTypes=Class'R6Description.R6DescLight'
GameTypes=(package=R6Game,type=R6PracticeModeGame,maxNb=16)
|
But that will leave a lot of
ugly, empty screens. Now, here is the complete .INI file that
we've created during this tutorial:
I hope you found
this tutorial helpful. If there's anything I've gotten wrong,
please let me know and I'll correct the information. Email me
if you have any questions or mapping issues you'd like to
discuss. -Beckett
|