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. The path to the file from the Lego Island installation directory is.

Format
This format is not complete in that not every model can be extracted using this method, but it is the closest description of the format that works at this time. // 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/subgroups) == 1 -> If the index of the subgroups 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