Skip to content

Epic Mickey Display List format

Candoran2 edited this page Jun 19, 2023 · 6 revisions

Nif files from Epic Mickey for the Wii can contain NiMeshes that have their geometry data stored in a non-standard way.

Regular NiMeshes typically store the triangles in one datastream (either strips or loose triangles), and store the vertex information in one or more other datastreams, where there is an equal number of vertex positions, normals, vertex colors, UV coordinates or bone weights. So if there are 200 vertices, there are 200 position entries, 200 vertex normal entries, 200 color entries etc.

However, when there is a displaylist datastream (component semantics "DISPLAYLIST"), these are not guaranteed to be the same length and there is no triangle datastream. The displaylist datastream instead defines how each piece of information is linked and how the triangles are laid out. The displaylist is a series of bytes, which are all structured as command bytes followed by the associated information. Which commands are used and their content has two variations depending on whether the mesh is weighted or not.

Common definitions

Command (hex) Format Explanation
0x90 90 CC CC [Vertices] Triangles. The CC CC ushort defines the number of vertices, of which the format depends on the mesh. The triangles are defined in groups of three vertices.
0x98 98 CC CC [Vertices] Triangle Strip. The CC CC ushort defines the number of vertices, of which the format depends on the mesh. Note that, due to the format, every entry in this list is its own definition which can lead to shading problems (at least in Blender). In order to fix this, you can assume that every vertex which is defined the same refers to the same vertex.

Non-weighted mesh

Weighted mesh

Clone this wiki locally