-
-
Save cra0kalo/c92c589b9d6e2ee9e9f8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Need for Speed Underground 2 | |
//.BUN .BIN .GEO | |
// @cra0kalo | |
//---------------------- | |
//.TPK -> 00 00 30 B3 | |
//.GEO -> 00 40 13 80 | |
//.ANI -> 00 41 03 80 | |
LittleEndian(); | |
//Defines | |
typedef float vec2[2]; | |
typedef float vec3[3]; | |
typedef float vec4[4]; | |
typedef float quat4[4]; | |
typedef string asciiz; | |
typedef char magic4[4]; | |
typedef int bool; | |
#define true 1 | |
#define false 0 | |
//functions | |
long PaddingAlign(long num, int alignTo) | |
{ | |
if (num % alignTo == 0) | |
{ | |
return 0; | |
} | |
else | |
{ | |
return alignTo - (num % alignTo); | |
} | |
} | |
bool AlignFS4() | |
{ | |
local int b2skip = PaddingAlign(FTell(),4); | |
FSkip(b2skip); | |
return 1; | |
} | |
typedef struct | |
{ | |
uint32 chunkHeader; //00 40 13 80 - | |
uint32 chunkSize; | |
} CHUNK_GEO_HEAD; | |
typedef struct | |
{ | |
uint32 chunkHead; | |
uint32 chunkSize; | |
} CHUNK_NULL; | |
typedef struct | |
{ | |
uint32 chunkHeader; //01 40 13 80 | |
uint32 chunkSize; | |
} CHUNK_GEO_Block1; | |
typedef struct | |
{ | |
uint32 chunkHeader; //02 40 13 80 | |
uint32 chunkSize; | |
uint32 blnk1; | |
uint32 blnk2; | |
uint32 tTagA; | |
uint32 tTagB; | |
asciiz path; | |
uint32 UniqueFmt; | |
uint32 unkData[7]; | |
uint32 unkVarA; | |
uint32 unkVarB; | |
uint32 unkVarC; | |
uint32 unkData2[7]; | |
} CHUNK_GEO_Block2; | |
typedef struct | |
{ | |
uint32 chunkHeader; //03 40 13 80 | |
uint32 chunkSize; | |
uint16 unkValA_a; | |
uint16 unkValA_b; | |
uint32 unkValB; | |
} CHUNK_GEO_Block3; | |
typedef struct | |
{ | |
uint32 chunkHeader; //08 40 13 80 | |
uint32 chunkSize; | |
} CHUNK_GEO_Block8; | |
typedef struct | |
{ | |
uint32 chunkHeader; //10 40 13 80 | |
uint32 chunkSize; | |
} CHUNK_GEO_Block10; | |
typedef struct | |
{ | |
uint32 chunkHeader; //11 40 13 80 | |
uint32 chunkSize; | |
byte padding[8]; | |
uint32 blnk1; | |
uint32 blnk2; | |
uint32 blnk3; | |
uint32 unkA; | |
uint16 unkB_a; | |
uint16 unkB_b; | |
uint32 unkC; | |
uint32 unkD; | |
uint32 unkE; | |
vec3 bBox1; | |
uint32 blnk4; | |
vec3 bBox2; | |
uint32 blnk5; | |
float matrix64[16]; | |
uint32 unkF; | |
uint32 unkG; | |
uint32 ParA[2]; | |
uint32 unkH; | |
vec4 unkVector; | |
asciiz chunkName; | |
AlignFS4(); | |
} CHUNK_GEO_Block11; | |
typedef struct | |
{ | |
uint32 chunkHeader; //12 40 13 80 | |
uint32 chunkSize; | |
uint16 unkVarA_a; | |
uint16 unkVarA_b; | |
uint32 blankVal1; | |
uint16 unkVarB_a; | |
uint16 unkVarB_b; | |
uint32 blankVal2; | |
uint16 unkVarC_a; | |
uint16 unkVarC_b; | |
uint32 blankVal3; | |
} CHUNK_GEO_Block12; | |
typedef struct | |
{ | |
vec3 v_pos; | |
uint32 v_unk; | |
vec2 v_uv; | |
} GEO_VERTEX; | |
typedef struct | |
{ | |
uint16 vA; | |
uint16 vB; | |
uint16 vC; | |
} GEO_FACE; | |
typedef struct | |
{ | |
uint32 chunkHeader; //01 4B 13 00 | |
uint32 chunkSize; | |
local int strtPt = FTell(); | |
local int padskip = FTell(); | |
local byte rVal; | |
while(ReadByte(FTell()) == 0x11) | |
{ | |
padskip++; | |
FSeek(padskip); | |
} | |
local int curPos = FTell(); | |
while(curPos < strtPt + chunkSize) | |
{ | |
GEO_VERTEX vtx; | |
curPos+= 24; | |
} | |
} CHUNK_GEO_VERTEXBUFFER; | |
typedef struct | |
{ | |
uint32 chunkHeader; //02 4B 13 00 | |
uint32 chunkSize; | |
} CHUNK_GEO_VERTEXPOST; | |
typedef struct | |
{ | |
uint32 chunkHeader; //03 4B 13 00 | |
uint32 chunkSize; | |
local int strtPt = FTell(); | |
local int curPos = FTell(); | |
while(curPos < strtPt + chunkSize) | |
{ | |
GEO_FACE vFace; | |
curPos+= 12; | |
} | |
} CHUNK_GEO_INDEXBUFFER; | |
typedef struct | |
{ | |
uint32 chunkHeader; //00 00 30 B3 | |
uint32 chunkSize; | |
} CHUNK_B_main_TPK; | |
typedef struct | |
{ | |
uint32 chunkHeader; //00 00 31 B3 | |
uint32 chunkSize; | |
} CHUNK_B_sub_TPK; | |
typedef struct | |
{ | |
uint32 chunkHeader; //00 00 32 B3 | |
uint32 chunkSize; | |
} CHUNK_B_sub_inner_TPK; | |
//--------------------------------------------------------- | |
local int bstart1; | |
CHUNK_GEO_HEAD c0; | |
//FSkip(chunk1.chunkSize); | |
CHUNK_NULL cn1; | |
FSkip(cn1.chunkSize); | |
CHUNK_GEO_Block1 c1; | |
CHUNK_GEO_Block2 c2; | |
CHUNK_GEO_Block3 c3; | |
CHUNK_GEO_Block8 c8; | |
CHUNK_GEO_Block10 c10; | |
bstart1 = FTell() + 8; | |
CHUNK_GEO_Block11 c11; | |
FSeek(bstart1 + c11.chunkSize); | |
CHUNK_GEO_Block12 c12; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment