Jump to content
  • Sky
  • Blueberry
  • Slate
  • Blackcurrant
  • Watermelon
  • Strawberry
  • Orange
  • Banana
  • Apple
  • Emerald
  • Chocolate
  • Charcoal

`:smilies-10997:            Welcome to Zoo Tek Phoenix!           :smilies-10997:


Welcome Fall!

Sign in to follow this  

How-to: create tank filters

Recommended Posts

( if wrong forum, please move )


As promised, I'm writing a short tutorial on configuring a tank filter, what to think of and what graphics you need.
Out of this scope: everything related to creating the proper graphics. That's the same as for any user created content, with one thing to keep in mind (read tutorial).
In this scope: making a tank filter, the way Blue Fang did it (you could always change some locations etc).


Now, tank filters are not that hard to create, but this shouldn't be your very first project because they're a bit special.
You should've at least made a normal (scenery-like) object so you have an understanding of the file structure.


Let's take a look at the original files which matter. Since redistributing the original files is (probably) not allowed, I'll list where you can find everything.
It's all found in c:\Program Files (x86)\microsoft games\zoo tycoon\xpack2 .
ZTD files are actually ZIP files, you can rename them but it's not required. They can be opened and files extracted from them with free programs like WinRAR .
Always keep the same directory structure as within those files.

How does the original tank filter work? (you can skip this, just putting it as additional information)

config3.ztd contains a file named filter01.cfg
fences6.ztd contains fences/filter; which includes the icon for the tank filter.
object05.ztd contains objects/filter; which includes all graphic files for the tank filter.
scenery6.ztd contains scenery/other/filter1.ai; which is the configuration file for the tank filter.

Not very relevant, but mentioning it:
freefrm6.ztd contains freeform/unlock02.scn; which is a file listing when some (in this case Marine Mania) animals, objects etc. become available in-game.

Taking a look at the graphics

This all seems pretty basic. We have an icon; and we have some animations ( idle, used, off ).
The animations are the same as for any other regular object. You have 4 views (NE, NW, SE, SW). Nothing shocking.

A bit surprising: the icon is in the fences-folder by default. This makes sense though: the filter is listed in the fences tab in-game. Contrary to most objects, the filter only has 1 icon for an in-game menu.


Since this is a special object to make; don't use APE at all. Using APE is a bad practice. The alternatives for creating those graphics are ZOOT (by MadScientist and updated by Jay) or ZT Studio (by myself).


So we need these graphics:

  • one icon
  • a filter has 4 states ( officially idle, used, broken, off . But I create folders named regular, decayed, broken, off because it's a bit more obvious) for each of which you need 4 views (NE, NW, SE, SW)


Now, I just discovered an interesting feature of tank filters which you should keep in mind when designing. To see this in action, simply build a tank filter in Marine Mania and position the tank filter to two different sides of the tank filter (don't actually place any tank filter). See what happens? Filters auto-rotate. And I'd really recommend the filter to be an entire tile. I was actually just testing a filter which was on half a tile - longest side attached to the filter. Marine Mania allowed me to place the filter both directly next to the tank wall; as well as leave half a tile in between. Filter was still functioning. But obviously, this makes no sense and gets confusing.


Taking a look at the configuration

We're naming our filter vdfilt01

This is a little more tricky.
filter01.cfg was used to create this file, named filterVD01.cfg (so basically just a custom name). Content below.

; Start the filename with 'filter', then a short unique name, end with .cfg extension
; filter VD (for Vondell) 01 (first filter).cfg => filterVD01.cfg

; List unique object names of filter(s).
; One per line below [filter]

; Describe where this file is located for each new/unique filter
; Copy this block each time and change the name. 

f = scenery/other/vdfilt01.ai


Now, based on the official filter1.ai, I came up with this file, vdfilt01.ai. Content  below.
There were a lot of comments in the official file, I added a bit more.

; This used to be the random string from APE.
; Thanks to ZT Studio, we no longer need random names like 5DF35026 nor hex editors to fix it
; I recommend a prefix (based on author), a name which says something and in this case (more filters may come?) a number.
; This should be alphanumeric and (max) 8 characters

; Everything below is mostly a copy of the original file; 
; but with some values changed and a little more documented.

Icon = fences/vdfilt01/SE/SE


; Just keep the original sounds.
; 1700 is default for both. For decayed, I'd recommend keeping that value. 
; For healthy... Our filter's better ;)
cHealthySound = scenery/building/filter.wav
cHealthyAtten = 650
cDecayedSound = scenery/building/filterb.wav
cDecayedAtten = 1700

cInfoImageName = objects/vdfilt01/off/off


; Default ID for a filter is 6471.
; For custom content, this is usually 19000. Trashcans is one of the only exceptions I know of.
; If you want to take a maintance worker to take care of a trashcan; the ID is hardcoded.
; For filters, this is not the case - contrary to what other configs of user created tank filters do.
cNameID = 19000
cHelpID = 19000

; Default: 200
cPurchaseCost = 450

; Now, as for footprints... something you need to keep in mind: filter objects auto-rotate based on the side they're attached to the tank.
; If you'd go for say x = 2 and y = 1; you'll notice the filter still auto-rotates. 
; However, you can place the filter directly next to the tank; or even leave some width in between (half a tile)
; Another minor thing: obviously the maintenance guy will hit the exact same spot as the regular filter when fixing it.
; But hey, the maintance guy even stands a long way from the original tank filter. So don't bother.
cFootprintX = 2
cFootprintY = 2
;Bad Habitat Type
cHabitat = 9414
; Default height is 2.
cHeight = 1
cSelectable = 1
cNeedsConfirm = 1

; initial health. Default: 10
; Impatient to wait? Decrease these values for testing.
; You can set the starting healthy to be the same (or lower) as decayed health.
; Interesting enough, even filters which are 'off' can still decay and get broken (but they keep showing the 'off' graphic)
cStartingHealth = 10
; health point where the decayed anim is played. Default: 5
cDecayedHealth = 5
; time in seconds before health decays one point. Default: 200
; Speed this u p to something much smaller to test graphics.
cDecayTime = 200

; time in seconds between cleanings. Default: 50
cFilterDelay = 100
; cost billed to the user ever time it filters. Default: 50
cFilterUpkeep = 50

; amount of water cleaning done while fully efficient. Default: 10
cFilterCleanAmount = 15
; amount of water cleaning done while decayed. Default: 5
cFilterDecayedCleanAmount = 5

; For the animations, you need to keep idle, decayed, off, broken on the left (=key).
; As for value, you can give names which make more sense to you. 'idle' and 'used' didn't make too much sense to me.
; In Marine Mania, animations for off and broken are shared. However, it's a different state.
idle = objects/vdfilt01/regular/regular.ani
decayed = objects/vdfilt01/decayed/decayed.ani
off = objects/vdfilt01/off/off.ani
broken = objects/vdfilt01/broken/broken.ani

; man
v = 9503
v = 0
; woman
v = 9504
v = 0
; boy
v = 9505
v = 0
; girl
v = 9506
v = 0

; Now, the sad part: copy language part from custom content. 
; Everything below is stuff we need if we changed the ID to 19000 (custom content)

LCID = 1033

; This used to be the random string from APE. 
Type = vdfilt01

; This really makes no sense; cGeneralInfoFileName is usually something like below but not even needed in objects.
; Anyhow, I just leave it in. 
cGeneralInfoFileName = objects/vdfilt01/texts/1033.txt
cLongHelp = Purchase a modern tank filter.
cName = Modern tank filter
cTheString = the Modern tank filter


So why did I mention unlock02.scn? Because in MM, it says to make the filter available in there; I think it was after 3 months.
But above config, using ID 19000 = custom content, makes that part unnecessary. Our filter is available right away.


In the end, you have these files ( change 'vdfilt01' to your own unique name)


  • fences/vdfilt01/SE: contains an icon (N) and a SE.ani file
  • objects/vdfilt01/broken  : this folder contains NE, NW, SE, SW and a broken.ani-file
  • objects/vdfilt01/decayed : this folder contains NE, NW, SE, SW and a decayed.ani-file
  • objects/vdfilt01/off : this folder contains NE, NW, SE, SW and a off.ani-file
  • objects/vdfilt01/regular : this folder contains NE, NW, SE, SW and a regular.ani-file
  • scenery/other: contains the vdfilt01.ai file
  • and don't forget the filterVD01.cfg file


This briefly sums it up. :)

Questions? Remarks? Shoot! :)





Edited by jbl89

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this