SEVERANCE, BLADE OF DARKNESS

Prospero's pages

Updated January 15, 2006

HOME PAGEAUTHORS > PROSPERO > BOD and 3DS MAX 2.5 (01)

 

I think with this very complex subject you need to learn how to walk before before you can run.

The first step is to get max2.5 set with the pre-installed plugins.

This is explained in Reality3D's Tutorial (albeit in Spanish).

You need these files in the '
Plugins' folder of max:

BLDEXP.dle - for export of models to .BOD format
Camera.dle - for exporting camera moves to .CAM format
MBWImporter.dli - for importing complete models of maps in .MBW format


In the last case, the
.MBW files are obtained by running the game with the console enabled and entering the command:

Bladex.ExportWorld("MapName.mbw")

...in the console. This will save a
.mbw (ModelBladeWorld ?) file in the revelant map folder. When imported into max, you have a mesh model of the entire map complete with objects (but no characters). The only reason you do this is to use the map model as reference for creating camera moves and char animations that interact with the map structure.

The file
MSVCRTD.DLL should go into the main max folder.
The file
metrocubico.max should go into the scenes folder.



ALSO: In addition to the plugins, you need some extra files with can be copied if missing, from the BOD '
Bin' folder to the main max folder.

PYTHON15.DLL
BBLibc.dll
BUIxc.dll
Raster.dll


Start max and goto File->Export. In the Save As Type dropdown list you should now have the options:

BladeAnimationFile [*.BMV]
BladeFile [*.BOD]
Camera[*.CAM]


If this OK then you are all set up for BOD modelling.

------------------------------------------------------------------
Part2. Make something basic.

Actually modelling in max is a very complicated subject and I don't pretend to know 0.001% of all it's features, but with a bit of experimenting you can quickly grasp the basic principles. It is a good idea to look in your local bookstore for a dummies guide.
The Visual QuickStart series (Peachpit Press) do a good one. You probably will not find one specifically for v2.5, but guides to later versions will explain a lot.

Max comes with a number of predefined shapes which are the basis of all contruction. When max starts up you will have the 'select object' tool enabled and there will be a panel on the right side with little buttons such as 'Box','Sphere','Cylinder', etc.

Click 'Box' and the button will turn green. While it remains in this state you can create a box with the cursor in any of the veiw ports.
The default veiwport setting (on my copy anyway) is top/front/left/perspective.

While the box button is green, Click anywhere in the 'top' veiwport and drag out a square. Release finger and move the cursor up or down to make the hight of the box. Click again to finish. The box size can be adjusted in the 'Parameters' fields on the right panel. These values should coorespond to millimeters in BOD terms. To check, goto File->Merge and open the file
metrocubico.max that comes with the 3DTut. The box in this file is (guess) represents a 1 metre cube in BOD space.

Other shapes can be made in a similar way but some have other elements that you need to create in sequence.

Try the Torus. I used this in my first experiments. It is slightly more interesting than the box and can be used as a donut. (If you make it bigger it also has medical applications)

Before you can export any object you have to apply a material to it.

---------------------------------------------------------------------
Part3. Texturing

The model needs coodinates applying to it to act as a reference to the texture (skin). Select the donut and in the right panel click the 'modify' tab (2nd from left). You might have a button 'UVW Map'.
If not click 'More' and select this option from list. When you have applied the UVW modifier you get an orange square around the object.
Further down in the 'Parameters' box there are lots of options. The 'Planar' button should be ticked by default. There are other options here...Cylindrical, Spherical, etc. These set how the 2D texture is projected onto the object. Planar projects it from one point, like a slide projector. Others apply it in different ways, it depends on the shape of the object. Stick to Planar for now. Also the XYZ bottons at bottom control the plane from which the texture is applied. With Planar mapping the texture will appear 'true' on polys that are paralell to the plane from which the texture is projected and will stretch around the sides as they slope away. This can get complicated but for a donut it doesn't matter too much.

Once the UVW modifier is applied you need to assign the Material. Open the Materials Editor (Button on top toolbar with a lot of balls on it).
A window will open with a lot of stuff on it. Click one of the coloured balls at the top. You can either apply this colour to the object or load a bitmap from your files into the editor and apply that. At this stage it doesn't matter, but it is nice to see the object in max with it's correct skin on. Loading bitmaps is not exactly simple....

First make a bitmap in a grapics prog about 256x256 (must be multiples of 2). Make it a suitable all over donuty texture. If you like put a red splodge on it for the jam.. Save it as
DONUT1.bmp

Back to max, in Mat Editor, look in the basic parameters bit for the word 'Diffuse'. Next to this will be a colured rectangle. (the colour of the sphere you have picked at the top). To the right of this there is a button. (Hover mouse over it and it will say 'None'.) Click it.

Another window appears. Click 'Bitmap' in this new window and OK. Back to Mat Editor under 'Bitmap Parameters' there is a long button with 'Bitmap:' to the left. Click it. You can then browse for the
DONUT1.bmp and open it in the Mat Editor. All being well, the sphere at the top will adopt your DONUT1 texture.

Near the top of the Mat Editor, where it says Map#1 or whatever, change this to
DONUT1. This name is important. It is compiled into the code in the .BOD file.

btw. Save your file as
donut1.max

The RAS protocol for naming files seems to be:

lowercase '
myobject.max' for source .max files
lowercase '
my object.BOD' for compiled .BOD files
UPPERCASE '
MYOBJECT' for material name
Capitalised '
MyObject' for internal name

This is a good practice to get into to avoid confusion.

Back to Mat Editor. After renaming material, Click the button 'Assign Material to Selection' (little ball pointing the little box). Then, click 'Show Map in Veiwport'.(Checkered cube) The donut should now have your texture.

It might not look exactly how you want it, but don't worry too much at this stage.

OK. There is now enough done to Export the donut, but first you have to give it a 'Group' name. Select Donut and goto Group ->Group and in the window that appears, Enter:

Blade_Object_Donut1

Click OK.

The
Blade_Object_ part is critical

The name at the end is whatever you choose. This will be the Internal Name that is used to create the object in BOD. It is nice to add a personal motif to the name. This has a practical purpose in case every one starts making Donut1's which could be embarrasing.

Blade_Object_ProDonut1

Blade_Object_BigTruckDonut436

enough said.

Once you have grouped the object, save the file and goto File -> Export

Pick 'BladeFile[*BOD]'

enter
donut1.BOD and click Save. (You must type the .BOD extension)

Two things could happen here.

The export window will go, which is good.

The program will go weird or crash to desktop, which is not so good.

Assuming that it doesn't crash, you should have a
donut1.BOD file in the 'Meshes' folder.

---------------------------------------------------------------------
Part4. Putting Object into game.

Copy the
.BOD file to the 3DObjs folder in BOD.

Before you can create it in the game, (see LevelEditing: Scripting topic for methods) you need to edit the file '
BodLink.list' in the main folder. Add these lines to the end of the file:

..\..\3dObjs\donut1.BOD
Donut1


The first line is the file path to the
*.BOD file

The Second line is the Internal name that you named the Group:

Blade_Object_Donut1

Save and close the
BodLink.list

OK, you should now be able to create the donut in a map. If it appears then all is well. You will notice that it has no texture and that you can't select it or pick it up. Also the Player will be able to walk though it.

To get the texture you need to make a
.mmp file. This has been covered before, so I won't go into it. You need the original bitmap that you made eariler and loaded into the Material Editor in max. At this point you can resize it as 256x256 is unecessarialy large for a small object. 64x64 is quite big enough for a donut (unless you like giant donuts). If you named the bitmap the same as the Material name, you can use the genmmp tool. Just make a folder in the BladeTools Textures Editor called MyMapObjs or whatever and put all you new object texture bitmaps in it. Then, as you make more objects for a map, keep saving the bitmaps to this folder and apply the gemmmp tool to this folder to upadte the .mmp file. You can put as many textues as you like in an .mmp file. Remember to name the bitmaps the same as the Material name of the object for this to work.

Copy the the
.mmp file to your map file and edit the .lvl file to load the new texture(s).

Bitmaps -> MyMapObjs.mmp

The donut should have it's texture next time you run the map.

 

---------------------------------------------------------------------
Part5. Weapons.


All weapons have 5 anchors.

Groups:
Blade_Anchor_1H_R #Right Hand
Blade_Anchor_1H_L #Left Hand
Blade_Anchor_2H #Two Hands
Blade_Anchor_Back #Back
Blade_Anchor_Inv #For the Inventory widget

Blade_Trail_1 # For the trail particles

Blade_Edge_1 # Prism shape for Slash damage - as many as you like with sequential numbers

Blade_Spike_1 # Pyramid shape for Impale damage.

If you don't add edges you get Crush damage only. You can have Spikes and Edges in same model. All the individual pivots must be orientated according to the diagram in 3d tutorial.

Getting a good strike pattern with the edges can be tricky. It's a question of experiment mostly.

When all the anchors/edges are grouped and UV mapping done and Material assigned the WHOLE model must be grouped into
Blade_Object_NameOfThing for export.

* To save pain, when you get one stage of a model sucessfully done, goto File>SaveAs and save new copy with a version number (
_2 etc) and carry on working on on that. You can easily screw up and have to start again from begining. This way you can easily backtrack to last good version.

Loading Model into Game.

Open file
Severance/BodLink.list

scroll to end of file, copy last two lines and paste at end.
Edit the names to the EXACT names of the .BOD file and Internal Name
of the model (The name of the main Group in max). This name is also the name that the object will be created as. I tend to use lowercase for naming the BOD file, Capitalised for the int name and UPPERCASE for the material name:

prothing1.BOD
ProThing1
PROTHING1


...saves confusion if you stick to this system.

Once you have edited the BodLink.list, you can create your object.
(there is a file in Maps folder - csv.dat which assigns physical properties to the object if it is designed to be non-static, but you can skip this for test purposes.

If the object is a weapon you must make a Reference table for it. Add lines to the DefFuncs.py file of the map you wish to create the weapon in:


Reference.DefaultObjectData['NameOfWeapon']=[ReferenceOBJ_WEAPON,100,-10,1.0,Reference.THR_SPINNING,[Reference.W_FLAG_1H,]]
Reference.DefaultSelectionData['NameOfWeapon']=(8.0,4000.0,"OnScreenNameOfWeapon")



This is for a one handed weapon. For spears/2H swords/2H axes there is extra info for the breaking component that must be added here. To make these breakable you have to make models of all the fragments which a lot of extra work so in the case of these weapons you can set the break threshold high so they will never actually break in combat.

All the numbers in the tables have a use, but you can figure them out by checking Reference.py. The main one you need to know is the Red one which sets the hit points of the weapon.

After this you can create the weapon in a
.py file.


o=Bladex.CreateEntity("Weapon1","InternalNameOfWeapon", 0,0,0,"Weapon")



This will create your weapon at coords 0,0,0 in the map. On moving within 4 meters of it the hint should appear with the text you entered in DefaultSelectionData. The 4000.0 is the selection radius: the 8.0 is the priority setting. Other objects (e.g arrows) have lower priorities, that's why they don't show hints when there are weapons nearby unless you deliberately cycle though to them.

At this point the weapon will show no texture although it should work OK otherwise. It will probably show textures of surrounding objects that flash on and off. The Texture must be compiled into an
.mmp file which must be then be loaded with the .lvl file of the map.