Lego Island World Database

The Lego Island World Database format is for a particular file in the Mindscape game Lego Island. This file stores all of the models and textures used in the game.

Format
// Documentation info // struct groups[x] -> A data structure called groups that is repeated x number of times. // uint32 -> An unsigned integer that is 32 bits in size. // float32 -> a floating point number that is 32 bits in size. // char[x] -> A string of characters that is x characters long. // if (INDEX) == 1 -> If the index of the current data structure is 1 execute the following indented. // SEEK 10 -> Seek to byte 10 in the binary file. // SEEKREL -1 -> Seek 1 byte backwards in the binary file. // MARKER HELLO -> A marker definition that can be accessed with GOTO HELLO. // GOTO HELLO -> Go to the marker HELLO.

uint32 number_of_groups

struct groups[number_of_groups] uint32 size_of_group_title char[size_of_group_title] group_title

struct subgroups[2] uint32 num_sub_items struct sub_items[num_sub_items] uint32 size_of_sub_item_title char[size_of_sub_item_title] sub_item_title uint32 size_of_item uint32 item_offset

if (INDEX/subgroups) == 1 size_of_presenter_title I       presenter_title s size_of_presenter_title byte[37] unknown

uint32 gif_chunk_size byte[gif_chunk_size] unknown uint32 model_chunk_size

//gifchunk uint32 num_images struct images[num_images] uint32 size_of_string char[size_of_string] gif_name uint32 width uint32 height uint32 num_colors

struct colors[num_colors] uint8 r   uint8 g    uint8 b

struct rows[height] struct pixels[width] uint8 color_index

//modelchunk uint32 size_of_chunk uint32 num_bins struct bins[num_bins] uint32 size_of_string char[size_of_string] bin_name uint32 num_models uint32 end_bin_offset SEEK end_bin_offset

//model uint32 magic_number uint32 bytes_left_in_subgroup uint32 version byte[8] unknown uint32 size_of_file_name char[size_of_file_name] file_name

uint32 u1

struct unknowns1[u1] float32 some_float1 float32 some_float2 float32 some_float3 float32 some_float4

uint32 u2

struct unknowns2[u2] uint32 some_int1 uint32 some_int2 uint32 some_int3 uint32 some_int4

uint32 number_of_components

struct component_header[number_of_components] uint32 size_of_string char[size_of_string] component_header_name

uint16 num_things struct things[num_things] uint16 unknown1 uint16 unknown2 float32 ufloat1 float32 ufloat2 float32 ufloat3

uint16 num_things2 struct things2[num_things2] uint16 unknown1 uint16 unknown2 float32 ufloat1 float32 ufloat2 float32 ufloat3 float32 ufloat4

uint16 num_things3 uint16 num_things4

uint32 some_int

//components struct components[number_of_components+1] uint32 size_of_string char[size_of_string] component_name

struct random_floats2[10] float32 random_float2

byte[4] unknown uint8 defined_elsewhere if (defined_elsewhere) == 1 byte[4] unknown GOTO ENDCOMP

//number of lod models in this component uint32 number_of_models

if (number_of_models) == 0 GOTO SKIPCOMPOFFSET

uint32 end_component_offset MARKER SKIPCOMPOFFSET

//this means lod, all models in a chunk are the same, just different poly struct models[number_of_models] byte[4] unknown uint16 number_of_parts byte[2] unknown uint16 number_of_verts uint16 number_of_normals uint16 number_of_coordinates byte[2] unknown

struct vertices[number_of_verts] float32 x     float32 y	  float32 z

struct normals[number_of_normals/2] float32 x     float32 y	  float32 z

struct coordinates[number_of_coordinates] float32 u     float32 v

struct parts[number_of_parts] uint16 num_tris uint16 num_index_definitions

struct indices[num_tris] struct axis[3] uint16 first uint16 second

uint32 num_coordinate_indices

struct coordinate_indices[num_coordinate_indices/3] struct axis[3] uint32 coordinate_index

uint8 part_color_red uint8 part_color_green uint8 part_color_blue byte[8] unknown uint32 size_of_texture_name char[size_of_texture_name] texture_name uint32 size_of_material_name char[size_of_material_name] material_name

byte[4] unknown MARKER ENDCOMP

//modelgifs uint32 num_images byte[4] unknown struct images[num_images] uint32 size_of_string //store gif_char for later use, then go back and read entire gif_name uint8 gif_char SEEKREL -1 char[size_of_string] gif_name

uint32 width uint32 height uint32 num_colors

struct colors[num_colors] uint8 r   uint8 g    uint8 b

struct rows[height] struct pixels[width] uint8 color_index //for special textures beggining with "^" if (gif_char) == 94 struct extra_images[1] uint32 width uint32 height uint32 num_colors

struct colors[num_colors] uint8 r       uint8 g		uint8 b

struct rows[height] struct pixels[width] uint8 color_index