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