HOW TO ADD
AN AIR VEHICLE INTO BATTLEFIELD: 1942
This tutorial will
walk you through the necessary steps to add a new air vehicle
into Battlefield: 1942 (BF: 1942). You
will learn how to set up a new air vehicle, configure the inner
workings of the vehicle and place it in-game. The
tutorial will show how to add a new air vehicle named F16 into
the game based on the existing Zero air vehicle which is
already in BF: 1942. As
a result of what you will learn in this tutorial, you will
be able to modify air vehicle files in any way to add a limitless
amount of new air 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\Air directory.
·
Copy the Zero directory.
·
Rename the new directory to F16.
·
Enter the F16 directory.
Within the F16 directory, there are five files and two
directories. The five
files are Objects.con, Physics.con, Network.con, Weapons.con and Geometries.con. The
directories are Sounds and AI. All
of these items will need to be edited to create a new sea vehicle.
STEP 1: Objects.con Scripting Changes
·
Open the Objects.con file.
The second line, ObjectTemplate.create PlayerControlObject Zero,
begins the creation of a player-controllable object named Zero. The
lines directly following the creation of this object configure
some of the settings that will be applied to this vehicle,
including the vehicles mass, amount of hitpoints and
drag, etc. These lines also define the special effects
that the Zero will have and when they will occur. For example, the line ObjectTemplate.addArmorEffect 65 em_ZeroDamage 0/0.202/2 says
that when the Zero drops to 65 hitpoints the em_ZeroDamage special
effect (contained in the Objects\Effects\ folder) will occur
at position 0/0.202/2.
The
line ObjectTemplate.addTemplate lodZero adds
a Level of Detail object that will contain the rest of the
vehicle. 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 VCAir and
the VehicleType is set to VTFighter. The settings of these lines determine what
controls the vehicle will use. This
vehicle will utilize the controls that were configured in the Air
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.
The next section in this file is the creation of the LodObject. This
object defines three different ways that the vehicle will appear
to a user; ZeroComplex close range, ZeroSimple long
range and Zerowreck 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 ZeroComplex 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. The
engine, flaps, wings, guns and bombs are only a few of the
things that are added into this object so that the driver of
the vehicle will have control over all of them.
These next five sections set up the vehicles cockpit and
how it will be seen. lodZeroCockpit is the object
that contains both the internal and external view of the cockpit
as well as the lodSelector object that decides which cockpit will be
seen by each player. The ZeroCockpitExternal line
defines what model a player will see when outside the vehicle
and the ZeroCockpitInternal line displays a different (more detailed)
model to the player who is inside the vehicle. Notice that each object (ZeroCockpitExternal and ZeroCockpitInternal)
uses a different model via the ObjectTemplate.geometry line. Finally, the ZeroCockpitSelector is
the object that decides which cockpit view will be seen by
which player.
The Camera created in the image above (ZeroCamera) 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 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. The
last object created is the SeatObject. This
object sets the flags for the player while he is in the vehicle. The
flag c_SeatShowHalfBodySoldier means
that anyone looking at the vehicle will see half of the body
of the player. If the
flag was set as c_SeatShowFullBodySoldier, the whole body would appear.
Each of these objects is included in the ZeroComplex bundle that we looked at earlier. Because ZeroComplex is
part of the PlayerControlObject Zero,
all of these configurations apply to the driver of the vehicle.
The lodZeroPropeller is another LOD object that contains
two ways to view the propeller (static and blurred) and includes
the lodSelector which decides when to show each particular
view. As you will see
later in the tutorial, the lodZeroPropeller object
is added into the engine of the vehicle so that the movement
of the propeller will be dependant on the speed of the engine.
There
are two SimpleObject creations
which contain the geometry for the two views of the propeller
(static and blurred). The final object created is the ZeroPropSelector. This
is the Selector which will actually make the decision on
which propeller to show at any given time.
The
next two objects created are LandingGear objects
for the right and left side of the air vehicle. Both
objects have a model associated with them (via the ObjectTemplate.geometry line) as well as the Min rotation
(right gear) and Max rotation (left gear) values set.
***NOTE: In each landing gear object, a ZeroWheel object
is added. We will review
these objects when we review the Physics.con file.
The line ObjectTemplate.setGearUpHeight sets
how far off the ground the air vehicle must be before the landing
gear will be raised. In
addition, the ObjectTemplate.setGearDownEngineInput defines how the
slow the engine must be going before the gear will be lowered.
The
last LandingGear object is for the back wheel. The setup is essentially the same as the other
wheels, with the exception that the back wheel has both a rotational bundle and a spring
whereas the front two wheels only have springs. Additionally, the line ObjectTemplate.setInputToYaw c_PIYaw indicates
that the movement of the back wheel (used to turn the air vehicle)
will be controlled by whatever input device is bound to the Yaw controls
in the Air Controls menu of BF:1942.
The final part of this file contains the creation of the
final two Simple Objects that were included in the LodObject lodZero. Simple
Objects usually just refer to the geometry object, in this
case ZeroSimple refers to the low-polygon model of the vehicle
hull and ZeroWreck refers to
the wrecked model. The ZeroLodSelector that
is created at the bottom of the file is the selector used for
the lodZero 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 F16 for BF:1942.
·
With the exception of any lines that begin with ObjectTemplate.addArmorEffect or ObjectTemplate.setVehicleIcon, replace all instances of Zero in
this file with F16.
·
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, wheels, flaps and rudder configurations.
·
Open the Physics.con file.
The Engine is what makes the vehicle move in-game. Remember
that the ZeroEngine was included in the Objects.con file
as part of the ZeroComplex bundle. This means that the driver of the vehicle will
have control over the Engine. There
are four templates added to the engine object: lodZeroPropeller, ZeroLandingGearLeft, ZeroLandingGearRight and ZeroLandingGearBack.
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_ETPlane sets
the type of engine that the vehicle will be using. In
contrast, a jeep uses the c_ETCar engine. Below
the engine type, you can set the engine torque, differential,
number of gears, and the gear ratio. These
items can be changed at anytime to adjust the feel of the vehicle.
***NOTE: If
the air vehicle drops below a certain speed, the propeller
will switch back to its static state and appear to not be moving. This
effect is handled via the ObjectTemplate.setNoPropellerEffectAtSpeed 70 line.
The next three objects are the springs that are included
in the ZeroLandingGearRight, ZeroLandingGearLeft and ZeroLandingGearBack objects
we reviewed in the Objects.con file. Each
of the springs have an 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 special effects that will be seen when the tires have
contact with either water or the ground.
This image is an example of the rest of the Physics.con file. The
remainder of the file configures the flaps and rudders used
to maneuver the air vehicle. Each
of the Wing objects uses a model (ObjectTemplate.geometry line),
sets the Min and Max rotation for the model and sets how
much lift one of these flaps could cause to the vehicle. The
lift power is handled via the ObjectTemplate.setWingLife and ObjectTemplate.setFlapLift lines. The values in these lines can be adjusted to
completely change the way this vehicle handles while in the
air.
Now that we have reviewed how the objects in the Physics.con file work, lets make the necessary changes
so that these objects can be used in our new vehicle.
·
Replace every instance of Zero in the file with F16.
·
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 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 body in place
of the standard Zero body, place the new exported model file
into the StandardMesh directory and then adjust the GeometryTemplate.file zero_fus_m1 line to read GeometryTemplate.file newfilename.
Lets make the changes needed for this new vehicle to work
in-game.
·
In line 1, replace Zero with F16.
·
In every line that begins with GeometryTemplate.create StandardMesh,
replace Zero with F16.
·
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 Zero in every line with F16.
·
Close and save the Network.con file.
STEP 5: Weapons.con Scripting Changes
The Weapons.con file contains
all of the weapon configurations that the Zero vehicle uses.
·
Open the Weapons.con file.
The second line creates the weapon with the ObjectTemplate.create Firearms line. The ObjectTemplate.visibleBarrelTemplate e_MuzzSG44 defines
the muzzle flash that will be seen every time the machine gun
is fired. ObjectTemplate.projectile ZeroProjectile defines
the type of projectile (bullet) that this weapon will fire
and the ObjectTemplate.projectilePosition line
defines the position at which the projectile will be created
when fired. The weapon
has a maximum of 900 bullets that it can hold (defined via magSize)
and the bullets are fired at a velocity of 400 (defined via velocity). The ObjectTemplate.roundofFire line
defines how quickly the weapon can fire multiple shots. The lower the value, the
slower the rate of fire. Because
this air vehicle has a machine gun mounted on both sides of
the fuselage, we use the ObjectTemplate.addFireArmsPosition line
to position more than one instance of this weapon on the plane. This way, you can have more than one instance
but both will be fired by the same controls at the same time.
The next object created is the projectile object. This sets up the configuration of the projectile
(bullet) that will be fired by the air vehicles machine gun. The projectile needs to have Mobile,
Collision and Response physics so that it will be able to move
and interact when it collides with a target. These
values are set to 1 (0 is off, 1 is on). The ObjectTemplate.timeToLive line
defines how long this projectile will last before it will disappear. By setting a time limit on the projectiles
life, it prevents projectiles from staying in the game perpetually
and affecting the games performance. The
material setting defines how this projectile will damage other
types of material. For
example, this type of projectile would have more of an effect
on a body versus a tank. ObjectTemplate.stopAtEndEffect 1 means
that the projectile will cease to exist once it has collided
with something and caused its damage.
The ZeroBombDummy firearm
is the second firearm that this vehicle has. It
uses the generic FighterBomb projectile
template that many of the BF:1942 planes
share (The configuration for this projectile can be found in
the \Objects\Vehicles\Common\Weapons.con file). Notice that this firearm configuration uses
a lot of the same types of settings as the ZeroGuns firearms
we looked at above. This
bomb firearm is fired using the AltFire button. This is defined within the ObjectTemplate.setInputFire c_PIAltFire line.
·
Replace every instance of Zero with F16
·
Save and close the Weapons.con file.
STEP 6: 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 vehicles main folder. BF:
1942 has three different settings for sound. You
can choose 11 khz (Low),
22 khz (Medium) or 44 khz (High). The Sounds directory contains eight files.
Four
of the files are sound configurations for the engine (ZeroEngine, EngineLow, EngineMedium, EngineHigh)
and four files are sound configurations for the machine gun
(ZeroMG, FireLow, FireMedium, FireHigh). Within each set of four files, the three files
containing the words Low, Medium and High correspond
to the settings 11 khz,
22 khz and 44 khz settings mentioned
above.
The
fourth file is the central sound file that includes all the
settings from the other three sound files. The
image shows that the ZeroEngine.ssc file
includes all of the other engine files.
·
Rename the file ZeroEngine.ssc to F16Engine.ssc.
·
Rename the file ZeroMG.ssc to F16MG.ssc.
·
Leave this directory and return to the main F16 directory.
STEP
7: AI Configuration
The
final step is to configure the Artificial Intelligence (AI). The AI for this vehicle is contained in the
AI directory in the Objects.con and Weapons.con files. These
files contain AI configurations for how bots will drive the
vehicle, fire the weapons, react to the opposing team, etc.
·
Enter the AI directory.
·
Open the Objects.con file.
·
Change every instance of Zero to F16.
·
Close and save the Objects.con file.
·
Open the Weapons.con file.
·
Change every instance of Zero to F16.
·
Close and save the Weapons.con file.
Now
that all off the proper changes have been made, this new air
vehicle named F16 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 the intricacies of a BF:1942 air
vehicle. A basic air
vehicle in BF:1942 only requires the following items: a Player Controllable
Object, an Engine, wheels (springs), a Seat, a Camera (the
drivers viewpoint while operating the vehicle) and an Entry
Point (how a player will enter the vehicle). Additional
items that can be added increase the realism of a vehicle and
make it more fun to operate.
STEP
8: Examples
Now that we have named our new air vehicle F16, we should
make it more like the real-life F16. One
major things we need to change is
the speed of this vehicle. The F16 is
much faster than any original BF:1942 plane,
so lets change our new vehicle appropriately.
·
Open the Physics.con file.
Changing the speed involves two lines within the F16Engine file. The
first line we need to change, ObjectTemplate.setMaxSpeed,
sets the maximum speed that this vehicle can travel. The
second line we need to change, ObjectTemplate.setTorque,
defines how fast the vehicle will accelerate.
·
In the line ObjectTemplate.setMaxSpeed 1000/0/500,
change the values to 2000/0/4000.
***NOTE: These
changes will increase how fast the vehicle can move on both
the X and Z axis. These values are based on the X/Y/Z axis.
·
In the line ObjectTemplate.setTorque 15,
change the value to 100.
·
Close and save the Physics.con file.
Repack the Objects.rfa file
and try out your vehicles new speed. Once
you have tested these changes, you can go back into this file
to make additional changes to adjust the vehicles handling
to your preferences.
Now lets equip this F16 with the proper weapon. We will replace the bullets that the plane
fires with rockets and slow down the rate of fire. The rocket we will fire will be the BazookaProjectile that the Bazooka hand weapon uses.
·
Open the Weapons.con file.
·
In the line ObjectTemplate.projectileTemplate F16Projectile,
replace F16Projectile with BazookaProjectile.
***NOTE: The BazookaProjectile we are using as our rocket projectile
can be found in Objects\HandWeapons\Common\Weapons.con.
·
In the line ObjectTemplate.roundofFire 12,
replace 12 with 2.
***NOTE: Remember
that the ObjectTemplate.roundofFire value defines how fast the
weapon will fire; the higher the value, the faster the rate
of fire.
Since we are adding a new type of weapon to the plane, lets adjust the rotation of the weapon so that the rockets
fire straight at their target. To
do this, we need to adjust the ObjectTemplate.addFireArmsPosition lines.
·
In the line ObjectTemplate.addFireArmsPosition 1.99/-0.21/1.38
-1.3/0/0, replace the -1.3 with 0.
·
In the line ObjectTemplate.addFireArmsPosition -1.99/-0.21/1.38
1.3/0/0, replace the 1.3 with 0.
***NOTE: The
numerical values represent positional and rotational coordinates. For example, the first set
of numbers (1.99/-0.21/1.38) dictate the position
on the X/Y/Z axis. The
second set of numbers (-1.3/0/0) dictate the rotation on
the X/Y/Z axis.
·
Close and save the Weapons.con file.
Repack the Objects.rfa file
and start the game to see your changes in action.