HOW TO ADD
A LAND VEHICLE INTO BATTLEFIELD: 1942
Updated: October 2nd 2003
This tutorial will
walk you through the necessary steps to add a new land vehicle
into Battlefield: 1942 (BF: 1942). You
will learn how to setup a new land vehicle, configure the inner
workings of the land vehicle and place it in-game. The
tutorial will show how to add a new land vehicle name “Jeep” into
the game based on the existing “Willy” land vehicle which is already
in BF: 1942. As a result of what you will learn in this tutorial,
you will be able to modify land vehicle files in any way to add
a limitless amount of new land vehicles into BF:1942.
PREPARATION:
This tutorial assumes that you have used the winRFA extraction
tool from the Mod Development Toolkit to extract the “Objects.rfa” file
into the base directory of your BF:1942 installation. For
reference purposes, we will assume that your base installation
directory is the default installation directory (Program Files\EA
Games\Battlefield 1942\). We need to begin by setting up the necessary
directory and file structure.
- Enter the “Objects\Vehicles\Land\” directory.
- Copy the “Willy” directory .
- Rename the new directory “Jeep”.
- Enter the “Jeep” directory.
Within the “Jeep” directory, there are 4 files and 2 directories. The
4 files are “Objects.con”, “Physics.con”, “Network.con” and “Geometries.con”. The directories are “Sounds” and “AI”. All of these items will need to be edited to
create a new land vehicle.
STEP 1: Objects.con Scripting Changes
·
Open the “Objects.con” file.
The second line, “ObjectTemplate.create PlayerControlObject
Willy”, begins the creation of a player-controllable object named “Willy”. The
lines directly following the creation of this object configure
some of the settings that will be applied to this vehicle, including
the vehicle’s mass, amount of hitpoints and the types of damage
it can take. These lines
also define the special effects that the “Willy” will have and
when they will occur. For
example, the line “ObjectTemplate.addArmorEffect 30 e_willyDamage
0/1.7/0” says that when the “Willy” drops to 30 hitpoints the “e_willyDamage” special
effect (contained in the Objects\Effects\ folder) will occur at
position “0/1.7/0”.
The line “ObjectTemplate.setVehicleIcon” sets the location
of the image file that will be used to represent the vehicle. This icon will be displayed in the lower left-hand
corner of the screen next to the health bar for the vehicle. Changing the numerical value in the “ObjectTemplate.setVehicleIconPos” line can be used
to adjust position of the dot on the image.
The “VehicleCategory” is “VCLand” and the “VehicleType” is
set to “VTScoutCar”. The setting of these lines determine what controls the vehicle
will use. This vehicle will
utilize the controls that were configured in the “Land & Sea
Controls” menu in BF:1942.
The
line “ObjectTemplate.setMinimapIcon” sets the location of the image
file that will be used to represent this vehicle on the minimap
that appears in the upper right-hand of the screen.
***NOTE: Setting
the mass below “2500” causes problems with how the vehicle will
interact with the ground. The mass should not be any lower than “2500”.
The next section in this file is the creation of the “LodObject” (Lod
is short for Level of Detail). This
object defines 3 different ways that the vehicle will appear to
a user; WillyComplex – close range, WillySimple – long range and
Willywreck – when destroyed. The
order of these items is very important. The
main object (Complex) is always first, followed by the low-polygon
object (Simple) and ending with the wrecked version of the vehicle.
The creation of the “WillyComplex” bundle is integral to
the functionality of the vehicle. This
bundle adds templates (via the “ObjectTemplate.addTemplate” lines)
that include the engine, how a user will enter/exit the vehicle,
etc. The line below each “addTemplate” line (“ObjectTemplate.setPosition”)
is the position of each item in relation to the center-point of
the vehicle. Seventeen lines into the creation of this object “WillyPassengerPCO” is
added (PCO is short for Player Controllable Object). Each
new PCO that is added to a vehicle is a new position for a passenger. The
order of the PCO’s in the main Bundle determines what position
that PCO will be. In this
vehicle, “WillyPassengerPCO” will be the second position. If
we added another PCO into the “WillyComplex” bundle after the “WillyPassengerPCO”,
it would be the third position.
These next 4 sections set up the vehicle’s cockpit and
how it will be seen. The “willyCockpitExternal” line
defines what model a player will see when outside the vehicle. The “willyCockpitInternal” line displays a
different (more detailed) model to the player who is inside the
vehicle. Notice that each object (“willyCockpitExternal” and “willyCockpitInternal”)
uses a different model via the “ObjectTemplate.geometry” line.
The Camera created in the image above (“WillyCamera”) is
the object that defines the ability to see for the driver of the
vehicle. This object sets how far the player can look
to the right or left as well as up and down via the “setMinRotation” and “setMaxRotation” lines. The
next object created is the SeatObject. This
object sets the flags for the player while he is in the vehicle. The
flag “c_SeatShowFullBodySoldier” means that anyone looking at the
vehicle will see the whole body of the player. If
the flag was set as “c_SeatShowHalfBodySoldier”, only half of the
body would appear. The other
flag, “c_SeatIsOutside”, means that player can be shot even though
he is in a vehicle. Without
this flag, the player would be treated as if he were surrounded
by the vehicle and unable to be attacked directly. The
last object created in this image is the EntryPoint. Without
an entry point, no player could enter this vehicle. The radius set within this object defines how
close a player needs to be to the vehicle before he can enter it.
Each of these objects is included in the “WillyComplex” bundle
that we looked at earlier. Because “WillyComplex” is
part of the “PlayerControlObject Willy”, all of these configurations
apply to the driver of the vehicle. The next set of scripting we will look at will
set up the configuration for the passenger of this vehicle.
The second “PlayerControlObject” (PCO) is created so that
a second player can enter the vehicle. If
you review the Templates that are added to this PCO, you will notice
that it reuses some of the objects that were used by the “WillyComplex” bundle. The EntryPoint and Camera objects are set with
different positions that coincide with where the passenger will
be sitting. The position
of the passenger PCO is set in the “WillyComplex” bundle. The
following object created is the “SeatObject” for the passenger. Along with the same flags that “WillySeat” used,
this “SeatObject” contains settings for particular animations that
will be used.
Because only the front two tires on this vehicle rotate,
we only need two “RotationalBundle” objects; one for the left tire
and one for the right tire. You
will note that once again you see that the “MinRotation” and “MaxRotation” are
set; but also notice that there is no geometry object associated
with it. This is for the same reason you don’t see any
objects about the rear tires yet. In
the 7th line of each object, a “Spring” template
is added. The “Spring” objects
are located in the “Physics.con” file and contain the geometry
objects for the wheels. Because
the “Spring” object is added as part of the “RotationalBundle”,
the wheel geometry will become part of it as well.
The portion of the “Objects.con” file above sets up how
the player’s hands will connect to the steering wheel as well as
how it will rotate when the player goes left or right. The
main object for steering is the “AnimatedBundle”. Notice that the only things this object contains
are a template for “WillySteering” and two “addSkeletonIK” lines. The “addSkeletonIK” lines use their positioning
values to lock the location where the players hands
will be stuck while in the vehicle. The
values given attach the hands to certain locations on the steering
wheel, which is added via the “WillySteering” template. “WillySteering” is a rotational bundle which
contains the “lodwillySteering” object. The “lodwillySteering” LodObject
acts just like the “WillyLod” we looked at earlier. It
defines how the steeringwheel will appear to different players. The
line at the bottom of this LodObject, “ObjectTemplate lodSelector
WillySteeringSelector”, refers to the DistanceSelector object that
is created at the bottom of the image. The
DistanceSelector object is actually what determines which version
of the steering wheel (“WillyHighRSteering” or “WillyLowSteering”)
a player will see.
The final part of this file contains the creation of the
final two Simple Objects that were included in the LodObject “lodWilly”. Simple Objects usually just refer to the geometry
object, in this case “WillySimple” refers to the low-polygon model
of the vehicle hull and “WillyWreck” refers to the wrecked model. The “WillyLodSelector” that is created at the
bottom of the file is the selector used for the “lodWilly” object. Notice that there is an additional line, “LodSelectorTemplate.hasDestroyedLod
1”, which tells the game engine that, in addition to the standard
model and low-polygon model, there is a wrecked model which must
be shown.
Now that we have reviewed how everything in the “Objects.con” file
works, lets make the necessary changes to create a new vehicle
named “Jeep” for BF:1942.
·
With the exception of lines 29, 30, 31, 40 and 161 replace all
instances of “Willy” in this file with “Jeep”.
·
Close and save the “objects.con” file.
STEP 2: Physics.con Scripting Changes
The “Physics.con” file contains objects that define the
physics of the vehicle. Included
in this file are the engine and wheel springs configurations.
·
Open the “Physics.con” file.
The Engine is what makes the vehicle move in-game. Remember that the “WillyEngine” was included
in the “Objects.con” file as part of the “WillyComplex” bundle. This means that the driver of the vehicle will
have control over the Engine. The “WillyEngine” has
four templates added to it. Two
of the templates are the front tires (setup as rotational bundles
in the “Objects.con” file). The
other two templates are the back wheels. Because
the back wheels don’t rotate, they are only set up as springs instead
of springs inside of a rotational bundle. If you wanted to adjust
the positions of the wheels in relation to the vehicle, it would
be done with the “setPosition” lines under the “addTemplate” lines.
The
Min and Max rotation on an engine represent the maximum speed that
the vehicle can attain while going forward (Max) or backward (Min). “ObjectTemplate.setEngineType c_ETCar” sets
the type of engine that the vehicle will be using. In contrast, an airplane uses the “c_ETPlane” engine. Below
the engine type, you can set the engine torque, differential, number
of gears, and the gear ratio. These items can be tweaked at anytime to adjust
the feel of the vehicle.
The last portion of the “Physics.con” file is the setup
of each Spring (wheel). Each of the wheels is set up with identical
settings, with the exception of the wheel model. The two right side springs (“WillyFrontSpringR” and “WillyBackSpringR”)
use “ObjectTemplate.geometry Willy_WheelR_M1” while the 2 left
side springs (“WillyFrontSpringL” and “WillyBackSpringL”) use “ObjectTemplate.geometry
WillyWheelL_M1”. Notice that all of the springs have the “ObjectTemplate.Grip” line. This
enables these springs (wheels) to grip the ground and use that
traction to move the vehicle. The
two “ObjectTemplate.addTemplate” lines in each spring configuration
are the dust effects that will be seen when the tires are moving
and touching the ground.
Now that we have reviewed how the objects in the “Physics.con” file
work, let’s make the necessary changes so that these objects can
be used in our new vehicle.
·
Replace every instance of “Willy” in the file with “Jeep”.
·
Close and save the “Physics.con” file.
STEP 3: Geometries.con Scripting Changes
The “Geometries.con” file contains all of the geometry
objects to which the “Objects.con” and “Physics.con” file refer. Our next step will be to open this file and
make the necessary changes.
·
Open the “Geometries.con” file
Note that each object starts with the line “GeometryTemplate.create
StandardMesh”. StandardMesh
is the object that contains the model that will be seen in-game. The second line in each Geometry object is “GeometryTemplate.file”. The
line is ended by the filename of the model. The
default folder for the model files is the “StandardMesh” directory
which is contained in the “StandardMesh.rfa” file. If
you wanted to put a different hull in place of the standard Willy
hull, all you would need to do is place the exported model file
into the “StandardMesh” directory and then adjust the “GeometryTemplate.file
Willy_Hul_M1” line to read “GeometryTemplate.file newfilename”.
Let’s make the changes needed for this new vehicle to work
in-game.
·
In line 1, replace “Willy” with “Jeep”.
·
In every line that begins with “GeometryTemplate.create”, replace “Willy” with “Jeep”.
·
Close and save the “Geometries.con” file.
STEP 4: Network.con Scripting Changes
The last file we will need to make changes to is the “Network.con” file.
·
Open the “Network.con” file.
This
file contains the network objects that will transmit the vehicle
data in a multiplayer game. Each
of the network objects created in this file were part of major
portions of the objects created in the “Objects.con” and “Physics.con” files. You
will find these network objects in those files in lines that begin
with “ObjectTemplate.setNetworkableInfo”. We
need to make the appropriate changes in this file to make sure
this new vehicle can be used in a multiplayer game.
·
Replace “Willy” in every line with “Jeep”.
·
Close and save the “Network.con” file.
STEP 5: Sound configuration
The next step in setting up this new vehicle is making
the necessary changes to the Sound files. All
sound effect settings are contained in the “Sounds” subdirectory
of each weapon’s main folder. BF:
1942 has three different settings for sound. You
can choose 11 khz (Low), 22 khz (Medium)
or 44 khz (High). The “WillyEngine.ssc” file is a text file and
is the central sound file that includes all the settings from other
three sound files for the vehicle’s engine. The
three sound files that contain the settings are in the “High”, “Mid” and “Low” directories.
·
Enter the “Sounds” directory.
·
Rename the file “WillyEngine.ssc” to “JeepEngine.ssc”.
·
Open the “JeepEngine.ssc” file.
·
Change every instance of “Willy” to “Jeep”.
·
Close and save the “JeepEngine.ssc” file.
·
Enter the “High” directory.
·
Rename the file “WillyEngine.ssc” to “JeepEngine.ssc”.
·
Leave this directory.
·
Enter the “Low” directory.
·
Rename the file “WillyEngine.ssc” to “JeepEngine.ssc”.
·
Leave this directory.
·
Enter the “Mid” directory.
·
Rename the file “WillyEngine.ssc” to “JeepEngine.ssc”.
·
Leave this directory and return to the main “Jeep” directory.
The
sound configuration changes have been completed.
STEP
6: AI Configuration
The
final step is to make sure that the Artificial Intelligence (AI)
is configured. The AI for this vehicle is contained in the
AI directory in the “Objects.con” file. This
file contains AI configurations for how bots will drive the vehicle, react to the opposing team, etc. Additionally, it contains AI for the passenger. This
will help the passenger know how to react to certain situations
(if the vehicle is being damaged, if an enemy is nearby, etc.).
·
Enter the “AI” directory.
·
Open the “Objects.con” file.
·
Replace every instance of “Willy” with “Jeep”.
·
Close and save the “Objects.con” file.
Now
that all off the proper changes have been made, this new vehicle
named “Jeep” can be added into the game. A
new “Objects.rfa” file will need to be created that includes these
new configuration files. This can be done using the winRFA tool from
the Mod Development Toolkit.
This
tutorial has shown you the intricacies of a BF:1942 vehicle. A
basic vehicle in BF:1942 only requires the following items: a Player Controllable
Object, an Engine, wheels (knows as Springs in this scripting language),
a Seat, a Camera (the drivers viewpoint while operating the vehicle)
and an Entry Point (how a player will enter the vehicle). Items like the Steering object are not necessary
but add the realism to a vehicle that players want to see.
STEP
7: Examples
With the knowledge you have gained, lets make a
few changes as an example of what you can do with this scripting
language. As our first change, lets add an extra passenger
position into the Jeep. We will place this new position in
the back seat of the Jeep.
·
Open the "Objects.con" file.
·
Locate the "JeepComplex" object.
·
Add the following lines right before the line
with "JeepEngine" in it: 1st line - "ObjectTemplate.addTemplate
JeepPassengerPCO2"; 2nd line - "ObjectTemplate.setPosition
-0.30/.45/-1.15".
·
Find and copy the "JeepPassengerPCO"
object. You should be copying twenty-eight lines in total.
·
Paste the data underneath the
"JeepPassengerPCO" object.
·
Change "JeepPassengerPCO" to
"JeepPassengerPCO2" in lines 1 and 2 of the new object.
·
Change the line "ObjectTemplate.aiTemplate
JeepPassenger" to "ObjectTemplate.aiTemplate JeepPassengerPCO2".
·
In the line that begins with
"ObjectTemplate.setVehicleIconPos", set the values to "30/70".
·
Close and save the "Objects.con" file.
We need to add the
proper Artificial Intelligence so that bots will utilize the new
position.
·
Enter the AI directory.
·
Open the "Objects.con" file.
·
Locate the line "aiTemplate.create
JeepPassenger".
·
Copy the eleven lines that make-up
"JeepPassenger" and paste them below the original object.
·
In the new object, rename "JeepPassenger" to
"JeepPassengerPCO2".
·
Close and save the "Objects.con" file.
Now that we've
added this lines, repack the "Objects.rfa" using "winRFA.exe" from
the Mod Development Tool. Once you start a game and get into
the "Jeep", you will notice that you are able to switch to a third
position. The image below is what you will see.
Let make
another change to the "Jeep".
·
Open the "Physics.con"
file.
·
Examine the
"WillyEngine" object. There is a section containing the
"ObjectTemplate.addTemplate" lines (the section is surrounded by
"rem----" lines.
·
Add the following
four lines to the bottom of the "ObjectTemplate.addTemplate"
section: 1st - "ObjectTemplate.addTemplate JeepBackSpringR"; 2nd -
"ObjectTemplate.setPosition 0.79/-0.472/1.21"; 3rd -
"ObjectTemplate.addTemplate JeepBackSpringL"; 4th -
"ObjectTemplate.setPosition
-0.79/-0.472/-1.21".
By adding
these lines, we are adding a second set of rear wheels. The
"setPosition" lines position the new tires right next to the
existing tires to make the "Jeep" look like it has an additional set
of tires for
off-roading.