diff options
| -rw-r--r-- | animtypes.txt | 131 | ||||
| -rw-r--r-- | brlan.c | 428 | ||||
| -rw-r--r-- | brlyt.c | 2443 | ||||
| -rw-r--r-- | general.h | 2 | ||||
| -rw-r--r-- | xml.c | 2 | ||||
| -rw-r--r-- | xmlantut.txt | 77 |
6 files changed, 1283 insertions, 1800 deletions
diff --git a/animtypes.txt b/animtypes.txt index b77cfdc..687fdf3 100644 --- a/animtypes.txt +++ b/animtypes.txt @@ -1,23 +1,120 @@ RLPA -0 translateX -1 translateY -2 translateZ -3 pane_unk1 -4 pane_unk2 -5 angle -6 xmag -7 ymag -8 width -9 height -a ?? -b ?? -c ?? -d ?? -e ?? -f ?? +type1 = 0; +type2 = + 0 X Translate + 1 Y Translate + 2 Z Translate + 3 X Rotate + 4 Y Rotate + 5 Z Rotate + 6 X Scale + 7 Y Scale + 8 Width + 9 Heightt + a ?? + b ?? + c ?? + d ?? + e ?? + f ?? RLVC --> vertex colors, arg can be 0 - f +type1 = 0; +type2 = + 0 Top Left Red + 1 Top Left Green + 2 Top Left Blue + 3 Top Left Alpha + 4 Top Right Red + 5 Top Right Green + 6 Top Right Blue + 7 Top Right Alpha + 8 Bottom Left Red + 9 Bottom Left Green + a Bottom Left Blue + b Bottom Left Alpha + c Bottom Right Red + d Bottom Right Green + e Bottom Right Blue + f Bottom Right Alpha this calls SetColorElement... except for Pictures (from disassembly) it seems ONLY to have an effect for arg = 0x10! For this it's alpha -RLMC --> material colors? +RLMC --> material colors -> valid type1s 0 - 1f +type1 = 0; +type2 = + 0 MatColor Red + 1 MatColor Green + 2 MatColor Blue + 3 MatColor Alpha + 4 Forecolor Red + 5 Forecolor Green + 6 Forecolor Blue + 7 Forecolor Alpha + 8 Backcolor Red + 9 Backcolor Green + a Backcolor Blue + b Backcolor Alpha + c TevReg3 Red + d TevReg3 Green + e TevReg3 Blue + f TevReg3 Alpha + 10 TevKColor1 Red + 11 TevKColor1 Green + 12 TevKColor1 Blue + 13 TevKColor1 Alpha + 14 TevKColor2 Red + 15 TevKColor2 Green + 16 TevKColor2 Blue + 17 TevKColor2 Alpha + 18 TevKColor3 Red + 19 TevKColor3 Green + 1a TevKColor3 Blue + 1b TevKColor3 Alpha + 1c TevKColor4 Red + 1d TevKColor4 Green + 1e TevKColor4 Blue + 1f TevKColor4 Alpha + +RLTP --> TPL Pallete -> valid type1s 0 - 1f +type2 = 0; TYPE2 MUST BE 0 +type1 = + 0 PaletteZero + 1 PaletteOne + 2 PaletteTwo + 3 PaletteThree + 4 PaletteFour + 5 PaletteFive + 6 PaletteSix + 7 PaletteSeven + 8 PaletteEight + 9 PaletteNine + a PaletteTen + b PaletteEleven + c PaletteTwelve + d PaletteThirteen + e PaletteFourteen + f PaletteFifteen + +RLTS -> Texture SRT Array +type1 = number of the array to manipulate +type2 = + 0 XTrans + 1 YTrans + 2 Rotate + 3 XScale + 4 YScale + +RLIM -> Independent Texture SRT Array +type1 = number of the array to manipulate +type2 = + 0 XTrans + 1 YTrans + 2 Rotate + 3 XScale + 4 YScale + +RLVI -> Visibility +type1 = 0 +type2 = 0 + set value to 1 to make visible and 0 to make invisible @@ -29,18 +29,137 @@ fourcc tag_FourCCs[] = { "RLPA", "RLTS", "RLVI", "RLVC", "RLMC", "RLTP" , "RLIM" }; -char tag_types_list[15][24]; -char tag_types_rlpa_list[15][24]; -char tag_types_rlts_list[15][24]; -char tag_types_rlvi_list[15][24]; -char tag_types_rlvc_list[15][24]; -char tag_types_rlmc_list[15][24]; -char tag_types_rltp_list[15][24]; -char tag_types_rlim_list[15][24]; +char tag_types_list[16][24]; +char tag_types_rlpa_list[16][24]; +char tag_types_rlts_list[16][24]; +char tag_types_rlvi_list[16][24]; +char tag_types_rlvc_list[16][24]; +char tag_types_rlmc_list[16][24]; +char tag_types_rltp_list[16][24]; +char tag_types_rlim_list[16][24]; static size_t BRLAN_fileoffset = 0; FILE* xmlanout; +void CreateTagTypesLists( ) +{ + int i; + for(i = 0; i < 16; i++) + { + memset(tag_types_list[i], 0, 24); + memset(tag_types_rlpa_list[i], 0, 24); + memset(tag_types_rlvc_list[i], 0, 24); + memset(tag_types_rltp_list[i], 0, 24); + } + for(i = 0; i < 5; i++) + { + memset(tag_types_rlts_list[i], 0, 24); + memset(tag_types_rlim_list[i], 0, 24); + } + for(i = 0; i < 32; i++) + memset(tag_types_rlmc_list[i], 0, 24); + memset(tag_types_rlvi_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], "X Rotate"); + strcpy(tag_types_list[4], "Y Rotate"); + strcpy(tag_types_list[5], "Z Rotate"); + strcpy(tag_types_list[6], "X Scale"); + strcpy(tag_types_list[7], "Y Scale"); + strcpy(tag_types_list[8], "Width"); + strcpy(tag_types_list[9], "Height"); + strcpy(tag_types_list[10], "0x0A"); // modified x + strcpy(tag_types_list[11], "0x0B"); // modified y + strcpy(tag_types_list[12], "0x0C"); // modified z + strcpy(tag_types_list[13], "0x0D"); + strcpy(tag_types_list[14], "0x0E"); + strcpy(tag_types_list[15], "0x0F"); + + strcpy(tag_types_rlpa_list[0], "X Translation"); + strcpy(tag_types_rlpa_list[1], "Y Translation"); + strcpy(tag_types_rlpa_list[2], "Z Translation"); + strcpy(tag_types_rlpa_list[3], "X Rotate"); + strcpy(tag_types_rlpa_list[4], "Y Rotate"); + strcpy(tag_types_rlpa_list[5], "Z Rotate"); + strcpy(tag_types_rlpa_list[6], "X Scale"); + strcpy(tag_types_rlpa_list[7], "Y Scale"); + strcpy(tag_types_rlpa_list[8], "Width"); + strcpy(tag_types_rlpa_list[9], "Height"); + strcpy(tag_types_rlpa_list[10], "0x0A"); // modified x + strcpy(tag_types_rlpa_list[11], "0x0B"); // modified y + strcpy(tag_types_rlpa_list[12], "0x0C"); // modified z + strcpy(tag_types_rlpa_list[13], "0x0D"); + strcpy(tag_types_rlpa_list[14], "0x0E"); + strcpy(tag_types_rlpa_list[15], "0x0F"); + + strcpy(tag_types_rlts_list[0], "XTrans"); + strcpy(tag_types_rlts_list[1], "YTrans"); + strcpy(tag_types_rlts_list[2], "Rotate"); + strcpy(tag_types_rlts_list[3], "XScale"); + strcpy(tag_types_rlts_list[4], "YScale"); + + strcpy(tag_types_rlvi_list[0], "Visibility"); + + 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"); + + strcpy(tag_types_rlmc_list[0], "MatColor Red"); + strcpy(tag_types_rlmc_list[1], "MatColor Green"); + strcpy(tag_types_rlmc_list[2], "MatColor Blue"); + strcpy(tag_types_rlmc_list[3], "MatColor Alpha"); + strcpy(tag_types_rlmc_list[4], "Forecolor Red"); + strcpy(tag_types_rlmc_list[5], "Forecolor Green"); + strcpy(tag_types_rlmc_list[6], "Forecolor Blue"); + strcpy(tag_types_rlmc_list[7], "Forecolor Alpha"); + strcpy(tag_types_rlmc_list[8], "Backcolor Red"); + strcpy(tag_types_rlmc_list[9], "Backcolor Green"); + strcpy(tag_types_rlmc_list[10], "Backcolor Blue"); + strcpy(tag_types_rlmc_list[11], "Backcolor Alpha"); + strcpy(tag_types_rlmc_list[12], "TevReg3 Red"); + strcpy(tag_types_rlmc_list[13], "TevReg3 Green"); + strcpy(tag_types_rlmc_list[14], "TevReg3 Blue"); + strcpy(tag_types_rlmc_list[15], "TevReg3 Alpha"); + + strcpy(tag_types_rltp_list[0], "PaletteZero"); + strcpy(tag_types_rltp_list[1], "PaletteOne"); + strcpy(tag_types_rltp_list[2], "PaletteTwo"); + strcpy(tag_types_rltp_list[3], "PaletteThree"); + strcpy(tag_types_rltp_list[4], "PaletteFour"); + strcpy(tag_types_rltp_list[5], "PaletteFive"); + strcpy(tag_types_rltp_list[6], "PaletteSix"); + strcpy(tag_types_rltp_list[7], "PaletteSeven"); + strcpy(tag_types_rltp_list[8], "PaletteEight"); + strcpy(tag_types_rltp_list[9], "PaletteNine"); + strcpy(tag_types_rltp_list[10], "PaletteTen"); + strcpy(tag_types_rltp_list[11], "PaletteEleven"); + strcpy(tag_types_rltp_list[12], "PaletteTwelve"); + strcpy(tag_types_rltp_list[13], "PaletteThirteen"); + strcpy(tag_types_rltp_list[14], "PaletteFourteen"); + strcpy(tag_types_rltp_list[15], "PaletteFifteen"); + + strcpy(tag_types_rlim_list[0], "XTrans"); + strcpy(tag_types_rlim_list[1], "YTrans"); + strcpy(tag_types_rlim_list[2], "Rotate"); + strcpy(tag_types_rlim_list[3], "XScale"); + strcpy(tag_types_rlim_list[4], "YScale"); +} + static void BRLAN_ReadDataFromMemoryX(void* destination, void* input, size_t size) { u8* out = (u8*)destination; @@ -108,37 +227,74 @@ void BRLAN_CreateXMLTag(tag_header tagHeader, void* data, u32 offset, mxml_node_ BRLAN_ReadDataFromMemory(&tagEntryInfo, data, sizeof(tag_entryinfo)); entry = mxmlNewElement(tag, "entry"); mxmlElementSetAttrf(entry, "type1", "%u", tagEntryInfo.type1); - if(tagEntryInfo.type2 < 16) + char type_rlpa[4] = {'R', 'L', 'P', 'A'}; + char type_rlts[4] = {'R', 'L', 'T', 'S'}; + char type_rlvi[4] = {'R', 'L', 'V', 'I'}; + char type_rlvc[4] = {'R', 'L', 'V', 'C'}; + char type_rlmc[4] = {'R', 'L', 'M', 'C'}; + char type_rltp[4] = {'R', 'L', 'T', 'P'}; + char type_rlim[4] = {'R', 'L', 'I', 'M'}; + + if(memcmp(tagHeader.magic, type_rlpa, 4) == 0) { - char type_rlpa[4] = {'R', 'L', 'P', 'A'}; - char type_rlts[4] = {'R', 'L', 'T', 'S'}; - char type_rlvi[4] = {'R', 'L', 'V', 'I'}; - char type_rlvc[4] = {'R', 'L', 'V', 'C'}; - char type_rlmc[4] = {'R', 'L', 'M', 'C'}; - char type_rltp[4] = {'R', 'L', 'T', 'P'}; - char type_rlim[4] = {'R', 'L', 'I', 'M'}; - if(memcmp(tagHeader.magic, type_rlpa, 4) == 0) + if(tagEntryInfo.type2 < 16) { mxmlElementSetAttrf(entry, "type2", "%s",tag_types_rlpa_list[tagEntryInfo.type2]); - } else if (memcmp(tagHeader.magic, type_rlts, 4) == 0) { + } else { + mxmlElementSetAttrf(entry, "type2", "%u", tagEntryInfo.type2); + } + } else if (memcmp(tagHeader.magic, type_rlts, 4) == 0) { + if(tagEntryInfo.type2 < 5) + { mxmlElementSetAttrf(entry, "type2", "%s",tag_types_rlts_list[tagEntryInfo.type2]); - } else if (memcmp(tagHeader.magic, type_rlvi, 4) == 0) { + } else { + mxmlElementSetAttrf(entry, "type2", "%u", tagEntryInfo.type2); + } + } else if (memcmp(tagHeader.magic, type_rlvi, 4) == 0) { + if(tagEntryInfo.type2 < 1) + { mxmlElementSetAttrf(entry, "type2", "%s",tag_types_rlvi_list[tagEntryInfo.type2]); - } else if (memcmp(tagHeader.magic, type_rlvc, 4) == 0) { + } else { + mxmlElementSetAttrf(entry, "type2", "%u", tagEntryInfo.type2); + } + } else if (memcmp(tagHeader.magic, type_rlvc, 4) == 0) { + if(tagEntryInfo.type2 < 16) + { mxmlElementSetAttrf(entry, "type2", "%s",tag_types_rlvc_list[tagEntryInfo.type2]); - } else if (memcmp(tagHeader.magic, type_rlmc, 4) == 0) { + } else { + mxmlElementSetAttrf(entry, "type2", "%u", tagEntryInfo.type2); + } + } else if (memcmp(tagHeader.magic, type_rlmc, 4) == 0) { + if(tagEntryInfo.type2 < 32) + { mxmlElementSetAttrf(entry, "type2", "%s",tag_types_rlmc_list[tagEntryInfo.type2]); - } else if (memcmp(tagHeader.magic, type_rltp, 4) == 0) { + } else { + mxmlElementSetAttrf(entry, "type2", "%u", tagEntryInfo.type2); + } + } else if (memcmp(tagHeader.magic, type_rltp, 4) == 0) { + if(tagEntryInfo.type2 < 16) + { mxmlElementSetAttrf(entry, "type2", "%s",tag_types_rltp_list[tagEntryInfo.type2]); - } else if (memcmp(tagHeader.magic, type_rlim, 4) == 0) { + } else { + mxmlElementSetAttrf(entry, "type2", "%u", tagEntryInfo.type2); + } + } else if (memcmp(tagHeader.magic, type_rlim, 4) == 0) { + if(tagEntryInfo.type2 < 5) + { mxmlElementSetAttrf(entry, "type2", "%s",tag_types_rlim_list[tagEntryInfo.type2]); } else { - mxmlElementSetAttrf(entry, "type2", "%s",tag_types_list[tagEntryInfo.type2]); + mxmlElementSetAttrf(entry, "type2", "%u", tagEntryInfo.type2); } } else { - mxmlElementSetAttrf(entry, "type2", "%u", tagEntryInfo.type2); + if(tagEntryInfo.type2 < 16) + { + mxmlElementSetAttrf(entry, "type2", "%s",tag_types_list[tagEntryInfo.type2]); + } else { + mxmlElementSetAttrf(entry, "type2", "%u", tagEntryInfo.type2); + } } + for( j = 0; j < short_swap_bytes(tagEntryInfo.coord_count); j++) { if ( tagEntryInfo.data_type == 0x2 ) @@ -185,6 +341,8 @@ void BRLAN_CreateXMLTag(tag_header tagHeader, void* data, u32 offset, mxml_node_ void parse_brlan(char* filename, char *filenameout) { + int i, j; + FILE* fp = fopen(filename, "rb"); if(fp == NULL) { printf("Error! Couldn't open %s!\n", filename); @@ -196,116 +354,7 @@ void parse_brlan(char* filename, char *filenameout) u8 data[lengthOfFile]; fread(data, lengthOfFile, 1, fp); - int i, j; - for(i = 0; i < 16; i++) - { - memset(tag_types_list[i], 0, 24); - memset(tag_types_rlpa_list[i], 0, 24); - memset(tag_types_rlts_list[i], 0, 24); - memset(tag_types_rlvi_list[i], 0, 24); - memset(tag_types_rlvc_list[i], 0, 24); - memset(tag_types_rlmc_list[i], 0, 24); - memset(tag_types_rltp_list[i], 0, 24); - memset(tag_types_rlim_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], "X Rotate"); - strcpy(tag_types_list[4], "Y Rotate"); - strcpy(tag_types_list[5], "Z Rotate"); - strcpy(tag_types_list[6], "X Scale"); - strcpy(tag_types_list[7], "Y Scale"); - strcpy(tag_types_list[8], "Width"); - strcpy(tag_types_list[9], "Height"); - strcpy(tag_types_list[10], "0x0A"); // modified x - strcpy(tag_types_list[11], "0x0B"); // modified y - strcpy(tag_types_list[12], "0x0C"); // modified z - strcpy(tag_types_list[13], "0x0D"); - strcpy(tag_types_list[14], "0x0E"); - strcpy(tag_types_list[15], "0x0F"); - - strcpy(tag_types_rlpa_list[0], "X Translation"); - strcpy(tag_types_rlpa_list[1], "Y Translation"); - strcpy(tag_types_rlpa_list[2], "Z Translation"); - strcpy(tag_types_rlpa_list[3], "X Rotate"); - strcpy(tag_types_rlpa_list[4], "Y Rotate"); - strcpy(tag_types_rlpa_list[5], "Z Rotate"); - strcpy(tag_types_rlpa_list[6], "X Scale"); - strcpy(tag_types_rlpa_list[7], "Y Scale"); - strcpy(tag_types_rlpa_list[8], "Width"); - strcpy(tag_types_rlpa_list[9], "Height"); - strcpy(tag_types_rlpa_list[10], "0x0A"); // modified x - strcpy(tag_types_rlpa_list[11], "0x0B"); // modified y - strcpy(tag_types_rlpa_list[12], "0x0C"); // modified z - strcpy(tag_types_rlpa_list[13], "0x0D"); - strcpy(tag_types_rlpa_list[14], "0x0E"); - strcpy(tag_types_rlpa_list[15], "0x0F"); - - strcpy(tag_types_rlts_list[0], "XTrans"); - strcpy(tag_types_rlts_list[1], "YTrans"); - strcpy(tag_types_rlts_list[2], "Rotate"); - strcpy(tag_types_rlts_list[3], "XScale"); - strcpy(tag_types_rlts_list[4], "YScale"); - - strcpy(tag_types_rlvi_list[0], "Visibility"); - - 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"); - - strcpy(tag_types_rlmc_list[0], "0x00"); - strcpy(tag_types_rlmc_list[1], "0x01"); - strcpy(tag_types_rlmc_list[2], "0x02"); - strcpy(tag_types_rlmc_list[3], "0x03"); - strcpy(tag_types_rlmc_list[4], "Blackcolor R"); - strcpy(tag_types_rlmc_list[5], "Blackcolor G"); - strcpy(tag_types_rlmc_list[6], "Blackcolor B"); - strcpy(tag_types_rlmc_list[7], "Blackcolor A"); - strcpy(tag_types_rlmc_list[8], "Whitecolor R"); - strcpy(tag_types_rlmc_list[9], "Whitecolor G"); - strcpy(tag_types_rlmc_list[10], "Whitecolor B"); - strcpy(tag_types_rlmc_list[11], "Whitecolor A"); - strcpy(tag_types_rlmc_list[12], "0x0C"); - strcpy(tag_types_rlmc_list[13], "0x0D"); - strcpy(tag_types_rlmc_list[14], "0x0E"); - strcpy(tag_types_rlmc_list[15], "0x0F"); - - strcpy(tag_types_rltp_list[0], "PaletteZero"); - strcpy(tag_types_rltp_list[1], "PaletteOne"); - strcpy(tag_types_rltp_list[2], "PaletteTwo"); - strcpy(tag_types_rltp_list[3], "PaletteThree"); - strcpy(tag_types_rltp_list[4], "PaletteFour"); - strcpy(tag_types_rltp_list[5], "PaletteFive"); - strcpy(tag_types_rltp_list[6], "PaletteSix"); - strcpy(tag_types_rltp_list[7], "PaletteSeven"); - strcpy(tag_types_rltp_list[8], "PaletteEight"); - strcpy(tag_types_rltp_list[9], "PaletteNine"); - strcpy(tag_types_rltp_list[10], "PaletteTen"); - strcpy(tag_types_rltp_list[11], "PaletteEleven"); - strcpy(tag_types_rltp_list[12], "PaletteTwelve"); - strcpy(tag_types_rltp_list[13], "PaletteThirteen"); - strcpy(tag_types_rltp_list[14], "PaletteFourteen"); - strcpy(tag_types_rltp_list[15], "PaletteFifteen"); - - strcpy(tag_types_rlim_list[0], "XTrans"); - strcpy(tag_types_rlim_list[1], "YTrans"); - strcpy(tag_types_rlim_list[2], "Rotate"); - strcpy(tag_types_rlim_list[3], "XScale"); - strcpy(tag_types_rlim_list[4], "YScale"); + CreateTagTypesLists(); BRLAN_fileoffset = 0; brlan_header header; @@ -329,7 +378,6 @@ void parse_brlan(char* filename, char *filenameout) CreateGlobal_pai1(&pai1_header, pai1_header1, pai1_header2, pai1_header_type); - FILE *xmlFile; xmlFile = fopen(filenameout, "w"); mxml_node_t *xml; @@ -462,7 +510,7 @@ void create_entries_from_xml(mxml_node_t *tree, mxml_node_t *node, brlan_entry * mxml_node_t *subsubnode = NULL; char temp[256]; char temp2[256]; - char temp3[16][24]; + char temp3[32][24]; int i, x; char tag_type[256]; @@ -477,51 +525,61 @@ void create_entries_from_xml(mxml_node_t *tree, mxml_node_t *node, brlan_entry * char rltp_type[5] = {'R', 'L', 'T', 'P'}; char rlim_type[5] = {'R', 'L', 'I', 'M'}; - for(i = 0; i < 16; i++) + for(i = 0; i < 32; i++) memset(temp3[i], 0, 24); for(x = 0; x < 16; x++) + { if(memcmp(tag_type, rlpa_type, 4) == 0) { + if ( x == 16 ) break; for(i = 0; i < strlen(tag_types_rlpa_list[x]); i++) { temp3[x][i] = toupper(tag_types_rlpa_list[x][i]); } } else if(memcmp(tag_type, rlts_type, 4) == 0) { + if ( x == 5 ) break; for(i = 0; i < strlen(tag_types_rlts_list[x]); i++) { temp3[x][i] = toupper(tag_types_rlts_list[x][i]); } } else if(memcmp(tag_type, rlvi_type, 4) == 0) { + if ( x == 1 ) break; for(i = 0; i < strlen(tag_types_rlvi_list[x]); i++) { temp3[x][i] = toupper(tag_types_rlvi_list[x][i]); } } else if(memcmp(tag_type, rlvc_type, 4) == 0) { + if ( x == 16 ) break; for(i = 0; i < strlen(tag_types_rlvc_list[x]); i++) { temp3[x][i] = toupper(tag_types_rlvc_list[x][i]); } } else if(memcmp(tag_type, rlmc_type, 4) == 0) { + if ( x == 32 ) break; for(i = 0; i < strlen(tag_types_rlmc_list[x]); i++) { temp3[x][i] = toupper(tag_types_rlmc_list[x][i]); } } else if(memcmp(tag_type, rltp_type, 4) == 0) { + if ( x == 16 ) break; for(i = 0; i < strlen(tag_types_rltp_list[x]); i++) { temp3[x][i] = toupper(tag_types_rltp_list[x][i]); } } else if(memcmp(tag_type, rlim_type, 4) == 0) { + if ( x == 5 ) break; for(i = 0; i < strlen(tag_types_rlim_list[x]); i++) { temp3[x][i] = toupper(tag_types_rlim_list[x][i]); } } else { + if ( x == 16 ) break; for(i = 0; i < strlen(tag_types_list[x]); i++) { temp3[x][i] = toupper(tag_types_list[x][i]); } } + } head->entry_count = 0; subnode = node; for (x = 0, subnode = mxmlFindElement(subnode, node, "entry", NULL, NULL, MXML_DESCEND); subnode != NULL; subnode = mxmlFindElement(subnode, node, "entry", NULL, NULL, MXML_DESCEND), x++) { @@ -767,100 +825,8 @@ void WriteBRLANPaiHeader(brlan_pai1_header_type1 paihead, FILE* fp) void write_brlan(char *infile, char* outfile) { + CreateTagTypesLists(); int i; - for(i = 0; i < 16; i++) - { - memset(tag_types_list[i], 0, 24); - memset(tag_types_rlpa_list[i], 0, 24); - memset(tag_types_rlts_list[i], 0, 24); - memset(tag_types_rlvi_list[i], 0, 24); - memset(tag_types_rlvc_list[i], 0, 24); - memset(tag_types_rlmc_list[i], 0, 24); - memset(tag_types_rltp_list[i], 0, 24); - memset(tag_types_rlim_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], "X Rotate"); - strcpy(tag_types_list[4], "Y Rotate"); - strcpy(tag_types_list[5], "Z Rotate"); - strcpy(tag_types_list[6], "X Scale"); - strcpy(tag_types_list[7], "Y Scale"); - strcpy(tag_types_list[8], "Width"); - strcpy(tag_types_list[9], "Height"); - strcpy(tag_types_list[10], "0x0A"); - strcpy(tag_types_list[11], "0x0B"); - strcpy(tag_types_list[12], "0x0C"); - strcpy(tag_types_list[13], "0x0D"); - strcpy(tag_types_list[14], "0x0E"); - strcpy(tag_types_list[15], "0x0F"); - - strcpy(tag_types_rlts_list[0], "XTrans"); - strcpy(tag_types_rlts_list[1], "YTrans"); - strcpy(tag_types_rlts_list[2], "Rotate"); - strcpy(tag_types_rlts_list[3], "XScale"); - strcpy(tag_types_rlts_list[4], "YScale"); - - strcpy(tag_types_rlvi_list[0], "Visibility"); - - 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"); - - strcpy(tag_types_rlmc_list[0], "0x00"); - strcpy(tag_types_rlmc_list[1], "0x01"); - strcpy(tag_types_rlmc_list[2], "0x02"); - strcpy(tag_types_rlmc_list[3], "0x03"); - strcpy(tag_types_rlmc_list[4], "Blackcolor R"); - strcpy(tag_types_rlmc_list[5], "Blackcolor G"); - strcpy(tag_types_rlmc_list[6], "Blackcolor B"); - strcpy(tag_types_rlmc_list[7], "Blackcolor A"); - strcpy(tag_types_rlmc_list[8], "Whitecolor R"); - strcpy(tag_types_rlmc_list[9], "Whitecolor G"); - strcpy(tag_types_rlmc_list[10], "Whitecolor B"); - strcpy(tag_types_rlmc_list[11], "Whitecolor A"); - strcpy(tag_types_rlmc_list[12], "0x0C"); - strcpy(tag_types_rlmc_list[13], "0x0D"); - strcpy(tag_types_rlmc_list[14], "0x0E"); - strcpy(tag_types_rlmc_list[15], "0x0F"); - - strcpy(tag_types_rltp_list[0], "PaletteZero"); - strcpy(tag_types_rltp_list[1], "PaletteOne"); - strcpy(tag_types_rltp_list[2], "PaletteTwo"); - strcpy(tag_types_rltp_list[3], "PaletteThree"); - strcpy(tag_types_rltp_list[4], "PaletteFour"); - strcpy(tag_types_rltp_list[5], "PaletteFive"); - strcpy(tag_types_rltp_list[6], "PaletteSix"); - strcpy(tag_types_rltp_list[7], "PaletteSeven"); - strcpy(tag_types_rltp_list[8], "PaletteEight"); - strcpy(tag_types_rltp_list[9], "PaletteNine"); - strcpy(tag_types_rltp_list[10], "PaletteTen"); - strcpy(tag_types_rltp_list[11], "PaletteEleven"); - strcpy(tag_types_rltp_list[12], "PaletteTwelve"); - strcpy(tag_types_rltp_list[13], "PaletteThirteen"); - strcpy(tag_types_rltp_list[14], "PaletteFourteen"); - strcpy(tag_types_rltp_list[15], "PaletteFifteen"); - - strcpy(tag_types_rlim_list[0], "XTrans"); - strcpy(tag_types_rlim_list[1], "YTrans"); - strcpy(tag_types_rlim_list[2], "Rotate"); - strcpy(tag_types_rlim_list[3], "XScale"); - strcpy(tag_types_rlim_list[4], "YScale"); FILE* fpx = fopen(infile, "r"); if(fpx == NULL) { @@ -25,6 +25,7 @@ #define MAXIMUM_TAGS_SIZE (0x1000) +// MAGIC char pic1_magic[] = "pic1"; char pan1_magic[] = "pan1"; char bnd1_magic[] = "bnd1"; @@ -40,6 +41,22 @@ char grs1_magic[] = "grs1"; char pae1_magic[] = "pae1"; char pas1_magic[] = "pas1"; +// CONSTANTS +char originX[3][15]; +char originY[3][15]; +char wraps[4][20]; +char tgen_types[11][20]; +char tgen_src[21][20]; +char mtxsrc[42][20]; +char tevcolor[4][20]; +char matsrc[2][20]; +char scale[10][20]; +char compare[8][20]; +char aop[5][20]; +char blendmode[5][20]; +char logicop[16][20]; +char blendfactor[8][20]; + static size_t BRLYT_fileoffset = 0; char *materials; @@ -49,6 +66,195 @@ char *textures; int numberOfTextures; int lengthOfTextures; +void SetupConstants( ) +{ + int o; + for ( o = 0 ; o < 3 ; o++ ) + memset( originX[o] , 0 , 15 ); + strcpy( originX[0] , "Left" ); + strcpy( originX[1] , "Center" ); + strcpy( originX[2] , "Right" ); + + for ( o = 0 ; o < 3 ; o++ ) + memset( originY[o] , 0 , 15 ); + strcpy( originY[0] , "Top" ); + strcpy( originY[1] , "Center" ); + strcpy( originY[2] , "Bottom" ); + + for ( o = 0 ; o < 4 ; o++ ) + memset( wraps[o] , 0 , 20 ); + strcpy( wraps[0] , "GX_CLAMP" ); + strcpy( wraps[1] , "GX_REPEAT" ); + strcpy( wraps[2] , "GX_MIRROR" ); + strcpy( wraps[3] , "GX_MAXTEXWRAPMODE" ); + + for ( o = 0 ; o < 11 ; o++ ) + memset( tgen_types[o] , 0 , 20 ); + strcpy( tgen_types[0] , "GX_TG_MTX3x4" ); + strcpy( tgen_types[1] , "GX_TG_MTX2x4" ); + strcpy( tgen_types[2] , "GX_TG_BUMP0" ); + strcpy( tgen_types[3] , "GX_TG_BUMP1" ); + strcpy( tgen_types[4] , "GX_TG_BUMP2" ); + strcpy( tgen_types[5] , "GX_TG_BUMP3" ); + strcpy( tgen_types[6] , "GX_TG_BUMP4" ); + strcpy( tgen_types[7] , "GX_TG_BUMP5" ); + strcpy( tgen_types[8] , "GX_TG_BUMP6" ); + strcpy( tgen_types[9] , "GX_TG_BUMP7" ); + strcpy( tgen_types[10] , "GX_TG_SRTG" ); + + for ( o = 0 ; o < 21 ; o++ ) + memset( tgen_src[o] , 0 , 20 ); + strcpy( tgen_src[0] , "GX_TG_POS" ); + strcpy( tgen_src[1] , "GX_TG_NRM" ); + strcpy( tgen_src[2] , "GX_TG_BINRM" ); + strcpy( tgen_src[3] , "GX_TG_TANGEN" ); + strcpy( tgen_src[4] , "GX_TG_TEX0" ); + strcpy( tgen_src[5] , "GX_TG_TEX1" ); + strcpy( tgen_src[6] , "GX_TG_TEX2" ); + strcpy( tgen_src[7] , "GX_TG_TEX3" ); + strcpy( tgen_src[8] , "GX_TG_TEX4" ); + strcpy( tgen_src[9] , "GX_TG_TEX5" ); + strcpy( tgen_src[10] , "GX_TG_TEX6" ); + strcpy( tgen_src[11] , "GX_TG_TEX7" ); + strcpy( tgen_src[12] , "GX_TG_TEXCOORD0" ); + strcpy( tgen_src[13] , "GX_TG_TEXCOORD1" ); + strcpy( tgen_src[14] , "GX_TG_TEXCOORD2" ); + strcpy( tgen_src[15] , "GX_TG_TEXCOORD3" ); + strcpy( tgen_src[16] , "GX_TG_TEXCOORD4" ); + strcpy( tgen_src[17] , "GX_TG_TEXCOORD5" ); + strcpy( tgen_src[18] , "GX_TG_TEXCOORD6" ); + strcpy( tgen_src[19] , "GX_TG_COLOR0" ); + strcpy( tgen_src[20] , "GX_TG_COLOR1" ); + + for ( o = 0 ; o < 42 ; o++ ) + memset( mtxsrc[o] , 0 , 20 ); + strcpy( mtxsrc[0] , "GX_PNMTX0" ); + strcpy( mtxsrc[1] , "GX_PNMTX1" ); + strcpy( mtxsrc[2] , "GX_PNMTX2" ); + strcpy( mtxsrc[3] , "GX_PNMTX3" ); + strcpy( mtxsrc[4] , "GX_PNMTX4" ); + strcpy( mtxsrc[5] , "GX_PNMTX5" ); + strcpy( mtxsrc[6] , "GX_PNMTX6" ); + strcpy( mtxsrc[7] , "GX_PNMTX7" ); + strcpy( mtxsrc[8] , "GX_PNMTX8" ); + strcpy( mtxsrc[9] , "GX_PNMTX9" ); + strcpy( mtxsrc[10] , "GX_TEXMTX0" ); + strcpy( mtxsrc[11] , "GX_TEXMTX1" ); + strcpy( mtxsrc[12] , "GX_TEXMTX2" ); + strcpy( mtxsrc[13] , "GX_TEXMTX3" ); + strcpy( mtxsrc[14] , "GX_TEXMTX4" ); + strcpy( mtxsrc[15] , "GX_TEXMTX5" ); + strcpy( mtxsrc[16] , "GX_TEXMTX6" ); + strcpy( mtxsrc[17] , "GX_TEXMTX7" ); + strcpy( mtxsrc[18] , "GX_TEXMTX8" ); + strcpy( mtxsrc[19] , "GX_TEXMTX9" ); + strcpy( mtxsrc[20] , "GX_IDENTITY" ); + strcpy( mtxsrc[21] , "GX_DTTMTX0" ); + strcpy( mtxsrc[22] , "GX_DTTMTX1" ); + strcpy( mtxsrc[23] , "GX_DTTMTX2" ); + strcpy( mtxsrc[24] , "GX_DTTMTX3" ); + strcpy( mtxsrc[25] , "GX_DTTMTX4" ); + strcpy( mtxsrc[26] , "GX_DTTMTX5" ); + strcpy( mtxsrc[27] , "GX_DTTMTX6" ); + strcpy( mtxsrc[28] , "GX_DTTMTX7" ); + strcpy( mtxsrc[29] , "GX_DTTMTX8" ); + strcpy( mtxsrc[30] , "GX_DTTMTX9" ); + strcpy( mtxsrc[31] , "GX_DTTMTX1" ); + strcpy( mtxsrc[32] , "GX_DTTMTX1" ); + strcpy( mtxsrc[33] , "GX_DTTMTX12" ); + strcpy( mtxsrc[34] , "GX_DTTMTX13" ); + strcpy( mtxsrc[35] , "GX_DTTMTX14" ); + strcpy( mtxsrc[36] , "GX_DTTMTX15" ); + strcpy( mtxsrc[37] , "GX_DTTMTX16" ); + strcpy( mtxsrc[38] , "GX_DTTMTX17" ); + strcpy( mtxsrc[39] , "GX_DTTMTX18" ); + strcpy( mtxsrc[40] , "GX_DTTMTX19" ); + strcpy( mtxsrc[41] , "GX_DTTIDENTITY" ); // actually 125 not 124 + + for ( o = 0 ; o < 4 ; o++ ) + memset( tevcolor[o] , 0 , 20 ); + strcpy( tevcolor[0] , "GX_CH_RED" ); + strcpy( tevcolor[1] , "GX_CH_GREEN" ); + strcpy( tevcolor[2] , "GX_CH_BLUE" ); + strcpy( tevcolor[3] , "GX_CH_ALPHA" ); + + for ( o = 0 ; o < 2 ; o++ ) + memset( matsrc[o] , 0 , 20 ); + strcpy( matsrc[0] , "GX_SRC_REG" ); + strcpy( matsrc[1] , "GX_SRC_VTX" ); + + for ( o = 0 ; o < 10 ; o++ ) + memset( scale[o] , 0 , 20 ); + strcpy( scale[0] , "GX_ITS_1" ); + strcpy( scale[1] , "GX_ITS_2" ); + strcpy( scale[2] , "GX_ITS_4" ); + strcpy( scale[3] , "GX_ITS_8" ); + strcpy( scale[4] , "GX_ITS_16" ); + strcpy( scale[5] , "GX_ITS_32" ); + strcpy( scale[6] , "GX_ITS_64" ); + strcpy( scale[7] , "GX_ITS_128" ); + strcpy( scale[8] , "GX_ITS_256" ); + strcpy( scale[9] , "GX_MAX_ITSCALE" ); + + for ( o = 0 ; o < 8 ; o++ ) + memset( compare[o] , 0 , 20 ); + strcpy( compare[0] , "GX_NEVER" ); + strcpy( compare[1] , "GX_LESS" ); + strcpy( compare[2] , "GX_EQUAL" ); + strcpy( compare[3] , "GX_LEQUAL" ); + strcpy( compare[4] , "GX_GREATER" ); + strcpy( compare[5] , "GX_NEQUAL" ); + strcpy( compare[6] , "GX_GEQUAL" ); + strcpy( compare[7] , "GX_ALWAYS" ); + + for ( o = 0 ; o < 5 ; o++ ) + memset( aop[o] , 0 , 20 ); + strcpy( aop[0] , "GX_AOP_AND" ); + strcpy( aop[1] , "GX_AOP_OR" ); + strcpy( aop[2] , "GX_AOP_XOR" ); + strcpy( aop[3] , "GX_AOP_XNOR" ); + strcpy( aop[4] , "GX_MAX_ALPHAOP" ); + + for ( o = 0 ; o < 5 ; o++ ) + memset( blendmode[o] , 0 , 20 ); + strcpy( blendmode[0] , "GX_BM_NONE" ); + strcpy( blendmode[1] , "GX_BM_BLEND" ); + strcpy( blendmode[2] , "GX_BM_LOGIC" ); + strcpy( blendmode[3] , "GX_BM_SUBTRACT" ); + strcpy( blendmode[4] , "GX_MAX_BLENDMODE" ); + + for ( o = 0 ; o < 8 ; o++ ) + memset( blendfactor[o] , 0 , 20 ); + strcpy( blendfactor[0] , "GX_BL_ZERO" ); + strcpy( blendfactor[1] , "GX_BL_ONE" ); + strcpy( blendfactor[2] , "GX_BL_SRCCLR" ); + strcpy( blendfactor[3] , "GX_BL_INVSRCCLR" ); + strcpy( blendfactor[4] , "GX_BL_SRCALPHA" ); + strcpy( blendfactor[5] , "GX_BL_INVSRCALPHA" ); + strcpy( blendfactor[6] , "GX_BL_DSTALPHA" ); + strcpy( blendfactor[7] , "GX_BL_INVDSTALPHA" ); + + for ( o = 0 ; o < 16 ; o++ ) + memset( logicop[o] , 0 , 20 ); + strcpy( logicop[0] , "GX_LO_CLEAR" ); + strcpy( logicop[1] , "GX_LO_AND" ); + strcpy( logicop[2] , "GX_LO_REVAND" ); + strcpy( logicop[3] , "GX_LO_COPY" ); + strcpy( logicop[4] , "GX_LO_INVAND" ); + strcpy( logicop[5] , "GX_LO_NOOP" ); + strcpy( logicop[6] , "GX_LO_XOR" ); + strcpy( logicop[7] , "GX_LO_OR" ); + strcpy( logicop[8] , "GX_LO_NOR" ); + strcpy( logicop[9] , "GX_LO_EQUIV" ); + strcpy( logicop[10] , "GX_LO_INV" ); + strcpy( logicop[11] , "GX_LO_REVOR" ); + strcpy( logicop[12] , "GX_LO_INVCOPY" ); + strcpy( logicop[13] , "GX_LO_INVOR" ); + strcpy( logicop[14] , "GX_LO_NAND" ); + strcpy( logicop[15] , "GX_LO_SET" ); + +} + static int FourCCsMatch(fourcc cc1, fourcc cc2) { int ret[4]; @@ -302,22 +508,8 @@ void PrintBRLYTEntry_fnl1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) } } -void PrintBRLYTEntry_pan1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) +void PrintPane( brlyt_entry entry , u8* brlyt_file , mxml_node_t * tag ) { - char origins[9][15]; - int o; - for ( o = 0 ; o < 8 ; o++ ) - memset( origins[o] , 0 , 20 ); - strcpy( origins[0] , "TOP LEFT" ); - strcpy( origins[1] , "TOP CENTER" ); - strcpy( origins[2] , "TOP RIGHT" ); - strcpy( origins[3] , "MIDDLE LEFT" ); - strcpy( origins[4] , "MIDDLE CENTER" ); - strcpy( origins[5] , "MIDDLE RIGHT" ); - strcpy( origins[6] , "BOTTOM LEFT" ); - strcpy( origins[7] , "BOTTOM CENTER" ); - strcpy( origins[8] , "BOTTOM RIGHT" ); - mxml_node_t *flags, *origin, *alpha, *padding; mxml_node_t *translate, *x, *y, *z; mxml_node_t *rotate, *scale; @@ -331,7 +523,9 @@ void PrintBRLYTEntry_pan1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) flags = mxmlNewElement(tag, "visible"); mxmlNewTextf(flags, 0, "%02x", data.flag1 & 0x1); flags = mxmlNewElement(tag, "WidescreenAffected"); mxmlNewTextf(flags, 0, "%02x", (data.flag1 & 0x2)>>1); flags = mxmlNewElement(tag, "flag"); mxmlNewTextf(flags, 0, "%02x", (data.flag1 & 0x4)>>2); - origin = mxmlNewElement(tag, "origin"); mxmlNewTextf(origin,0,"%s",origins[data.origin%9]); + origin = mxmlNewElement(tag, "origin"); + mxmlElementSetAttrf(origin, "x", "%s", originX[data.origin%3]); + mxmlElementSetAttrf(origin, "y", "%s", originY[data.origin/3]); alpha = mxmlNewElement(tag, "alpha"); mxmlNewTextf(alpha, 0, "%02x", data.alpha); padding = mxmlNewElement(tag, "padding"); mxmlNewTextf(padding, 0, "%02x", data.pad); translate = mxmlNewElement(tag, "translate"); @@ -350,54 +544,16 @@ void PrintBRLYTEntry_pan1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) height = mxmlNewElement(size, "height"); mxmlNewTextf(height, 0, "%f", float_swap_bytes(data.height)); } -void PrintBRLYTEntry_wnd1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) +void PrintBRLYTEntry_pan1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) { - char origins[9][15]; - int o; - for ( o = 0 ; o < 8 ; o++ ) - memset( origins[o] , 0 , 20 ); - strcpy( origins[0] , "TOP LEFT" ); - strcpy( origins[1] , "TOP CENTER" ); - strcpy( origins[2] , "TOP RIGHT" ); - strcpy( origins[3] , "MIDDLE LEFT" ); - strcpy( origins[4] , "MIDDLE CENTER" ); - strcpy( origins[5] , "MIDDLE RIGHT" ); - strcpy( origins[6] , "BOTTOM LEFT" ); - strcpy( origins[7] , "BOTTOM CENTER" ); - strcpy( origins[8] , "BOTTOM RIGHT" ); + PrintPane( entry , brlyt_file , tag ); +} - mxml_node_t *flags, *origin, *alpha, *padding; - mxml_node_t *translate, *x, *y, *z; - mxml_node_t *rotate, *scale; - mxml_node_t *size, *width, *height; - brlyt_pane_chunk data; - BRLYT_fileoffset = entry.data_location; - BRLYT_ReadDataFromMemory(&data, brlyt_file, sizeof(brlyt_pane_chunk)); - mxmlElementSetAttrf(tag, "type", "%.4s", entry.magic); - mxmlElementSetAttrf(tag, "name", "%s", data.name); - mxmlElementSetAttrf(tag, "userdata", "%s", data.userdata); - flags = mxmlNewElement(tag, "visible"); mxmlNewTextf(flags, 0, "%02x", data.flag1 & 0x1); - flags = mxmlNewElement(tag, "WidescreenAffected"); mxmlNewTextf(flags, 0, "%02x", (data.flag1 & 0x2)>>1); - flags = mxmlNewElement(tag, "flag"); mxmlNewTextf(flags, 0, "%02x", (data.flag1 & 0x4)>>2); - origin = mxmlNewElement(tag, "origin"); mxmlNewTextf(origin,0,"%s", origins[data.origin%9]); - alpha = mxmlNewElement(tag, "alpha"); mxmlNewTextf(alpha, 0, "%02x", data.alpha); - padding = mxmlNewElement(tag, "padding"); mxmlNewTextf(padding, 0, "%02x", data.pad); - translate = mxmlNewElement(tag, "translate"); - x = mxmlNewElement(translate, "x"); mxmlNewTextf(x, 0, "%.20f", float_swap_bytes(data.XTrans)); - y = mxmlNewElement(translate, "y"); mxmlNewTextf(y, 0, "%.20f", float_swap_bytes(data.YTrans)); - z = mxmlNewElement(translate, "z"); mxmlNewTextf(z, 0, "%.20f", float_swap_bytes(data.ZTrans)); - rotate = mxmlNewElement(tag, "rotate"); - x = mxmlNewElement(rotate, "x"); mxmlNewTextf(x, 0, "%.20f", float_swap_bytes(data.XRotate)); - y = mxmlNewElement(rotate, "y"); mxmlNewTextf(y, 0, "%.20f", float_swap_bytes(data.YRotate)); - z = mxmlNewElement(rotate, "z"); mxmlNewTextf(z, 0, "%.20f", float_swap_bytes(data.ZRotate)); - scale = mxmlNewElement(tag, "scale"); - x = mxmlNewElement(scale, "x"); mxmlNewTextf(x, 0, "%.10f", float_swap_bytes(data.XScale)); - y = mxmlNewElement(scale, "y"); mxmlNewTextf(y, 0, "%.10f", float_swap_bytes(data.YScale)); - 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)); +void PrintBRLYTEntry_wnd1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) +{ + PrintPane( entry , brlyt_file , tag ); - mxml_node_t *wndd, *unkk, *count, *offset1, *offset2; + mxml_node_t *wndd, *unkk, *count, *offset1, *offset2, *padding; int i, j; brlyt_wnd wndy; BRLYT_ReadDataFromMemory(&wndy, brlyt_file, sizeof(brlyt_wnd)); @@ -457,118 +613,45 @@ void PrintBRLYTEntry_wnd1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) void PrintBRLYTEntry_bnd1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) { - char origins[9][15]; - int o; - for ( o = 0 ; o < 8 ; o++ ) - memset( origins[o] , 0 , 20 ); - strcpy( origins[0] , "TOP LEFT" ); - strcpy( origins[1] , "TOP CENTER" ); - strcpy( origins[2] , "TOP RIGHT" ); - strcpy( origins[3] , "MIDDLE LEFT" ); - strcpy( origins[4] , "MIDDLE CENTER" ); - strcpy( origins[5] , "MIDDLE RIGHT" ); - strcpy( origins[6] , "BOTTOM LEFT" ); - strcpy( origins[7] , "BOTTOM CENTER" ); - strcpy( origins[8] , "BOTTOM RIGHT" ); - - mxml_node_t *flags, *origin, *alpha, *padding; - mxml_node_t *translate, *x, *y, *z; - mxml_node_t *rotate, *scale; - mxml_node_t *size, *width, *height; - brlyt_pane_chunk data; - BRLYT_fileoffset = entry.data_location; - BRLYT_ReadDataFromMemory(&data, brlyt_file, sizeof(brlyt_pane_chunk)); - mxmlElementSetAttrf(tag, "type", "%.4s", entry.magic); - mxmlElementSetAttrf(tag, "name", "%s", data.name); - mxmlElementSetAttrf(tag, "userdata", "%s", data.userdata); - flags = mxmlNewElement(tag, "visible"); mxmlNewTextf(flags, 0, "%02x", data.flag1 & 0x1); - flags = mxmlNewElement(tag, "WidescreenAffected"); mxmlNewTextf(flags, 0, "%02x", (data.flag1 & 0x2)>>1); - flags = mxmlNewElement(tag, "flag"); mxmlNewTextf(flags, 0, "%02x", (data.flag1 & 0x4)>>2); - origin = mxmlNewElement(tag, "origin"); mxmlNewTextf(origin,0,"%s", origins[data.origin%9]); - alpha = mxmlNewElement(tag, "alpha"); mxmlNewTextf(alpha, 0, "%02x", data.alpha); - padding = mxmlNewElement(tag, "padding"); mxmlNewTextf(padding, 0, "%02x", data.pad); - translate = mxmlNewElement(tag, "translate"); - x = mxmlNewElement(translate, "x"); mxmlNewTextf(x, 0, "%.25f", float_swap_bytes(data.XTrans)); - y = mxmlNewElement(translate, "y"); mxmlNewTextf(y, 0, "%.25f", float_swap_bytes(data.YTrans)); - z = mxmlNewElement(translate, "z"); mxmlNewTextf(z, 0, "%.25f", float_swap_bytes(data.ZTrans)); - rotate = mxmlNewElement(tag, "rotate"); - x = mxmlNewElement(rotate, "x"); mxmlNewTextf(x, 0, "%.20f", float_swap_bytes(data.XRotate)); - y = mxmlNewElement(rotate, "y"); mxmlNewTextf(y, 0, "%.20f", float_swap_bytes(data.YRotate)); - z = mxmlNewElement(rotate, "z"); mxmlNewTextf(z, 0, "%.20f", float_swap_bytes(data.ZRotate)); - scale = mxmlNewElement(tag, "scale"); - x = mxmlNewElement(scale, "x"); mxmlNewTextf(x, 0, "%.10f", float_swap_bytes(data.XScale)); - y = mxmlNewElement(scale, "y"); mxmlNewTextf(y, 0, "%.10f", float_swap_bytes(data.YScale)); - 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)); + PrintPane( entry , brlyt_file , tag ); } void PrintBRLYTEntry_pic1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) { - char origins[9][15]; - int o; - for ( o = 0 ; o < 8 ; o++ ) - memset( origins[o] , 0 , 20 ); - strcpy( origins[0] , "TOP LEFT" ); - strcpy( origins[1] , "TOP CENTER" ); - strcpy( origins[2] , "TOP RIGHT" ); - strcpy( origins[3] , "MIDDLE LEFT" ); - strcpy( origins[4] , "MIDDLE CENTER" ); - strcpy( origins[5] , "MIDDLE RIGHT" ); - strcpy( origins[6] , "BOTTOM LEFT" ); - strcpy( origins[7] , "BOTTOM CENTER" ); - strcpy( origins[8] , "BOTTOM RIGHT" ); + PrintPane( entry , brlyt_file , tag ); - mxml_node_t *flags, *origin, *alpha, *padding; - mxml_node_t *translate, *x, *y, *z; - mxml_node_t *rotate, *scale; - mxml_node_t *size, *width, *height; - 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)); - mxmlElementSetAttrf(tag, "type", "%.4s", entry.magic); - mxmlElementSetAttrf(tag, "name", "%s", data.name); - mxmlElementSetAttrf(tag, "userdata", "%s", data.userdata); - flags = mxmlNewElement(tag, "visible"); mxmlNewTextf(flags, 0, "%02x", data.flag1 & 0x1); - flags = mxmlNewElement(tag, "WidescreenAffected"); mxmlNewTextf(flags, 0, "%02x", (data.flag1 & 0x2)>>1); - flags = mxmlNewElement(tag, "flag"); mxmlNewTextf(flags, 0, "%02x", (data.flag1 & 0x4)>>2); - origin = mxmlNewElement(tag, "origin"); mxmlNewTextf(origin,0,"%s", origins[data.origin%9]); - alpha = mxmlNewElement(tag, "alpha"); mxmlNewTextf(alpha, 0, "%02x", data.alpha); - padding = mxmlNewElement(tag, "padding"); mxmlNewTextf(padding, 0, "%02x", data.pad); - translate = mxmlNewElement(tag, "translate"); - x = mxmlNewElement(translate, "x"); mxmlNewTextf(x, 0, "%.20f", float_swap_bytes(data.XTrans)); - y = mxmlNewElement(translate, "y"); mxmlNewTextf(y, 0, "%.20f", float_swap_bytes(data.YTrans)); - z = mxmlNewElement(translate, "z"); mxmlNewTextf(z, 0, "%.20f", float_swap_bytes(data.ZTrans - )); - rotate = mxmlNewElement(tag, "rotate"); - x = mxmlNewElement(rotate, "x"); mxmlNewTextf(x, 0, "%.20f", float_swap_bytes(data.XRotate)); - y = mxmlNewElement(rotate, "y"); mxmlNewTextf(y, 0, "%.20f", float_swap_bytes(data.YRotate)); - z = mxmlNewElement(rotate, "z"); mxmlNewTextf(z, 0, "%.20f", float_swap_bytes(data.ZRotate)); - scale = mxmlNewElement(tag, "scale"); - x = mxmlNewElement(scale, "x"); mxmlNewTextf(x, 0, "%.10f", float_swap_bytes(data.XScale)); - y = mxmlNewElement(scale, "y"); mxmlNewTextf(y, 0, "%.10f", float_swap_bytes(data.YScale)); - 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 *material, *color, *vtx, *attr, *coordinates, *set, *coord; + mxml_node_t *material, *color, *vtx, *coordinates, *set, *coord; material = mxmlNewElement(tag, "material"); mxmlElementSetAttrf(material, "name", "%s", getMaterial(short_swap_bytes(data2.mat_num))); color = mxmlNewElement(tag, "colors"); - int n; for (n=0;n<4;n++) - { - vtx = mxmlNewElement(color, "vtx"); - attr = mxmlNewElement(vtx, "red"); - mxmlNewTextf( attr , 0 , "%02x" , ( be32(data2.vtx_colors[n]) >> 24 ) & 0xff ); - attr = mxmlNewElement(vtx, "green"); - mxmlNewTextf( attr , 0 , "%02x" , ( be32(data2.vtx_colors[n]) >> 16 ) & 0xff ); - attr = mxmlNewElement(vtx, "blue"); - mxmlNewTextf( attr , 0 , "%02x" , ( be32(data2.vtx_colors[n]) >> 8 ) & 0xff ); - attr = mxmlNewElement(vtx, "alpha"); - mxmlNewTextf( attr , 0 , "%02x" , ( be32(data2.vtx_colors[n]) >> 0 ) & 0xff ); - } + vtx = mxmlNewElement(color, "vtxColorTL"); + mxmlElementSetAttrf( vtx , "r" , "%02x" , ( be32(data2.vtx_colors[0]) >> 24 ) & 0xff ); + mxmlElementSetAttrf( vtx , "g" , "%02x" , ( be32(data2.vtx_colors[0]) >> 16 ) & 0xff ); + mxmlElementSetAttrf( vtx , "b" , "%02x" , ( be32(data2.vtx_colors[0]) >> 8 ) & 0xff ); + mxmlElementSetAttrf( vtx , "a" , "%02x" , ( be32(data2.vtx_colors[0]) >> 0 ) & 0xff ); + + vtx = mxmlNewElement(color, "vtxColorTR"); + mxmlElementSetAttrf( vtx , "r" , "%02x" , ( be32(data2.vtx_colors[1]) >> 24 ) & 0xff ); + mxmlElementSetAttrf( vtx , "g" , "%02x" , ( be32(data2.vtx_colors[1]) >> 16 ) & 0xff ); + mxmlElementSetAttrf( vtx , "b" , "%02x" , ( be32(data2.vtx_colors[1]) >> 8 ) & 0xff ); + mxmlElementSetAttrf( vtx , "a" , "%02x" , ( be32(data2.vtx_colors[1]) >> 0 ) & 0xff ); + + vtx = mxmlNewElement(color, "vtxColorBL"); + mxmlElementSetAttrf( vtx , "r" , "%02x" , ( be32(data2.vtx_colors[2]) >> 24 ) & 0xff ); + mxmlElementSetAttrf( vtx , "g" , "%02x" , ( be32(data2.vtx_colors[2]) >> 16 ) & 0xff ); + mxmlElementSetAttrf( vtx , "b" , "%02x" , ( be32(data2.vtx_colors[2]) >> 8 ) & 0xff ); + mxmlElementSetAttrf( vtx , "a" , "%02x" , ( be32(data2.vtx_colors[2]) >> 0 ) & 0xff ); + + vtx = mxmlNewElement(color, "vtxColorBR"); + mxmlElementSetAttrf( vtx , "r" , "%02x" , ( be32(data2.vtx_colors[3]) >> 24 ) & 0xff ); + mxmlElementSetAttrf( vtx , "g" , "%02x" , ( be32(data2.vtx_colors[3]) >> 16 ) & 0xff ); + mxmlElementSetAttrf( vtx , "b" , "%02x" , ( be32(data2.vtx_colors[3]) >> 8 ) & 0xff ); + mxmlElementSetAttrf( vtx , "a" , "%02x" , ( be32(data2.vtx_colors[3]) >> 0 ) & 0xff ); + coordinates = mxmlNewElement(tag, "coordinates"); + int n; for (n=0;n<data2.num_texcoords;n++) { float texcoords[8]; @@ -584,63 +667,8 @@ void PrintBRLYTEntry_pic1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) void PrintBRLYTEntry_txt1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) { - char origins[9][15]; - int o; - for ( o = 0 ; o < 8 ; o++ ) - memset( origins[o] , 0 , 20 ); - strcpy( origins[0] , "TOP LEFT" ); - strcpy( origins[1] , "TOP CENTER" ); - strcpy( origins[2] , "TOP RIGHT" ); - strcpy( origins[3] , "MIDDLE LEFT" ); - strcpy( origins[4] , "MIDDLE CENTER" ); - strcpy( origins[5] , "MIDDLE RIGHT" ); - strcpy( origins[6] , "BOTTOM LEFT" ); - strcpy( origins[7] , "BOTTOM CENTER" ); - strcpy( origins[8] , "BOTTOM RIGHT" ); - - char alignments[9][15]; - for ( o = 0 ; o < 8 ; o++ ) - memset( alignments[o] , 0 , 20 ); - strcpy( alignments[0] , "TOP LEFT" ); - strcpy( alignments[1] , "TOP CENTER" ); - strcpy( alignments[2] , "TOP RIGHT" ); - strcpy( alignments[3] , "MIDDLE LEFT" ); - strcpy( alignments[4] , "MIDDLE CENTER" ); - strcpy( alignments[5] , "MIDDLE RIGHT" ); - strcpy( alignments[6] , "BOTTOM LEFT" ); - strcpy( alignments[7] , "BOTTOM CENTER" ); - strcpy( alignments[8] , "BOTTOM RIGHT" ); + PrintPane( entry , brlyt_file , tag ); - mxml_node_t *flags, *origin, *alpha, *padding; - mxml_node_t *translate, *x, *y, *z; - mxml_node_t *rotate, *scale; - mxml_node_t *size, *width, *height; - brlyt_pane_chunk data; - BRLYT_fileoffset = entry.data_location; - BRLYT_ReadDataFromMemory(&data, brlyt_file, sizeof(brlyt_pane_chunk)); - mxmlElementSetAttrf(tag, "type", "%.4s", entry.magic); - mxmlElementSetAttrf(tag, "name", "%s", data.name); - mxmlElementSetAttrf(tag, "userdata", "%s", data.userdata); - flags = mxmlNewElement(tag, "visible"); mxmlNewTextf(flags, 0, "%02x", data.flag1 & 0x1); - flags = mxmlNewElement(tag, "WidescreenAffected"); mxmlNewTextf(flags, 0, "%02x", (data.flag1 & 0x2)>>1); - flags = mxmlNewElement(tag, "flag"); mxmlNewTextf(flags, 0, "%02x", (data.flag1 & 0x4)>>2); - origin = mxmlNewElement(tag, "origin"); mxmlNewTextf(origin,0,"%s", origins[data.origin%9]); - alpha = mxmlNewElement(tag, "alpha"); mxmlNewTextf(alpha, 0, "%02x", data.alpha); - padding = mxmlNewElement(tag, "padding"); mxmlNewTextf(padding, 0, "%02x", data.pad); - translate = mxmlNewElement(tag, "translate"); - x = mxmlNewElement(translate, "x"); mxmlNewTextf(x, 0, "%.16f", float_swap_bytes(data.XTrans)); - y = mxmlNewElement(translate, "y"); mxmlNewTextf(y, 0, "%.16f", float_swap_bytes(data.YTrans)); - z = mxmlNewElement(translate, "z"); mxmlNewTextf(z, 0, "%.16f", float_swap_bytes(data.ZTrans)); - rotate = mxmlNewElement(tag, "rotate"); - x = mxmlNewElement(rotate, "x"); mxmlNewTextf(x, 0, "%.20f", float_swap_bytes(data.XRotate)); - y = mxmlNewElement(rotate, "y"); mxmlNewTextf(y, 0, "%.20f", float_swap_bytes(data.YRotate)); - z = mxmlNewElement(rotate, "z"); mxmlNewTextf(z, 0, "%.20f", float_swap_bytes(data.ZRotate)); - scale = mxmlNewElement(tag, "scale"); - x = mxmlNewElement(scale, "x"); mxmlNewTextf(x, 0, "%.10f", float_swap_bytes(data.XScale)); - y = mxmlNewElement(scale, "y"); mxmlNewTextf(y, 0, "%.10f", float_swap_bytes(data.YScale)); - size = mxmlNewElement(tag, "size"); - width = mxmlNewElement(size, "width"); mxmlNewTextf(width, 0, "%.20f", float_swap_bytes(data.width)); - height = mxmlNewElement(size, "height"); mxmlNewTextf(height, 0, "%.20f", float_swap_bytes(data.height)); mxml_node_t *length, *font, *xsize, *ysize, *charsize, *linesize, *alignment, *color1, *color2, *text; brlyt_text_chunk data2; BRLYT_ReadDataFromMemory(&data2, brlyt_file, sizeof(brlyt_text_chunk)); @@ -652,9 +680,19 @@ void PrintBRLYTEntry_txt1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) ysize = mxmlNewElement(font, "ysize"); mxmlNewTextf(ysize, 0, "%f", float_swap_bytes(data2.font_size_y)); charsize = mxmlNewElement(font, "charsize"); mxmlNewTextf(charsize, 0, "%f", float_swap_bytes(data2.char_space)); linesize = mxmlNewElement(font, "linesize"); mxmlNewTextf(linesize, 0, "%f", float_swap_bytes(data2.line_space)); - alignment = mxmlNewElement(font, "alignment"); mxmlNewTextf(alignment, 0, "%s", alignments[data2.alignment%9]); - color1 = mxmlNewElement(tag, "color1"); mxmlNewTextf(color1, 0, "%08x", be32(data2.color1) ); - color2 = mxmlNewElement(tag, "color2"); mxmlNewTextf(color2, 0, "%08x", be32(data2.color2) ); + alignment = mxmlNewElement(font, "alignment"); + mxmlElementSetAttrf(alignment, "x", "%s", originX[data2.alignment%3]); + mxmlElementSetAttrf(alignment, "y", "%s", originY[data2.alignment/3]); + color1 = mxmlNewElement(tag, "topcolor");// mxmlNewTextf(color1, 0, "%08x", be32(data2.color1) ); + mxmlElementSetAttrf(color1, "r", "%02x", ( be32(data2.color1) >> 24 ) & 0xff ); + mxmlElementSetAttrf(color1, "g", "%02x", ( be32(data2.color1) >> 16 ) & 0xff ); + mxmlElementSetAttrf(color1, "b", "%02x", ( be32(data2.color1) >> 8 ) & 0xff ); + mxmlElementSetAttrf(color1, "a", "%02x", ( be32(data2.color1) >> 0 ) & 0xff ); + color2 = mxmlNewElement(tag, "bottomcolor");// mxmlNewTextf(color2, 0, "%08x", be32(data2.color2) ); + mxmlElementSetAttrf(color2, "r", "%02x", ( be32(data2.color2) >> 24 ) & 0xff ); + mxmlElementSetAttrf(color2, "g", "%02x", ( be32(data2.color2) >> 16 ) & 0xff ); + mxmlElementSetAttrf(color2, "b", "%02x", ( be32(data2.color2) >> 8 ) & 0xff ); + mxmlElementSetAttrf(color2, "a", "%02x", ( be32(data2.color2) >> 0 ) & 0xff ); // int q; for(q=0;q<short_swap_bytes(data2.len2);q++) printf("%02x", texty[q]); // S T U P I D U T F 1 6 T E X T u8 textbuffer[4096]; int q; for(q=0;q<short_swap_bytes(data2.len2);q++) sprintf((char*)&textbuffer[q*2], "%02x", texty[q]); @@ -663,7 +701,8 @@ 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, *forecolor, *backcolor, *unk2, *tev_k, *flags; + mxml_node_t *entries, *colors, *forecolor, *backcolor, *unk2, *tev_k; + // mxml_node_t * flags; brlyt_numoffs_chunk data; BRLYT_fileoffset = entry.data_location; BRLYT_ReadDataFromMemory(&data, brlyt_file, sizeof(brlyt_numoffs_chunk)); @@ -681,26 +720,48 @@ void PrintBRLYTEntry_mat1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) u32 flaggs = be32(data3.flags); entries = mxmlNewElement(tag, "entries"); mxmlElementSetAttrf(entries, "name", "%s", data3.name); colors = mxmlNewElement(entries, "colors"); - int i; for (i=0;i<4;i++) - { - forecolor = mxmlNewElement(colors, "forecolor"); - mxmlNewTextf(forecolor, 0, "%d", short_swap_bytes(data3.forecolor[i])); - } - for (i=0;i<4;i++) - { - backcolor = mxmlNewElement(colors, "backcolor"); - mxmlNewTextf(backcolor, 0, "%d", short_swap_bytes(data3.backcolor[i])); - } - for (i=0;i<4;i++) - { - unk2 = mxmlNewElement(colors, "colorReg3"); - mxmlNewTextf(unk2, 0, "%d", short_swap_bytes(data3.colorReg3[i])); - } - for (i=0;i<4;i++) - { - tev_k = mxmlNewElement(colors, "tev_k"); - mxmlNewTextf(tev_k, 0, "%08x", be32(data3.tev_kcolor[i])); - } + + forecolor = mxmlNewElement(colors, "forecolor"); + mxmlElementSetAttrf(forecolor, "r", "%d", short_swap_bytes(data3.forecolor[0])); + mxmlElementSetAttrf(forecolor, "g", "%d", short_swap_bytes(data3.forecolor[1])); + mxmlElementSetAttrf(forecolor, "b", "%d", short_swap_bytes(data3.forecolor[2])); + mxmlElementSetAttrf(forecolor, "a", "%d", short_swap_bytes(data3.forecolor[3])); + + backcolor = mxmlNewElement(colors, "backcolor"); + mxmlElementSetAttrf(backcolor, "r", "%d", short_swap_bytes(data3.backcolor[0])); + mxmlElementSetAttrf(backcolor, "g", "%d", short_swap_bytes(data3.backcolor[1])); + mxmlElementSetAttrf(backcolor, "b", "%d", short_swap_bytes(data3.backcolor[2])); + mxmlElementSetAttrf(backcolor, "a", "%d", short_swap_bytes(data3.backcolor[3])); + + unk2 = mxmlNewElement(colors, "colorReg3"); + mxmlElementSetAttrf(unk2, "r", "%d", short_swap_bytes(data3.colorReg3[0])); + mxmlElementSetAttrf(unk2, "g", "%d", short_swap_bytes(data3.colorReg3[1])); + mxmlElementSetAttrf(unk2, "b", "%d", short_swap_bytes(data3.colorReg3[2])); + mxmlElementSetAttrf(unk2, "a", "%d", short_swap_bytes(data3.colorReg3[3])); + + tev_k = mxmlNewElement(colors, "tev_k1"); + mxmlElementSetAttrf(tev_k, "r", "%02x", ( be32(data3.tev_kcolor[0]) >> 24 ) & 0xff ); + mxmlElementSetAttrf(tev_k, "g", "%02x", ( be32(data3.tev_kcolor[0]) >> 16 ) & 0xff ); + mxmlElementSetAttrf(tev_k, "b", "%02x", ( be32(data3.tev_kcolor[0]) >> 8 ) & 0xff ); + mxmlElementSetAttrf(tev_k, "a", "%02x", ( be32(data3.tev_kcolor[0]) >> 0 ) & 0xff ); + + tev_k = mxmlNewElement(colors, "tev_k2"); + mxmlElementSetAttrf(tev_k, "r", "%02x", ( be32(data3.tev_kcolor[1]) >> 24 ) & 0xff ); + mxmlElementSetAttrf(tev_k, "g", "%02x", ( be32(data3.tev_kcolor[1]) >> 16 ) & 0xff ); + mxmlElementSetAttrf(tev_k, "b", "%02x", ( be32(data3.tev_kcolor[1]) >> 8 ) & 0xff ); + mxmlElementSetAttrf(tev_k, "a", "%02x", ( be32(data3.tev_kcolor[1]) >> 0 ) & 0xff ); + + tev_k = mxmlNewElement(colors, "tev_k3"); + mxmlElementSetAttrf(tev_k, "r", "%02x", ( be32(data3.tev_kcolor[2]) >> 24 ) & 0xff ); + mxmlElementSetAttrf(tev_k, "g", "%02x", ( be32(data3.tev_kcolor[2]) >> 16 ) & 0xff ); + mxmlElementSetAttrf(tev_k, "b", "%02x", ( be32(data3.tev_kcolor[2]) >> 8 ) & 0xff ); + mxmlElementSetAttrf(tev_k, "a", "%02x", ( be32(data3.tev_kcolor[2]) >> 0 ) & 0xff ); + + tev_k = mxmlNewElement(colors, "tev_k4"); + mxmlElementSetAttrf(tev_k, "r", "%02x", ( be32(data3.tev_kcolor[3]) >> 24 ) & 0xff ); + mxmlElementSetAttrf(tev_k, "g", "%02x", ( be32(data3.tev_kcolor[3]) >> 16 ) & 0xff ); + mxmlElementSetAttrf(tev_k, "b", "%02x", ( be32(data3.tev_kcolor[3]) >> 8 ) & 0xff ); + mxmlElementSetAttrf(tev_k, "a", "%02x", ( be32(data3.tev_kcolor[3]) >> 0 ) & 0xff ); //flags = mxmlNewElement(entries, "flags"); mxmlNewTextf(flags, 0, "%08x", be32(data3.flags)); @@ -719,15 +780,6 @@ void PrintBRLYTEntry_mat1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) int tplOffset = short_swap_bytes(data4.tex_offs); texture = mxmlNewElement(entries, "texture"); mxmlElementSetAttrf(texture, "name", "%s", getTexture(tplOffset)); - char wraps[4][20]; - int l; - for ( l = 0 ; l < 4 ; l++ ) - memset( wraps , 0 , 20 ); - strcpy( wraps[0] , "GX_CLAMP" ); - strcpy( wraps[1] , "GX_REPEAT" ); - strcpy( wraps[2] , "GX_MIRROR" ); - strcpy( wraps[3] , "GX_MAXTEXWRAPMODE" ); - wrap_s = mxmlNewElement(texture, "wrap_s"); mxmlNewTextf(wrap_s, 0, "%s", wraps[data4.wrap_s]); wrap_t = mxmlNewElement(texture, "wrap_t"); @@ -752,93 +804,6 @@ void PrintBRLYTEntry_mat1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) //# 4*flags[20-23], followed by for (n=0;n<bit_extract(flaggs, 20,23);n++) { - char tgen_types[11][20]; - int l; - for ( l = 0 ; l < 11 ; l++ ) - memset( tgen_types[l] , 0 , 20 ); - strcpy( tgen_types[0] , "GX_TG_MTX3x4" ); - strcpy( tgen_types[1] , "GX_TG_MTX2x4" ); - strcpy( tgen_types[2] , "GX_TG_BUMP0" ); - strcpy( tgen_types[3] , "GX_TG_BUMP1" ); - strcpy( tgen_types[4] , "GX_TG_BUMP2" ); - strcpy( tgen_types[5] , "GX_TG_BUMP3" ); - strcpy( tgen_types[6] , "GX_TG_BUMP4" ); - strcpy( tgen_types[7] , "GX_TG_BUMP5" ); - strcpy( tgen_types[8] , "GX_TG_BUMP6" ); - strcpy( tgen_types[9] , "GX_TG_BUMP7" ); - strcpy( tgen_types[10] , "GX_TG_SRTG" ); - - char tgen_src[21][20]; - for ( l = 0 ; l < 21 ; l++ ) - memset( tgen_src[l] , 0 , 20 ); - strcpy( tgen_src[0] , "GX_TG_POS" ); - strcpy( tgen_src[1] , "GX_TG_NRM" ); - strcpy( tgen_src[2] , "GX_TG_BINRM" ); - strcpy( tgen_src[3] , "GX_TG_TANGEN" ); - strcpy( tgen_src[4] , "GX_TG_TEX0" ); - strcpy( tgen_src[5] , "GX_TG_TEX1" ); - strcpy( tgen_src[6] , "GX_TG_TEX2" ); - strcpy( tgen_src[7] , "GX_TG_TEX3" ); - strcpy( tgen_src[8] , "GX_TG_TEX4" ); - strcpy( tgen_src[9] , "GX_TG_TEX5" ); - strcpy( tgen_src[10] , "GX_TG_TEX6" ); - strcpy( tgen_src[11] , "GX_TG_TEX7" ); - strcpy( tgen_src[12] , "GX_TG_TEXCOORD0" ); - strcpy( tgen_src[13] , "GX_TG_TEXCOORD1" ); - strcpy( tgen_src[14] , "GX_TG_TEXCOORD2" ); - strcpy( tgen_src[15] , "GX_TG_TEXCOORD3" ); - strcpy( tgen_src[16] , "GX_TG_TEXCOORD4" ); - strcpy( tgen_src[17] , "GX_TG_TEXCOORD5" ); - strcpy( tgen_src[18] , "GX_TG_TEXCOORD6" ); - strcpy( tgen_src[19] , "GX_TG_COLOR0" ); - strcpy( tgen_src[20] , "GX_TG_COLOR1" ); - - char mtxsrc[42][20]; - for ( l = 0 ; l < 42 ; l++ ) - memset( mtxsrc[l] , 0 , 20 ); - strcpy( mtxsrc[0] , "GX_PNMTX0" ); - strcpy( mtxsrc[1] , "GX_PNMTX1" ); - strcpy( mtxsrc[2] , "GX_PNMTX2" ); - strcpy( mtxsrc[3] , "GX_PNMTX3" ); - strcpy( mtxsrc[4] , "GX_PNMTX4" ); - strcpy( mtxsrc[5] , "GX_PNMTX5" ); - strcpy( mtxsrc[6] , "GX_PNMTX6" ); - strcpy( mtxsrc[7] , "GX_PNMTX7" ); - strcpy( mtxsrc[8] , "GX_PNMTX8" ); - strcpy( mtxsrc[9] , "GX_PNMTX9" ); - strcpy( mtxsrc[10] , "GX_TEXMTX0" ); - strcpy( mtxsrc[11] , "GX_TEXMTX1" ); - strcpy( mtxsrc[12] , "GX_TEXMTX2" ); - strcpy( mtxsrc[13] , "GX_TEXMTX3" ); - strcpy( mtxsrc[14] , "GX_TEXMTX4" ); - strcpy( mtxsrc[15] , "GX_TEXMTX5" ); - strcpy( mtxsrc[16] , "GX_TEXMTX6" ); - strcpy( mtxsrc[17] , "GX_TEXMTX7" ); - strcpy( mtxsrc[18] , "GX_TEXMTX8" ); - strcpy( mtxsrc[19] , "GX_TEXMTX9" ); - strcpy( mtxsrc[20] , "GX_IDENTITY" ); - strcpy( mtxsrc[21] , "GX_DTTMTX0" ); - strcpy( mtxsrc[22] , "GX_DTTMTX1" ); - strcpy( mtxsrc[23] , "GX_DTTMTX2" ); - strcpy( mtxsrc[24] , "GX_DTTMTX3" ); - strcpy( mtxsrc[25] , "GX_DTTMTX4" ); - strcpy( mtxsrc[26] , "GX_DTTMTX5" ); - strcpy( mtxsrc[27] , "GX_DTTMTX6" ); - strcpy( mtxsrc[28] , "GX_DTTMTX7" ); - strcpy( mtxsrc[29] , "GX_DTTMTX8" ); - strcpy( mtxsrc[30] , "GX_DTTMTX9" ); - strcpy( mtxsrc[31] , "GX_DTTMTX1" ); - strcpy( mtxsrc[32] , "GX_DTTMTX1" ); - strcpy( mtxsrc[33] , "GX_DTTMTX12" ); - strcpy( mtxsrc[34] , "GX_DTTMTX13" ); - strcpy( mtxsrc[35] , "GX_DTTMTX14" ); - strcpy( mtxsrc[36] , "GX_DTTMTX15" ); - strcpy( mtxsrc[37] , "GX_DTTMTX16" ); - strcpy( mtxsrc[38] , "GX_DTTMTX17" ); - strcpy( mtxsrc[39] , "GX_DTTMTX18" ); - strcpy( mtxsrc[40] , "GX_DTTMTX19" ); - strcpy( mtxsrc[41] , "GX_DTTIDENTITY" ); // actually 125 not 124 - brlyt_tex_coordgen data4; BRLYT_ReadDataFromMemory(&data4, brlyt_file, sizeof(brlyt_tex_coordgen)); ua3 = mxmlNewElement(entries, "CoordGen"); @@ -856,13 +821,6 @@ void PrintBRLYTEntry_mat1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) //# 4 * flags[6] for (n=0;n<bit_extract(flaggs, 6,100);n++) { - char matsrc[2][20]; - int l; - for ( l = 0 ; l < 2 ; l++ ) - memset( matsrc[l] , 0 , 20 ); - strcpy( matsrc[0] , "GX_SRC_REG" ); - strcpy( matsrc[1] , "GX_SRC_VTX" ); - brlyt_tex_chanctrl data4; BRLYT_ReadDataFromMemory(&data4, brlyt_file, sizeof(brlyt_tex_chanctrl)); ua4 = mxmlNewElement(entries, "ChanControl"); @@ -896,15 +854,6 @@ void PrintBRLYTEntry_mat1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) //# 4 * flags[19] for (n=0;n<bit_extract(flaggs, 19,100);n++) { - char tevcolor[4][20]; - int l; - for ( l = 0 ; l < 4 ; l++ ) - memset( tevcolor[l] , 0 , 20 ); - strcpy( tevcolor[0] , "GX_CH_RED" ); - strcpy( tevcolor[1] , "GX_CH_GREEN" ); - strcpy( tevcolor[2] , "GX_CH_BLUE" ); - strcpy( tevcolor[3] , "GX_CH_ALPHA" ); - brlyt_tev_swapmodetable data4; BRLYT_ReadDataFromMemory(&data4, brlyt_file, sizeof(brlyt_tev_swapmodetable)); @@ -965,21 +914,6 @@ void PrintBRLYTEntry_mat1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) //# 4 * flags[14-16] for (n=0;n<bit_extract(flaggs, 14,16);n++) { - char scale[10][20]; - int l; - for ( l = 0 ; l < 10 ; l++ ) - memset( scale[l] , 0 , 20 ); - strcpy( scale[0] , "GX_ITS_1" ); - strcpy( scale[1] , "GX_ITS_2" ); - strcpy( scale[2] , "GX_ITS_4" ); - strcpy( scale[3] , "GX_ITS_8" ); - strcpy( scale[4] , "GX_ITS_16" ); - strcpy( scale[5] , "GX_ITS_32" ); - strcpy( scale[6] , "GX_ITS_64" ); - strcpy( scale[7] , "GX_ITS_128" ); - strcpy( scale[8] , "GX_ITS_256" ); - strcpy( scale[9] , "GX_MAX_ITSCALE" ); - brlyt_indtex_order data4; BRLYT_ReadDataFromMemory(&data4, brlyt_file, sizeof(brlyt_indtex_order)); ua8 = mxmlNewElement(entries, "IndTextureOrder"); @@ -1120,28 +1054,6 @@ void PrintBRLYTEntry_mat1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) //# 4 * flags[8] for (n=0;n<bit_extract(flaggs, 8,8);n++) { - char compare[8][20]; - int l; - for ( l = 0 ; l < 8 ; l++ ) - memset( compare[l] , 0 , 20 ); - strcpy( compare[0] , "GX_NEVER" ); - strcpy( compare[1] , "GX_LESS" ); - strcpy( compare[2] , "GX_EQUAL" ); - strcpy( compare[3] , "GX_LEQUAL" ); - strcpy( compare[4] , "GX_GREATER" ); - strcpy( compare[5] , "GX_NEQUAL" ); - strcpy( compare[6] , "GX_GEQUAL" ); - strcpy( compare[7] , "GX_ALWAYS" ); - - char aop[5][20]; - for ( l = 0 ; l < 5 ; l++ ) - memset( aop[l] , 0 , 20 ); - strcpy( aop[0] , "GX_AOP_AND" ); - strcpy( aop[1] , "GX_AOP_OR" ); - strcpy( aop[2] , "GX_AOP_XOR" ); - strcpy( aop[3] , "GX_AOP_XNOR" ); - strcpy( aop[4] , "GX_MAX_ALPHAOP" ); - brlyt_alpha_compare data4; BRLYT_ReadDataFromMemory(&data4, brlyt_file, sizeof(brlyt_alpha_compare)); uaa = mxmlNewElement(entries, "AlphaCompare"); @@ -1159,48 +1071,6 @@ void PrintBRLYTEntry_mat1(brlyt_entry entry, u8* brlyt_file, mxml_node_t *tag) //# 4 * flags[7] for (n=0;n<bit_extract(flaggs, 7,7);n++) { - char blendmode[5][20]; - int l; - for ( l = 0 ; l < 5 ; l++ ) - memset( blendmode[l] , 0 , 20 ); - strcpy( blendmode[0] , "GX_BM_NONE" ); - strcpy( blendmode[1] , "GX_BM_BLEND" ); - strcpy( blendmode[2] , "GX_BM_LOGIC" ); - strcpy( blendmode[3] , "GX_BM_SUBTRACT" ); - strcpy( blendmode[4] , "GX_MAX_BLENDMODE" ); - - char blendfactor[8][20]; - for ( l = 0 ; l < 8 ; l++ ) - memset( blendfactor[l] , 0 , 20 ); - strcpy( blendfactor[0] , "GX_BL_ZERO" ); - strcpy( blendfactor[1] , "GX_BL_ONE" ); - strcpy( blendfactor[2] , "GX_BL_SRCCLR" ); - strcpy( blendfactor[3] , "GX_BL_INVSRCCLR" ); - strcpy( blendfactor[4] , "GX_BL_SRCALPHA" ); - strcpy( blendfactor[5] , "GX_BL_INVSRCALPHA" ); - strcpy( blendfactor[6] , "GX_BL_DSTALPHA" ); - strcpy( blendfactor[7] , "GX_BL_INVDSTALPHA" ); - - char logicop[16][20]; - for ( l = 0 ; l < 16 ; l++ ) - memset( logicop[l] , 0 , 20 ); - strcpy( logicop[0] , "GX_LO_CLEAR" ); - strcpy( logicop[1] , "GX_LO_AND" ); - strcpy( logicop[2] , "GX_LO_REVAND" ); - strcpy( logicop[3] , "GX_LO_COPY" ); - strcpy( logicop[4] , "GX_LO_INVAND" ); - strcpy( logicop[5] , "GX_LO_NOOP" ); - strcpy( logicop[6] , "GX_LO_XOR" ); - strcpy( logicop[7] , "GX_LO_OR" ); - strcpy( logicop[8] , "GX_LO_NOR" ); - strcpy( logicop[9] , "GX_LO_EQUIV" ); - strcpy( logicop[10] , "GX_LO_INV" ); - strcpy( logicop[11] , "GX_LO_REVOR" ); - strcpy( logicop[12] , "GX_LO_INVCOPY" ); - strcpy( logicop[13] , "GX_LO_INVOR" ); - strcpy( logicop[14] , "GX_LO_NAND" ); - strcpy( logicop[15] , "GX_LO_SET" ); - brlyt_blend_mode data4; BRLYT_ReadDataFromMemory(&data4, brlyt_file, sizeof(brlyt_blend_mode)); uab = mxmlNewElement(entries, "BlendMode"); @@ -1280,6 +1150,8 @@ void PrintBRLYTEntries(brlyt_entry *entries, int entrycnt, u8* brlyt_file, mxml_ void parse_brlyt(char *filename, char *filenameout) { + SetupConstants(); + materials = (char*)malloc(12); numberOfMaterials = 0; lengthOfMaterials = 0; @@ -1304,6 +1176,7 @@ void parse_brlyt(char *filename, char *filenameout) brlyt_entry *entries; BRLYT_fileoffset = short_swap_bytes(header.lyt_offset); brlyt_entry_header tempentry; + int i; for(i = 0; BRLYT_fileoffset < file_size; i++) { BRLYT_ReadDataFromMemoryX(&tempentry, brlyt_file, sizeof(brlyt_entry_header)); @@ -1342,7 +1215,186 @@ void parse_brlyt(char *filename, char *filenameout) free(textures); } -void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* blobsize, char temp[4], FILE* fp, u32 *fileOffset) +void WritePane( mxml_node_t * tree , mxml_node_t * node , u8** tagblob , u32 * blobsize , FILE * fp , u32 * fileOffset ) +{ + brlyt_pane_chunk chunk; + char temp[256]; + if(mxmlElementGetAttr(node, "name") != NULL) + strcpy(temp, mxmlElementGetAttr(node, "name")); + else{ + printf("No name attribute found!\nQuitting!\n"); + exit(1); + } + memset(chunk.name, 0, 24); + strcpy(chunk.name, temp); + + mxml_node_t *subnode = mxmlFindElement(node, node, "translate", NULL, NULL, MXML_DESCEND); + if (subnode != NULL) + { + mxml_node_t *valnode; + valnode = mxmlFindElement(subnode, subnode, "x", NULL, NULL, MXML_DESCEND); + if (valnode != NULL) + { + char tempCoord[256]; + get_value(valnode, tempCoord, 256); + chunk.XTrans = float_swap_bytes(atof(tempCoord)); + } + valnode = mxmlFindElement(subnode, subnode, "y", NULL, NULL, MXML_DESCEND); + if (valnode != NULL) + { + char tempCoord[256]; + get_value(valnode, tempCoord, 256); + chunk.YTrans = float_swap_bytes(atof(tempCoord)); + } + valnode = mxmlFindElement(subnode, subnode, "z", NULL, NULL, MXML_DESCEND); + if (valnode != NULL) + { + char tempCoord[256]; + get_value(valnode, tempCoord, 256); + chunk.ZTrans = float_swap_bytes(atof(tempCoord)); + } + } + subnode = mxmlFindElement(node, node, "rotate", NULL, NULL, MXML_DESCEND); + if (subnode != NULL) + { + mxml_node_t *valnode; + valnode = mxmlFindElement(subnode, subnode, "x", NULL, NULL, MXML_DESCEND); + if (valnode != NULL) + { + char tempCoord[256]; + get_value(valnode, tempCoord, 256); + chunk.XRotate = float_swap_bytes(atof(tempCoord)); + } + valnode = mxmlFindElement(subnode, subnode, "y", NULL, NULL, MXML_DESCEND); + if (valnode != NULL) + { + char tempCoord[256]; + get_value(valnode, tempCoord, 256); + chunk.YRotate = float_swap_bytes(atof(tempCoord)); + } + valnode = mxmlFindElement(subnode, subnode, "z", NULL, NULL, MXML_DESCEND); + if (valnode != NULL) + { + char tempCoord[256]; + get_value(valnode, tempCoord, 256); + chunk.ZRotate = float_swap_bytes(atof(tempCoord)); + } + } + subnode = mxmlFindElement(node, node, "scale", NULL, NULL, MXML_DESCEND); + if (subnode != NULL) + { + mxml_node_t *valnode; + valnode = mxmlFindElement(subnode, subnode, "x", NULL, NULL, MXML_DESCEND); + if (valnode != NULL) + { + char tempCoord[256]; + get_value(valnode, tempCoord, 256); + chunk.XScale = float_swap_bytes(atof(tempCoord)); + } + valnode = mxmlFindElement(subnode, subnode, "y", NULL, NULL, MXML_DESCEND); + if (valnode != NULL) + { + char tempCoord[256]; + get_value(valnode, tempCoord, 256); + chunk.YScale = float_swap_bytes(atof(tempCoord)); + } + } + subnode = mxmlFindElement(node, node, "size", NULL, NULL, MXML_DESCEND); + if (subnode != NULL) + { + mxml_node_t *valnode; + valnode = mxmlFindElement(subnode, subnode, "width", NULL, NULL, MXML_DESCEND); + if (valnode != NULL) + { + char tempCoord[256]; + get_value(valnode, tempCoord, 256); + chunk.width = float_swap_bytes(atof(tempCoord)); + } + valnode = mxmlFindElement(subnode, subnode, "height", NULL, NULL, MXML_DESCEND); + if (valnode != NULL) + { + char tempCoord[256]; + get_value(valnode, tempCoord, 256); + chunk.height = float_swap_bytes(atof(tempCoord)); + } + } + + u8 flag1 = 0; + subnode = mxmlFindElement(node, node, "visible", NULL, NULL, MXML_DESCEND); + if (subnode != NULL) + { + char tempCoord[256]; + get_value(subnode, tempCoord, 256); + flag1 |= strtol(tempCoord, NULL, 16); + } + subnode = mxmlFindElement(node, node, "WidescreenAffected", NULL, NULL, MXML_DESCEND); + if (subnode != NULL) + { + char tempCoord[256]; + get_value(subnode, tempCoord, 256); + flag1 |= ( strtol(tempCoord, NULL, 16) << 1 ); + } + subnode = mxmlFindElement(node, node, "flag", NULL, NULL, MXML_DESCEND); + if (subnode != NULL) + { + char tempCoord[256]; + get_value(subnode, tempCoord, 256); + flag1 |= ( strtol(tempCoord, NULL, 16) << 2 ); + } + chunk.flag1 = flag1; + subnode = mxmlFindElement(node, node, "origin", NULL, NULL, MXML_DESCEND); + if (subnode != NULL) + { + int i; + char originL , originH; + char temp[256]; + memset( temp , 0 , 256 ); + if(mxmlElementGetAttr(subnode, "x") != NULL) + strcpy(temp, mxmlElementGetAttr(subnode, "x")); + else{ + printf("No x attribute found!\nQuitting!\n"); + exit(1); + } + for ( i = 0 ; i < 3 ; i++ ) { + if ( strncmp( originX[i] , temp , 15 ) == 0 ) { + originL = i; + break; + } + } + memset( temp , 0 , 256 ); + if(mxmlElementGetAttr(subnode, "y") != NULL) + strcpy(temp, mxmlElementGetAttr(subnode, "y")); + else{ + printf("No y attribute found!\nQuitting!\n"); + exit(1); + } + for ( i = 0 ; i < 3 ; i++ ) { + if ( strncmp( originY[i] , temp , 15 ) == 0 ) { + originH = i; + break; + } + } + chunk.origin = ( originH * 3 ) + ( originL ); + } + subnode = mxmlFindElement(node, node, "alpha", NULL, NULL, MXML_DESCEND); + if (subnode != NULL) + { + char tempCoord[256]; + get_value(subnode, tempCoord, 256); + chunk.alpha = strtol(tempCoord, NULL, 16); + } + subnode = mxmlFindElement(node, node, "padding", NULL, NULL, MXML_DESCEND); + if (subnode != NULL) + { + char tempCoord[256]; + get_value(subnode, tempCoord, 256); + chunk.pad = strtol(tempCoord, NULL, 16); + } + fwrite(&chunk, sizeof(chunk), 1, fp); + *fileOffset = *fileOffset + sizeof(chunk); +} + +void WriteBRLYTEntry( mxml_node_t * tree , mxml_node_t * node , u8** tagblob , u32 * blobsize , char temp[4] , FILE * fp , u32 * fileOffset ) { u32 startOfChunk = *fileOffset; @@ -1607,46 +1659,174 @@ void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* bl if (setnode != NULL) { mxml_node_t *valnode; - int colorNumber = 0; - for (valnode=mxmlFindElement(setnode, setnode, "forecolor", NULL, NULL, MXML_DESCEND) ; valnode != NULL ; valnode=mxmlFindElement(valnode, setnode, "forecolor", NULL, NULL, MXML_DESCEND) ) + valnode=mxmlFindElement(setnode, setnode, "forecolor", NULL, NULL, MXML_DESCEND); + if ( valnode != NULL ) + { + char tempCoord[256]; + memset( tempCoord , 0 , 256 ); + strcpy( tempCoord , mxmlElementGetAttr( valnode , "r") ); + chunk.forecolor[0] = strtol(tempCoord, NULL, 10); + chunk.forecolor[0] = short_swap_bytes(chunk.forecolor[0]); + + memset( tempCoord , 0 , 256 ); + strcpy( tempCoord , mxmlElementGetAttr( valnode , "g") ); + chunk.forecolor[1] = strtol(tempCoord, NULL, 10); + chunk.forecolor[1] = short_swap_bytes(chunk.forecolor[1]); + + memset( tempCoord , 0 , 256 ); + strcpy( tempCoord , mxmlElementGetAttr( valnode , "b") ); + chunk.forecolor[2] = strtol(tempCoord, NULL, 10); + chunk.forecolor[2] = short_swap_bytes(chunk.forecolor[2]); + + memset( tempCoord , 0 , 256 ); + strcpy( tempCoord , mxmlElementGetAttr( valnode , "a") ); + chunk.forecolor[3] = strtol(tempCoord, NULL, 10); + chunk.forecolor[3] = short_swap_bytes(chunk.forecolor[3]); + } + valnode=mxmlFindElement(setnode, setnode, "backcolor", NULL, NULL, MXML_DESCEND); + if ( valnode != NULL ) + { + char tempCoord[256]; + memset( tempCoord , 0 , 256 ); + strcpy( tempCoord , mxmlElementGetAttr( valnode , "r") ); + chunk.backcolor[0] = strtol(tempCoord, NULL, 10); + chunk.backcolor[0] = short_swap_bytes(chunk.backcolor[0]); + + memset( tempCoord , 0 , 256 ); + strcpy( tempCoord , mxmlElementGetAttr( valnode , "g") ); + chunk.backcolor[1] = strtol(tempCoord, NULL, 10); + chunk.backcolor[1] = short_swap_bytes(chunk.backcolor[1]); + + memset( tempCoord , 0 , 256 ); + strcpy( tempCoord , mxmlElementGetAttr( valnode , "b") ); + chunk.backcolor[2] = strtol(tempCoord, NULL, 10); + chunk.backcolor[2] = short_swap_bytes(chunk.backcolor[2]); + + memset( tempCoord , 0 , 256 ); + strcpy( tempCoord , mxmlElementGetAttr( valnode , "a") ); + chunk.backcolor[3] = strtol(tempCoord, NULL, 10); + chunk.backcolor[3] = short_swap_bytes(chunk.backcolor[3]); + } + valnode=mxmlFindElement(setnode, setnode, "colorReg3", NULL, NULL, MXML_DESCEND); + if ( valnode != NULL ) + { + char tempCoord[256]; + memset( tempCoord , 0 , 256 ); + strcpy( tempCoord , mxmlElementGetAttr( valnode , "r") ); + chunk.colorReg3[0] = strtol(tempCoord, NULL, 10); + chunk.colorReg3[0] = short_swap_bytes(chunk.colorReg3[0]); + + memset( tempCoord , 0 , 256 ); + strcpy( tempCoord , mxmlElementGetAttr( valnode , "g") ); + chunk.colorReg3[1] = strtol(tempCoord, NULL, 10); + chunk.colorReg3[1] = short_swap_bytes(chunk.colorReg3[1]); + + memset( tempCoord , 0 , 256 ); + strcpy( tempCoord , mxmlElementGetAttr( valnode , "b") ); + chunk.colorReg3[2] = strtol(tempCoord, NULL, 10); + chunk.colorReg3[2] = short_swap_bytes(chunk.colorReg3[2]); + + memset( tempCoord , 0 , 256 ); + strcpy( tempCoord , mxmlElementGetAttr( valnode , "a") ); + chunk.colorReg3[3] = strtol(tempCoord, NULL, 10); + chunk.colorReg3[3] = short_swap_bytes(chunk.colorReg3[3]); + } + + valnode=mxmlFindElement(setnode, setnode, "tev_k1", NULL, NULL, MXML_DESCEND); { + u32 red, green, blue, alpha; char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.forecolor[colorNumber] = strtol(tempCoord, NULL, 10); - chunk.forecolor[colorNumber] = short_swap_bytes(chunk.forecolor[colorNumber]); + memset( tempCoord , 0 , 256 ); + strcpy(tempCoord, mxmlElementGetAttr(valnode, "r")); + red = strtoul(tempCoord, NULL, 16); + + memset( tempCoord , 0 , 256 ); + strcpy(tempCoord, mxmlElementGetAttr(valnode, "g")); + green = strtoul(tempCoord, NULL, 16); + + memset( tempCoord , 0 , 256 ); + strcpy(tempCoord, mxmlElementGetAttr(valnode, "b")); + blue = strtoul(tempCoord, NULL, 16); + + memset( tempCoord , 0 , 256 ); + strcpy(tempCoord, mxmlElementGetAttr(valnode, "a")); + alpha = strtoul(tempCoord, NULL, 16); - colorNumber+=1; + chunk.tev_kcolor[0] = ( red << 24 ) | ( green << 16 ) | ( blue << 8 ) | alpha; + chunk.tev_kcolor[0] = int_swap_bytes( chunk.tev_kcolor[0] ); } - colorNumber = 0; - for (valnode=mxmlFindElement(setnode, setnode, "backcolor", NULL, NULL, MXML_DESCEND) ; valnode != NULL ; valnode=mxmlFindElement(valnode, setnode, "backcolor", NULL, NULL, MXML_DESCEND) ) + valnode=mxmlFindElement(setnode, setnode, "tev_k2", NULL, NULL, MXML_DESCEND); { + u32 red, green, blue, alpha; char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.backcolor[colorNumber] = strtol(tempCoord, NULL, 10); - chunk.backcolor[colorNumber] = short_swap_bytes(chunk.backcolor[colorNumber]); + memset( tempCoord , 0 , 256 ); + strcpy(tempCoord, mxmlElementGetAttr(valnode, "r")); + red = strtoul(tempCoord, NULL, 16); + + memset( tempCoord , 0 , 256 ); + strcpy(tempCoord, mxmlElementGetAttr(valnode, "g")); + green = strtoul(tempCoord, NULL, 16); + + memset( tempCoord , 0 , 256 ); + strcpy(tempCoord, mxmlElementGetAttr(valnode, "b")); + blue = strtoul(tempCoord, NULL, 16); + + memset( tempCoord , 0 , 256 ); + strcpy(tempCoord, mxmlElementGetAttr(valnode, "a")); + alpha = strtoul(tempCoord, NULL, 16); - colorNumber+=1; + chunk.tev_kcolor[1] = ( red << 24 ) | ( green << 16 ) | ( blue << 8 ) | alpha; + chunk.tev_kcolor[1] = int_swap_bytes( chunk.tev_kcolor[1] ); } - colorNumber = 0; - for (valnode=mxmlFindElement(setnode, setnode, "colorReg3", NULL, NULL, MXML_DESCEND) ; valnode != NULL ; valnode=mxmlFindElement(valnode, setnode, "colorReg3", NULL, NULL, MXML_DESCEND) ) + valnode=mxmlFindElement(setnode, setnode, "tev_k3", NULL, NULL, MXML_DESCEND); { + u32 red, green, blue, alpha; char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.colorReg3[colorNumber] = strtol(tempCoord, NULL, 10); - chunk.colorReg3[colorNumber] = short_swap_bytes(chunk.colorReg3[colorNumber]); + memset( tempCoord , 0 , 256 ); + strcpy(tempCoord, mxmlElementGetAttr(valnode, "r")); + red = strtoul(tempCoord, NULL, 16); + + memset( tempCoord , 0 , 256 ); + strcpy(tempCoord, mxmlElementGetAttr(valnode, "g")); + green = strtoul(tempCoord, NULL, 16); + + memset( tempCoord , 0 , 256 ); + strcpy(tempCoord, mxmlElementGetAttr(valnode, "b")); + blue = strtoul(tempCoord, NULL, 16); + + memset( tempCoord , 0 , 256 ); + strcpy(tempCoord, mxmlElementGetAttr(valnode, "a")); + alpha = strtoul(tempCoord, NULL, 16); - colorNumber+=1; + chunk.tev_kcolor[2] = ( red << 24 ) | ( green << 16 ) | ( blue << 8 ) | alpha; + chunk.tev_kcolor[2] = int_swap_bytes( chunk.tev_kcolor[2] ); } - colorNumber = 0; - for (valnode=mxmlFindElement(setnode, setnode, "tev_k", NULL, NULL, MXML_DESCEND) ; valnode != NULL ; valnode=mxmlFindElement(valnode, setnode, "tev_k", NULL, NULL, MXML_DESCEND) ) + valnode=mxmlFindElement(setnode, setnode, "tev_k4", NULL, NULL, MXML_DESCEND); { + u32 red, green, blue, alpha; char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.tev_kcolor[colorNumber] = be32(strtoul(tempCoord, NULL, 16)); - colorNumber+=1; + + memset( tempCoord , 0 , 256 ); + strcpy(tempCoord, mxmlElementGetAttr(valnode, "r")); + red = strtoul(tempCoord, NULL, 16); + + memset( tempCoord , 0 , 256 ); + strcpy(tempCoord, mxmlElementGetAttr(valnode, "g")); + green = strtoul(tempCoord, NULL, 16); + + memset( tempCoord , 0 , 256 ); + strcpy(tempCoord, mxmlElementGetAttr(valnode, "b")); + blue = strtoul(tempCoord, NULL, 16); + + memset( tempCoord , 0 , 256 ); + strcpy(tempCoord, mxmlElementGetAttr(valnode, "a")); + alpha = strtoul(tempCoord, NULL, 16); + + chunk.tev_kcolor[3] = ( red << 24 ) | ( green << 16 ) | ( blue << 8 ) | alpha; + chunk.tev_kcolor[3] = int_swap_bytes( chunk.tev_kcolor[3] ); } } /* @@ -1671,6 +1851,7 @@ void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* bl brlyt_texref_chunk chunkTexRef; for(setnode = mxmlFindElement(subnode, subnode, "texture", NULL, NULL, MXML_DESCEND); setnode != NULL; setnode = mxmlFindElement(setnode, subnode, "texture", NULL, NULL, MXML_DESCEND)) { + int l; mxml_node_t *valnode; char temp[256]; if(mxmlElementGetAttr(setnode, "name") != NULL) @@ -1683,15 +1864,6 @@ void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* bl valnode=mxmlFindElement(setnode, setnode, "wrap_s", NULL, NULL, MXML_DESCEND); - char wraps[4][20]; - int l; - for ( l = 0 ; l < 4 ; l++ ) - memset( wraps , 0 , 20 ); - strcpy( wraps[0] , "GX_CLAMP" ); - strcpy( wraps[1] , "GX_REPEAT" ); - strcpy( wraps[2] , "GX_MIRROR" ); - strcpy( wraps[3] , "GX_MAXTEXWRAPMODE" ); - char tempCoord[256]; get_value(valnode, tempCoord, 256); chunkTexRef.wrap_s = strtoul(tempCoord, NULL, 16); @@ -1756,93 +1928,7 @@ void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* bl brlyt_tex_coordgen chunkUa3; for(setnode = mxmlFindElement(subnode, subnode, "CoordGen", NULL, NULL, MXML_DESCEND); setnode != NULL; setnode = mxmlFindElement(setnode, subnode, "CoordGen", NULL, NULL, MXML_DESCEND)) { - char tgen_types[4][20]; int l; - for ( l = 0 ; l < 4 ; l++ ) - memset( tgen_types , 0 , 20 ); - strcpy( tgen_types[0] , "GX_TG_MTX3x4" ); - strcpy( tgen_types[1] , "GX_TG_MTX2x4" ); - strcpy( tgen_types[2] , "GX_TG_BUMP0" ); - strcpy( tgen_types[3] , "GX_TG_BUMP1" ); - strcpy( tgen_types[4] , "GX_TG_BUMP2" ); - strcpy( tgen_types[5] , "GX_TG_BUMP3" ); - strcpy( tgen_types[6] , "GX_TG_BUMP4" ); - strcpy( tgen_types[7] , "GX_TG_BUMP5" ); - strcpy( tgen_types[8] , "GX_TG_BUMP6" ); - strcpy( tgen_types[9] , "GX_TG_BUMP7" ); - strcpy( tgen_types[10] , "GX_TG_SRTG" ); - - char tgen_src[21][20]; - for ( l = 0 ; l < 21 ; l++ ) - memset( tgen_src[l] , 0 , 20 ); - strcpy( tgen_src[0] , "GX_TG_POS" ); - strcpy( tgen_src[1] , "GX_TG_NRM" ); - strcpy( tgen_src[2] , "GX_TG_BINRM" ); - strcpy( tgen_src[3] , "GX_TG_TANGEN" ); - strcpy( tgen_src[4] , "GX_TG_TEX0" ); - strcpy( tgen_src[5] , "GX_TG_TEX1" ); - strcpy( tgen_src[6] , "GX_TG_TEX2" ); - strcpy( tgen_src[7] , "GX_TG_TEX3" ); - strcpy( tgen_src[8] , "GX_TG_TEX4" ); - strcpy( tgen_src[9] , "GX_TG_TEX5" ); - strcpy( tgen_src[10] , "GX_TG_TEX6" ); - strcpy( tgen_src[11] , "GX_TG_TEX7" ); - strcpy( tgen_src[12] , "GX_TG_TEXCOORD0" ); - strcpy( tgen_src[13] , "GX_TG_TEXCOORD1" ); - strcpy( tgen_src[14] , "GX_TG_TEXCOORD2" ); - strcpy( tgen_src[15] , "GX_TG_TEXCOORD3" ); - strcpy( tgen_src[16] , "GX_TG_TEXCOORD4" ); - strcpy( tgen_src[17] , "GX_TG_TEXCOORD5" ); - strcpy( tgen_src[18] , "GX_TG_TEXCOORD6" ); - strcpy( tgen_src[19] , "GX_TG_COLOR0" ); - strcpy( tgen_src[20] , "GX_TG_COLOR1" ); - - char mtxsrc[42][20]; - for ( l = 0 ; l < 42 ; l++ ) - memset( mtxsrc[l] , 0 , 20 ); - strcpy( mtxsrc[0] , "GX_PNMTX0" ); - strcpy( mtxsrc[1] , "GX_PNMTX1" ); - strcpy( mtxsrc[2] , "GX_PNMTX2" ); - strcpy( mtxsrc[3] , "GX_PNMTX3" ); - strcpy( mtxsrc[4] , "GX_PNMTX4" ); - strcpy( mtxsrc[5] , "GX_PNMTX5" ); - strcpy( mtxsrc[6] , "GX_PNMTX6" ); - strcpy( mtxsrc[7] , "GX_PNMTX7" ); - strcpy( mtxsrc[8] , "GX_PNMTX8" ); - strcpy( mtxsrc[9] , "GX_PNMTX9" ); - strcpy( mtxsrc[10] , "GX_TEXMTX0" ); - strcpy( mtxsrc[11] , "GX_TEXMTX1" ); - strcpy( mtxsrc[12] , "GX_TEXMTX2" ); - strcpy( mtxsrc[13] , "GX_TEXMTX3" ); - strcpy( mtxsrc[14] , "GX_TEXMTX4" ); - strcpy( mtxsrc[15] , "GX_TEXMTX5" ); - strcpy( mtxsrc[16] , "GX_TEXMTX6" ); - strcpy( mtxsrc[17] , "GX_TEXMTX7" ); - strcpy( mtxsrc[18] , "GX_TEXMTX8" ); - strcpy( mtxsrc[19] , "GX_TEXMTX9" ); - strcpy( mtxsrc[20] , "GX_IDENTITY" ); - strcpy( mtxsrc[21] , "GX_DTTMTX0" ); - strcpy( mtxsrc[22] , "GX_DTTMTX1" ); - strcpy( mtxsrc[23] , "GX_DTTMTX2" ); - strcpy( mtxsrc[24] , "GX_DTTMTX3" ); - strcpy( mtxsrc[25] , "GX_DTTMTX4" ); - strcpy( mtxsrc[26] , "GX_DTTMTX5" ); - strcpy( mtxsrc[27] , "GX_DTTMTX6" ); - strcpy( mtxsrc[28] , "GX_DTTMTX7" ); - strcpy( mtxsrc[29] , "GX_DTTMTX8" ); - strcpy( mtxsrc[30] , "GX_DTTMTX9" ); - strcpy( mtxsrc[31] , "GX_DTTMTX1" ); - strcpy( mtxsrc[32] , "GX_DTTMTX1" ); - strcpy( mtxsrc[33] , "GX_DTTMTX12" ); - strcpy( mtxsrc[34] , "GX_DTTMTX13" ); - strcpy( mtxsrc[35] , "GX_DTTMTX14" ); - strcpy( mtxsrc[36] , "GX_DTTMTX15" ); - strcpy( mtxsrc[37] , "GX_DTTMTX16" ); - strcpy( mtxsrc[38] , "GX_DTTMTX17" ); - strcpy( mtxsrc[39] , "GX_DTTMTX18" ); - strcpy( mtxsrc[40] , "GX_DTTMTX19" ); - strcpy( mtxsrc[41] , "GX_DTTIDENTITY" ); // actually 125 not 124 - mxml_node_t *valnode; char tempCoord[256]; @@ -1897,13 +1983,7 @@ void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* bl brlyt_tex_chanctrl chunkUa4; for(setnode = mxmlFindElement(subnode, subnode, "ChanControl", NULL, NULL, MXML_DESCEND); setnode != NULL; setnode = mxmlFindElement(setnode, subnode, "ChanControl", NULL, NULL, MXML_DESCEND)) { - char matsrc[2][20]; int l; - for ( l = 0 ; l < 2 ; l++ ) - memset( matsrc[l] , 0 , 20 ); - strcpy( matsrc[0] , "GX_SRC_REG" ); - strcpy( matsrc[1] , "GX_SRC_VTX" ); - mxml_node_t *valnode; char tempCoord[256]; @@ -1985,15 +2065,7 @@ void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* bl brlyt_tev_swapmodetable chunkUa6; for(setnode = mxmlFindElement(subnode, subnode, "TevSwapModeTable", NULL, NULL, MXML_DESCEND); setnode != NULL; setnode = mxmlFindElement(setnode, subnode, "TevSwapModeTable", NULL, NULL, MXML_DESCEND)) { - char tevcolor[4][20]; int l; - for ( l = 0 ; l < 4 ; l++ ) - memset( tevcolor[l] , 0 , 20 ); - strcpy( tevcolor[0] , "GX_CH_RED" ); - strcpy( tevcolor[1] , "GX_CH_GREEN" ); - strcpy( tevcolor[2] , "GX_CH_BLUE" ); - strcpy( tevcolor[3] , "GX_CH_ALPHA" ); - mxml_node_t *valnode; char tempCoord[256]; @@ -2237,21 +2309,7 @@ void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* bl brlyt_indtex_order chunkUa8; for(setnode = mxmlFindElement(subnode, subnode, "IndTextureOrder", NULL, NULL, MXML_DESCEND); setnode != NULL; setnode = mxmlFindElement(setnode, subnode, "IndTextureOrder", NULL, NULL, MXML_DESCEND)) { - char scale[10][20]; int l; - for ( l = 0 ; l < 10 ; l++ ) - memset( scale[l] , 0 , 20 ); - strcpy( scale[0] , "GX_ITS_1" ); - strcpy( scale[1] , "GX_ITS_2" ); - strcpy( scale[2] , "GX_ITS_4" ); - strcpy( scale[3] , "GX_ITS_8" ); - strcpy( scale[4] , "GX_ITS_16" ); - strcpy( scale[5] , "GX_ITS_32" ); - strcpy( scale[6] , "GX_ITS_64" ); - strcpy( scale[7] , "GX_ITS_128" ); - strcpy( scale[8] , "GX_ITS_256" ); - strcpy( scale[9] , "GX_MAX_ITSCALE" ); - mxml_node_t *valnode; char tempCoord[256]; @@ -2506,28 +2564,7 @@ void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* bl brlyt_alpha_compare chunkUaa; for(setnode = mxmlFindElement(subnode, subnode, "AlphaCompare", NULL, NULL, MXML_DESCEND); setnode != NULL; setnode = mxmlFindElement(setnode, subnode, "AlphaCompare", NULL, NULL, MXML_DESCEND)) { - char compare[8][20]; int l; - for ( l = 0 ; l < 8 ; l++ ) - memset( compare[l] , 0 , 20 ); - strcpy( compare[0] , "GX_NEVER" ); - strcpy( compare[1] , "GX_LESS" ); - strcpy( compare[2] , "GX_EQUAL" ); - strcpy( compare[3] , "GX_LEQUAL" ); - strcpy( compare[4] , "GX_GREATER" ); - strcpy( compare[5] , "GX_NEQUAL" ); - strcpy( compare[6] , "GX_GEQUAL" ); - strcpy( compare[7] , "GX_ALWAYS" ); - - char aop[5][20]; - for ( l = 0 ; l < 5 ; l++ ) - memset( aop[l] , 0 , 20 ); - strcpy( aop[0] , "GX_AOP_AND" ); - strcpy( aop[1] , "GX_AOP_OR" ); - strcpy( aop[2] , "GX_AOP_XOR" ); - strcpy( aop[3] , "GX_AOP_XNOR" ); - strcpy( aop[4] , "GX_MAX_ALPHAOP" ); - mxml_node_t *valnode; char tempCoord[256]; @@ -2584,48 +2621,7 @@ void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* bl brlyt_blend_mode chunkUab; for(setnode = mxmlFindElement(subnode, subnode, "BlendMode", NULL, NULL, MXML_DESCEND); setnode != NULL; setnode = mxmlFindElement(setnode, subnode, "BlendMode", NULL, NULL, MXML_DESCEND)) { - char blendmode[5][20]; int l; - for ( l = 0 ; l < 5 ; l++ ) - memset( blendmode[l] , 0 , 20 ); - strcpy( blendmode[0] , "GX_BM_NONE" ); - strcpy( blendmode[1] , "GX_BM_BLEND" ); - strcpy( blendmode[2] , "GX_BM_LOGIC" ); - strcpy( blendmode[3] , "GX_BM_SUBTRACT" ); - strcpy( blendmode[4] , "GX_MAX_BLENDMODE" ); - - char blendfactor[8][20]; - for ( l = 0 ; l < 8 ; l++ ) - memset( blendfactor[l] , 0 , 20 ); - strcpy( blendfactor[0] , "GX_BL_ZERO" ); - strcpy( blendfactor[1] , "GX_BL_ONE" ); - strcpy( blendfactor[2] , "GX_BL_SRCCLR" ); - strcpy( blendfactor[3] , "GX_BL_INVSRCCLR" ); - strcpy( blendfactor[4] , "GX_BL_SRCALPHA" ); - strcpy( blendfactor[5] , "GX_BL_INVSRCALPHA" ); - strcpy( blendfactor[6] , "GX_BL_DSTALPHA" ); - strcpy( blendfactor[7] , "GX_BL_INVDSTALPHA" ); - - char logicop[16][20]; - for ( l = 0 ; l < 16 ; l++ ) - memset( logicop[l] , 0 , 20 ); - strcpy( logicop[0] , "GX_LO_CLEAR" ); - strcpy( logicop[1] , "GX_LO_AND" ); - strcpy( logicop[2] , "GX_LO_REVAND" ); - strcpy( logicop[3] , "GX_LO_COPY" ); - strcpy( logicop[4] , "GX_LO_INVAND" ); - strcpy( logicop[5] , "GX_LO_NOOP" ); - strcpy( logicop[6] , "GX_LO_XOR" ); - strcpy( logicop[7] , "GX_LO_OR" ); - strcpy( logicop[8] , "GX_LO_NOR" ); - strcpy( logicop[9] , "GX_LO_EQUIV" ); - strcpy( logicop[10] , "GX_LO_INV" ); - strcpy( logicop[11] , "GX_LO_REVOR" ); - strcpy( logicop[12] , "GX_LO_INVCOPY" ); - strcpy( logicop[13] , "GX_LO_INVOR" ); - strcpy( logicop[14] , "GX_LO_NAND" ); - strcpy( logicop[15] , "GX_LO_SET" ); - mxml_node_t *valnode; char tempCoord[256]; @@ -2702,522 +2698,19 @@ void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* bl } if ( memcmp(temp, pan1, sizeof(pan1)) == 0) { - brlyt_pane_chunk chunk; - char temp[256]; - if(mxmlElementGetAttr(node, "name") != NULL) - strcpy(temp, mxmlElementGetAttr(node, "name")); - else{ - printf("No name attribute found!\nQuitting!\n"); - exit(1); - } - memset(chunk.name, 0, 24); - strcpy(chunk.name, temp); - - mxml_node_t *subnode = mxmlFindElement(node, node, "translate", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - mxml_node_t *valnode; - valnode = mxmlFindElement(subnode, subnode, "x", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.XTrans = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "y", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.YTrans = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "z", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.ZTrans = float_swap_bytes(atof(tempCoord)); - } - } - subnode = mxmlFindElement(node, node, "rotate", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - mxml_node_t *valnode; - valnode = mxmlFindElement(subnode, subnode, "x", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.XRotate = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "y", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.YRotate = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "z", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.ZRotate = float_swap_bytes(atof(tempCoord)); - } - } - subnode = mxmlFindElement(node, node, "scale", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - mxml_node_t *valnode; - valnode = mxmlFindElement(subnode, subnode, "x", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.XScale = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "y", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.YScale = float_swap_bytes(atof(tempCoord)); - } - } - subnode = mxmlFindElement(node, node, "size", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - mxml_node_t *valnode; - valnode = mxmlFindElement(subnode, subnode, "width", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.width = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "height", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.height = float_swap_bytes(atof(tempCoord)); - } - } - - u8 flag1 = 0; - subnode = mxmlFindElement(node, node, "visible", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - flag1 |= strtol(tempCoord, NULL, 16); - } - subnode = mxmlFindElement(node, node, "WidescreenAffected", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - flag1 |= ( strtol(tempCoord, NULL, 16) << 1 ); - } - subnode = mxmlFindElement(node, node, "flag", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - flag1 |= ( strtol(tempCoord, NULL, 16) << 2 ); - } - chunk.flag1 = flag1; - subnode = mxmlFindElement(node, node, "origin", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char origins[9][15]; - int o; - for ( o = 0 ; o < 8 ; o++ ) - memset( origins[o] , 0 , 20 ); - strcpy( origins[0] , "TOP LEFT" ); - strcpy( origins[1] , "TOP CENTER" ); - strcpy( origins[2] , "TOP RIGHT" ); - strcpy( origins[3] , "MIDDLE LEFT" ); - strcpy( origins[4] , "MIDDLE CENTER" ); - strcpy( origins[5] , "MIDDLE RIGHT" ); - strcpy( origins[6] , "BOTTOM LEFT" ); - strcpy( origins[7] , "BOTTOM CENTER" ); - strcpy( origins[8] , "BOTTOM RIGHT" ); - - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - chunk.origin = strtol(tempCoord, NULL, 16); - int i; - for ( i = 0 ; i < 9 ; i++ ) { - if ( strncmp( origins[i] , tempCoord , 15 ) == 0 ) { - chunk.origin = i; - break; - } - } - } - subnode = mxmlFindElement(node, node, "alpha", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - chunk.alpha = strtol(tempCoord, NULL, 16); - } - subnode = mxmlFindElement(node, node, "padding", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - chunk.pad = strtol(tempCoord, NULL, 16); - } - fwrite(&chunk, sizeof(chunk), 1, fp); - *fileOffset = *fileOffset + sizeof(chunk); + WritePane( tree, node, tagblob, blobsize, fp, fileOffset ); } if ( memcmp(temp, bnd1, sizeof(bnd1)) == 0) { - brlyt_pane_chunk chunk; - char temp[256]; - if(mxmlElementGetAttr(node, "name") != NULL) - strcpy(temp, mxmlElementGetAttr(node, "name")); - else{ - printf("No name attribute found!\nQuitting!\n"); - exit(1); - } - memset(chunk.name, 0, 24 * sizeof(char)); - strcpy(chunk.name, temp); - - mxml_node_t *subnode = mxmlFindElement(node, node, "translate", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - mxml_node_t *valnode; - valnode = mxmlFindElement(subnode, subnode, "x", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.XTrans = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "y", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.YTrans = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "z", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.ZTrans = float_swap_bytes(atof(tempCoord)); - } - } - subnode = mxmlFindElement(node, node, "rotate", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - mxml_node_t *valnode; - valnode = mxmlFindElement(subnode, subnode, "x", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.XRotate = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "y", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.YRotate = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "z", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.ZRotate = float_swap_bytes(atof(tempCoord)); - } - } - subnode = mxmlFindElement(node, node, "scale", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - mxml_node_t *valnode; - valnode = mxmlFindElement(subnode, subnode, "x", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.XScale = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "y", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.YScale = float_swap_bytes(atof(tempCoord)); - } - } - subnode = mxmlFindElement(node, node, "size", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - mxml_node_t *valnode; - valnode = mxmlFindElement(subnode, subnode, "width", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.width = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "height", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.height = float_swap_bytes(atof(tempCoord)); - } - } - - u8 flag1 = 0; - subnode = mxmlFindElement(node, node, "visible", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - flag1 |= strtol(tempCoord, NULL, 16); - } - subnode = mxmlFindElement(node, node, "WidescreenAffected", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - flag1 |= ( strtol(tempCoord, NULL, 16) << 1 ); - } - subnode = mxmlFindElement(node, node, "flag", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - flag1 |= ( strtol(tempCoord, NULL, 16) << 2 ); - } - chunk.flag1 = flag1; - subnode = mxmlFindElement(node, node, "origin", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char origins[9][15]; - int o; - for ( o = 0 ; o < 8 ; o++ ) - memset( origins[o] , 0 , 20 ); - strcpy( origins[0] , "TOP LEFT" ); - strcpy( origins[1] , "TOP CENTER" ); - strcpy( origins[2] , "TOP RIGHT" ); - strcpy( origins[3] , "MIDDLE LEFT" ); - strcpy( origins[4] , "MIDDLE CENTER" ); - strcpy( origins[5] , "MIDDLE RIGHT" ); - strcpy( origins[6] , "BOTTOM LEFT" ); - strcpy( origins[7] , "BOTTOM CENTER" ); - strcpy( origins[8] , "BOTTOM RIGHT" ); - - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - chunk.origin = strtol(tempCoord, NULL, 16); - int i; - for ( i = 0 ; i < 9 ; i++ ) { - if ( strncmp( origins[i] , tempCoord , 15 ) == 0 ) { - chunk.origin = i; - break; - } - } - } - subnode = mxmlFindElement(node, node, "alpha", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - chunk.alpha = strtol(tempCoord, NULL, 16); - } - subnode = mxmlFindElement(node, node, "padding", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - chunk.pad = strtol(tempCoord, NULL, 16); - } - fwrite(&chunk, sizeof(chunk), 1, fp); - *fileOffset = *fileOffset + sizeof(chunk); + WritePane( tree, node, tagblob, blobsize, fp, fileOffset ); } if ( memcmp(temp, wnd1, sizeof(wnd1)) == 0) { - brlyt_pane_chunk chunk; - char temp[256]; - if(mxmlElementGetAttr(node, "name") != NULL) - strcpy(temp, mxmlElementGetAttr(node, "name")); - else{ - printf("No name attribute found!\nQuitting!\n"); - exit(1); - } - memset(chunk.name, 0, 24 * sizeof(char)); - strcpy(chunk.name, temp); - - mxml_node_t *subnode = mxmlFindElement(node, node, "translate", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - mxml_node_t *valnode; - valnode = mxmlFindElement(subnode, subnode, "x", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.XTrans = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "y", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.YTrans = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "z", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.ZTrans = float_swap_bytes(atof(tempCoord)); - } - } - subnode = mxmlFindElement(node, node, "rotate", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - mxml_node_t *valnode; - valnode = mxmlFindElement(subnode, subnode, "x", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.XRotate = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "y", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.YRotate = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "z", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.ZRotate = float_swap_bytes(atof(tempCoord)); - } - } - subnode = mxmlFindElement(node, node, "scale", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - mxml_node_t *valnode; - valnode = mxmlFindElement(subnode, subnode, "x", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.XScale = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "y", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.YScale = float_swap_bytes(atof(tempCoord)); - } - } - subnode = mxmlFindElement(node, node, "size", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - mxml_node_t *valnode; - valnode = mxmlFindElement(subnode, subnode, "width", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.width = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "height", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.height = float_swap_bytes(atof(tempCoord)); - } - } - - u8 flag1 = 0; - subnode = mxmlFindElement(node, node, "visible", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - flag1 |= strtol(tempCoord, NULL, 16); - } - subnode = mxmlFindElement(node, node, "WidescreenAffected", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - flag1 |= ( strtol(tempCoord, NULL, 16) << 1 ); - } - subnode = mxmlFindElement(node, node, "flag", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - flag1 |= ( strtol(tempCoord, NULL, 16) << 2 ); - } - chunk.flag1 = flag1; - subnode = mxmlFindElement(node, node, "origin", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char origins[9][15]; - int o; - for ( o = 0 ; o < 8 ; o++ ) - memset( origins[o] , 0 , 20 ); - strcpy( origins[0] , "TOP LEFT" ); - strcpy( origins[1] , "TOP CENTER" ); - strcpy( origins[2] , "TOP RIGHT" ); - strcpy( origins[3] , "MIDDLE LEFT" ); - strcpy( origins[4] , "MIDDLE CENTER" ); - strcpy( origins[5] , "MIDDLE RIGHT" ); - strcpy( origins[6] , "BOTTOM LEFT" ); - strcpy( origins[7] , "BOTTOM CENTER" ); - strcpy( origins[8] , "BOTTOM RIGHT" ); - - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - chunk.origin = strtol(tempCoord, NULL, 16); - int i; - for ( i = 0 ; i < 9 ; i++ ) { - if ( strncmp( origins[i] , tempCoord , 15 ) == 0 ) { - chunk.origin = i; - break; - } - } - } - subnode = mxmlFindElement(node, node, "alpha", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - chunk.alpha = strtol(tempCoord, NULL, 16); - } - subnode = mxmlFindElement(node, node, "padding", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - chunk.pad = strtol(tempCoord, NULL, 16); - } - fwrite(&chunk, sizeof(chunk), 1, fp); - *fileOffset = *fileOffset + sizeof(chunk); + WritePane( tree, node, tagblob, blobsize, fp, fileOffset ); int i; brlyt_wnd wndy; + mxml_node_t * subnode; subnode = mxmlFindElement(node, node, "wnd", NULL, NULL, MXML_DESCEND); if (subnode != NULL) { @@ -3366,176 +2859,10 @@ void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* bl } if ( memcmp(temp, txt1, sizeof(txt1)) == 0) { - brlyt_pane_chunk chunk; - brlyt_text_chunk chunk2; - char temp[256]; - if(mxmlElementGetAttr(node, "name") != NULL) - strcpy(temp, mxmlElementGetAttr(node, "name")); - else{ - printf("No name attribute found!\nQuitting!\n"); - exit(1); - } - memset(chunk.name, 0, 24 * sizeof(char)); - strcpy(chunk.name, temp); - chunk2.mat_num = short_swap_bytes(findMatOffset(temp)); - - mxml_node_t *subnode = mxmlFindElement(node, node, "translate", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - mxml_node_t *valnode; - valnode = mxmlFindElement(subnode, subnode, "x", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.XTrans = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "y", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.YTrans = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "z", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.ZTrans = float_swap_bytes(atof(tempCoord)); - } - } - subnode = mxmlFindElement(node, node, "rotate", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - mxml_node_t *valnode; - valnode = mxmlFindElement(subnode, subnode, "x", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.XRotate = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "y", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.YRotate = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "z", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.ZRotate = float_swap_bytes(atof(tempCoord)); - } - } - subnode = mxmlFindElement(node, node, "scale", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - mxml_node_t *valnode; - valnode = mxmlFindElement(subnode, subnode, "x", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.XScale = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "y", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.YScale = float_swap_bytes(atof(tempCoord)); - } - } - subnode = mxmlFindElement(node, node, "size", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - mxml_node_t *valnode; - valnode = mxmlFindElement(subnode, subnode, "width", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.width = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "height", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.height = float_swap_bytes(atof(tempCoord)); - } - } - - u8 flag1 = 0; - subnode = mxmlFindElement(node, node, "visible", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - flag1 |= strtol(tempCoord, NULL, 16); - } - subnode = mxmlFindElement(node, node, "WidescreenAffected", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - flag1 |= ( strtol(tempCoord, NULL, 16) << 1 ); - } - subnode = mxmlFindElement(node, node, "flag", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - flag1 |= ( strtol(tempCoord, NULL, 16) << 2 ); - } - chunk.flag1 = flag1; - subnode = mxmlFindElement(node, node, "origin", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char origins[9][15]; - int o; - for ( o = 0 ; o < 8 ; o++ ) - memset( origins[o] , 0 , 20 ); - strcpy( origins[0] , "TOP LEFT" ); - strcpy( origins[1] , "TOP CENTER" ); - strcpy( origins[2] , "TOP RIGHT" ); - strcpy( origins[3] , "MIDDLE LEFT" ); - strcpy( origins[4] , "MIDDLE CENTER" ); - strcpy( origins[5] , "MIDDLE RIGHT" ); - strcpy( origins[6] , "BOTTOM LEFT" ); - strcpy( origins[7] , "BOTTOM CENTER" ); - strcpy( origins[8] , "BOTTOM RIGHT" ); - - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - chunk.origin = strtol(tempCoord, NULL, 16); - int i; - for ( i = 0 ; i < 9 ; i++ ) { - if ( strncmp( origins[i] , tempCoord , 15 ) == 0 ) { - chunk.origin = i; - break; - } - } - } - subnode = mxmlFindElement(node, node, "alpha", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - chunk.alpha = strtol(tempCoord, NULL, 16); - } - subnode = mxmlFindElement(node, node, "padding", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - chunk.pad = strtol(tempCoord, NULL, 16); - } + WritePane( tree, node, tagblob, blobsize, fp, fileOffset ); + brlyt_text_chunk chunk2; + mxml_node_t * subnode; subnode = mxmlFindElement(node, node, "font", NULL, NULL, MXML_DESCEND); if (subnode != NULL) { @@ -3581,30 +2908,36 @@ void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* bl valnode = mxmlFindElement(subnode, subnode, "alignment", NULL, NULL, MXML_DESCEND); if (valnode != NULL) { - char alignments[9][15]; - int o; - for ( o = 0 ; o < 8 ; o++ ) - memset( alignments[o] , 0 , 20 ); - strcpy( alignments[0] , "TOP LEFT" ); - strcpy( alignments[1] , "TOP CENTER" ); - strcpy( alignments[2] , "TOP RIGHT" ); - strcpy( alignments[3] , "MIDDLE LEFT" ); - strcpy( alignments[4] , "MIDDLE CENTER" ); - strcpy( alignments[5] , "MIDDLE RIGHT" ); - strcpy( alignments[6] , "BOTTOM LEFT" ); - strcpy( alignments[7] , "BOTTOM CENTER" ); - strcpy( alignments[8] , "BOTTOM RIGHT" ); - - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - chunk2.alignment = strtol(tempCoord, NULL, 16); int i; - for ( i = 0 ; i < 9 ; i++ ) { - if ( strncmp( alignments[i] , tempCoord , 15 ) == 0 ) { - chunk2.alignment = i; + char originL , originH; + char temp[256]; + memset( temp , 0 , 256 ); + if(mxmlElementGetAttr(valnode, "x") != NULL) + strcpy(temp, mxmlElementGetAttr(valnode, "x")); + else{ + printf("No x attribute found!\nQuitting!\n"); + exit(1); + } + for ( i = 0 ; i < 3 ; i++ ) { + if ( strncmp( originX[i] , temp , 15 ) == 0 ) { + originL = i; + break; + } + } + memset( temp , 0 , 256 ); + if(mxmlElementGetAttr(valnode, "y") != NULL) + strcpy(temp, mxmlElementGetAttr(valnode, "y")); + else{ + printf("No y attribute found!\nQuitting!\n"); + exit(1); + } + for ( i = 0 ; i < 3 ; i++ ) { + if ( strncmp( originY[i] , temp , 15 ) == 0 ) { + originH = i; break; } } + chunk2.alignment = ( originH * 3 ) + ( originL ); } } @@ -3618,19 +2951,85 @@ void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* bl chunk2.len2 = strtoul(tempCoord+5, NULL, 16); chunk2.len2 = short_swap_bytes(chunk2.len2); } - subnode = mxmlFindElement(node, node, "color1", NULL, NULL, MXML_DESCEND); + subnode = mxmlFindElement(node, node, "topcolor", NULL, NULL, MXML_DESCEND); if (subnode != NULL) { + u32 red, green, blue, alpha; char tempCoord[256]; - get_value(subnode, tempCoord, 256); - chunk2.color1 = be32(strtoul(tempCoord, NULL, 16)); + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(subnode, "r") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(subnode, "r")); + else { + printf("No r attribute found!\nQuitting!\n"); + exit(1); + } + red = strtoul(tempCoord, NULL, 16); + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(subnode, "g") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(subnode, "g")); + else { + printf("No g attribute found!\nQuitting!\n"); + exit(1); + } + green = strtoul(tempCoord, NULL, 16); + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(subnode, "b") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(subnode, "b")); + else { + printf("No b attribute found!\nQuitting!\n"); + exit(1); + } + blue = strtoul(tempCoord, NULL, 16); + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(subnode, "a") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(subnode, "a")); + else { + printf("No a attribute found!\nQuitting!\n"); + exit(1); + } + alpha = strtoul(tempCoord, NULL, 16); + chunk2.color1 = ( red << 24 ) | ( green << 16 ) | ( blue << 8 ) | alpha; + chunk2.color1 = be32( chunk2.color1 ); } - subnode = mxmlFindElement(node, node, "color2", NULL, NULL, MXML_DESCEND); + subnode = mxmlFindElement(node, node, "bottomcolor", NULL, NULL, MXML_DESCEND); if (subnode != NULL) { + u32 red, green, blue, alpha; char tempCoord[256]; - get_value(subnode, tempCoord, 256); - chunk2.color2 = be32(strtoul(tempCoord, NULL, 16)); + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(subnode, "r") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(subnode, "r")); + else { + printf("No r attribute found!\nQuitting!\n"); + exit(1); + } + red = strtoul(tempCoord, NULL, 16); + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(subnode, "g") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(subnode, "g")); + else { + printf("No g attribute found!\nQuitting!\n"); + exit(1); + } + green = strtoul(tempCoord, NULL, 16); + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(subnode, "b") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(subnode, "b")); + else { + printf("No b attribute found!\nQuitting!\n"); + exit(1); + } + blue = strtoul(tempCoord, NULL, 16); + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(subnode, "a") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(subnode, "a")); + else { + printf("No a attribute found!\nQuitting!\n"); + exit(1); + } + alpha = strtoul(tempCoord, NULL, 16); + chunk2.color2 = ( red << 24 ) | ( green << 16 ) | ( blue << 8 ) | alpha; + chunk2.color2 = be32( chunk2.color2 ); } u16 textyLength = short_swap_bytes(chunk2.len2); if ((textyLength % 4) != 0) @@ -3653,8 +3052,6 @@ void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* bl texty[w] = (u8)strtoul((char*)temp, NULL, 16); } } - fwrite(&chunk, sizeof(chunk), 1, fp); - *fileOffset = *fileOffset + sizeof(chunk); chunk2.name_offs=be32(0x74); chunk2.pad[0]= 0;chunk2.pad[1]=0;chunk2.pad[2]=0; @@ -3671,175 +3068,10 @@ void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* bl } if ( memcmp(temp, pic1, sizeof(pic1)) == 0) { - brlyt_pane_chunk chunk; - char temp[256]; - if(mxmlElementGetAttr(node, "name") != NULL) - strcpy(temp, mxmlElementGetAttr(node, "name")); - else{ - printf("No name attribute found!\nQuitting!\n"); - exit(1); - } - memset(chunk.name, 0, 24 * sizeof(char)); - strcpy(chunk.name, temp); - - mxml_node_t *subnode = mxmlFindElement(node, node, "translate", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - mxml_node_t *valnode; - valnode = mxmlFindElement(subnode, subnode, "x", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.XTrans = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "y", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.YTrans = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "z", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.ZTrans = float_swap_bytes(atof(tempCoord)); - } - } - subnode = mxmlFindElement(node, node, "rotate", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - mxml_node_t *valnode; - valnode = mxmlFindElement(subnode, subnode, "x", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.XRotate = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "y", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.YRotate = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "z", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.ZRotate = float_swap_bytes(atof(tempCoord)); - } - } - subnode = mxmlFindElement(node, node, "scale", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - mxml_node_t *valnode; - valnode = mxmlFindElement(subnode, subnode, "x", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.XScale = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "y", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.YScale = float_swap_bytes(atof(tempCoord)); - } - } - subnode = mxmlFindElement(node, node, "size", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - mxml_node_t *valnode; - valnode = mxmlFindElement(subnode, subnode, "width", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.width = float_swap_bytes(atof(tempCoord)); - } - valnode = mxmlFindElement(subnode, subnode, "height", NULL, NULL, MXML_DESCEND); - if (valnode != NULL) - { - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - chunk.height = float_swap_bytes(atof(tempCoord)); - } - } - - u8 flag1 = 0; - subnode = mxmlFindElement(node, node, "visible", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - flag1 |= strtol(tempCoord, NULL, 16); - } - subnode = mxmlFindElement(node, node, "WidescreenAffected", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - flag1 |= ( strtol(tempCoord, NULL, 16) << 1 ); - } - subnode = mxmlFindElement(node, node, "flag", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - flag1 |= ( strtol(tempCoord, NULL, 16) << 2 ); - } - chunk.flag1 = flag1; - subnode = mxmlFindElement(node, node, "origin", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char origins[9][15]; - int o; - for ( o = 0 ; o < 8 ; o++ ) - memset( origins[o] , 0 , 20 ); - strcpy( origins[0] , "TOP LEFT" ); - strcpy( origins[1] , "TOP CENTER" ); - strcpy( origins[2] , "TOP RIGHT" ); - strcpy( origins[3] , "MIDDLE LEFT" ); - strcpy( origins[4] , "MIDDLE CENTER" ); - strcpy( origins[5] , "MIDDLE RIGHT" ); - strcpy( origins[6] , "BOTTOM LEFT" ); - strcpy( origins[7] , "BOTTOM CENTER" ); - strcpy( origins[8] , "BOTTOM RIGHT" ); - - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - chunk.origin = strtol(tempCoord, NULL, 16); - int i; - for ( i = 0 ; i < 9 ; i++ ) { - if ( strncmp( origins[i] , tempCoord , 15 ) == 0 ) { - chunk.origin = i; - break; - } - } - } - subnode = mxmlFindElement(node, node, "alpha", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - chunk.alpha = strtol(tempCoord, NULL, 16); - } - subnode = mxmlFindElement(node, node, "padding", NULL, NULL, MXML_DESCEND); - if (subnode != NULL) - { - char tempCoord[256]; - get_value(subnode, tempCoord, 256); - chunk.pad = strtol(tempCoord, NULL, 16); - } + WritePane( tree, node, tagblob, blobsize, fp, fileOffset ); brlyt_pic_chunk chunk2; + mxml_node_t * subnode; subnode = mxmlFindElement(node, node, "material", NULL, NULL, MXML_DESCEND); if (subnode != NULL) { @@ -3857,39 +3089,168 @@ void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* bl { mxml_node_t *valnode; int i=0; - for(valnode = mxmlFindElement(subnode, subnode, "vtx", NULL, NULL, MXML_DESCEND); valnode != NULL; valnode = mxmlFindElement(valnode, subnode, "vtx", NULL, NULL, MXML_DESCEND)) + valnode = mxmlFindElement(subnode, subnode, "vtxColorTL", NULL, NULL, MXML_DESCEND); + if ( valnode != NULL ) { u32 red, green, blue, alpha; - mxml_node_t *subvalnode; - subvalnode = mxmlFindElement( valnode, valnode, "red", NULL, NULL, MXML_DESCEND); - if ( subvalnode != NULL ) { - - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - red = strtoul(tempCoord, NULL, 16); + char tempCoord[256]; + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(valnode, "r") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(valnode, "r")); + else { + printf("No r attribute found!\nQuitting!\n"); + exit(1); } - subvalnode = mxmlFindElement( valnode,valnode,"green", NULL, NULL, MXML_DESCEND); - if ( subvalnode != NULL ) { - - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - green = strtoul(tempCoord, NULL, 16); + red = strtoul(tempCoord, NULL, 16); + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(valnode, "g") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(valnode, "g")); + else { + printf("No g attribute found!\nQuitting!\n"); + exit(1); } - subvalnode = mxmlFindElement( valnode, valnode, "blue",NULL, NULL, MXML_DESCEND); - if ( subvalnode != NULL ) { - - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - blue = strtoul(tempCoord, NULL, 16); + green = strtoul(tempCoord, NULL, 16); + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(valnode, "b") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(valnode, "b")); + else { + printf("No b attribute found!\nQuitting!\n"); + exit(1); } - subvalnode = mxmlFindElement( valnode, valnode, "alpha",NULL,NULL, MXML_DESCEND); - if ( subvalnode != NULL ) { - - char tempCoord[256]; - get_value(valnode, tempCoord, 256); - alpha = strtoul(tempCoord, NULL, 16); + blue = strtoul(tempCoord, NULL, 16); + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(valnode, "a") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(valnode, "a")); + else { + printf("No a attribute found!\nQuitting!\n"); + exit(1); + } + alpha = strtoul(tempCoord, NULL, 16); + chunk2.vtx_colors[i] = ( red << 24 ) | ( green << 16 ) | ( blue << 8 ) | alpha; + chunk2.vtx_colors[i] = int_swap_bytes( chunk2.vtx_colors[i] ); + i++; + } + valnode = mxmlFindElement(subnode, subnode, "vtxColorTR", NULL, NULL, MXML_DESCEND); + if ( valnode != NULL ) + { + u32 red, green, blue, alpha; + char tempCoord[256]; + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(valnode, "r") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(valnode, "r")); + else { + printf("No r attribute found!\nQuitting!\n"); + exit(1); + } + red = strtoul(tempCoord, NULL, 16); + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(valnode, "g") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(valnode, "g")); + else { + printf("No g attribute found!\nQuitting!\n"); + exit(1); + } + green = strtoul(tempCoord, NULL, 16); + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(valnode, "b") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(valnode, "b")); + else { + printf("No b attribute found!\nQuitting!\n"); + exit(1); + } + blue = strtoul(tempCoord, NULL, 16); + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(valnode, "a") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(valnode, "a")); + else { + printf("No a attribute found!\nQuitting!\n"); + exit(1); } + alpha = strtoul(tempCoord, NULL, 16); chunk2.vtx_colors[i] = ( red << 24 ) | ( green << 16 ) | ( blue << 8 ) | alpha; + chunk2.vtx_colors[i] = int_swap_bytes( chunk2.vtx_colors[i] ); + i++; + } + valnode = mxmlFindElement(subnode, subnode, "vtxColorBL", NULL, NULL, MXML_DESCEND); + if ( valnode != NULL ) + { + u32 red, green, blue, alpha; + char tempCoord[256]; + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(valnode, "r") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(valnode, "r")); + else { + printf("No r attribute found!\nQuitting!\n"); + exit(1); + } + red = strtoul(tempCoord, NULL, 16); + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(valnode, "g") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(valnode, "g")); + else { + printf("No g attribute found!\nQuitting!\n"); + exit(1); + } + green = strtoul(tempCoord, NULL, 16); + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(valnode, "b") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(valnode, "b")); + else { + printf("No b attribute found!\nQuitting!\n"); + exit(1); + } + blue = strtoul(tempCoord, NULL, 16); + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(valnode, "a") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(valnode, "a")); + else { + printf("No a attribute found!\nQuitting!\n"); + exit(1); + } + alpha = strtoul(tempCoord, NULL, 16); + chunk2.vtx_colors[i] = ( red << 24 ) | ( green << 16 ) | ( blue << 8 ) | alpha; + chunk2.vtx_colors[i] = int_swap_bytes( chunk2.vtx_colors[i] ); + i++; + } + valnode = mxmlFindElement(subnode, subnode, "vtxColorBR", NULL, NULL, MXML_DESCEND); + if ( valnode != NULL ) + { + u32 red, green, blue, alpha; + char tempCoord[256]; + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(valnode, "r") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(valnode, "r")); + else { + printf("No r attribute found!\nQuitting!\n"); + exit(1); + } + red = strtoul(tempCoord, NULL, 16); + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(valnode, "g") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(valnode, "g")); + else { + printf("No g attribute found!\nQuitting!\n"); + exit(1); + } + green = strtoul(tempCoord, NULL, 16); + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(valnode, "b") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(valnode, "b")); + else { + printf("No b attribute found!\nQuitting!\n"); + exit(1); + } + blue = strtoul(tempCoord, NULL, 16); + memset( tempCoord , 0 , 256 ); + if ( mxmlElementGetAttr(valnode, "a") != NULL) + strcpy(tempCoord, mxmlElementGetAttr(valnode, "a")); + else { + printf("No a attribute found!\nQuitting!\n"); + exit(1); + } + alpha = strtoul(tempCoord, NULL, 16); + chunk2.vtx_colors[i] = ( red << 24 ) | ( green << 16 ) | ( blue << 8 ) | alpha; + chunk2.vtx_colors[i] = int_swap_bytes( chunk2.vtx_colors[i] ); i++; } } @@ -3918,8 +3279,6 @@ void WriteBRLYTEntry(mxml_node_t *tree, mxml_node_t *node, u8** tagblob, u32* bl sets++; } } - fwrite(&chunk, sizeof(chunk), 1, fp); - *fileOffset = *fileOffset + sizeof(chunk); chunk2.num_texcoords = (sets - 1); chunk2.padding = 0; fwrite(&chunk2, sizeof(chunk2), 1, fp); @@ -4008,6 +3367,8 @@ void WriteBRLYTHeader(brlyt_header rlythead, FILE* fp) void write_brlyt(char *infile, char *outfile) { + SetupConstants(); + u32 fileOffset = 0; FILE* fpx = fopen(infile, "r"); if(fpx == NULL) { @@ -7,7 +7,7 @@ #define BENZIN_VERSION_MAJOR 1 #define BENZIN_VERSION_MINOR 9 -#define BENZIN_VERSION_BUILD 2 +#define BENZIN_VERSION_BUILD 4 #define BENZIN_VERSION_OTHER "BETA" #define INFORMATION_TEXT \ @@ -91,7 +91,7 @@ const char *whitespace_cb(mxml_node_t *node, int where) } if (where == 3 || where == 1){ return ""; - }else if(((node->prev && where == 0) || node->parent) && !(where == 2 && strncmp(name, "ua", 2) && strcmp(name, "rotate") && strcmp(name, "scale") && strcmp(name, "translate") && strcmp(name, "entries") && strcmp(name, "xmlyt") && strcmp(name, "xmlan") && strcmp(name, "entries") && strcmp(name, "triplet") && strcmp(name, "pair") && strcmp(name, "entry") && strcmp(name, "pane") && (strcmp(name, "tag") && strcmp(name, "size") && strcmp(name, "material") && strcmp(name, "vtx") && strcmp(name, "colors") && strcmp(name, "subs") && strcmp(name, "font") && strcmp(name, "wnd4") && strcmp(name, "wnd4mat") && strcmp(name, "set") && strcmp(name, "coordinates") && strcmp(name, "TevStage") && strcmp(name, "texture") && strcmp(name, "TextureSRT") && strcmp(name, "CoordGen") && strcmp(name, "ChanControl") && strcmp(name, "MaterialColor") && strcmp(name, "TevSwapModeTable") && strcmp(name, "IndTextureSRT") && strcmp(name, "IndTextureOrder") && strcmp(name, "AlphaCompare") && strcmp(name, "BlendMode") )) ){ + }else if(((node->prev && where == 0) || node->parent) && !(where == 2 && strcmp(name, "rotate") && strcmp(name, "scale") && strcmp(name, "translate") && strcmp(name, "xmlyt") && strcmp(name, "xmlan") && strcmp(name, "entries") && strcmp(name, "triplet") && strcmp(name, "pair") && strcmp(name, "entry") && strcmp(name, "pane") && (strcmp(name, "tag") && strcmp(name, "size") && strcmp(name, "material") && strcmp(name, "vtx") && strcmp(name, "colors") && strcmp(name, "subs") && strcmp(name, "font") && strcmp(name, "wnd4") && strcmp(name, "wnd4mat") && strcmp(name, "set") && strcmp(name, "coordinates") && strcmp(name, "TevStage") && strcmp(name, "texture") && strcmp(name, "TextureSRT") && strcmp(name, "CoordGen") && strcmp(name, "ChanControl") && strcmp(name, "MaterialColor") && strcmp(name, "TevSwapModeTable") && strcmp(name, "IndTextureSRT") && strcmp(name, "IndTextureOrder") && strcmp(name, "AlphaCompare") && strcmp(name, "BlendMode") )) ){ sprintf( xmlbuff , "\n%s" , tab_buffer ); }else{ return ""; diff --git a/xmlantut.txt b/xmlantut.txt index 9548d47..bc9b8d7 100644 --- a/xmlantut.txt +++ b/xmlantut.txt @@ -10,6 +10,7 @@ Animation Types ....................................................... [LAN02] RLTP .............................................................. [LAN06] RLVI .............................................................. [LAN07] RLTS .............................................................. [LAN08] + RLIM .............................................................. [LAN09] =============================================================================== @@ -82,11 +83,11 @@ Macro table: | X Translation | 0x00 | The X location relative to the starting position. | | Y Translation | 0x01 | The Y location relative to the starting position. | | Z Translation | 0x02 | The Z location relative to the starting position. | -| 0x03 | 0x03 | Unknown. | -| 0x04 | 0x04 | Unknown. | -| Angle | 0x05 | The rotation relative to the starting rotation. | -| X Zoom | 0x06 | X zooming relative to starting X zoom. | -| Y Zoom | 0x07 | Y zooming relative to starting Y zoom. | +| X Rotate | 0x03 | The X rotation relative to the starting rotation. | +| Y Rotate | 0x04 | The Y rotation relative to the starting rotation. | +| Z Rotate | 0x05 | The Z rotation relative to the starting rotation. | +| X Scale | 0x06 | X zooming relative to starting X zoom. | +| Y Scale | 0x07 | Y zooming relative to starting Y zoom. | | Width | 0x08 | X width. To perform clipping. | | Height | 0x09 | Y width. To perform clipping. | | 0x0A | 0x0A | Unknown. | @@ -108,9 +109,25 @@ This tag type is for vertex colors. The only use of it that I've seen is with the entry type being 16. /-----------------------------------------------------------------------------\ -| Entry Type | Value | -|------------|----------------------------------------------------------------| -| 16 | Alpha. | +| Entry Type | Value | +|---------------------|-------------------------------------------------------| +| Top Left Red | Red color element of top left vertex | +| Top Left Green | Green color element of top left vertex | +| Top Left Blue | Blue color element of top left vertex | +| Top Left Alpha | Alpha color element of top left vertex | +| Top Right Red | Red color element of top right vertex | +| Top Right Green | Green color element of top right vertex | +| Top Right Blue | Blue color element of top right vertex | +| Top Right Alpha | Alpha color element of top right vertex | +| Bottom Left Red | Red color element of bottom left vertex | +| Bottom Left Green | Green color element of bottom left vertex | +| Bottom Left Blue | Blue color element of bottom left vertex | +| Bottom Left Alpha | Alpha color element of bottom left vertex | +| Bottom Right Red | Red color element of bottom right vertex | +| Bottom Right Green | Green color element of bottom right vertex | +| Bottom Right Blue | Blue color element of bottom right vertex | +| Bottom Right Alpha | Alpha color element of bottom right vertex | +| 16 | Alpha. | \-----------------------------------------------------------------------------/ @@ -120,8 +137,44 @@ the entry type being 16. TODO: Add more info... -This tag type is for material colors? +This tag type is for material colors +/-----------------------------------------------------------------------------\ +| Entry Type | Value | +|---------------------|-------------------------------------------------------| +| MatColor Red | Red color element of MatColor | +| MatColor Green | Green color element of MatColor | +| MatColor Blue | Blue color element of MatColor | +| MatColor Alpha | Alpha color element of MatColor | +| Forecolor Red | Red color element of Forecolor | +| Forecolor Green | Green color element of Forecolor | +| Forecolor Blue | Blue color element of Forecolor | +| Forecolor Alpha | Alpha color element of Forecolor | +| Backcolor Red | Red color element of Backcolor | +| Backcolor Green | Green color element of Backcolor | +| Backcolor Blue | Blue color element of Backcolor | +| Backcolor Alpha | Alpha color element of Backcolor | +| TevReg3Color Red | Red color element of TevReg3 | +| TevReg3Color Green | Green color element of TevReg3 | +| TevReg3Color Blue | Blue color element of TevReg3 | +| TevReg3Color Alpha | Alpha color element of TevReg3 | +| TevKColor1 Red | Red color element of TevKColor1 | +| TevKColor1 Green | Green color element of TevKColor1 | +| TevKColor1 Blue | Blue color element of TevKColor1 | +| TevKColor1 Alpha | Alpha color element of TevKColor1 | +| TevKColor2 Red | Red color element of TevKColor2 | +| TevKColor2 Green | Green color element of TevKColor2 | +| TevKColor2 Blue | Blue color element of TevKColor2 | +| TevKColor2 Alpha | Alpha color element of TevKColor2 | +| TevKColor3 Red | Red color element of TevKColor3 | +| TevKColor3 Green | Green color element of TevKColor3 | +| TevKColor3 Blue | Blue color element of TevKColor3 | +| TevKColor3 Alpha | Alpha color element of TevKColor3 | +| TevKColor4 Red | Red color element of TevKColor4 | +| TevKColor4 Green | Green color element of TevKColor4 | +| TevKColor4 Blue | Blue color element of TevKColor4 | +| TevKColor4 Alpha | Alpha color element of TevKColor4 | +\-----------------------------------------------------------------------------/ ------------------------------------------------------------------------------- >>>> RLTP Für Benzin [LAN06] @@ -143,3 +196,9 @@ TODO.... TODO.... +------------------------------------------------------------------------------- + >>>> RLIM Für Benzin [LAN09] +------------------------------------------------------------------------------- + +TODO.... + |
