/* * brlyt.c * * * Created by Alex Marshall on 09/01/27. * Updated by Stephen Simpson on 09/03/11. * Copyright 2009 __MyCompanyName__. All rights reserved. * */ #include #include #include #include "general.h" #include "types.h" #include "brlyt.h" #ifdef DEBUGBRLYT #define dbgprintf printf #else #define dbgprintf // #endif //DEBUGBRLYT char pic1_magic[] = "pic1"; char pan1_magic[] = "pan1"; char bnd1_magic[] = "bnd1"; char wnd1_magic[] = "wnd1"; char lyt1_magic[] = "lyt1"; char grp1_magic[] = "grp1"; char txl1_magic[] = "txl1"; char mat1_magic[] = "mat1"; char fnl1_magic[] = "fnl1"; char txt1_magic[] = "txt1"; char gre1_magic[] = "gre1"; char grs1_magic[] = "grs1"; char pae1_magic[] = "pae1"; char pas1_magic[] = "pas1"; static size_t BRLYT_fileoffset = 0; char *materials; int numberOfMaterials; int lengthOfMaterials; static int FourCCsMatch(fourcc cc1, fourcc cc2) { dbgprintf("FourCCs\n"); int ret[4]; dbgprintf("Let's go %08x %08x\n", cc1, cc2); ret[0] = (cc1[0] == cc2[0]); dbgprintf("Got zero |%02x| |%02x| %d\n", cc1[0], cc2[0], ret[0]); ret[1] = (cc1[1] == cc2[1]); dbgprintf("Got one |%02x| |%02x| %d\n", cc1[1], cc2[1], ret[1]); ret[2] = (cc1[2] == cc2[2]); dbgprintf("Got two |%02x| |%02x| %d\n", cc1[2], cc2[2], ret[2]); ret[3] = (cc1[3] == cc2[3]); dbgprintf("Got three |%02x| |%02x| %d\n", cc1[3], cc2[3], ret[3]); int retval; if(ret[0] && ret[1] && ret[2] && ret[3]) retval = 1; else retval = 0; dbgprintf("Got retval %d\n", retval); return retval; } static void BRLYT_ReadDataFromMemoryX(void* destination, void* input, size_t size) { u8* out = (u8*)destination; u8* in = ((u8*)input) + BRLYT_fileoffset; memcpy(out, in, size); } static void BRLYT_ReadDataFromMemory(void* destination, void* input, size_t size) { BRLYT_ReadDataFromMemoryX(destination, input, size); BRLYT_fileoffset += size; } float float_swap_bytes(float float1) { unsigned char *float1c; float1c = (unsigned char*)&float1; unsigned char charTemp = 0x00; charTemp = float1c[0]; float1c[0] = float1c[3]; float1c[3] = charTemp; charTemp = 0x00; charTemp = float1c[1]; float1c[1] = float1c[2]; float1c[2] = charTemp; float *newFloat; newFloat = (float*)float1c; return *newFloat; } unsigned int bit_extract(unsigned int num, unsigned int start, unsigned int end) { if (end == 100) end = start; //simple bitmask, figure out when awake //unsigned int mask = (2**(31 - start + 1) - 1) - (2**(31 - end) - 1) unsigned int mask; int first = 0; int firstMask = 1; for (first;first<31-start+1;first++) { firstMask *= 2; } firstMask -= 1; first = 0; int secondMask = 1; for (first;first< 31-end;first++) { secondMask *=2; } mask = firstMask = secondMask; int ret = (num & mask) >> (31 - end); //printf("%08x, %08x, %08x, %08x\n", firstMask, secondMask, mask, ret); return ret; } char* getMaterial(int offset) { if (offset == 0) return materials; char *foo = materials + strlen(materials) + 1; if (offset > 1) { int n = 1; for (n; n\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3]); printf(" %08x\n", be32(data.a)); printf(" \n"); printf(" %f\n", float_swap_bytes(data.width)); printf(" %f\n", float_swap_bytes(data.height)); printf(" \n"); printf(" \n"); #endif //OLD_BRLYT_OUTSTYLE } void PrintBRLYTEntry_grp1(brlyt_entry entry, u8* brlyt_file) { brlyt_group_chunk data; BRLYT_fileoffset = entry.data_location; BRLYT_ReadDataFromMemory(&data, brlyt_file, sizeof(brlyt_group_chunk)); #ifdef OLD_BRLYT_OUTSTYLE printf(" Type: %c%c%c%c\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3]); printf(" Name: %s\n", data.name); printf(" Number of subs: %08x\n", be16(data.numsubs)); printf(" unk: %08x\n", be16(data.unk)); #else printf("type=\"%c%c%c%c\" name=\"%s\">\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3], data.name); printf(" \n"); #endif //OLD_BRLYT_OUTSTYLE int offset; offset = 20; int n = 0; for (n;n%s\n", sub); #endif //OLD_BRLYT_OUTSTYLE offset += 16; } #ifndef OLD_BRLYT_OUTSTYLE printf(" \n"); printf(" \n"); #endif //OLD_BRLYT_OUTSTYLE } void PrintBRLYTEntry_txl1(brlyt_entry entry, u8* brlyt_file) { brlyt_numoffs_chunk data; BRLYT_fileoffset = entry.data_location; BRLYT_ReadDataFromMemory(&data, brlyt_file, sizeof(brlyt_numoffs_chunk)); #ifdef OLD_BRLYT_OUTSTYLE printf(" Type: %c%c%c%c\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3]); printf(" num: %08x\n", be16(data.num)); printf(" offs: %08x\n", be16(data.offs)); #else printf("type=\"%c%c%c%c\">\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3]); printf(" \n"); #endif //OLD_BRLYT_OUTSTYLE int pos = 4; pos += data.offs; int bpos = pos; int n = 0; for (n;n%s\n", name); #endif //OLD_BRLYT_OUTSTYLE BRLYT_fileoffset = tempLocation; int oldsize = sizeof(name); dbgprintf("size of materials before: %08x\n", sizeof(materials)); int newSize = lengthOfMaterials+sizeof(name); materials = realloc(materials, newSize); numberOfMaterials += 1; memcpy(materials+lengthOfMaterials, name, sizeof(name)); dbgprintf("mats: %s\tnamsize: %08x\tmatsize: %08x\tnewsize: %08x\n", materials+lengthOfMaterials, sizeof(name), lengthOfMaterials, newSize); lengthOfMaterials = newSize; } #ifndef OLD_BRLYT_OUTSTYLE printf(" \n"); printf(" \n"); #endif //OLD_BRLYT_OUTSTYLE } void PrintBRLYTEntry_fnl1(brlyt_entry entry, u8* brlyt_file) { brlyt_numoffs_chunk data; BRLYT_fileoffset = entry.data_location; BRLYT_ReadDataFromMemory(&data, brlyt_file, sizeof(brlyt_numoffs_chunk)); #ifdef OLD_BRLYT_OUTSTYLE printf(" Type: %c%c%c%c\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3]); printf(" num: %08x\n", be16(data.num)); printf(" offs: %08x\n", be16(data.offs)); #else printf("type=\"%c%c%c%c\">\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3]); printf(" \n"); #endif //OLD_BRLYT_OUTSTYLE int pos = 4; pos += data.offs; int bpos = pos; int n = 0; for (n;n%s\n", name); #endif //OLD_BRLYT_OUTSTYLE BRLYT_fileoffset = tempLocation; } #ifndef OLD_BRLYT_OUTSTYLE printf(" \n"); printf(" \n"); #endif //OLD_BRLYT_OUTSTYLE } void PrintBRLYTEntry_pan1(brlyt_entry entry, u8* brlyt_file) { brlyt_pane_chunk data; BRLYT_fileoffset = entry.data_location; BRLYT_ReadDataFromMemory(&data, brlyt_file, sizeof(brlyt_pane_chunk)); #ifdef OLD_BRLYT_OUTSTYLE printf(" Type: %c%c%c%c\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3]); printf(" flag1: %08x\n", data.flag1); printf(" flag2: %08x\n", data.flag2); printf(" alpha: %08x\n", data.alpha); printf(" alpha2: %08x\n", data.alpha2); printf(" name: %s\n", data.name); printf(" x: %f\n", be32(data.x)); printf(" y: %f\n", be32(data.y)); printf(" z: %f\n", be32(data.z)); printf(" flip_x: %f\n", float_swap_bytes(data.flip_x)); printf(" flip_y: %f\n", float_swap_bytes(data.flip_y)); printf(" angle: %f\n", float_swap_bytes(data.angle)); printf(" xmag: %f\n", float_swap_bytes(data.xmag)); printf(" ymag: %f\n", float_swap_bytes(data.ymag)); printf(" width: %f\n", float_swap_bytes(data.width)); printf(" height: %f\n", float_swap_bytes(data.height)); #else printf("type=\"%c%c%c%c\" name=\"%s\">\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3], data.name); printf(" %08x-%08x\n", data.flag1, data.flag2); printf(" %08x-%08x\n", data.alpha, data.alpha2); printf(" \n"); printf(" %f\n", be32(data.x)); printf(" %f\n", be32(data.y)); printf(" %f\n", be32(data.z)); printf(" \n"); printf(" \n"); printf(" %f\n", float_swap_bytes(data.flip_x)); printf(" %f\n", float_swap_bytes(data.flip_y)); printf(" \n"); printf(" %f\n", float_swap_bytes(data.angle)); printf(" \n"); printf(" %f\n", float_swap_bytes(data.xmag)); printf(" %f\n", float_swap_bytes(data.ymag)); printf(" \n"); printf(" \n"); printf(" %f\n", float_swap_bytes(data.width)); printf(" %f\n", float_swap_bytes(data.height)); printf(" \n"); printf(" \n"); #endif //OLD_BRLYT_OUTSTYLE } void PrintBRLYTEntry_wnd1(brlyt_entry entry, u8* brlyt_file) { brlyt_pane_chunk data; BRLYT_fileoffset = entry.data_location; BRLYT_ReadDataFromMemory(&data, brlyt_file, sizeof(brlyt_pane_chunk)); #ifdef OLD_BRLYT_OUTSTYLE printf(" Type: %c%c%c%c\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3]); printf(" flag1: %08x\n", data.flag1); printf(" flag2: %08x\n", data.flag2); printf(" alpha: %08x\n", data.alpha); printf(" alpha2: %08x\n", data.alpha2); printf(" name: %s\n", data.name); printf(" x: %f\n", be32(data.x)); printf(" y: %f\n", be32(data.y)); printf(" z: %f\n", be32(data.z)); printf(" flip_x: %f\n", float_swap_bytes(data.flip_x)); printf(" flip_y: %f\n", float_swap_bytes(data.flip_y)); printf(" angle: %f\n", float_swap_bytes(data.angle)); printf(" xmag: %f\n", float_swap_bytes(data.xmag)); printf(" ymag: %f\n", float_swap_bytes(data.ymag)); printf(" width: %f\n", float_swap_bytes(data.width)); printf(" height: %f\n", float_swap_bytes(data.height)); #else printf("type=\"%c%c%c%c\" name=\"%s\">\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3], data.name); printf(" %08x-%08x\n", data.flag1, data.flag2); printf(" %08x-%08x\n", data.alpha, data.alpha2); printf(" \n"); printf(" %f\n", be32(data.x)); printf(" %f\n", be32(data.y)); printf(" %f\n", be32(data.z)); printf(" \n"); printf(" \n"); printf(" %f\n", float_swap_bytes(data.flip_x)); printf(" %f\n", float_swap_bytes(data.flip_y)); printf(" \n"); printf(" %f\n", float_swap_bytes(data.angle)); printf(" \n"); printf(" %f\n", float_swap_bytes(data.xmag)); printf(" %f\n", float_swap_bytes(data.ymag)); printf(" \n"); printf(" \n"); printf(" %f\n", float_swap_bytes(data.width)); printf(" %f\n", float_swap_bytes(data.height)); printf(" \n"); printf(" \n"); #endif //OLD_BRLYT_OUTSTYLE } void PrintBRLYTEntry_bnd1(brlyt_entry entry, u8* brlyt_file) { dbgprintf("entry length: %08x\n", be32(entry.length)); int w; for (w=0;w\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3], data.name); printf(" %08x-%08x\n", data.flag1, data.flag2); printf(" %08x-%08x\n", data.alpha, data.alpha2); printf(" \n"); printf(" %f\n", be32(data.x)); printf(" %f\n", be32(data.y)); printf(" %f\n", be32(data.z)); printf(" \n"); printf(" \n"); printf(" %f\n", float_swap_bytes(data.flip_x)); printf(" %f\n", float_swap_bytes(data.flip_y)); printf(" \n"); printf(" %f\n", float_swap_bytes(data.angle)); printf(" \n"); printf(" %f\n", float_swap_bytes(data.xmag)); printf(" %f\n", float_swap_bytes(data.ymag)); printf(" \n"); printf(" \n"); printf(" %f\n", float_swap_bytes(data.width)); printf(" %f\n", float_swap_bytes(data.height)); printf(" \n"); printf(" \n"); #endif //OLD_BRLYT_OUTSTYLE } void PrintBRLYTEntry_pic1(brlyt_entry entry, u8* brlyt_file) { brlyt_pane_chunk data; BRLYT_fileoffset = entry.data_location; BRLYT_ReadDataFromMemory(&data, brlyt_file, sizeof(brlyt_pane_chunk)); brlyt_pic_chunk data2; BRLYT_ReadDataFromMemory(&data2, brlyt_file, sizeof(brlyt_pic_chunk)); #ifdef OLD_BRLYT_OUTSTYLE printf(" Type: %c%c%c%c\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3]); printf(" flag1: %08x\n", data.flag1); printf(" flag2: %08x\n", data.flag2); printf(" alpha: %08x\n", data.alpha); printf(" alpha2: %08x\n", data.alpha2); printf(" name: %s\n", data.name); printf(" x: %f\n", be32(data.x)); printf(" y: %f\n", be32(data.y)); printf(" z: %f\n", be32(data.z)); printf(" flip_x: %f\n", float_swap_bytes(data.flip_x)); printf(" flip_y: %f\n", float_swap_bytes(data.flip_y)); printf(" angle: %f\n", float_swap_bytes(data.angle)); printf(" xmag: %f\n", float_swap_bytes(data.xmag)); printf(" ymag: %f\n", float_swap_bytes(data.ymag)); printf(" width: %f\n", float_swap_bytes(data.width)); printf(" height: %f\n", float_swap_bytes(data.height)); #else printf("type=\"%c%c%c%c\" name=\"%s\">\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3], data.name); printf(" %08x-%08x\n", data.flag1, data.flag2); printf(" %08x-%08x\n", data.alpha, data.alpha2); printf(" \n"); printf(" %f\n", be32(data.x)); printf(" %f\n", be32(data.y)); printf(" %f\n", be32(data.z)); printf(" \n"); printf(" \n"); printf(" %f\n", float_swap_bytes(data.flip_x)); printf(" %f\n", float_swap_bytes(data.flip_y)); printf(" \n"); printf(" %f\n", float_swap_bytes(data.angle)); printf(" \n"); printf(" %f\n", float_swap_bytes(data.xmag)); printf(" %f\n", float_swap_bytes(data.ymag)); printf(" \n"); printf(" \n"); printf(" %f\n", float_swap_bytes(data.width)); printf(" %f\n", float_swap_bytes(data.height)); printf(" \n"); #endif //OLD_BRLYT_OUTSTYLE #ifdef OLD_BRLYT_OUTSTYLE printf(" vtx_colors: %u,%u,%u,%u\n", be32(data2.vtx_colors[0]), be32(data2.vtx_colors[1]), be32(data2.vtx_colors[2]), be32(data2.vtx_colors[3])); printf(" mat_off: %08x\n", be16(data2.mat_off)); printf(" num_texcoords: %08x\n", data2.num_texcoords); printf(" padding: %08x\n", data2.padding); #else printf(" \n"); printf(" 0x%08X\n", be32(data2.vtx_colors[0])); printf(" 0x%08X\n", be32(data2.vtx_colors[1])); printf(" 0x%08X\n", be32(data2.vtx_colors[2])); printf(" 0x%08X\n", be32(data2.vtx_colors[3])); printf(" \n"); printf(" \n"); #endif //OLD_BRLYT_OUTSTYLE int n = 0; for (n;n\n"); for(i = 0; i < 8; i++) printf(" %f\n", float_swap_bytes(texcoords[i])); printf(" \n"); #endif //OLD_BRLYT_OUTSTYLE } #ifndef OLD_BRLYT_OUTSTYLE printf(" \n"); printf(" \n"); #endif //OLD_BRLYT_OUTSTYLE } void PrintBRLYTEntry_txt1(brlyt_entry entry, u8* brlyt_file) { brlyt_pane_chunk data; BRLYT_fileoffset = entry.data_location; BRLYT_ReadDataFromMemory(&data, brlyt_file, sizeof(brlyt_pane_chunk)); #ifdef OLD_BRLYT_OUTSTYLE printf(" Type: %c%c%c%c\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3]); printf(" flag1: %08x\n", data.flag1); printf(" flag2: %08x\n", data.flag2); printf(" alpha: %08x\n", data.alpha); printf(" alpha2: %08x\n", data.alpha2); printf(" name: %s\n", data.name); printf(" x: %f\n", be32(data.x)); printf(" y: %f\n", be32(data.y)); printf(" z: %f\n", be32(data.z)); printf(" flip_x: %f\n", float_swap_bytes(data.flip_x)); printf(" flip_y: %f\n", float_swap_bytes(data.flip_y)); printf(" angle: %f\n", float_swap_bytes(data.angle)); printf(" xmag: %f\n", float_swap_bytes(data.xmag)); printf(" ymag: %f\n", float_swap_bytes(data.ymag)); printf(" width: %f\n", float_swap_bytes(data.width)); printf(" height: %f\n", float_swap_bytes(data.height)); #else printf("type=\"%c%c%c%c\" name=\"%s\">\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3], data.name); printf(" %08x-%08x\n", data.flag1, data.flag2); printf(" %08x-%08x\n", data.alpha, data.alpha2); printf(" \n"); printf(" %f\n", be32(data.x)); printf(" %f\n", be32(data.y)); printf(" %f\n", be32(data.z)); printf(" \n"); printf(" \n"); printf(" %f\n", float_swap_bytes(data.flip_x)); printf(" %f\n", float_swap_bytes(data.flip_y)); printf(" \n"); printf(" %f\n", float_swap_bytes(data.angle)); printf(" \n"); printf(" %f\n", float_swap_bytes(data.xmag)); printf(" %f\n", float_swap_bytes(data.ymag)); printf(" \n"); printf(" \n"); printf(" %f\n", float_swap_bytes(data.width)); printf(" %f\n", float_swap_bytes(data.height)); printf(" \n"); #endif //OLD_BRLYT_OUTSTYLE brlyt_text_chunk data2; BRLYT_ReadDataFromMemory(&data2, brlyt_file, sizeof(brlyt_text_chunk)); #ifdef OLD_BRLYT_OUTSTYLE printf(" len1: %08x\n", be16(data2.len1)); printf(" len2: %08x\n", be16(data2.len2)); printf(" mat_off: %08x\n", be16(data2.mat_off)); printf(" font_idx: %08x\n", be16(data2.font_idx)); printf(" unk4: %08x\n", data2.unk4); printf(" pad[3]: %08x\n", data2.pad[0], data2.pad[1], data2.pad[2]); printf(" name_offs: %08x\n", be32(data2.name_offs)); printf(" color1: %08x\n", be32(data2.color1)); printf(" color2: %08x\n", be32(data2.color2)); printf(" font_size_x: %f\n", float_swap_bytes(data2.font_size_x)); printf(" font_size_y: %f\n", float_swap_bytes(data2.font_size_y)); printf(" char_space: %f\n", float_swap_bytes(data2.char_space)); printf(" line_space: %f\n", float_swap_bytes(data2.line_space)); #else printf(" %04x-%04x\n", be16(data2.len1), be16(data2.len2)); printf(" \n", be16(data2.font_idx)); printf(" %f\n", float_swap_bytes(data2.font_size_x)); printf(" %f\n", float_swap_bytes(data2.font_size_y)); printf(" %f\n", float_swap_bytes(data2.font_size_x)); printf(" %f\n", float_swap_bytes(data2.char_space)); printf(" %f\n", float_swap_bytes(data2.line_space)); printf(" \n"); printf(" %08x-%08x\n", be32(data2.color1), be32(data2.color2)); printf(" \n"); #endif //OLD_BRLYT_OUTSTYLE } void PrintBRLYTEntry_mat1(brlyt_entry entry, u8* brlyt_file) { brlyt_numoffs_chunk data; BRLYT_fileoffset = entry.data_location; BRLYT_ReadDataFromMemory(&data, brlyt_file, sizeof(brlyt_numoffs_chunk)); #ifdef OLD_BRLYT_OUTSTYLE printf(" Type: %c%c%c%c\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3]); printf(" num: %08x\n", be16(data.num)); printf(" offs: %08x\n", be16(data.offs)); #else printf("type=\"%c%c%c%c\" count=\"%d\">\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3], be16(data.num)); printf(" \n"); #endif //OLD_BRLYT_OUTSTYLE int n = 0; for (n;n disappears. //# 2nd --> no visible effect. //# 3rd --> disappears. //# 4th --> no visible effect. //# 4 * flags[6] n = 0; for (n;nI', chunk[pos+4:pos+8]) // if next_offset - 8 != mpos: // mat['~_insane'] = next_offset - 8 - mpos //# Extra shit we di dn't parse :( // } // mat['unk_bit_5'] = bit_extract(flags, 5) // mat['unk_bits_0_3'] = bit_extract(flags, 0, 3) //# Overwritten by stu ff // vars['materials'].append(mat) // pos += 4 BRLYT_fileoffset = tempDataLocation; } #ifndef OLD_BRLYT_OUTSTYLE printf(" \n"); printf(" \n"); #endif //OLD_BRLYT_OUTSTYLE } void PrintBRLYTEntry_gre1(brlyt_entry entry, u8* brlyt_file) { #ifdef OLD_BRLYT_OUTSTYLE printf(" Type: %c%c%c%c\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3]); #else printf("type=\"%c%c%c%c\" />\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3]); #endif //OLD_BRLYT_OUTSTYLE //group end info } void PrintBRLYTEntry_grs1(brlyt_entry entry, u8* brlyt_file) { #ifdef OLD_BRLYT_OUTSTYLE printf(" Type: %c%c%c%c\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3]); #else printf("type=\"%c%c%c%c\" />\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3]); #endif //OLD_BRLYT_OUTSTYLE //group start info } void PrintBRLYTEntry_pae1(brlyt_entry entry, u8* brlyt_file) { #ifdef OLD_BRLYT_OUTSTYLE printf(" Type: %c%c%c%c\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3]); #else printf("type=\"%c%c%c%c\" />\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3]); #endif //OLD_BRLYT_OUTSTYLE //panel end info } void PrintBRLYTEntry_pas1(brlyt_entry entry, u8* brlyt_file) { #ifdef OLD_BRLYT_OUTSTYLE printf(" Type: %c%c%c%c\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3]); #else printf("type=\"%c%c%c%c\" />\n", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3]); #endif //OLD_BRLYT_OUTSTYLE //panel start info } void PrintBRLYTEntries(brlyt_entry *entries, int entrycnt, u8* brlyt_file) { dbgprintf("Printing BRLYT Entries"); int i; for(i = 0; i < entrycnt; i++) { #ifdef OLD_BRLYT_OUTSTYLE printf("\n Index %d (@%08x):\n", i, entries[i].data_location - 8); #else printf(" \n"); #endif //OLD_BRLYT_OUTSTYLE } } } void parse_brlyt(char *filename) { materials = (char*)malloc(12); numberOfMaterials = 0; lengthOfMaterials = 0; FILE* fp = fopen(filename, "rb"); if(fp == NULL) { printf("Error! Couldn't open %s!\n", filename); exit(1); } fseek(fp, 0, SEEK_END); size_t file_size = ftell(fp); dbgprintf("Filesize is %d\n", file_size); u8* brlyt_file = (u8*)malloc(file_size); dbgprintf("brlyt_file allocated\n"); fseek(fp, 0, SEEK_SET); fread(brlyt_file, file_size, 1, fp); dbgprintf("brlyt_file read to.\n"); BRLYT_fileoffset = 0; brlyt_header header; BRLYT_ReadDataFromMemory(&header, brlyt_file, sizeof(brlyt_header)); BRLYT_CheckHeaderSanity(header, file_size); brlyt_entry *entries; BRLYT_fileoffset = be16(header.lyt_offset); brlyt_entry_header tempentry; int i; dbgprintf("curr %08x max %08x\n", BRLYT_fileoffset, file_size); for(i = 0; BRLYT_fileoffset < file_size; i++) { BRLYT_ReadDataFromMemoryX(&tempentry, brlyt_file, sizeof(brlyt_entry_header)); BRLYT_fileoffset += be32(tempentry.length); dbgprintf("curr %08x max %08x\n", BRLYT_fileoffset, file_size); } int entrycount = i; entries = (brlyt_entry*)calloc(entrycount, sizeof(brlyt_entry)); dbgprintf("%08x\n", entries); if(entries == NULL) { printf("Couldn't allocate for entries!\n"); exit(1); } BRLYT_fileoffset = be16(header.lyt_offset); for(i = 0; i < entrycount; i++) { dbgprintf("&(entries[i]) = %08x\n", &(entries[i])); BRLYT_ReadDataFromMemoryX(&tempentry, brlyt_file, sizeof(brlyt_entry_header)); memcpy(entries[i].magic, tempentry.magic, 4); entries[i].length = tempentry.length; entries[i].data_location = BRLYT_fileoffset + sizeof(brlyt_entry_header); BRLYT_fileoffset += be32(tempentry.length); } // int entrycnt = BRLYT_ReadEntries(brlyt_file, file_size, header, entries); dbgprintf("%08x\n", entries); #ifdef OLD_BRLYT_OUTSTYLE printf("Parsed BRLYT! Information:\n"); printf("Main header:\n"); printf(" Magic: %c%c%c%c\n", header.magic[0], header.magic[1], header.magic[2], header.magic[3]); printf(" Unk1: %08x\n", be32(header.unk1)); printf(" Filesize: %lu\n", be32(header.filesize)); printf(" %s real file size!\n", be32(header.filesize) == file_size ? "Matches" : "Does not match"); printf(" Offset to lyt1: %04x\n", be16(header.lyt_offset)); printf(" Unk2: %04x\n", be16(header.unk2)); printf("\nBRLYT Entries:"); #else printf("\n" \ "\n"); #endif //OLD_BRLYT_OUTSTYLE PrintBRLYTEntries(entries, entrycount, brlyt_file); #ifndef OLD_BRLYT_OUTSTYLE printf("\n"); #endif //OLD_BRLYT_OUTSTYLE } void make_brlyt(char* infile, char* outfile) { }