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
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 7 thl ine 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 playershands 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 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 isthe
�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
- 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.
- Rename the file WillyEngine.ssc to JeepEngine.ssc.
- 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.
|