Close This Window

This tutorial describes how to use Till 'rollin' Maginot's
3dz-txt importer/exporter for 3ds Max (maxscript).

The script can import and export txt files which can be
converted from and to 3dz files by Alessandro Borges
3dz-txt-converter 1.8.

3dz files are the main 3d geo files for European Air War (EAW),
a flight simulator created by Microprose.

1. Setup
2. Learning By Importing
3. Prepare For Export
4. Export

a) Bulkhead Elements
b) RS-Loops
c) The Geo Problem

Usefull Links


First you need to know some basics on how to work with this tool:

a) how do I start the script?
b) how do I see the output console (called “Listener Window”)?

  • To start the tool simply drag'n drop the file into the 3ds Max viewport.
    In 3ds Max go to the "Utilitys" Tab (normally on the right side, small hammer symbol)
    Select "MAXScript" -> "Run Script" -> select the *.ms file.

  • You'll need the maxscript Listener Window to see all the script outputs, otherwise you maybe won't really know what's wrong if something does not work. To open the Listener Window click with the right mouse button on the white field in the lower left corner and click on "Open Listener Window"


At the first glance: For the beginning, a good way to understand the tool is to import an original model from EAW.

  • So start 3ds Max, start the script and open the listener window (if you haven't already).

  • Now click on "get url" and choose the model you want to import.
    I'll choose the ptempf.txt.
    NOTE: To get the txt file you have to convert the *.3dz with Alessandro Borges 3dz converter (1.8).

  • If you want the script to remove unused Vertices (Nodes) then check the "remove unused nodes" box. You can do this still afterwards, so if you're unsure keep it unchecked.

  • Now press "Import".

  • With some luck there will no error message pup up.
    That's because the script is just work-in-progress and I haven't tested it with
    every 3dz file yet. If you find a problem please be so kind an drop me a line on
    NOTE: The script does not import lines or any piggyback elements yet!

  • If you now take a look at the Listener Window you see what happened during the import. If you importa default EAW model in most cases there will be a warning like "element xyz was not created as faces".
    This is because the way the geo works in EAW is not always compatible with 3ds Max.
    But we're not going to use the model anyway, we'll create our own.
    NOTE: You can find more info about the differences in 3d-data in the “The Geo Problem” Section.

Ok there's the model of the plane, but that's
not all:

The smaller green boxes are representing the [INSERT] Components.
In my case there is the plane itself (rootBone), left and right gear and the propeller.

The Stars, or in fact Point Objects, are representing the Hardpoints. The Z-axis is showing the normal vector while X- and Y-axis are building up the imaginary 3d-plane.

At the second glance : Now lets take a closer look at the imported stuff

[INSERT] Components

The green boxes are representing the [INSERT] part of the 3dz file.
They are like bones: You can assign Vertices(Nodes) to them and the game can
rotate these vertices around the centre of the Dummy (e.g. for the propeller to rotate).

To see what's going on first select the model. On the right side you should already see the Modifier Panel (otherwise click on the "Modify"-Icon).
You see the Line "Editable Mesh" and above "Skin".
The Skin-Modifier should already be selectedand below there is the Bone List with the Components-Dummy-Names listed.
If you expand the Skin-Modifier (click on the small “+” on the left side of "Skin") and click on "Envelope" you can see which vertices are assigned to which dummy. If you select another dummy in the Bone List you see the vertices assigned to this bone turn red in the viewport.

It's important that the first dummy in the list is always the "rootBone" and all other dummys follow in the order of their insertID's (0 first , then 1, 2, 3, ...) .
Remember this!

Very important is the naming of these dummys:
If you have this line in the [INSERT] section of the 3dz:
;I000=_cod _num _y _z _x
I001= 2 2 -56 -19 -58

the dummy has to be named :


Hardpoints are represented by Point Objects in 3ds Max.
Like for thecomponent dummys the naming is veryimportant:
The cutOrder number specifies in which order the script tries to use the hardpoints as cut poly. If all hardpoints can cut through the complete model the first cut will be made by the hardpoint with the number _01. If not, the hardpoint with the lowest cutOrder Number will be used.
NOTE: You have to number your hardpoints without any gabs.. so _01, _02, _04, _05 is not permitted

Again: the Z-axis is the normal vector of your hardpoint and X and Y are building up the 3d-plane


The model you've imported has already a Standard Material applied to it. To make things easier for exporting you can set the texture name (the one ending up in the [HEADER] section of the 3dz, the one the game will use to select the texture) independently from the texture file you use in 3ds Max while working on the model.
Simply name the “Diffuse Map” panel of the “Material Manager” like you want the texture to be named with the ending “.PCX”.


A) Set Element Types.
B) Set Action Codes.
C) Place and name Hardpoints.
D) Place and name INSERT-Dummys.
E) Add Bulkhead Elements.
F) Check for non coplanar polys.
G) Check Rendering Sequence.

  • A) You can define for each poly what kind of Element Type it should be, with Max's “Smoothing Group” value.
    Note: you can also create Hardpoints with it which are piggybacked to the poly you've created. The hardpoint will use the first Vertex (Node) of this Poly as centre point.
    2: Hardpoint piggybacked to single coloured poly.
    3: single coloured poly.
    4: multicoloured poly.
    5: textured poly.
    6: textured poly with alpha.
    15: bulkhead element.

  • B) You can add Action Codes to every Poly by the “Material ID” value. Combine the action code and the bool-value to a four digit number and assign it as material id to the poly
    e.g. “148 0” will be “1480”.
    Visit the EAW wiki for a complete list of action codes.

  • C) I assume you've already build your own model, unwrapped and textured it. Now place all Hardpoints you don't want to add per piggyback later on. Use the imported Point Objects or create new ones, important is only that you name them correctly.
    You can place them where ever you want, but they act like any other poly. The only difference is, that it's a poly where every vertex is on the same place. But the hardpoint can cut through the model like any other poly and there must be a working RS solution involving all hardpoints.

  • D) Create (INSERT) Dummys (or reuse the imported ones) and place them.
    You need at least one: the “rootBone” which is positioned at the centre of the 3d room (X=Y=Z=0).
    Remeber: the naming is strict!
    So NO “root-bone” or “rootbone” or “RootBone” orwhatever. If you're not sure take a look at the imported ones.
    You can rotate them but this will not help you because only their position will be exported.

  • E) At this point you have to prepare your model for export.
    This means: add Bulkhead Elements if necessary and if you haven't already done so and make sure they can cut through the whole model along the edges.
    There is one exception: The cut order of my script is the following
    1 - hardpoints (sorted by the cutOrder number).
    2 - polys with same normal value like main cut plane (if there are several of them check them like 3).
    3 - the poly with themosteven placement of polys above and below.
    So if you know the order of the cuts you can set the bulkheads accordingly.

  • F) Now we want to know if all polys are Coplanar, because that's important for the RS calculation.
    First select your model (not a modifier!) and go into the face or polygon editing mode. Then press the "select concave polys" button. The script will automatically select all non coplanar polys for you and now you just have to find a way to make them coplanar.
    In the moment you get the message that all polys are coplanar, you're ready to proceed.

  • G) To check the Rendering Sequence, simply select your model (and all hardpoints if you want to include them in the calculation), select a main cut plane (or keep “none”) and press the "check selection" button.
    The calculation can take some time depending on the complexity of the model. It can take up to 2 minutes and 3ds Max might stop responding after a few seconds. That's normal, just be patient. When the calculation stops you get an output in the “Listener Window”. If the script detects an RS-loop it will select all polys which are part of the loop. The script will only select one loop. If you have several loops, you have to fix one then check again, fix the next, check again, until you get a working RS.
    NOTE: You can find more infos about this in the RS-Loops section.

    NOTE: The main cut plane defines the preferred 3d-plane where the the script tries to cut through the model. Every poly using the same normal vector as the main cutplane will be preferable used as cut-plane in the RS calculation.
    If you have a (nearly) symmetrical model the mirror plane is the best choice because it will cut the model immediately into two similar halves.
    If you get an RS-Loop, choosing another main cut plane can solve the problem in some cases.


A) Add skin modifier
B) Set [HEADER] values
C) Export Options
D) Save Scene

  • A) Add the Skin-Modifier to your model and apply the Bones to it (make sure you add them in the right order: rootBone, .._0, .._1, .._2, .... Compare it with an imported model if you're unsure).
    Under the Skin-Modifier go to “Advanced Parameters” and set “Bone Affect Limit” to 1.
    Now assign the vertices to the corresponding dummys (Components).
    The rootBone represents_f = 0, Insert..._0 represents _f = 1, Insert..._1 represents _f= 2 and so on..

  • B) To set the [HEADER] values before exporting the model, expand the header rollout of the import/export script.

    • INI: Select the model of the plane and press the “calculate radius from mesh” button. To be on the save side add a small value to the INI value (e.g. +10) by hand.

    • TEXTURE: Press the “get texture from selection” button to read the material name of the selected object.

    • PREVIEW: You can set a preview image here. You can get the file name from any file on your hard disk by using the “get name from file” button.

  • C) You have the following options when you want to export a model:

    • “irreversible remove Bulkheads”: if
      this option isselected the exporterwill replace all Elements marked as bulkheads (smoothing group 15) with an empty element (e.g. E001 = 255)

    • “Normals Mode”: here you can choose if you want to export the normals as _d and _c values or as _D value. (you need to export as _d and _c values if you want to compile the *.txt back to a *.3dz).
      NOTE: If you want to polish the normals of your model a bit more, you can recalculate them with Will's 3dzAnalyzer. His _d values seems to be a bit better then mine. But that's no must-do.

    • “Render Sequence”: If you're sure the model allows a working RS you can calculate it on export.You should select the same “maincut plane” you've used to test the RS before

  • D) The export script will try to save your 3ds Max scene before the real export process starts. This is necessary because the exporter will change the scene and the stuff in there. After the export process the script will reload this saved scene again and you have the same conditions like before hitting the export button.
    But remember: if you don't save over your working file (e.g. when you use the on export saved scene only as backup) you have to reload YOUR working scene after exporting manually.


a) Bulkhead Elements

Creating models for EAW is not like creating models for most other (modern) games around. In the days EAW was developed 3d video cards where rare. So EAW calculates the sorting of all polygons itself instead of giving this task to the video card. To speed this task (called "Render Sorting") up the developers precalculated the "Rendering Sequence" for every object and saved it in the 3dz file. The technique used is called Binary Space Partitioning (BSP). This is the [SEQUENCE] part in the 3dz.

But that's it for the moment with theory. The question is: what does this mean for you as modeler? In fact, a lot! You have to plan your model to be BSP-conform. And a simple way of making it BSP-conform is to use Bulkhead Elements. These elements (polys) should cut the mesh into smaller peaces and are normally not part of the model you planed to build because they are inside the model, they just eat up your poly limit. But it's hardly possible to build complex models without bulkhead elements.

When you're finished with your model, you can remove these elements/polys from the model on export by the script. This will keep the bulkheads in the Rendering Sequence but remove them as actual visual geometry. But remeber: they still need one of the 254 slots in the [ELEMENT] section of the 3dz, what represents your polylimit per 3dz file. So try to use only there bulkheads where it's really necessary.


Loops in the rendering sequence are the main reason for all RS-problems. An RS-Loop occurs when for a given set of polys P it's impossible to find at least one poly which can separate all other polys of P into “above”,“below” and “same-plane”. This means for every poly within P there is at least one poly“in-between”. “in-between” means vertices of this poly are above AND below compared to the cut-poly.

c) The Geo Problem

There is a main difference between the way you can build 3d-models in 3ds Max and the kind of geometry EAW allows:
It's no problem for EAW to render a number n of the exact same poly. But because this is called “bad geometry” in todays 3d production, 3ds Max can not fullyhandle such geo. In fact only an Editable_Mesh allows basic usage of this kind of geo. So if you want to build bulkhead elements inside of your model you need an Editable_Mesh object. You wont have much luck with an Editable_Poly.

That's why this script needs your model as an Editable_Mesh if you want to make it export ready. Building the model as Editable_Poly in the first place is no problem though.
The whole geo problem is also the reason why you can't always import the original EAW models. The script will make changes to the geo when parts of the model in question will not work in 3ds Max. You normally end up with more Elements then the model had before.
But this only an import restriction. If your model does work in 3ds Max you will be able to export it.

Usefull Links

txt- 3dz converter
(Download from Wills Gunship page)

Sim HQ - main EAW editing Community

EAW wiki

3dz studio (Win) & Render Sequence Calculator

Understanding the Render Sequence

Will's Gunship Tools

Close This Window

Copyright 2009 Till Maginot. All rights reserved