Hidden & Dangerous 2 Wikia
(Adding categories)
Tag: categoryselect
mNo edit summary
Tags: Visual edit apiedit
Line 9: Line 9:
 
Each .4ds file has following values at its beginning.
 
Each .4ds file has following values at its beginning.
   
[[File:Map4ds-part-header.png|thumbnail|right|highlighted: header section of map.4ds]]
+
[[File:4ds-header.jpg|thumbnail|right|highlighted: file version (41)]]
   
 
{| class="wikitable"
 
{| class="wikitable"

Revision as of 12:29, 2 January 2017

Introduction

The .4ds format in version 41 is the basic format for 3D objects in Hidden & Dangerous 2. 4ds was also used for Mafia and Chameleon but in different versions.

Structure

For having a better and easier understanding, we split the file into three parts: header, images and objects.

Header

Each .4ds file has following values at its beginning.

4ds-header

highlighted: file version (41)

Map.4ds meaning example
first 4 bytes file format 4ds.
16-bit INT file version 2900 (41)
8 bytes timestamp 002E 9F89 5048 C301


Images

Here all images listed which are used. Allowed are Bitmaps(.bmp) and Targa Image Files (.tga)
First we have the attribute for the total amount of pictures. If you added a picture in your map.4ds file, don't forget to update this value.

It's a 16-bit INT e.g. 0700, 7 images.

File:Map4ds-images-count.png

highlighted: amount of images

After the amount, each image is listed after the following structure:

File:Map4ds-part-image.png

image structure, highlighted: amount of images

Image
4x 8-bit INT unknown, activates Alpha channel (transparency) 0 128 63 15 (1 128 21 32)
4x 32-bit FLOAT Ambient color 0.5 0.5 0.5 0
4x 32-bit FLOAT Diffuse color 0.5 0.5 0.5 0
4x 32-bit FLOAT Specular color 0.045 0.045 0.045 0
4x 32-bit FLOAT Self illumination color 0.0 0.0 0.0 0.0
32-bit FLOAT shininess/glossiness 25
8-bit INT unknown 0
32-bit FLOAT opacity 0(0%) to 1 (100%)
8-bit INT amount of characters (of label) 14
differs label MAPA_AF3_2.BMP


Objects

The last image is followed by a 16-bit INT, which represents the number of objects e.g. 0A00 (10 objects).
Each object has a header, which is described below. After the header comes the actual object data. A list of all object types can be found here: object types

Object header

The visual object type and flags are only present if the object type is a visual object.

File:Map4ds-part-id1.png

Example: Visual object (ID-1)

Description Example
8-bit INT object type object types
8-bit INT visual object type visual types
16-bit INT flags static collision?
receive shadows?
cast shadows?
16-bit INT father index (0: none) 2
3x 32-bit FLOAT position: x, y, z -0.192 -0.132 -0.273 (position relavitly to father object)
4x 32-bit FLOAT rotation: x, y, z, w (quaternions) 0.5 0.5 -0.5 0.5
3x 32-bit FLOAT scale: x, y, z 1 1 1
32-bit FLOAT unknown always 0
8-bit INT unknown always 9 for non sector objects
8-bit INT number of letters 10
Label unique object name "objective1"
8-bit INT number of letters 7
Label custom user properties "VOLB,36"

Visual

MeshObject
Description Example
16-bit INT instance ID
8-bit INT number of LODs (Level of Detail)
for each LOD
32-bit FLOAT LOD draw distance
32-bit INT extra data (length)
16-bit INT number of vertices
for each vertex
3x 32-bit FLOATs vertex position: x, y, z
3x 32-bit FLOATs vertex normal: nx, ny, nz
2x 32-bit FLOATs texture vertex: u, v
end for each vertex
8-bit INT number of face groups
for each face group
16-bit INT number of faces
Nx (3x 16-bit INT) face vertex indices: a, b, c
16-bit INT bitmap id
SingleMesh

Inherits MeshObject data.

Description Example
8-bit INT number of joints
4x 32-bit FLOAT minimum position? x, y, z, 0
4x 32-bit FLOAT maximum position? x, y, z, 0
N x 8-bit INT parent index of N-th joint
for each joint
16x 32-bit FLOAT joint transform matrix
4x 32-bit FLOAT minimum position? x, y, z, 0
4x 32-bit FLOAT maximum position? x, y, z, 0
end for each joint
for each LOD (from Object)
32-bit INT number of weighted vertices
for each weighted vertex
8-bit INT joint index
8-bit INT vertex weight?
SingleMorph

Inherits SingleMesh and Morph data.


Billboard

Inherits MeshObject data.

Description Example
32-bit INT axis?
8-bit INT unknown
Morph

Inherits MeshObject data.

Description Example
8-bit INT number of morph targets
8-bit INT number of morphed parts (hand, eye, etc)
8-bit INT unknown
for each morphed parts
16-bit INT number of morphed vertices
for each morphed vertex
for each morph target
3x 32-bit FLOAT morphed vertex position: x, y, z
3x 32-bit FLOAT morphed vertex normal: nx, ny, nz
end for each morph target
end for each morphed vertex
Nx 16-bit INT mapping from N-th morphed vertex to origial vertex
end for each morphed parts
12x 32-bit FLOAT/INT unknown
Lens
Description Example
8-bit INT number of glows
for each glow
32-bit FLOAT unknown
32-bit FLOAT unknown
16-bit INT material ID
Mirror
Description Example
33x 32-bit FLOAT/INT unknown
32-bit INT number of vertices
32-bit INT number of faces
Nx (4x 32-bit FLOAT) vertex positions: x, y, z, 0
Nx (3x 16-bit INT) face vertex indices: a, b, c

Sector

Description Example
32-bit INT unknown
32-bit INT unknown
32-bit INT number of vertices
32-bit INT number of faces
4x 32-bit FLOAT minimum vertex position: x, y, z, 0
4x 32-bit FLOAT maxmimum vertex position: x, y, z, 0
N x (4x 32-bit FLOAT) vertex positions: x, y, z, 0
N x (3x 16-bit INT) face vertex indices: a, b, c
8-bit INT number of portals
for each portal
8-bit INT number of portal vertices
3x 32-bit FLOAT portal plane normal
32-bit FLOAT portal plane distance
32-bit INT portal flags?
32-bit FLOAT portal near range?
32-bit FLOAT portal far range?
32-bit FLOAT/INT unknown
Nx (4x 32-bit FLOAT) portal vertex positions: x, y, z, 0

Dummy

Dummies are cuboids, mostly cubes. The 2 extents are two points in space which form the diagonal of a cuboid/box.

Description Example
3x 32-bit FLOAT minimum extent of dummy box
32-bit INT unknown
3x 32-bit FLOAT maximum extent of dummy box
32-bit INT unknown

Target

Description Example
16-bit INT unknown
8-bit INT unknown : N
Nx (16-bit INT) target ID?

Joint

Description Example
32-bit INT unique joint ID

Occluder

Description Example
32-bit INT number of vertices
32-bit INT number of faces
Nx (4x 32-bit FLOAT) vertex positions: x, y, z, 0
Nx (3x 16-bit INT) face vertex indices: a, b, c

Animation

Finally, at the end of each .4ds file comes a 8-bit INT value, which is always 0 unless an corresponding .5ds animation file exists.