HOW TO CREATE A DESTROYABLE BUILDING
IN BATTLEFIELD 1942\VIETNAM
Updated: October 16th 2003
Download this MiniMod for Battlefield 1942
A great dynamic feature to add to a mod is a
destroyable building. A destroyable building adds realism to the
game and gives the player the impression that they are tangibly
affecting the game. This tutorial will show you how to create your
own destroyable building.
STEP 1 � Creating the Models
The first step to building a new destroyable
building is to create the models of the building. There will need
to be three new models created to bring this new object to life.
The first model will be the low polygon model that will be seen
by players while they are far away from the building. The second
model will be the detailed model of the building as it will appear
when a player is either close to the building or inside of it. The
third model will be the destroyed version of the building.This model
will be seen only after the building has been destroyed.
The main mesh should be exported with a collision
mesh. The collision mesh will need to have a material ID assigned
to it for the building to be destroyable. You can learn more about
material ID�s in the Damage
System Tutorial.
For the purposes of this tutorial, we have provided
a mini-mod that also contains the three demo models.
STEP 2 � Creating the Geometry Objects
Now that we have the three models of our new
building, we need to create the geometry objects to which the game
will refer. The geometry object exists so that the game engine will
know how to show each model and its various levels of detail. We
will create a text file named �Geometries.con� to house the geometry
object scripting. Now that the file has been created, let�s open
it and begin to create our objects.
GeometryTemplate.create StandardMesh Britain_Factory_M1
The first line creates and names the geometry
object.�GeometryTemplate.create� specifies that we are creating
an object. �StandardMesh� is the type of object that is being created
and �Britain_Factory_M1� is the name of the object that we are creating.
GeometryTemplate.file Britain_Factory_M1
The second line will specify the model (.sm file)
that this geometry object will use.We have specified that the model
named �Britain_Factory_M1�. BF:1942 assumes that the model will
be in the �standardMesh.rfa� file unless you specify otherwise.
GeometryTemplate.setLodDistance 0 0
The �setLodDistance� line sets which LOD (Level
Of Detail) of the model will be seen at a particular distance. The
first value, �0�, represents the first LOD that will be shown to
a player (�1� would represent the second LOD, �2� would represent
the third LOD, etc). The second value, �0�, represents the distance
at which you will begin to see the first LOD (Each subsequent LOD
has less detail than the one before it.).
The model we are using for our close-up model
was only exported with three LODs, so it will only need three �GeometryTemplate.setLodDistance�
lines. When we have completed the scripting for this object it will
look like this:
GeometryTemplate.create StandardMesh Britain_Factory_M1
GeometryTemplate.file Britain_Factory_M1
GeometryTemplate.setLodDistance 0 0
GeometryTemplate.setLodDistance 1 50
GeometryTemplate.setLodDistance 2 100
It is also best to setup a simple version of
the building for long distances. This version should have significantly
less poygons.
GeometryTemplate.create StandardMesh Britain_Factory_L1
GeometryTemplate.file Britain_Factory_L1
GeometryTemplate.setLodDistance 0 0
GeometryTemplate.setLodDistance 1 50
GeometryTemplate.setLodDistance 2 100
We will finish the Geometry objects by creating
the last object for our wrecked model of the building. We will call
the object �Britain_Factory_wreck_m1� and it will use the �Britain_Factory_wreck_m1.sm�
file located in the �StandardMesh� directory.
GeometryTemplate.create StandardMesh Britain_Factory_wreck_m1
GeometryTemplate.file Britain_Factory_Wreck_m1
GeometryTemplate.setLodDistance 0 0
GeometryTemplate.setLodDistance 1 150
GeometryTemplate.setLodDistance 2 200
Now that we have finished creating the Geometry
objects, save this file and we will begin the necessary scripting
to create the destroyable building.
STEP 2: Scripting for the Destroyable Building
A normal building in BF:1942 is not affected
by weapons, vehicles, etc.A building needs to have hitpoints to
be destructible and the only way to accomplish this is to script
the building so that it is a �Player Controllable Object� (PCO).
The PCO will contain all of the hitpoint settings as well as any
special effects that you might want to use with this building (smoke
stacks, flashing lights, etc.).
ObjectTemplate.create PlayerControlObject
Britain_Factory
The first line will create a PCO named �Britain_Factory�.
(Note that object scripting begins with �ObjectTemplate�, just as
geometry scripting begins with �GeometryTemplate�.)
ObjectTemplate.setNetworkableInfo FactoryBodyInfo
The second line will define how the status of
the building will be communicated in multiplayer games. �ObjectTemplate.setNetworkableInfo�
tells the game engine that the building status will be communicated
using the �FactoryBodyInfo� network object.
ObjectTemplate.cullRadiusScale 5
ObjectTemplate.hasMobilePhysics 0
ObjectTemplate.explosionRadius 20
ObjectTemplate.explosionDamage 5
ObjectTemplate.drag 2
ObjectTemplate.dragOffset 0/0/0
ObjectTemplate.mass 4500 The next few lines configure
a few necessary things for a PCO, including mobile physics (�0�
is off, �1� is on), the size of the explosion, how much damage the
explosion will inflict, the mass of the building, etc. Mobile physics
are turned off for the building because it will be stationary. The
values set for the explosion radius and damage can be adjusted at
any time (the higher the value, the larger the explosion) and the
mass should always be more than �2500�.
ObjectTemplate.hasCollisionPhysics 1
ObjectTemplate.hasResponsePhysics 1
These two lines turn on collision and response
physics for the PCO. The collision and response physics are needed
(in tandem with the collision mesh of the model) so that a player
can�t walk through the building and so a weapon can inflict damage
on the building.
ObjectTemplate.hasArmor 1
ObjectTemplate.speedMod 2
ObjectTemplate.hitpoints 20
ObjectTemplate.maxhitpoints 20
The PCO�s hitpoints and armor is configured
in the next four lines. The higher the hitpoints, the more damage
it will take to destroy the building. The �has Armor� value must
be set to �1� because if not, the PCO can�t be damaged.
ObjectTemplate.timeToLiveAfterDeath 10
ObjectTemplate.material 45
ObjectTemplate.criticalDamage 10
The �timeToLiveAfterDeath� is the time the wrecked
model will exist before fading away.� As mentioned in Step 1, the
type of material
defines how the PCO will take damage from different weapons. The
�criticalDamage� value defines how many hitpoints the PCO must have
to be considered critically damaged. You could add another line
using �ObjectTemplate.hplostwhilecriticaldamage� to set how many
hitpoints will be taken away from the PCO once it is critically
damaged.
ObjectTemplate.addTemplate lodfactory
This line adds the LOD object that we will
create later.
ObjectTemplate.GUIIndex 30
ObjectTemplate.setSoldierExitLocation 6/12/-7
180/0/0
ObjectTemplate.setVehicleIconPos 40/60
ObjectTemplate.setNumberOfWeaponIcons 0
ObjectTemplate.setVehicleCategory VCLand
ObjectTemplate.setVehicleType VTArtillery
ObjectTemplate.setToolTipTypeTTArtillery
The setMiniMapIcon command lets you put an icon
on the map that looks like a factory. This way you can tell if the
object has been destroyed or not for objective based gameplay.
ObjectTemplate.setMinimapIcon "Minimap/minimap_icon_Factory_32x32.tga"
The final line we will need for the creation
of the PCO sets the file location of the icon image that will be
used to identify the position of the PCO on the minimap.
The next object we will need to create is the
LOD object.
ObjectTemplate.create LodObject lodFactory
ObjectTemplate.hasMobilePhysics 0
ObjectTemplate.hasCollisionPhysics 1
ObjectTemplate.hasResponsePhysics 1
rem -------------------------------------
ObjectTemplate.addTemplate FactoryComplex
ObjectTemplate.addTemplate FactorySimple
ObjectTemplate.addTemplate FactoryWreck
rem -------------------------------------
ObjectTemplate.lodSelector FactoryLodSelector
BF:1942 uses LOD objects to control which model
is shown to a player at any given time. The LOD object is imbued
with collision and response physics. There are three templates added
to this LOD object; FactoryComplex � close-up view of the building;
FactorySimple � the low polygon view of the building from long distance;
and FactoryWreck � the wrecked view of the building. The final line
defines the �lodSelector�. The �lodSelector� object makes the decisions
about which model of the building a player will see.
***NOTE: The order of the templates added
into an LOD object is very important. The first template must be
the high polygon model, followed by the low polygon model and the
wrecked model last.
FactoryComplex:
ObjectTemplate.create Bundle
FactoryComplex ObjectTemplate.geometry Britain_factory_m1
ObjectTemplate.setHasCollisionPhysics 1
We will create the �FactoryComplex� object first.
It will be set up as a �Bundle� because we may want to include other
objects within this object (ladders, special effects, etc.). The
�ObjectTemplate.geometry� line defines which geometry object (model)
this object will use. We created the geometry objects that we are
referencing in Step 1.
FactorySimple:
ObjectTemplate.create SimpleObject FactorySimple
ObjectTemplate.geometry Britain_Factory_L1
ObjectTemplate.hasDynamicShadow 1
FactoryWreck:
ObjectTemplate.create SimpleObject FactoryWreck
ObjectTemplate.geometry Britain_Factory_Wreck_m1
The other two objects will be a �SimpleObject�
because it is only a model that will be shown, with no dynamic properties.
If a model is exported with a shadow, you can enable this via the
�ObjectTemplate.hasDynamicShadow� line.
LodSelectorTemplate.create DistCompareSelector2
FactoryLodSelector
LodSelectorTemplate.hasDestroyedLod 1
LodSelectorTemplate.addLodDistance 300
The final object we will need to create in this
file will be the �lodSelector� object that we referenced within
the LOD object earlier. If you plan to have a wrecked model shown
when the building is destroyed, you must include the �LodSelectorTemplate.hasDestroyedLod
1� line.
We have finished all the scripting we need to
complete for the �Objects.con� file.
Save and close the file.
STEP 3: Creating the Network Objects
For a destroyable building to work in a multiplayer
game there needs to be some way for the game to communicate the
status of the building to other clients. BF:1942 does this using
network objects. A networkable object is usually reference in an
object using the �ObjectTemplate.setNetworkableInfo� line. Back
in Step 2, we created a line stating �ObjectTemplate.setNetworkableInfo
FactoryBodyInfo�. Now we need to create the object we referenced.
Network objects are usually kept in a file titled
�Network.con�. Create a file named �Network.con� and open it.
NetworkableInfo.createNewInfo FactoryBodyInfo
�NetworkableInfo.createNewInfo� indicates that
we are creating a new network object. The value �DesBuildingBodyInfo�
will be the name of the new object.
NetworkableInfo.setPredictionMode PMLinear
The second and final line of the network object
sets the way the data will be exchanged over the network. �PMLinear�
is the standard value that is used for all networkable data.
Those two lines are all that is needed to create
the necessary network object. The network object is the final piece
of scripting that is needed to create the destroyable building.
The �Network.con� file can be saved and closed.
Final Notes
The tutorial has shown you how to create a basic
destroyable building. A mini-mod has been created as an example
and employs the scripting listed above. You can download
it here. Once downloaded, unzip into the Battlefield1942\Mods
folder.
|