diff options
Diffstat (limited to '')
| -rw-r--r-- | brlan.c | 53 | ||||
| -rw-r--r-- | brlyt.c | 94 | ||||
| -rw-r--r-- | brlyt.h | 16 | ||||
| -rw-r--r-- | general.h | 55 |
4 files changed, 113 insertions, 105 deletions
@@ -32,6 +32,7 @@ fourcc tag_FourCCs[] = { "RLPA", "RLTS", "RLVI", "RLVC", "RLMC", "RLTP" }; char tag_types_list[15][24]; char tag_types_rlmc_list[15][24]; +char tag_types_rlvc_list[15][24]; static size_t BRLAN_fileoffset = 0; FILE* xmlanout; @@ -171,12 +172,13 @@ void parse_brlan(char* filename, char *filenameout) { memset(tag_types_list[i], 0, 24); memset(tag_types_rlmc_list[i], 0, 24); + memset(tag_types_rlvc_list[i], 0, 24); } strcpy(tag_types_list[0], "X Translation"); strcpy(tag_types_list[1], "Y Translation"); strcpy(tag_types_list[2], "Z Translation"); - strcpy(tag_types_list[3], "0x03"); - strcpy(tag_types_list[4], "0x04"); + strcpy(tag_types_list[3], "X Flip"); + strcpy(tag_types_list[4], "Y Flip"); strcpy(tag_types_list[5], "Angle"); strcpy(tag_types_list[6], "X Zoom"); strcpy(tag_types_list[7], "Y Zoom"); @@ -206,6 +208,23 @@ void parse_brlan(char* filename, char *filenameout) strcpy(tag_types_rlmc_list[14], "0x0E"); strcpy(tag_types_rlmc_list[15], "0x0F"); + strcpy(tag_types_rlvc_list[0], "Top Left R"); + strcpy(tag_types_rlvc_list[1], "Top Left G"); + strcpy(tag_types_rlvc_list[2], "Top Left B"); + strcpy(tag_types_rlvc_list[3], "Top Left A"); + strcpy(tag_types_rlvc_list[4], "Top Right R"); + strcpy(tag_types_rlvc_list[5], "Top Right G"); + strcpy(tag_types_rlvc_list[6], "Top Right B"); + strcpy(tag_types_rlvc_list[7], "Top Right A"); + strcpy(tag_types_rlvc_list[8], "Bottom Left R"); + strcpy(tag_types_rlvc_list[9], "Bottom Left G"); + strcpy(tag_types_rlvc_list[10], "Bottom Left B"); + strcpy(tag_types_rlvc_list[11], "Bottom Left A"); + strcpy(tag_types_rlvc_list[12], "Bottom Right R"); + strcpy(tag_types_rlvc_list[13], "Bottom Right G"); + strcpy(tag_types_rlvc_list[14], "Bottom Right B"); + strcpy(tag_types_rlvc_list[15], "Bottom Right A"); + BRLAN_fileoffset = 0; brlan_header header; BRLAN_ReadDataFromMemoryX(&header, data, sizeof(brlan_header)); @@ -369,6 +388,7 @@ void create_entries_from_xml(mxml_node_t *tree, mxml_node_t *node, brlan_entry * strcpy(tag_type, mxmlElementGetAttr(node, "type")); char rlmc_type[5] = {'R', 'L', 'M', 'C'}; + char rlvc_type[5] = {'R', 'L', 'V', 'C'}; for(i = 0; i < 16; i++) memset(temp3[i], 0, 24); @@ -379,7 +399,12 @@ void create_entries_from_xml(mxml_node_t *tree, mxml_node_t *node, brlan_entry * { temp3[x][i] = toupper(tag_types_rlmc_list[x][i]); } - } else { + } else if(memcmp(tag_type, rlvc_type, 4) == 0) { + for(i = 0; i < strlen(tag_types_rlvc_list[x]); i++) + { + temp3[x][i] = toupper(tag_types_rlvc_list[x][i]); + } + } else { for(i = 0; i < strlen(tag_types_list[x]); i++) { temp3[x][i] = toupper(tag_types_list[x][i]); @@ -625,12 +650,13 @@ void write_brlan(char *infile, char* outfile) { memset(tag_types_list[i], 0, 24); memset(tag_types_rlmc_list[i], 0, 24); + memset(tag_types_rlvc_list[i], 0, 24); } strcpy(tag_types_list[0], "X Translation"); strcpy(tag_types_list[1], "Y Translation"); strcpy(tag_types_list[2], "Z Translation"); - strcpy(tag_types_list[3], "0x03"); - strcpy(tag_types_list[4], "0x04"); + strcpy(tag_types_list[3], "X Flip"); + strcpy(tag_types_list[4], "Y Flip"); strcpy(tag_types_list[5], "Angle"); strcpy(tag_types_list[6], "X Zoom"); strcpy(tag_types_list[7], "Y Zoom"); @@ -660,6 +686,23 @@ void write_brlan(char *infile, char* outfile) strcpy(tag_types_rlmc_list[14], "0x0E"); strcpy(tag_types_rlmc_list[15], "0x0F"); + strcpy(tag_types_rlvc_list[0], "Top Left R"); + strcpy(tag_types_rlvc_list[1], "Top Left G"); + strcpy(tag_types_rlvc_list[2], "Top Left B"); + strcpy(tag_types_rlvc_list[3], "Top Left A"); + strcpy(tag_types_rlvc_list[4], "Top Right R"); + strcpy(tag_types_rlvc_list[5], "Top Right G"); + strcpy(tag_types_rlvc_list[6], "Top Right B"); + strcpy(tag_types_rlvc_list[7], "Top Right A"); + strcpy(tag_types_rlvc_list[8], "Bottom Left R"); + strcpy(tag_types_rlvc_list[9], "Bottom Left G"); + strcpy(tag_types_rlvc_list[10], "Bottom Left B"); + strcpy(tag_types_rlvc_list[11], "Bottom Left A"); + strcpy(tag_types_rlvc_list[12], "Bottom Right R"); + strcpy(tag_types_rlvc_list[13], "Bottom Right G"); + strcpy(tag_types_rlvc_list[14], "Bottom Right B"); + strcpy(tag_types_rlvc_list[15], "Bottom Right A"); + FILE* fpx = fopen(infile, "r"); if(fpx == NULL) { printf("xmlan couldn't be opened!\n"); @@ -209,7 +209,7 @@ void PrintBRLYTEntry_lyt1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) BRLYT_fileoffset = entry.data_location; BRLYT_ReadDataFromMemory(&data, brlyt_file, sizeof(brlyt_lytheader_chunk)); mxmlElementSetAttrf(tag, "type", "%c%c%c%c", entry.magic[0], entry.magic[1], entry.magic[2], entry.magic[3]); - a = mxmlNewElement(tag, "a"); mxmlNewTextf(a, 0, "%08x", data.a); + a = mxmlNewElement(tag, "a"); mxmlNewTextf(a, 0, "%02x", data.a); size = mxmlNewElement(tag, "size"); width = mxmlNewElement(size, "width"); mxmlNewTextf(width, 0, "%f", float_swap_bytes(data.width)); height = mxmlNewElement(size, "height"); mxmlNewTextf(height, 0,"%f", float_swap_bytes(data.height)); @@ -486,8 +486,8 @@ void PrintBRLYTEntry_pic1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) size = mxmlNewElement(tag, "size"); width = mxmlNewElement(size, "width"); mxmlNewTextf(width, 0, "%f", float_swap_bytes(data.width)); height = mxmlNewElement(size, "height"); mxmlNewTextf(height, 0, "%f", float_swap_bytes(data.height)); - mxml_node_t *tpl, *color, *vtx, *coordinates, *set, *coord; - tpl = mxmlNewElement(tag, "tpl"); mxmlElementSetAttrf(tpl, "name", "%s", getMaterial(short_swap_bytes(data2.mat_off))); + mxml_node_t *material, *color, *vtx, *coordinates, *set, *coord; + material = mxmlNewElement(tag, "material"); mxmlElementSetAttrf(material, "name", "%s", getMaterial(short_swap_bytes(data2.mat_off))); color = mxmlNewElement(tag, "colors"); int n; for (n=0;n<4;n++) { @@ -555,7 +555,7 @@ void PrintBRLYTEntry_txt1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) void PrintBRLYTEntry_mat1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) { - mxml_node_t *entries, *colors, *black_color, *white_color, *unk2, *tev_k, *flags; + mxml_node_t *entries, *colors, *forecolor, *backcolor, *unk2, *tev_k, *flags; brlyt_numoffs_chunk data; BRLYT_fileoffset = entry.data_location; BRLYT_ReadDataFromMemory(&data, brlyt_file, sizeof(brlyt_numoffs_chunk)); @@ -575,13 +575,13 @@ void PrintBRLYTEntry_mat1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) colors = mxmlNewElement(entries, "colors"); int i; for (i=0;i<4;i++) { - black_color = mxmlNewElement(colors, "black_color"); - mxmlNewTextf(black_color, 0, "%d", short_swap_bytes(data3.black_color[i])); + forecolor = mxmlNewElement(colors, "forecolor"); + mxmlNewTextf(forecolor, 0, "%d", short_swap_bytes(data3.forecolor[i])); } for (i=0;i<4;i++) { - white_color = mxmlNewElement(colors, "white_color"); - mxmlNewTextf(white_color, 0, "%d", short_swap_bytes(data3.white_color[i])); + backcolor = mxmlNewElement(colors, "backcolor"); + mxmlNewTextf(backcolor, 0, "%d", short_swap_bytes(data3.backcolor[i])); } for (i=0;i<4;i++) { @@ -602,30 +602,31 @@ void PrintBRLYTEntry_mat1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) memcpy(materials+lengthOfMaterials, data3.name, 1+strlen(data3.name)); lengthOfMaterials = newSize; - mxml_node_t *material, *wrap_t, *wrap_s; + mxml_node_t *texture, *wrap_t, *wrap_s; int n = 0; for (n;n<bit_extract(flaggs, 28,31);n++) { brlyt_texref_chunk data4; BRLYT_ReadDataFromMemory(&data4, brlyt_file, sizeof(brlyt_texref_chunk)); int tplOffset = short_swap_bytes(data4.tex_offs); - material = mxmlNewElement(entries, "material"); mxmlElementSetAttrf(material, "name", "%s", getTexture(tplOffset)); - wrap_s = mxmlNewElement(material, "wrap_s"); mxmlNewTextf(wrap_s, 0, "%02x", data4.wrap_s); - wrap_t = mxmlNewElement(material, "wrap_t"); mxmlNewTextf(wrap_t, 0, "%02x", data4.wrap_t); + texture = mxmlNewElement(entries, "texture"); mxmlElementSetAttrf(texture, "name", "%s", getTexture(tplOffset)); + wrap_s = mxmlNewElement(texture, "wrap_s"); mxmlNewTextf(wrap_s, 0, "%02x", data4.wrap_s); + wrap_t = mxmlNewElement(texture, "wrap_t"); mxmlNewTextf(wrap_t, 0, "%02x", data4.wrap_t); } - mxml_node_t *ua2, *dataa; + mxml_node_t *tex_coords, *dataa; // # 0x14 * flags[24-27], followed by n = 0; for (n;n<bit_extract(flaggs, 24,27);n++) { - brlyt_ua2_chunk data4; - BRLYT_ReadDataFromMemory(&data4, brlyt_file, sizeof(brlyt_ua2_chunk)); - ua2 = mxmlNewElement(entries, "ua2"); - int j; for (j=0;j<5;j++) - { - dataa = mxmlNewElement(ua2, "data"); mxmlNewTextf(dataa, 0, "%.10f", float_swap_bytes(data4.unk[j])); - } + brlyt_tex_coords data4; + BRLYT_ReadDataFromMemory(&data4, brlyt_file, sizeof(brlyt_tex_coords)); + tex_coords = mxmlNewElement(entries, "tex_coords"); + dataa = mxmlNewElement(tex_coords, "x1"); mxmlNewTextf(dataa, 0, "%.10f", float_swap_bytes(data4.x1)); + dataa = mxmlNewElement(tex_coords, "y1"); mxmlNewTextf(dataa, 0, "%.10f", float_swap_bytes(data4.y1)); + dataa = mxmlNewElement(tex_coords, "angle"); mxmlNewTextf(dataa, 0, "%.10f", float_swap_bytes(data4.angle)); + dataa = mxmlNewElement(tex_coords, "x2"); mxmlNewTextf(dataa, 0, "%.10f", float_swap_bytes(data4.x2)); + dataa = mxmlNewElement(tex_coords, "y2"); mxmlNewTextf(dataa, 0, "%.10f", float_swap_bytes(data4.y2)); } mxml_node_t *ua3; @@ -1150,24 +1151,24 @@ void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* bl { mxml_node_t *valnode; int colorNumber = 0; - for (valnode=mxmlFindElement(setnode, setnode, "black_color", NULL, NULL, MXML_DESCEND) ; valnode != NULL ; valnode=mxmlFindElement(valnode, setnode, "black_color", NULL, NULL, MXML_DESCEND) ) + for (valnode=mxmlFindElement(setnode, setnode, "forecolor", NULL, NULL, MXML_DESCEND) ; valnode != NULL ; valnode=mxmlFindElement(valnode, setnode, "forecolor", NULL, NULL, MXML_DESCEND) ) { char tempCoord[256]; get_value(valnode, tempCoord, 256); - chunk.black_color[colorNumber] = strtol(tempCoord, NULL, 10); - chunk.black_color[colorNumber] = short_swap_bytes(chunk.black_color[colorNumber]); + chunk.forecolor[colorNumber] = strtol(tempCoord, NULL, 10); + chunk.forecolor[colorNumber] = short_swap_bytes(chunk.forecolor[colorNumber]); colorNumber+=1; } colorNumber = 0; - for (valnode=mxmlFindElement(setnode, setnode, "white_color", NULL, NULL, MXML_DESCEND) ; valnode != NULL ; valnode=mxmlFindElement(valnode, setnode, "white_color", NULL, NULL, MXML_DESCEND) ) + for (valnode=mxmlFindElement(setnode, setnode, "backcolor", NULL, NULL, MXML_DESCEND) ; valnode != NULL ; valnode=mxmlFindElement(valnode, setnode, "backcolor", NULL, NULL, MXML_DESCEND) ) { char tempCoord[256]; get_value(valnode, tempCoord, 256); - chunk.white_color[colorNumber] = strtol(tempCoord, NULL, 10); - chunk.white_color[colorNumber] = short_swap_bytes(chunk.white_color[colorNumber]); + chunk.backcolor[colorNumber] = strtol(tempCoord, NULL, 10); + chunk.backcolor[colorNumber] = short_swap_bytes(chunk.backcolor[colorNumber]); colorNumber+=1; } @@ -1204,7 +1205,7 @@ void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* bl matSize += sizeof(chunk); brlyt_texref_chunk chunkTexRef; - for(setnode = mxmlFindElement(subnode, subnode, "material", NULL, NULL, MXML_DESCEND); setnode != NULL; setnode = mxmlFindElement(setnode, subnode, "material", NULL, NULL, MXML_DESCEND)) + for(setnode = mxmlFindElement(subnode, subnode, "texture", NULL, NULL, MXML_DESCEND); setnode != NULL; setnode = mxmlFindElement(setnode, subnode, "texture", NULL, NULL, MXML_DESCEND)) { mxml_node_t *valnode; char temp[256]; @@ -1232,21 +1233,34 @@ void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* bl matSize += sizeof(chunkTexRef); } - brlyt_ua2_chunk chunkUa2; - for(setnode = mxmlFindElement(subnode, subnode, "ua2", NULL, NULL, MXML_DESCEND); setnode != NULL; setnode = mxmlFindElement(setnode, subnode, "ua2", NULL, NULL, MXML_DESCEND)) + brlyt_tex_coords chunkTexCoords; + for(setnode = mxmlFindElement(subnode, subnode, "tex_coords", NULL, NULL, MXML_DESCEND); setnode != NULL; setnode = mxmlFindElement(setnode, subnode, "tex_coords", NULL, NULL, MXML_DESCEND)) { + char tempCoord[256]; mxml_node_t *valnode; - int dataNumber = 0; - for (valnode=mxmlFindElement(setnode, setnode, "data", NULL, NULL, MXML_DESCEND) ; valnode != NULL ; valnode=mxmlFindElement(valnode, setnode, "data", NULL, NULL, MXML_DESCEND) ) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunkUa2.unk[dataNumber] = float_swap_bytes(atof(tempCoord)); - dataNumber+=1; - } - fwrite(&chunkUa2, sizeof(chunkUa2), 1, fp); - *fileOffset = *fileOffset + sizeof(chunkUa2); - matSize += sizeof(chunkUa2); + valnode=mxmlFindElement(setnode, setnode, "x1", NULL, NULL, MXML_DESCEND); + memset(tempCoord, 0, 256); + get_value(valnode, tempCoord, 256); + chunkTexCoords.x1 = float_swap_bytes(atof(tempCoord)); + valnode=mxmlFindElement(setnode, setnode, "y1", NULL, NULL, MXML_DESCEND); + memset(tempCoord, 0, 256); + get_value(valnode, tempCoord, 256); + chunkTexCoords.y1 = float_swap_bytes(atof(tempCoord)); + valnode=mxmlFindElement(setnode, setnode, "angle", NULL, NULL, MXML_DESCEND); + memset(tempCoord, 0, 256); + get_value(valnode, tempCoord, 256); + chunkTexCoords.angle = float_swap_bytes(atof(tempCoord)); + valnode=mxmlFindElement(setnode, setnode, "x2", NULL, NULL, MXML_DESCEND); + memset(tempCoord, 0, 256); + get_value(valnode, tempCoord, 256); + chunkTexCoords.x2 = float_swap_bytes(atof(tempCoord)); + valnode=mxmlFindElement(setnode, setnode, "y2", NULL, NULL, MXML_DESCEND); + memset(tempCoord, 0, 256); + get_value(valnode, tempCoord, 256); + chunkTexCoords.y2 = float_swap_bytes(atof(tempCoord)); + fwrite(&chunkTexCoords, sizeof(chunkTexCoords), 1, fp); + *fileOffset = *fileOffset + sizeof(chunkTexCoords); + matSize += sizeof(chunkTexCoords); } brlyt_4b_chunk chunkUa3; for(setnode = mxmlFindElement(subnode, subnode, "ua3", NULL, NULL, MXML_DESCEND); setnode != NULL; setnode = mxmlFindElement(setnode, subnode, "ua3", NULL, NULL, MXML_DESCEND)) @@ -160,8 +160,8 @@ typedef struct typedef struct { char name[20]; - s16 black_color[4]; - s16 white_color[4]; + s16 forecolor[4]; + s16 backcolor[4]; s16 unk_color_2[4]; u32 tev_kcolor[4]; u32 flags; @@ -180,10 +180,14 @@ typedef struct u8 wrap_t; } brlyt_texref_chunk; -typedef struct // useful for texture offset and wrapping -{ // 1st number is x offset; 2nd number is y offset - float unk[5]; // 3rd number is currently unknown -} brlyt_ua2_chunk; // 4th number is number of horiz. spans; 5th is number of vert. span +typedef struct +{ + float x1; + float y1; + float angle; + float x2; + float y2; +} brlyt_tex_coords; typedef struct { @@ -9,7 +9,7 @@ #define BENZIN_VERSION_MAJOR 1 #define BENZIN_VERSION_MINOR 1 -#define BENZIN_VERSION_BUILD 0 +#define BENZIN_VERSION_BUILD 317 #define BENZIN_VERSION_OTHER "BETA" #define INFORMATION_TEXT \ @@ -17,58 +17,5 @@ "Written by SquidMan (Alex Marshall), comex, and megazig.\n" \ "(c) 2009 HACKERCHANNEL\n", BENZIN_VERSION_MAJOR, BENZIN_VERSION_MINOR, BENZIN_VERSION_BUILD, BENZIN_VERSION_OTHER -//#define USE_BRLAN -//#define USE_BRLYT - -//#define OLD_BRLAN_OUTSTYLE -//#define OLD_BRLYT_OUTSTYLE - -//#define DEBUGBRLAN 1 -//#define DEBUGMAIN 1 -//#define DEBUGBRLYT 1 - #define fatal(x) printf(x); exit(1) -// WTF is this doing here? -/*void LZ77Decompress(void *indata, size_t dlen, u8* ret) -{ - int inp = 0; - u8* data = (u8*)calloc(dlen + 16, 1); - memcpy(data, indata, dlen); - int i; - u8 bitmask; - ret = (u8*)calloc(dlen, 256); // HORRIBLY INEFFICIENT. - // FIGURE SOMETHING ELSE OUT - int retoff = 0; - - while(inp < dlen) { - bitmask = data[inp]; - inp++; - - for(i = 0; i < 8; i++) { - if(bitmask & 0x80) { - u8 rep = data[inp]; - u8 repLength = (rep >> 4) + 3; - inp++; - u16 repOff = data[inp] | ((rep & 0x0F) << 8); - inp++; - - if(repOff <= retoff) { - fatal("Offset too high!\nQuitting\n"); - } - - while(repLength > 0) { - ret[retoff] = ret[(retoff - repOff) - 1]; - repLength--; - retoff++; - } - }else{ - ret[retoff] = data[inp]; - retoff++; - inp++; - } - bitmask = bitmask << 1; - } - } -} -*/ |
