- Thu Jan 03, 2013 2:52 pm
#45754
For now I am building up more research material on this subject. Stay tuned for more info! This post will be updated with more information as it goes along.
I was inspired by Krishty's topic to delve deeper into LEV files. First I'd like to point out that the offsets are 100% accurate and all of the counts are accurate as well. It depends on where the cursor is in the file, they are offsets from a relative position. So the general consensus is that these files are considered "LUMP" files, which seem to be the grandfather of Reflections' CHUNK file format that has been used since DRIV3R. Unlike CHUNK files which have every individual file/chunk listed in the beginning, LUMP files are sorted by ID types which are assigned different behaviors.
Here's a work-in-progress pseudo-C style format of LUMP files!
I was inspired by Krishty's topic to delve deeper into LEV files. First I'd like to point out that the offsets are 100% accurate and all of the counts are accurate as well. It depends on where the cursor is in the file, they are offsets from a relative position. So the general consensus is that these files are considered "LUMP" files, which seem to be the grandfather of Reflections' CHUNK file format that has been used since DRIV3R. Unlike CHUNK files which have every individual file/chunk listed in the beginning, LUMP files are sorted by ID types which are assigned different behaviors.
Here's a work-in-progress pseudo-C style format of LUMP files!
Code: Select all
LUMP File research
"a_" indicates an assumed variable
"L" means LUMP
"uint" is short for "unsigned char" or 1-byte (00)
struct LUMP
{
long type // defines what kind of data is inside
long length // length of this LUMP starting at LData
LData data
char[4] padding // 4096-byte aligned (DES! or just 00)
}
union LData
{
LDictionary dictionary // type == 25
LTextures textures // type == 23
}
struct LDictionary
{
long offset //absolute location (00 25 00 00 would be address 0x2500)
long length //begins at offset
}
union LTextures
}
LTEXList list // list of texture names
LTEXAtlas atlases // used to split up texture atlases into individual textures
}
struct LTEXList
{
char[?] name // 4-byte aligned; 0x00 null-byte terminated
}
struct LTEXAtlas
{
long atlases // nubmer of atlases in this list
long textures // number of texture names in the texture list
long unknownID // some kind of ID?
long offset // some kind of offset just before world models...character landed on is 0B/0C (others unknown)
Atlas atlas
}
struct Atlas
{
long unknown // 1, 2, or 4 with junk sometimes in between (flags?)
uint U coordinate
uint V coordinate
ushort a_texID // assumed to be the texture ID this is assigned to (most likely)
}
Need help with something? PM Me!
Formerly known as CarLuver69 / Dr. Doom
Formerly known as CarLuver69 / Dr. Doom