6. MISCELLANEOUS TIPS AND TRICKSThis section describes more of the things you can do to spice up a mission - some of them require a good
understanding of the odf system, so I put them here, rather than in the unit scripting section.
Extra ammo without a separate odfWhen you save a level from edit mode, the ammo a unit has - stock or custom - is saved in the BZN file.
This means you can copy a stock odf to your addon and increase the ammo of the unit to a very high level
while building your mission, and then delete it later when you are finished building the mission - the high
ammo value will stick. In this way you can avoid having an extra odf for high ammo units that are already
on the map. This is useful for units that run out of ammo quickly, such as the CCA Walker - in this fashion,
you can give it 50 or 60 shots instead of 16. You can use this trick for sniper missions, also - copy the
asuser.odf or ssuser.odf to your addon and change maxAmmo to 100, and the player will have 100 sniper
rounds when the mission starts, if they are on foot. This doesn't apply to units produced within the game,
only those already on the map. In the same fashion, once the player with extra sniper ammo gets into a
vehicle, the sniper ammo capacity will drop back to three.
Adding powerups to unitsAn easy way to create a more dangerous unit is to place a weapon powerup right in front of it and path it to
go through the powerup. You could, for example, place some SP-Stabber powerups (apsstb.odf) in front of
some Bombers or Walkers and they will attack using these weapons once they pick them up. Sometimes
they don't get the powerups, so you will have to watch these units in the game and see if they are using the
weapons you scripted them to pick up.
Scrap and pilotsIf you give the AI an enormous amount of scrap and pilots in the mission odf file, it will attack consistently
and usually with a significant force, especially if you've ordered it to build 30 or 40 combat units in the AIP
file. Try giving it 10000 scrap and 500 pilots, and you should see quite a difference in the intensity of the
attacks mounted against you.
Alternatively, you can start the player off with a very meager supply of scrap and pilots, which makes it a
lot harder for the player to build up defenses and muster a force capable of knocking out the enemy base.
You can also spread out the available scrap on the map so the player must pay more attention to resource
gathering to be successful. The Last of the Galilean mod by Existence makes good use of this technique -
the maps are quite large, and the player has to hunt around for the scrap fields, and protect the Scavengers
sent out to gather them up as well.
Yet another idea if you are using custom units is to change their scrap values. This is an idea I have used for
the secret level of the Red Wolf Missions - I had Howitzers come in to bomb the player from the cliff tops,
and as Scavengers have a nasty habit of ignoring the 300 pieces of scrap on the ground in front of their
noses while futilely trying to grab an unaccessible piece of scrap because it was created first, I set the scrap
value for the custom Howitzers to zero, to preclude this. On levels where the AI has been assigned 10000
scrap, you usually end up with a huge drift of scrap in front of your upgraded Turrets and Gun Towers,
making scrap too easily available. By setting the scrap value for custom enemy units to a low value, say 2
or 1, you will significantly reduce the excess scrap available to the player.
Another way to make things challenging is to start the player with virtually no scrap, in storage or
accessible scrap fields, and make them have to hunt down and recycle a custom relic or other object in
order to get the necessary starting scrap to survive. BS'er made an excellent mission like this for his Get
Arkin mission pack, and Floating Point employed this technique in Absolute Zero as well. Be sure that the
object to be recycled for scrap has a maxHealth of 0, so it cannot be destroyed - blowing up something
valued at 50-100 pieces of scrap will give you an instant Unhandled Exception.
Dual enemy basesOne way to put the heat on the player is to have two separate enemy bases at opposite corners of the map,
each with its own Recycler, Factory, and Armory. As stated above, you can have more than one of each of
these on the map. By placing the first Recycler at one base and the first Factory at another you can ensure
that the player must destroy both bases in order to win the mission. If you give the AI a lot of scrap and an
AIP that tells it to build a lot of units it will build attack forces at both bases. When the AI decides to attack,
the player often as not will get hit from both directions at once. I've noticed that once the first recycler is
destroyed, the enemy scavengers won't gather scrap unless there are scrap silos, so you should make sure
you place a few on the map - that way the AI can continue fighting.
Alternate mission objectives
A lot of missions in the end just require you to destroy the enemy recycler, factory and armory. This gets
boring after awhile, but you can create alternate ways for the player to win a mission. One way is to have
the player destroy a specific enemy building or unit in order to win. This can be done by placing an enemy
recycler at low health off the edge of the playable map and ordering it to follow a neutral pylon. You can
then place a custom sniper next to it. Below is an odf for such a sniper, built on asuser.odf:
[GameObjectClass]
baseName = "aspilo"
classLabel = "person"
scrapCost = 0
scrapValue = 0
pilotCost = 1
maxHealth = 0
maxAmmo = 5000unitName = "Player"
aiName = "SoldierFriend"
aiName2 = "SoldierEnemy"
heatSignature = 0.2
imageSignature = 0.3
radarSignature = 0.2
weaponHard1 = "GC1"
weaponName1 = "gspstab"
weaponHard2 = "GC1"
weaponName2 = "gsnipe"
[PersonClass]
painSound1 = "pain1.wav";
painSound2 = "pain2.wav";
painSound3 = "pain3.wav";
painSound4 = "pain4.wav";
painSound5 = "pain5.wav";
painSound6 = "pain6.wav";
burnSound1 = "lburn1.wav";
burnSound2 = "lburn2.wav";
dieSound1 = "death1.wav";
dieSound2 = "death2.wav";
dieSound3 = "death3.wav";
dieSound4 = "death4.wav";
dieSound5 = "death5.wav";
crushSound = "squish.wav";
jumpSound = "jump.wav";
landSound = "land.wav";
stepSound = "running2.wav"
animRate = 5.0
Ammo is increased so that the sniper will be able to use the SP-Stabber weapon. I've set the maxHealth
value to zero - any object with a maxHealth of zero cannot be destroyed. (Just try to destroy a Pylon or a
CCA repair pod.) I don't know if this is a bug or intentional, but it's very handy here, as an enemy unit that
happens by can't kill the sniper. You could also place the enemy recycler and the sniper on some
unreachable plateau to counter this. Put the sniper in as team 3 and order him to attack the building the
player must destroy. When the player accomplishes this, the sniper will turn and destroy the enemy
recycler. If the line successCondition = 1 is used in the mission odf, the mission will end, provided there are
no other enemy production units on the map. You can create variants on this theme, i.e. require the player
to destroy multiple buildings, or a factory and a Launch Pad, etc.
You can also reverse this trick and use it on the player - put a friendly recycler off the map and have the
team 3 sniper attack a building or unit the player must protect.
No howitzers, no mortarsIf you are using custom production units, you can deny the player access to certain units and powerups by
removing these items from the units' building capabilities. Look at the avmuf.odf file, for the NSDF Unit
Factory. The units it can build are beneath the [ProducerClass] line. To make a factory incapable of
building howitzers, just remove the line that says: buildItem4 = "avartl". This is a way to deny the player an
easy way to take out enemy Gun Towers. In the same way you can modify a recycler to deny the player
additional production units, or create an armory that can't build mortar powerups (check out my mission
Blockade for an example of a partially disabled armory). This technique was pioneered by Toni Chaffin
(Slingshot) and was used extensively in The Red Odyssey.
More dangerous AI units.Most of the regular units do not pose a serious one on one threat to the experienced BZ player, with the
possible exception of Bombers and Walkers. Once you've played online against some experienced human
players, shooting at CCA tanks that turn away after taking one hit can become boring. One way of dealing
with this is to tweak the mission odf and aip to make the game send hordes of enemies at the player, as
described above. However, if you are willing to spend time perfecting some custom odfs, it is possible to
create some truly evil AI units. You may have noticed that some units will turn away when hit and circle
around you, while other units will stare you down as they try to kill you. This is due to the aiName and
aiName2 used in the odf. Units using "TankFriend" and "TankEnemy" will dance about trying to get behind
you, while units using "RocketTankFriend" and "RocketTankEnemy" will face you down, more like a
human player would. Given the right weapons, these latter units are much more dangerous. Try creating a
custom Stoli (CCA Light Tank) and give it an AT-Stabber or SP-Stabber and you'll see what I mean. You
can assign the RocketTank aiName to regular Fighters and Tanks, also, if you are building custom units.
Another way to improve the behavior of the AI units is to increase the values for omegaTurn and
alphaSteer, along with increasing their speed somewhat, so they move as fast as a human player. Units
assigned the aiName "TankFriend" and "TankEnemy" are much more able opponents when you tweak these
values to higher settings. You can of course change the weapons loadout for custom units also - changing a
tank's cannons to dual SP-Stabbers or giving a Rocket Tank dual TAG Cannons are 2 of the more obvious
modifications. If you are a Rocket Tank and missile fan there is a special Hornet odf, named ghrntai.odf,
that AI units can use properly. Put this in an AI Rocket Tank and they will fire barrages of Hornets at you.
This was never used in the original game, maybe they thought it was too dangerous. I can testify to the
effectiveness of this weapon; I built a level that used it, and got nailed plenty of times by Hornets that
seemingly came out of nowhere. When the AI targets you with this it will fire on you from hundreds of
meters away; seeing a salvo of Hornets coming at you from out of the darkness with no enemies nearby on
radar can be very disconcerting. You can also create your own devastating custom weapons. Fast firing
rockets, weapons that fire a stream of heavy MAG Cannon balls, and super powered prox mines are just a
few of the things I have seen on IA levels. The possibilities for new weapons are almost endless, just use
your imagination.
Sniperproof unitsIf you are building a difficult level with some heavy duty enemies and you don't want the player sniping
them for their own use, you can make them sniperproof. One way is to remove the pilot entry as described
in the BZN file editing section - however, this only works for individual units already on the map, and
doesn't apply to new units produced in the game. To get around this you can create a custom unit that
doesn't start with av, bv or sv. For example, a unit named dvtank or kvtank will not have a sniperdot visible.
These units can't pick you up, either, if they are friendlies. Build a custom recycler and/or factory to
produce them and you're in business. Adding the lines pilotCost = 0 and hasPilot=0 to the odf seems to
work for this also.
Stealth Turrets and HowitzersBs'er figured out a way to sneak turrets into the player's base without the
player being able to attack them en route. These stealth turrets are basically normal turrets with a high
altitude setting and a zero-time deployment. Open up avturr.odf, the odf file for the standard NSDF turret.
Under the [HoverCraftClass] section, change setAltitude to 1000. Then look under the [TurretTankClass]
line. Change timeDeploy and timeUndeploy to 0.0 - that's all you need to do. Add the line
baseName = "avturr" to make it look like an NSDF turret and save with a custom name.
You will need to include an AIP file if you use these, and under the FORCE MATCHING section list your
stealth turret and a value for it. You must make sure your level has at least one of these units in it when the
mission begins, otherwise you will experience game crashes. The same applies for the timeDeploy and
timeUndeploy lines in the unit's odf file - these must be set to zero to avoid crashing the game.
You can also create stealth Howitzers using the same method - however the classLabel MUST be changed
from howitzer to turrettank. You must also add a [TurretTankClass] section with the appropriate values. If
you use the howitzer classLabel the unit will deploy at whatever height you specified in the setAltitude
value and just sit there.
This is a great way to step up the danger the AI poses, as turrets and especially howitzers are very
vulnerable when traveling to a location - this way they get there without being exposed to the enemy until
it's time to attack. Just place a few of these in a level and path them to go to the player's base. They will
travel at altitude and appear instantly when they reach their destination. A downside to this is that although
the units are very high in the air your units will still sense them approaching and try to attack them while
ignoring other enemy units. To mitigate this, try to have the units go to a location where they pose a danger,
i.e. to a scrap field just outside the base, without causing excessive distraction. For stealth howitzers, try to
land them on a hill just about 200 meters from a production unit, out of the range of Gun Towers or other
defenses the player may erect in the meantime.
Airborne soldier assaultsAnother neat special attack is an assault on the player's recycler by airborne troops. This is done by placing
a custom APC in the level with a high setAltitude value. Open up svapc.odf and you'll find the setAltitude
value under the [HoverCraftClass] line. You can also change the lines under the [APCClass] - the
soldierType line determines what comes out of the APC, and soldierCount determines the number of
objects that will spawn when the APC attacks. Try setting the setAltitude value to 4000. Save as a custom
odf (don't forget the baseName line) and put it in the b_socmbt.odf build file. Run your mission in edit
mode and place one of these by the player's recycler. Note that you can't see it when you place it - this is
just a side effect of the high setAltitude. Hit CONTROL-A to make it rise to altitude, then hit CONTROLA
once more so the APC doesn't wander off. Now, go to SHIFT-F9 mode. Order the APC to attack the
recycler. Press CONTROL-A again, without leaving SHIFT-F9 mode, and the APC will attack. Wait until
the troops come out and clear the APC, then HIT CONTROL-A once more to freeze the action. Go to Edit
Objects mode and delete the custom APC (You should not leave this in the mission, as it will distract
friendly combat units). Then go to Edit Task mode and reorder each individual soldier to attack the
recycler. This is not always necessary, as the troops will generally attack the recycler anyway, but
sometimes they wander (or fly) off and go back to the enemy base (especially if the recycler is moving), if
they lose sight of it. Make sure you do not try to move an airborne soldier from edit objects mode, or he
will appear at ground level, and immediately attack his intended target, which will undoubtedly screw up
your level.
Once you've done this, save the level as you would after any mission scripting you do without leaving
CONTROL-A mode again, so the scripting is saved. When you run the mission again the soldiers will
descend until they are within range and attack. It takes about 6 minutes for them to fall 4000 meters. You
can vary the time by changing the setAltitude value for the APC - anything from a few hundred meters to
hundreds of thousands of meters will work. (I don't know if there is an actual limit to an object's height in
Battlezone - I once built a custom tank that could fly and took it up over 500,000 meters just to see if I
could.
Soldiers falling from this height would take most of the day to reach ground level.) You can have several
waves of such attacks by using several custom APCs all attacking from different heights. You can have
regular pilots attack instead of soldiers by changing soldierType from "sssold" to "sspilo" in the custom
APC's odf file. This is useful if you want the pilot to get into a vehicle instead of returning to the recycler -
see the scavenger trigger trick in the Unit Scripting section above.
This trick works best against a recycler in the open - in a high walled canyon the soldiers sometimes get
hung up on the walls. On a side note, you can get APCs to spawn units other than soldiers - I've seen a level
in which an APC attacked with Comet missiles, and Bs'er created a map called "Skydiver" in which special
APC's attacked with bombers that were person class objects.
Day Wrecker attacksWant to launch a Day Wrecker attack against the player? Unfortunately, you cannot do this directly - there's
no way to order an enemy Armory to launch one, and Day Wreckers detonate immediately when spawned
by other units, or if they are in flight when the mission starts. However, with a few custom odf files it is
possible to simulate such an attack quite nicely - and the player will not be able to counter the attack.
First, create a fake Day Wrecker. You can use apammo.odf to create the following custom file - name this
something like apfwrk.odf.
[GameObjectClass]
baseName = "apwrck"classLabel = "ammopack"
scrapCost = 1
scrapValue = 0
maxHealth = 150
maxAmmo = 0
unitName = "Day Wrecker"
aiName = "PowerUpProcess"
[AmmoPackClass]
ammoUp = 500
soundPickup = "weapon.wav"
soundReject = "mnu_buzz.wav"
This is nothing more than an ammo pod made to look like a Day Wrecker - changes are in green.
Next, you will need to create a custom soldier - this unit will be carrying the REAL Day Wrecker. Create it
from the CCA soldier odf (sssold.odf) and name it sswrck.odf.
[GameObjectClass]
baseName = "sspilo"
classLabel = "person"
scrapCost = 0
scrapValue = 0
maxHealth = 250
[color]maxAmmo = 500[/color]
unitName = "Soldier"
aiName = "SoldierFriend"
aiName2 = "SoldierEnemy"
heatSignature = 0.2
imageSignature = 0.3
radarSignature = 0.2
weaponHard1 = "GC1"
weaponName1 = "gdwrck"
[PersonClass]
painSound1 = "pain1.wav"
painSound2 = "pain2.wav"
painSound3 = "pain3.wav"
painSound4 = "pain4.wav"
painSound5 = "pain5.wav"
painSound6 = "pain6.wav"
burnSound1 = "lburn1.wav"
burnSound2 = "lburn2.wav"
dieSound1 = "death1.wav"
dieSound2 = "death2.wav"
dieSound3 = "death3.wav"
dieSound4 = "death4.wav"
dieSound5 = "death5.wav"
crushSound = "squish.wav"
jumpSound = "jump.wav"
landSound = "land.wav"
stepSound = "running.wav"
animRate = 5.0
Once again, changes are in green. Only 2 things changed from the standard sssold.odf - first, the maxAmmo
is set higher. This really doesn't matter unless you specify a maxAmmo in the custom Day Wrecker the
soldier will fire, in which case the value must be equal to or greater than that value, so the soldier can fire it.
Also, the soldier's Chain Gun is replaced with the weapon which will dispense the custom Day Wrecker
(gdwrck.odf). Below is the custom odf for that weapon, based on gproxmin.odf:
[WeaponClass]
classLabel = "dispenser"
wpnName = "Daywrecker"
fireSound = "gprox00.wav"
wpnReticle = "gproxmin"
wpnPriority = 3
wpnCategory = "SPEC"
[DispenserClass]
shotDelay = 2.0objectClass = "apwrkg"
The only important change here is the last line, which specifies the custom Day Wrecker itself. The shot
delay doesn't really matter, as the soldier will only be firing once. Now create the custom Day Wrecker
itself, apwrkg.odf. This is built off the standard apwrck.odf file. A custom one is necessary because we will
detonate it at least 200 meters up, and the explosion must be customized also because of this.
[GameObjectClass]
baseName = "apwrck"
classLabel = "daywrecker"
scrapCost = 20
scrapValue = 0
maxHealth = 300
maxAmmo = 0
unitName = "Day Wrecker"
aiName = "PowerUpProcess"
[DayWreckerClass]
xplBlast = "xdwrxpl"
The last line specifies our custom explosion (xdwrxpl.odf) which is listed below:
[Explosion]
classLabel = "quakeblast"
frameName = "rpuff.0"
frameCount = 16
frameDelay = 0.2
explRadius = 50.0
explSound = "xemt1.wav"
damageRadius = 450.0
damageBallistic = 0
damageConcussion = 1500
damageFlame = 0
damageImpact = 0
[QuakeBlastClass]
quakeCount = 12
quakeClass = "dayquake"
This is built on the xbmbxpl.odf - only the damageRadius and damageConcussion parameters are modified.
Once you have these five custom odfs you only need two custom APC's to drop the soldier and the fake
Day Wrecker out of, and you're in business. Put sswrck in one and apfwrk in the other (the soldierType).
Set soldierCount to one so one of each comes out of the APCs.
The setAltitude line for each depends on how long a delay you want before the bomb explodes. An
ammopack class object (apfwrk.odf) deployed from an APC descends very slowly - it takes about 25.5
minutes to fall 3000 meters. A person class unit descends 5 times as fast. Assuming we want this kind of
delay, and that we want the daywrecker to explode 300m above the ground, setAltitude for the APC
carrying the fake Day Wrecker should be 3000m, and setAltitude for the APC carrying the soldier should
be (2700 * 5) + 300. That's 5 times the total drop distance for the fake daywrecker, plus a 300m addon to
compensate for the height of detonation (It works out to 13800m).
Now, before you launch into edit mode, place the two custom APCs in the build files. The APC carrying
the soldier should be in a team 2 build file (enemy) and the APC with the fake Day Wrecker should be team
0 (neutral). Place one of each APC next to the friendly object you want to attack. This object must be
stationary, as the fake Day Wrecker will simply fall to the ground once deployed. Now toggle CONTROLA,
so the APCs go to altitude. Go to SHIFT-F9 mode. Order both APCs to attack the friendly object. Hit
CONTROL-A again, without leaving SHIFT-F9 mode. As soon as you see the soldier and fake Day
Wrecker deploy, hit CONTROL-A again to freeze the action. Delete the custom APCs, and then order the
soldier to attack the fake Day Wrecker. Save the mission, and you're done. When the level is played the
soldier will fall until he is within range of the fake Day Wrecker. He will then deploy his own custom Day
Wrecker, which will explode instantly, killing the soldier, the fake Day Wrecker, and maybe some units in
the player's base as well. The detonation needs to occur at a reasonable height so the player cannot interfere
with the attack. There is some variance involved as well - the soldier won't always set off the bomb at
exactly the same time, so it is necessary to allow for some extra distance to the ground. This is the reason
that a custom explosion is needed - a standard Day Wrecker will not cause any damage when it detonates at
that height.
You can tweak the explosion parameters to suit your mission requirements - the numbers I used in the
xdwrxpl.odf will cause moderate damage at 200-300m. If you are feeling sadistic you can cause far worse
damage over a much wider area. To keep the player from attacking the fake Day Wrecker you should avoid
having high terrain near the attack site that could put the player within shooting range of it. This is a very
neat effect when done right - the player may be busy fending off a heavy enemy attack and all of a sudden
notice a little yellow blip on the radar, slowly descending on the base...
Extra in-game messagesYou've seen how to play a voiceover when your mission starts by specifying a WAV file in the mission odf,
but you may want to play additional messages to give further instructions to the player. Although
Battlezone doesn't allow this kind of scripting in IA missions, there is a way to play messages with a few
extra odf files. This is done by creating a custom mine and explosion. The following odf was created from
the proxmine.odf file - save it as scrapmin.odf.
[GameObjectClass]
baseName = "npscr2"
classLabel = "proximity"
scrapCost = 0
scrapValue = 0
maxHealth = 150
maxAmmo = 0
unitName = "Scrap"
[MineClass]
lifeSpan = 1e30
[ProximityMineClass]
searchRadius = 30.0
xplBlast = "xwavxpl"
The baseName line makes it look like a piece of scrap. The lifeSpan is increased so that the mine will not
self destruct. Under the [ProximityMineClass] section we specify the custom explosion that the mine will
use. This is based on the xminxpl.odf, and is listed below - save as xwavxpl.odf.
[Explosion]
classLabel = "planarexpl"
frameName = "rpuff.0"
frameCount = 0
frameDelay = 0
explRadius = 0
explSound = "avtankvp.wav"
damageRadius = 0
damageBallistic = 0
damageConcussion = 0
damageFlame = 0
damageImpact = 0
All the normal explosion values for graphical effect and damage are set to zero. The key line here is the
explSound line. When the "mine" goes off, the player will hear the the NSDF Grizzly saying "Grizzly
here." instead of the normal explosion sound. You can substitute whatever WAV file you want to play on
this line.
Place these two odfs in your addon, and put "scrapmin" in the neutral buildings build odf.
The best way to use this is to place a scrap field at the player's objective and put the custom mine with the
message you want to play in the scrap field. It will be indistinguishable from the other pieces of scrap.
When the player arrives the custom scrap mine will go off and play the message. Keep in mind that this
message cannot be replayed by pressing "R" like the mission start message, so you may want to use this as
an adjunct to a text message the player must read - for example, you could have a custom nav in the scrap
field with an INF file containing additional instructions.
This effect is best used at the start of a mission, as enemy units that wander by will set off the custom mine
as well - you may want to use this in conjunction with a script that delays the production of enemy units.
Any enemy turrets on the map should be given the CMD_NO_DROPOFF order so they don't go to the
scrap field. You can also use the trick of ordering the player's Recycler to follow the mine, and the Recycler
will not be available until the player reaches the scripted objective.
Sniper missionsAnyone who has played Slingshot's Snipe Run or the nightmarish 7th Chinese mission from the Red
Odyssey knows what a challenge this kind of level can be. Here I'll describe a few tricks that can help you
design a good sniper level.
To give the player additional sniper ammo copy the asuser.odf and ssuser.odf to the addon and set their
maxAmmo to a higher level - this gives the player sufficient sniper ammo (100 rounds is a good amount)
and makes the enemy snipers much more dangerous as well. You can leave these modified odf files in your
addon while you create your level and delete them after - the high ammo value will stick, as described
above. This way you don't need extra odfs, unless you are using a custom sniper with additional weapons.
People who have played The Red Odyssey will remember that in 2 of the Chinese missions the player had
to face enemy snipers without the ability to jump about, which made dealing with enemy snipers and
soldiers much harder. All this requires is a single line in the asuser.odf file (if you're playing as NSDF) that says:
velocJumpRun = 1.0This will disable the jumping feature. You should put this right below the animRate line. If the player hits
the jump key the jump sound will be played very rapidly, so you may want to set jumpSound to a different
wav file sound (running.wav works ok for this) or to a null string between quotation marks. If you choose to
disable jumping you should use a custom odf based on asuser.odf or ssuser.odf and alter the player's entry
in the BZN file so the player on foot has the new characteristics. There are several other parameters which
can be used to alter pilot and soldier movement. For example, if you want to create a pilot that can't move,
add these lines to the custom odf:
velocJumpRun = 0.0
velocForwardRun = 0.0
velocReverseRun = 0.0
velocStrafeRun = 0.0This will create a stationary pilot/soldier, sometimes useful for scripted IA levels. It is also possible to
make the player able to run very fast and jump to great heights by increasing these values. This may be
useful if you want the player to descend from the air and play the mission on foot, while having enemy
units scripted to attack them. Unfortunately even in Control-A mode you still descend from the air after you
bail out so you would have a difficult time ordering enemy units to attack you and save before you hit the
ground. However, by setting the velocJumpRun line higher (try 40 or 50) you can order enemy units to
attack you while your player on foot is standing on the ground, jump up, save, and just remove the altered
velocJumpRun line when you are done making the level.
It is also possible to modify movement characteristics for the player while the sniper rifle is deployed. This
is done by using the Crawl parameter. Using the line velocForwardCrawl = 1.0, for example, will permit
the player to move forward at 1 meter per second while in the sniping position. Snipers can also be made to
jump in the air using velocJumpCrawl, though this is not really practical. One more pilot parameter affects
how quickly a sniper can turn, very useful if you are making a level in which foot soldiers are defending a
base. The line that affects this ability is omegaSpinCrawl. Setting this to 5.0 makes the sniper turn much
more quickly than usual. There are other lines you can add that will affect the pilot movement but these are
really the key ones.
You may have noticed that pilots and soldiers always wander back to their base if there is a production unit
they can get into, even if you order them to stay put or follow something. Aside from some of the above
suggestions, another useful way is to use a custom pilot odf with the aiName and aiName2 parameters
altered to something else. Changing them to "RocketTankFriend" and "RocketTankEnemy" seems to work
the best. Pilots and soldiers with this aiName will stay where they are, and attack enemies that wander by.
They can also be ordered to follow objects, and they will obey. If you have a sniper level that also has
enemy production units on the map, and you need some enemy soldiers to stand guard somewhere this is
the way to go.
You can also modify a player's unit to use a radar scan like a regular tank does. By default asuser and ssuser
have no radar code, so everything shows on the radar map all the time, and the player cannot scan very far.
By adding a [CraftClass] section you can change these characteristics, for example:
[CraftClass]
rangeScan = 300.0f
periodScan = 3.0f
velocJam = 5.0f
This will give the player on foot the ability to see units on radar out to 300 meters, and the display will
update every 3 seconds.
When creating terrain for a sniper level, keep in mind that it looks different on foot than it does from a tank.
The terrain for these missions should be mostly rolling hills and valleys, with little or no rough terrain. If
you have tasked enemy pilots and soldiers to attack the player, they will get stuck very easily in a rugged
landscape. Snipers should be placed in gulleys and depressions where the player will have a chance to
engage them without being sniped from 300-400 meters away. Proximity mines can be used to channel the
player into areas where enemy soldiers and snipers wait in ambush. Turrets can be used for this also,
depending on what victory conditions your mission requires.
A player on foot can hardly hope to destroy a recycler with a plasma rifle, so you need to be creative in how
you end such a mission. You could have the player cross the map and capture an enemy tank by sniping it.
You could also give the player an Armory and have them drop a Day Wrecker on a weakened enemy unit at
the objective. Still another idea is to have the player make his way to an enemy outpost and assassinate an
enemy officer at a comm relay. This enemy could be targeted by a team 3 custom sniper off the playable
map, with a team 2 recycler at low health right next to the sniper following a piece of scrap or building.
When the enemy officer goes down the team 3 sniper turns and kills the team 2 recycler, ending the
mission.
Spawning unitsYou cannot create respawning units through the use of spawn points as you can for deathmatch levels. It is
possible to spawn units with a few custom odf files, however. To create a weapon that will spawn a unit,
open up gproxmin.odf and make the following changes to it - save as grecy.odf:
[WeaponClass]
classLabel = "dispenser"
wpnName = "Prox Mine"
fireSound = "gprox00.wav"
wpnReticle = "gproxmin"
wpnPriority = 2
wpnCategory = "SPEC"
[DispenserClass]
shotDelay = 1800.0objectClass = "avrecy"
The delay is increased for this weapon so that it will only dispense one unit every half hour. The
objectClass line is altered so that instead of dispensing a Prox Mine, the weapon will dispense an NSDF
Recycler. You can change this to any vehicle you like - keep in mind that if it's a vehicle with a maxAmmo
line, such as a Tank or Bomber, the unit using the weapon must have at least as much ammo on its
maxAmmo line as the unit it is spawning, or it will not dispense the unit. If you are spawning a Recycler,
you only need one, so the unit creating it should be destroyed after spawning it. Below is a custom sniper
odf well suited for this purpose, built from asuser.odf - save it as asuser1.odf:
[GameObjectClass]
baseName = "aspilo"
classLabel = "person"
scrapCost = 0
scrapValue = 0
pilotCost = 1
maxHealth = 750
maxAmmo = 5000unitName = "Player"
aiName = "SoldierFriend"
aiName2 = "SoldierEnemy"
heatSignature = 0.2
imageSignature = 0.3
radarSignature = 0.2
weaponHard1 = "GC1"
weaponName1 = "grecy"
weaponHard2 = "GC1"
weaponName2 = "gsnipe"
weaponHard3 = "GC1"
weaponName3 = "gflare"[PersonClass]
painSound1 = "pain1.wav";
painSound2 = "pain2.wav";
painSound3 = "pain3.wav";
painSound4 = "pain4.wav";
painSound5 = "pain5.wav";
painSound6 = "pain6.wav";
burnSound1 = "lburn1.wav";
burnSound2 = "lburn2.wav";
dieSound1 = "death1.wav";
dieSound2 = "death2.wav";
dieSound3 = "death3.wav";
dieSound4 = "death4.wav";
dieSound5 = "death5.wav";
crushSound = "squish.wav";
jumpSound = "jump.wav";
landSound = "land.wav";
stepSound = "running.wav"
animRate = 5.0
The maxHealth and maxAmmo lines are increased to allow the use of the Solar Flare and to let the unit last
a bit longer. It has the weapon that dispenses the Recycler (grecy.odf) and also a solar flare.
One way to use this is to place a custom enemy turret with no ammo next to the custom sniper. Order the
enemy turret to CMD_NO_DROPOFF on itself so it stays put. Then order the custom sniper to attack an
enemy object across the map that the player must destroy to get a recycler. When the player destroys the
object the sniper will turn and attack the enemy turret, dispensing a recycler. It will also dispense a Solar
Flare, which will destroy the custom sniper within a few seconds (it will also melt the recycler a bit, but that
doesn't matter too much). If you don't want the enemy turret around when the player shows up, you can
create a second custom sniper armed with an SP-Stabber or similar weapon and script it as you did the first
one. Just make sure that the second sniper doesn't fire on the turret before the first one does. You'll also
want to make sure the enemy turret has a low health value so the second sniper destroys it quickly.
It should be noted that you can only spawn default units - trying to spawn a custom Recycler, Factory, etc.
will cause an unhandled exception when the spawn weapon is fired.
Other miscellaneous tipsOne way to speed up editing your map is to copy the player.odf to the addon directory and increase the
velocForward and accelThrust values - in this way you can speed around the map while placing objects,
which saves time. Some people have even created special tanks which can place geysers and scrap through
the weapon hardpoints. You can also move yourself around the map in SHIFT-F9 mode by using edit
objects mode and dragging your tank about. Be careful not to delete yourself, or you'll wreck your level.
Don't move your tank off the map edge, either.
If you would like to try building IA levels on the preexisting BZ maps, you can - the HGT and MAT files
are already in the addon, but the TRN files are in the ZFS file. The old method for doing this was as
follows: open the bzone.zfs file with a hex editor. Search for misn01.des and change it to zisn01.des. Now
search for the TRN file you need - for example, misn12.trn. Change it to misn01.des. Now, start Battlezone.
Go to the training exercises, and the TRN file will be displayed as the mission briefing. Copy it and exit
Battlezone. Go back into the bzone.zfs file and put everything back the way it was. Now you can make
copies of the HGT and MAT files renamed usrmsnXX (substitute the appropriate numbers for XX) , along
with the TRN file you copied, and create an IA level from the map.
However, now that the newest version of unzfs is available, I strongly recommend you use this instead. You
can extract all the original TRN files out and use them to make your new maps, along with copies of the
HGT and MAT files from the addon. Be warned, all those unarchived zfs files will take up a lot of space on
your hard drive. For those with CD burners, I recommend you use unzfs on all the zfs files, each with its
own directory, and archive them on CD. This way you'll have all the game files at your disposal whenever
you get the urge to play around with them.
The cheats for The Red Odyssey are a bit different from the Battlezone cheats - hold down ALT-SHIFT and
type in the codes below to use the cheats:
TEBUFFY no vehicle or body damage - does not protect from sniping
TEDEADITE unlimited ammo
TEDONTDIE full map view
TERAT no scrap or pilots needed to build
TENERD gives satellite view without comm tower
The Red Odyssey also has a secret level - to access it, type "sammy" at any mission completion screen and
the next mission will be the secret level. You can access all the levels in The Red Odyssey the same way
that you do for Battlezone - the "iamadirtycheater" code works exactly the same way.
7. UTILITIES.Below is a list of utilities, which you might find useful for BZ mapmaking.
They can be found at
http://www.battlezone1.net/extras. A description of each is provided.
BZFRACThis is a great utility that lets you create HGT files through the use of fractal algorithims. The program
permits large-scale manipulation of the HGT file, saving much time and tedium in the Battlezone editor. It
can't do everything, but it's a very useful program nonetheless.
BZACTThis is a great program for you dedicated planet and sky texture makers. Feed the program a folder full
of textures, and depending on the texture type and resolution (takes bmp and tga files), BZACT will
create a custom palette for the new planet that works with bz as it converts all textures to MAP format, or it
can also create palette independent 16 bit MAP files for use as sky textures in Hardware mode. This one is
also by Slight.
BZHGTA bitmap conversion program by Slight. Lets you convert a BMP file to a HGT file, with elevations based
on color differentials in the BMP. Slight has recently redone this tool and named it BZHGT. The new
version
no longer requires DOS4GW and accepts TGA files as well as bitmaps.
BZLGTAnother new tool by Slight. This one converts a LGT file to a BMP, which you can edit to change your
map
shadows. Dropping the edited BMP back onto BZLGT creates a new LGT file, which you can use in your
mission. With this tool you can edit lava to glow brightly on dark maps or make terrain completely black
for night missions by using a very dark overlay for shadows.
BZNEdA BZN file editor by Avatar, this program lets you view all objects within a BZN file. You can change and
add pilots to vehicles, change an object's allegiance, name Nav Beacons, etc. Saves you from editing the
BZN file by hand with a hex editor.
UNZFSThis program will extract all files from a ZFS file, so you can view the files contained within it. Very handy
for looking for the game's unused WAV files, vehicle GEO files, etc. - the latest version of this tool from
Blake Robinson (Dummy) will both extract and uncompress the zfs files, making all the original game files
available for modding and tweaking.
MAP ViewerAnother great tool by Blake Robinson, this one lets you load up and view all the MAP files from BZ1, save
them as bmps for editing, and write 256 color bmps as MAP files. Currently the tool only saves as 24 bit
bmp but you can still work successfully with the textures in PSP and Photoshop if you have the palettes -
much easier than the old screenshot method. Get this at the same place you get the new unzfs tool.
VDF ViewerFinally, ship editing is possible in BZ1. This tool lets you import and view vdf files for the BZ1 ships. In
conjunction with the 3DS Max plugins Dummy has made, you can use these tools to create all new ships
for use in the game. You can also load existing GEO files in, if you want to make a tank with a new skin
and not have it interfere with the standard tanks in the game. Dummy has also posted an excellent tutorial
on his site explaining how to use these tools. 3D modeling is not the easiest thing in the world, but if you
are a dedicated modder you now have the tools you need to really transform your Battlezone world.
BZCPThe Battlezone Control Panel is a nifty program that saves you from the DOS command line. Lets you
launch IA levels without typing them in by hand at the command prompt, and provides descriptions of the
missions themselves (if the mission comes with a BCP file that the Control Panel can read).
Instant Action LauncherThe IA launcher is intended as an up to date replacement for BZCP. It works just like the BZ shell and has
detailed mission briefings built in for most of the maps out there. In addition it supports new maps with
addon ial files created by the mapmaker, and has multimedia capability, and displays planet graphics,
minimaps, and text files as well. People who are not comfortable working in dos should find this program
to be quite useful. You can edit maps from IA launcher as well - it supports most of the command line
switches.
EZBZAllows easy creation of the basic map for editing with the Battlezone editor. You pick the parameters and
EZBZ will run maketrn for you, and create the TRN file using the planet you choose.
Well, there's been a lot of activity on the BZ scene over the past several months, with many new tools being
introduced, so I have updated the tutorial to reflect this. I also corrected a few subtle errors and added some
new info here and there, also updated the website links.
last updated by ssuser 02/17/04
Edited mercilessly by Sporkinator 02/04/2010