port: bring back the host_ structs for filemodel.c

this fixes the Pelagic 2 guard thing, but I still need to figure out how to get rid of them without breaking the shit out of everything
This commit is contained in:
fgsfds committed 2024-11-15 00:42:04 +01:00
1 parent 130b286d0d
commit 28fceb67de
3 files changed
+314 -171

No files matched your search

+314 -166
View File
@@ -76,6 +76,8 @@ static const struct alignconfig alignConfigs[] = {
static struct marker contentMarkers[1024];
static int numContentMarkers;
// TODO: get rid of the host_ structs here when I figure out why the ones from types.h won't work
struct n64_modeldef {
u32 ptr_rootnode;
u32 ptr_skel;
@@ -88,6 +90,18 @@ struct n64_modeldef {
u32 ptr_texconfigs;
};
struct host_modeldef {
uintptr_t ptr_rootnode;
uintptr_t ptr_skel;
uintptr_t ptr_parts;
s16 numparts;
s16 nummatrices;
u32 scale;
u16 rwdatalen;
u16 numtexconfigs;
uintptr_t ptr_texconfigs;
};
struct n64_modelnode {
u16 type;
u32 ptr_rodata;
@@ -97,7 +111,30 @@ struct n64_modelnode {
u32 ptr_child;
};
struct n64_modelrodata_gundl {
struct host_modelnode {
u16 type;
uintptr_t ptr_rodata;
uintptr_t ptr_parent;
uintptr_t ptr_next;
uintptr_t ptr_prev;
uintptr_t ptr_child;
};
struct generic_rodata_chrinfo {
u16 animpart;
s16 mtxindex;
u32 unk04;
u16 rwdataindex;
};
struct generic_rodata_position {
u32 pos[3];
u16 part;
s16 mtxindexes[3];
u32 drawdist;
};
struct n64_rodata_gundl {
u32 ptr_opagdl;
u32 ptr_xlugdl;
u32 ptr_baseaddr;
@@ -106,34 +143,75 @@ struct n64_modelrodata_gundl {
s16 unk12;
};
struct n64_modelrodata_distance {
f32 near;
f32 far;
struct host_rodata_gundl {
uintptr_t ptr_opagdl;
uintptr_t ptr_xlugdl;
uintptr_t ptr_baseaddr;
uintptr_t ptr_vertices;
s16 numvertices;
s16 unk12;
};
struct n64_rodata_distance {
u32 near;
u32 far;
u32 ptr_target;
u16 rwdataindex;
};
struct n64_modelrodata_reorder {
f32 unk00;
f32 unk04;
f32 unk08;
f32 unk0c[3];
struct host_rodata_distance {
u32 near;
u32 far;
uintptr_t ptr_target;
u16 rwdataindex;
};
struct n64_rodata_reorder {
u32 unk00;
u32 unk04;
u32 unk08;
u32 unk0c[3];
u32 ptr_node_unk18;
u32 ptr_node_unk1c;
s16 side;
u16 rwdataindex;
};
struct n64_modelrodata_chrgunfire {
struct coord pos;
struct coord dim;
struct host_rodata_reorder {
u32 unk00;
u32 unk04;
u32 unk08;
u32 unk0c[3];
uintptr_t ptr_node_unk18;
uintptr_t ptr_node_unk1c;
s16 side;
u16 rwdataindex;
};
struct generic_rodata_bbox {
s32 hitpart;
u32 bbox[6];
};
struct n64_rodata_chrgunfire {
u32 pos[3];
u32 dim[3];
u32 ptr_texture;
f32 unk1c;
u32 unk1c;
u16 rwdataindex;
u32 ptr_baseaddr;
};
struct n64_modelrodata_type11 {
struct host_rodata_chrgunfire {
u32 pos[3];
u32 dim[3];
uintptr_t ptr_texture;
u32 unk1c;
u16 rwdataindex;
uintptr_t ptr_baseaddr;
};
struct n64_rodata_type11 {
u32 unk00;
u32 unk04;
u32 unk08;
@@ -144,19 +222,52 @@ struct n64_modelrodata_type11 {
u32 extra2;
};
struct n64_modelrodata_toggle {
struct host_rodata_type11 {
u32 unk00;
u32 unk04;
u32 unk08;
u32 unk0c;
u32 unk10;
u32 unk14;
u32 extra1;
u32 extra2;
};
struct n64_rodata_toggle {
u32 ptr_target;
u16 rwdataindex;
};
struct n64_modelrodata_stargunfire {
struct host_rodata_toggle {
uintptr_t ptr_target;
u16 rwdataindex;
};
struct generic_rodata_positionheld {
u32 pos[3];
s16 mtxindex;
u32 unk10;
};
struct n64_rodata_stargunfire {
u32 unk00;
u32 ptr_vertices;
u32 ptr_gdl;
u32 ptr_baseaddr;
};
struct n64_modelrodata_dl {
struct host_rodata_stargunfire {
u32 unk00;
uintptr_t ptr_vertices;
uintptr_t ptr_gdl;
uintptr_t ptr_baseaddr;
};
struct generic_rodata_headspot {
u16 rwdataindex;
};
struct n64_rodata_dl {
u32 ptr_opagdl;
u32 ptr_xlugdl;
u32 ptr_colours;
@@ -167,6 +278,22 @@ struct n64_modelrodata_dl {
u16 numcolours;
};
struct host_rodata_dl {
uintptr_t ptr_opagdl;
uintptr_t ptr_xlugdl;
uintptr_t ptr_colours;
uintptr_t ptr_vertices; // colours follow this array
s16 numvertices;
s16 mcount;
u16 rwdataindex;
u16 numcolours;
};
struct generic_rodata_type19 {
u32 numvertices;
u32 vertices[3];
};
struct n64_textureconfig {
u32 ptr;
u8 width;
@@ -179,6 +306,18 @@ struct n64_textureconfig {
u8 unk0b;
};
struct host_textureconfig {
uintptr_t ptr;
u8 width;
u8 height;
u8 level;
u8 format;
u8 depth;
u8 s;
u8 t;
u8 unk0b;
};
static inline uintptr_t minPtr(uintptr_t a, uintptr_t b) {
return (a && (a < b || !b)) ? a : b;
}
@@ -311,7 +450,7 @@ static void populateMarkers(u8 *src)
break;
case CT_RODATA_GUNDL:
{
struct n64_modelrodata_gundl *src_gundl = src_thing;
struct n64_rodata_gundl *src_gundl = src_thing;
setMarker(PD_BE32(src_gundl->ptr_opagdl), CT_GDL, marker->src_offset);
setMarker(PD_BE32(src_gundl->ptr_xlugdl), CT_GDL, marker->src_offset);
setMarker(PD_BE32(src_gundl->ptr_vertices), CT_VTXCOL, marker->src_offset);
@@ -319,32 +458,32 @@ static void populateMarkers(u8 *src)
}
case CT_RODATA_DISTANCE:
{
struct n64_modelrodata_distance *src_dist = src_thing;
struct n64_rodata_distance *src_dist = src_thing;
setMarker(PD_BE32(src_dist->ptr_target), CT_NODE, marker->src_offset);
break;
}
case CT_RODATA_REORDER:
{
struct n64_modelrodata_reorder *src_reorder = src_thing;
struct n64_rodata_reorder *src_reorder = src_thing;
setMarker(PD_BE32(src_reorder->ptr_node_unk18), CT_NODE, marker->src_offset);
setMarker(PD_BE32(src_reorder->ptr_node_unk1c), CT_NODE, marker->src_offset);
break;
}
case CT_RODATA_CHRGUNFIRE:
{
struct n64_modelrodata_chrgunfire *src_chrgunfire = src_thing;
struct n64_rodata_chrgunfire *src_chrgunfire = src_thing;
setMarker(PD_BE32(src_chrgunfire->ptr_texture), CT_TEXCONFIG, marker->src_offset);
break;
}
case CT_RODATA_TOGGLE:
{
struct n64_modelrodata_toggle *src_toggle = src_thing;
struct n64_rodata_toggle *src_toggle = src_thing;
setMarker(PD_BE32(src_toggle->ptr_target), CT_NODE, marker->src_offset);
break;
}
case CT_RODATA_STARGUNFIRE:
{
struct n64_modelrodata_stargunfire *src_stargunfire = src_thing;
struct n64_rodata_stargunfire *src_stargunfire = src_thing;
colstart = PD_BE32(src_stargunfire->unk00)*4*(sizeof(s16) * 6);
u32 vtxstart = PD_BE32(src_stargunfire->ptr_vertices);
u32 vtxend = vtxstart + colstart;
@@ -359,7 +498,7 @@ static void populateMarkers(u8 *src)
}
case CT_RODATA_DL:
{
struct n64_modelrodata_dl *src_dl = src_thing;
struct n64_rodata_dl *src_dl = src_thing;
setMarker(PD_BE32(src_dl->ptr_opagdl), CT_GDL, marker->src_offset);
setMarker(PD_BE32(src_dl->ptr_xlugdl), CT_GDL, marker->src_offset);
setMarker(PD_BE32(src_dl->ptr_colours), CT_VTXCOL, marker->src_offset);
@@ -374,7 +513,6 @@ static void populateMarkers(u8 *src)
case CT_RODATA_POSITIONHELD:
case CT_RODATA_HEADSPOT:
case CT_RODATA_19:
break;
default:
break;
}
@@ -421,8 +559,8 @@ static u32 convertContent(u8 *dst, u8 *src, u32 src_file_len)
case CT_MODELDEF:
{
struct n64_modeldef *src_modeldef = src_thing;
struct modeldef *dst_modeldef = dst_thing;
dst_modeldef->skel = (void *)(uintptr_t)PD_BE32(src_modeldef->ptr_skel);
struct host_modeldef *dst_modeldef = dst_thing;
dst_modeldef->ptr_skel = PD_BE32(src_modeldef->ptr_skel);
dst_modeldef->numparts = PD_BE16(src_modeldef->numparts);
dst_modeldef->nummatrices = PD_BE16(src_modeldef->nummatrices);
dst_modeldef->scale = PD_BE32(src_modeldef->scale);
@@ -434,7 +572,7 @@ static u32 convertContent(u8 *dst, u8 *src, u32 src_file_len)
case CT_NODE:
{
struct n64_modelnode *src_node = src_thing;
struct modelnode *dst_node = dst_thing;
struct host_modelnode *dst_node = dst_thing;
dst_node->type = PD_BE16(src_node->type);
dstpos += sizeof(*dst_node);
break;
@@ -442,11 +580,11 @@ static u32 convertContent(u8 *dst, u8 *src, u32 src_file_len)
case CT_TEXCONFIG:
{
struct n64_textureconfig *src_texconfig = src_thing;
struct textureconfig *dst_texconfig = dst_thing;
struct host_textureconfig *dst_texconfig = dst_thing;
while (src_len >= sizeof(*src_texconfig)) {
if ((PD_BE32(src_texconfig->ptr) & 0xff000000) != 0x05000000) {
dst_texconfig->textureptr = (void *)(uintptr_t)PD_BE32(src_texconfig->ptr);
dst_texconfig->ptr = PD_BE32(src_texconfig->ptr);
}
dst_texconfig->width = src_texconfig->width;
@@ -466,9 +604,11 @@ static u32 convertContent(u8 *dst, u8 *src, u32 src_file_len)
break;
}
case CT_TEXDATA:
memcpy(dst_thing, src_thing, src_len);
dstpos += src_len;
break;
{
memcpy(dst_thing, src_thing, src_len);
dstpos += src_len;
break;
}
case CT_PARTS:
{
struct n64_modeldef *src_modeldef2 = (struct n64_modeldef *) src;
@@ -489,9 +629,11 @@ static u32 convertContent(u8 *dst, u8 *src, u32 src_file_len)
}
case CT_VTXCOL:
case CT_VTXCOL4:
memcpy(dst_thing, src_thing, src_len);
dstpos += src_len;
break;
{
memcpy(dst_thing, src_thing, src_len);
dstpos += src_len;
break;
}
case CT_GDL:
{
struct marker *parent = findMarker(marker->parent_src_offset);
@@ -499,20 +641,20 @@ static u32 convertContent(u8 *dst, u8 *src, u32 src_file_len)
u32 dst_vtx;
if (parent->type == CT_RODATA_GUNDL) {
struct n64_modelrodata_gundl *src_rodata = (struct n64_modelrodata_gundl *) &src[parent->src_offset];
struct modelrodata_gundl *dst_rodata = (struct modelrodata_gundl *) &dst[parent->dst_offset];
struct n64_rodata_gundl *src_rodata = (struct n64_rodata_gundl *) &src[parent->src_offset];
struct host_rodata_gundl *dst_rodata = (struct host_rodata_gundl *) &dst[parent->dst_offset];
src_vtx = PD_BE32(src_rodata->ptr_vertices) & 0x00ffffff;
dst_vtx = ((uintptr_t)dst_rodata->vertices) & 0x00ffffff;
dst_vtx = (dst_rodata->ptr_vertices) & 0x00ffffff;
} else if (parent->type == CT_RODATA_STARGUNFIRE) {
struct n64_modelrodata_stargunfire *src_rodata = (struct n64_modelrodata_stargunfire *) &src[parent->src_offset];
struct modelrodata_stargunfire *dst_rodata = (struct modelrodata_stargunfire *) &dst[parent->dst_offset];
struct n64_rodata_stargunfire *src_rodata = (struct n64_rodata_stargunfire *) &src[parent->src_offset];
struct host_rodata_stargunfire *dst_rodata = (struct host_rodata_stargunfire *) &dst[parent->dst_offset];
src_vtx = PD_BE32(src_rodata->ptr_vertices) & 0x00ffffff;
dst_vtx = ((uintptr_t)dst_rodata->vertices) & 0x00ffffff;
dst_vtx = (dst_rodata->ptr_vertices) & 0x00ffffff;
} else if (parent->type == CT_RODATA_DL) {
struct n64_modelrodata_dl *src_rodata = (struct n64_modelrodata_dl *) &src[parent->src_offset];
struct modelrodata_dl *dst_rodata = (struct modelrodata_dl *) &dst[parent->dst_offset];
struct n64_rodata_dl *src_rodata = (struct n64_rodata_dl *) &src[parent->src_offset];
struct host_rodata_dl *dst_rodata = (struct host_rodata_dl *) &dst[parent->dst_offset];
src_vtx = PD_BE32(src_rodata->ptr_vertices) & 0x00ffffff;
dst_vtx = ((uintptr_t)dst_rodata->vertices) & 0x00ffffff;
dst_vtx = (dst_rodata->ptr_vertices) & 0x00ffffff;
}
dstpos = gbiConvertGdl(dst, dstpos, src, marker->src_offset, 0);
@@ -520,8 +662,8 @@ static u32 convertContent(u8 *dst, u8 *src, u32 src_file_len)
}
case CT_RODATA_CHRINFO:
{
struct modelrodata_chrinfo *src_chrinfo = src_thing;
struct modelrodata_chrinfo *dst_chrinfo = dst_thing;
struct generic_rodata_chrinfo *src_chrinfo = src_thing;
struct generic_rodata_chrinfo *dst_chrinfo = dst_thing;
dst_chrinfo->animpart = PD_BE16(src_chrinfo->animpart);
dst_chrinfo->mtxindex = PD_BE16(src_chrinfo->mtxindex);
dst_chrinfo->unk04 = PD_BE32(src_chrinfo->unk04);
@@ -531,22 +673,24 @@ static u32 convertContent(u8 *dst, u8 *src, u32 src_file_len)
}
case CT_RODATA_POSITION:
{
struct modelrodata_position *src_position = src_thing;
struct modelrodata_position *dst_position = dst_thing;
dst_position->pos = PD_SWAPPED_VAL(src_position->pos);
struct generic_rodata_position *src_position = src_thing;
struct generic_rodata_position *dst_position = dst_thing;
dst_position->pos[0] = PD_BE32(src_position->pos[0]);
dst_position->pos[1] = PD_BE32(src_position->pos[1]);
dst_position->pos[2] = PD_BE32(src_position->pos[2]);
dst_position->part = PD_BE16(src_position->part);
dst_position->mtxindexes[0] = PD_BE16(src_position->mtxindexes[0]);
dst_position->mtxindexes[1] = PD_BE16(src_position->mtxindexes[1]);
dst_position->mtxindexes[2] = PD_BE16(src_position->mtxindexes[2]);
dst_position->drawdist = PD_SWAPPED_VAL(src_position->drawdist);
dst_position->drawdist = PD_BE32(src_position->drawdist);
dstpos += sizeof(*dst_position);
break;
}
case CT_RODATA_GUNDL:
{
struct n64_modelrodata_gundl *src_gundl = src_thing;
struct modelrodata_gundl *dst_gundl = dst_thing;
dst_gundl->vertices = NULL;
struct n64_rodata_gundl *src_gundl = src_thing;
struct host_rodata_gundl *dst_gundl = dst_thing;
dst_gundl->ptr_vertices = 0;
dst_gundl->numvertices = PD_BE16(src_gundl->numvertices);
dst_gundl->unk12 = PD_BE16(src_gundl->unk12);
dstpos += sizeof(*dst_gundl);
@@ -554,24 +698,24 @@ static u32 convertContent(u8 *dst, u8 *src, u32 src_file_len)
}
case CT_RODATA_DISTANCE:
{
struct n64_modelrodata_distance *src_dist = src_thing;
struct modelrodata_distance *dst_dist = dst_thing;
dst_dist->near = PD_SWAPPED_VAL(src_dist->near);
dst_dist->far = PD_SWAPPED_VAL(src_dist->far);
struct n64_rodata_distance *src_dist = src_thing;
struct host_rodata_distance *dst_dist = dst_thing;
dst_dist->near = PD_BE32(src_dist->near);
dst_dist->far = PD_BE32(src_dist->far);
dst_dist->rwdataindex = PD_BE16(src_dist->rwdataindex);
dstpos += sizeof(*dst_dist);
break;
}
case CT_RODATA_REORDER:
{
struct n64_modelrodata_reorder *src_reorder = src_thing;
struct modelrodata_reorder *dst_reorder = dst_thing;
dst_reorder->unk00 = PD_SWAPPED_VAL(src_reorder->unk00);
dst_reorder->unk04 = PD_SWAPPED_VAL(src_reorder->unk04);
dst_reorder->unk08 = PD_SWAPPED_VAL(src_reorder->unk08);
dst_reorder->unk0c[0] = PD_SWAPPED_VAL(src_reorder->unk0c[0]);
dst_reorder->unk0c[1] = PD_SWAPPED_VAL(src_reorder->unk0c[1]);
dst_reorder->unk0c[2] = PD_SWAPPED_VAL(src_reorder->unk0c[2]);
struct n64_rodata_reorder *src_reorder = src_thing;
struct host_rodata_reorder *dst_reorder = dst_thing;
dst_reorder->unk00 = PD_BE32(src_reorder->unk00);
dst_reorder->unk04 = PD_BE32(src_reorder->unk04);
dst_reorder->unk08 = PD_BE32(src_reorder->unk08);
dst_reorder->unk0c[0] = PD_BE32(src_reorder->unk0c[0]);
dst_reorder->unk0c[1] = PD_BE32(src_reorder->unk0c[1]);
dst_reorder->unk0c[2] = PD_BE32(src_reorder->unk0c[2]);
dst_reorder->side = PD_BE16(src_reorder->side);
dst_reorder->rwdataindex = PD_BE16(src_reorder->rwdataindex);
dstpos += sizeof(*dst_reorder);
@@ -579,58 +723,63 @@ static u32 convertContent(u8 *dst, u8 *src, u32 src_file_len)
}
case CT_RODATA_BBOX:
{
struct modelrodata_bbox *src_bbox = src_thing;
struct modelrodata_bbox *dst_bbox = dst_thing;
struct generic_rodata_bbox *src_bbox = src_thing;
struct generic_rodata_bbox *dst_bbox = dst_thing;
dst_bbox->hitpart = PD_BE32(src_bbox->hitpart);
dst_bbox->xmin = PD_SWAPPED_VAL(src_bbox->xmin);
dst_bbox->xmax = PD_SWAPPED_VAL(src_bbox->xmax);
dst_bbox->ymin = PD_SWAPPED_VAL(src_bbox->ymin);
dst_bbox->ymax = PD_SWAPPED_VAL(src_bbox->ymax);
dst_bbox->zmin = PD_SWAPPED_VAL(src_bbox->zmin);
dst_bbox->zmax = PD_SWAPPED_VAL(src_bbox->zmax);
dst_bbox->bbox[0] = PD_BE32(src_bbox->bbox[0]);
dst_bbox->bbox[1] = PD_BE32(src_bbox->bbox[1]);
dst_bbox->bbox[2] = PD_BE32(src_bbox->bbox[2]);
dst_bbox->bbox[3] = PD_BE32(src_bbox->bbox[3]);
dst_bbox->bbox[4] = PD_BE32(src_bbox->bbox[4]);
dst_bbox->bbox[5] = PD_BE32(src_bbox->bbox[5]);
dstpos += sizeof(*dst_bbox);
break;
}
case CT_RODATA_CHRGUNFIRE:
{
struct n64_modelrodata_chrgunfire *src_chrgunfire = src_thing;
struct modelrodata_chrgunfire *dst_chrgunfire = dst_thing;
dst_chrgunfire->pos = PD_SWAPPED_VAL(src_chrgunfire->pos);
dst_chrgunfire->dim = PD_SWAPPED_VAL(src_chrgunfire->dim);
dst_chrgunfire->unk1c = PD_SWAPPED_VAL(src_chrgunfire->unk1c);
struct n64_rodata_chrgunfire *src_chrgunfire = src_thing;
struct host_rodata_chrgunfire *dst_chrgunfire = dst_thing;
dst_chrgunfire->pos[0] = PD_BE32(src_chrgunfire->pos[0]);
dst_chrgunfire->pos[1] = PD_BE32(src_chrgunfire->pos[1]);
dst_chrgunfire->pos[2] = PD_BE32(src_chrgunfire->pos[2]);
dst_chrgunfire->dim[0] = PD_BE32(src_chrgunfire->dim[0]);
dst_chrgunfire->dim[1] = PD_BE32(src_chrgunfire->dim[1]);
dst_chrgunfire->dim[2] = PD_BE32(src_chrgunfire->dim[2]);
dst_chrgunfire->unk1c = PD_BE32(src_chrgunfire->unk1c);
dst_chrgunfire->rwdataindex = PD_BE16(src_chrgunfire->rwdataindex);
dst_chrgunfire->baseaddr = NULL;
dst_chrgunfire->ptr_baseaddr = 0;
dstpos += sizeof(*dst_chrgunfire);
break;
}
case CT_RODATA_11:
{
struct n64_modelrodata_type11 *src_type11 = src_thing;
struct modelrodata_type11 *dst_type11 = dst_thing;
struct n64_rodata_type11 *src_type11 = src_thing;
struct host_rodata_type11 *dst_type11 = dst_thing;
dst_type11->unk00 = PD_BE32(src_type11->unk00);
dst_type11->unk04 = PD_BE32(src_type11->unk04);
dst_type11->unk08 = PD_BE32(src_type11->unk08);
dst_type11->unk0c = PD_BE32(src_type11->unk0c);
dst_type11->unk10 = PD_BE32(src_type11->unk10);
dst_type11->unk14 = NULL;
dst_type11->unk18 = PD_BE32(src_type11->extra1);
dst_type11->unk1c = PD_BE32(src_type11->extra2);
dst_type11->extra1 = PD_BE32(src_type11->extra1);
dst_type11->extra2 = PD_BE32(src_type11->extra2);
dstpos += sizeof(*dst_type11);
break;
}
case CT_RODATA_TOGGLE:
{
struct n64_modelrodata_toggle *src_toggle = src_thing;
struct modelrodata_toggle *dst_toggle = dst_thing;
struct n64_rodata_toggle *src_toggle = src_thing;
struct host_rodata_toggle *dst_toggle = dst_thing;
dst_toggle->rwdataindex = PD_BE16(src_toggle->rwdataindex);
dstpos += sizeof(*dst_toggle);
break;
}
case CT_RODATA_POSITIONHELD:
{
struct modelrodata_positionheld *src_posheld = src_thing;
struct modelrodata_positionheld *dst_posheld = dst_thing;
dst_posheld->pos = PD_SWAPPED_VAL(src_posheld->pos);
struct generic_rodata_positionheld *src_posheld = src_thing;
struct generic_rodata_positionheld *dst_posheld = dst_thing;
dst_posheld->pos[0] = PD_BE32(src_posheld->pos[0]);
dst_posheld->pos[1] = PD_BE32(src_posheld->pos[1]);
dst_posheld->pos[2] = PD_BE32(src_posheld->pos[2]);
dst_posheld->mtxindex = PD_BE16(src_posheld->mtxindex);
dst_posheld->unk10 = PD_BE32(src_posheld->unk10);
dstpos += sizeof(*dst_posheld);
@@ -638,24 +787,24 @@ static u32 convertContent(u8 *dst, u8 *src, u32 src_file_len)
}
case CT_RODATA_STARGUNFIRE:
{
struct n64_modelrodata_stargunfire *src_stargunfire = src_thing;
struct modelrodata_stargunfire *dst_stargunfire = dst_thing;
struct n64_rodata_stargunfire *src_stargunfire = src_thing;
struct host_rodata_stargunfire *dst_stargunfire = dst_thing;
dst_stargunfire->unk00 = PD_BE32(src_stargunfire->unk00);
dstpos += sizeof(*dst_stargunfire);
break;
}
case CT_RODATA_HEADSPOT:
{
struct modelrodata_headspot *src_headspot = src_thing;
struct modelrodata_headspot *dst_headspot = dst_thing;
struct generic_rodata_headspot *src_headspot = src_thing;
struct generic_rodata_headspot *dst_headspot = dst_thing;
dst_headspot->rwdataindex = PD_BE16(src_headspot->rwdataindex);
dstpos += sizeof(*dst_headspot);
break;
}
case CT_RODATA_DL:
{
struct n64_modelrodata_dl *src_dl = src_thing;
struct modelrodata_dl *dst_dl = dst_thing;
struct n64_rodata_dl *src_dl = src_thing;
struct host_rodata_dl *dst_dl = dst_thing;
dst_dl->numvertices = PD_BE16(src_dl->numvertices);
dst_dl->mcount = PD_BE16(src_dl->mcount);
dst_dl->rwdataindex = PD_BE16(src_dl->rwdataindex);
@@ -665,8 +814,8 @@ static u32 convertContent(u8 *dst, u8 *src, u32 src_file_len)
}
case CT_RODATA_19:
{
struct modelrodata_type19 *src_type19 = src_thing;
struct modelrodata_type19 *dst_type19 = dst_thing;
struct generic_rodata_type19 *src_type19 = src_thing;
struct generic_rodata_type19 *dst_type19 = dst_thing;
u32 *src_vertices = src_thing + sizeof(u32);
u32 *dst_vertices = dst_thing + sizeof(u32);
int num_vertices = PD_BE32(src_type19->numvertices);
@@ -717,32 +866,32 @@ static u8 *relinkPointers(u8 *dst, u8 *src)
case CT_MODELDEF:
{
struct n64_modeldef *src_modeldef = src_thing;
struct modeldef *dst_modeldef = dst_thing;
dst_modeldef->rootnode = (void *)(uintptr_t)resolvePointer(PD_BE32(src_modeldef->ptr_rootnode));
dst_modeldef->parts = (void *)(uintptr_t)resolvePointer(PD_BE32(src_modeldef->ptr_parts));
dst_modeldef->texconfigs = (void *)(uintptr_t)resolvePointer(PD_BE32(src_modeldef->ptr_texconfigs));
struct host_modeldef *dst_modeldef = dst_thing;
dst_modeldef->ptr_rootnode = (resolvePointer(PD_BE32(src_modeldef->ptr_rootnode)));
dst_modeldef->ptr_parts = (resolvePointer(PD_BE32(src_modeldef->ptr_parts)));
dst_modeldef->ptr_texconfigs = (resolvePointer(PD_BE32(src_modeldef->ptr_texconfigs)));
break;
}
case CT_NODE:
{
struct n64_modelnode *src_node = src_thing;
struct modelnode *dst_node = dst_thing;
dst_node->rodata = (void *)(uintptr_t)resolvePointer(PD_BE32(src_node->ptr_rodata));
dst_node->parent = (void *)(uintptr_t)resolvePointer(PD_BE32(src_node->ptr_parent));
dst_node->next = (void *)(uintptr_t)resolvePointer(PD_BE32(src_node->ptr_next));
dst_node->prev = (void *)(uintptr_t)resolvePointer(PD_BE32(src_node->ptr_prev));
dst_node->child = (void *)(uintptr_t)resolvePointer(PD_BE32(src_node->ptr_child));
struct host_modelnode *dst_node = dst_thing;
dst_node->ptr_rodata = (resolvePointer(PD_BE32(src_node->ptr_rodata)));
dst_node->ptr_parent = (resolvePointer(PD_BE32(src_node->ptr_parent)));
dst_node->ptr_next = (resolvePointer(PD_BE32(src_node->ptr_next)));
dst_node->ptr_prev = (resolvePointer(PD_BE32(src_node->ptr_prev)));
dst_node->ptr_child = (resolvePointer(PD_BE32(src_node->ptr_child)));
lowestptr = (uintptr_t)dst_node->rodata;
lowestptr = dst_node->ptr_rodata;
break;
}
case CT_TEXCONFIG:
{
struct n64_textureconfig *src_texconfig = src_thing;
struct textureconfig *dst_texconfig = dst_thing;
struct host_textureconfig *dst_texconfig = dst_thing;
if ((PD_BE32(src_texconfig->ptr) & 0xff000000) == 0x05000000) {
dst_texconfig->textureptr = (void *)(uintptr_t)resolvePointer(PD_BE32(src_texconfig->ptr));
gbiAddTexAddr(PD_BE32(src_texconfig->ptr), (uintptr_t)dst_texconfig->textureptr);
dst_texconfig->ptr = (resolvePointer(PD_BE32(src_texconfig->ptr)));
gbiAddTexAddr(PD_BE32(src_texconfig->ptr), dst_texconfig->ptr);
}
break;
}
@@ -759,101 +908,100 @@ static u8 *relinkPointers(u8 *dst, u8 *src)
break;
}
case CT_RODATA_CHRINFO:
break;
case CT_RODATA_POSITION:
break;
case CT_RODATA_GUNDL:
{
struct n64_modelrodata_gundl *src_gundl = src_thing;
struct modelrodata_gundl *dst_gundl = dst_thing;
dst_gundl->opagdl = (void *)(uintptr_t)resolvePointer(PD_BE32(src_gundl->ptr_opagdl));
dst_gundl->xlugdl = (void *)(uintptr_t)resolvePointer(PD_BE32(src_gundl->ptr_xlugdl));
dst_gundl->vertices = (void *)(uintptr_t)resolvePointer(PD_BE32(src_gundl->ptr_vertices));
struct n64_rodata_gundl *src_gundl = src_thing;
struct host_rodata_gundl *dst_gundl = dst_thing;
dst_gundl->ptr_opagdl = (resolvePointer(PD_BE32(src_gundl->ptr_opagdl)));
dst_gundl->ptr_xlugdl = (resolvePointer(PD_BE32(src_gundl->ptr_xlugdl)));
dst_gundl->ptr_vertices = (resolvePointer(PD_BE32(src_gundl->ptr_vertices)));
gbiConvertVtx(dst, ((uintptr_t)dst_gundl->vertices) & 0x00ffffff, dst_gundl->numvertices);
gbiConvertVtx(dst, dst_gundl->ptr_vertices & 0x00ffffff, dst_gundl->numvertices);
gbiSetVtx(PD_BE32(src_gundl->ptr_vertices), (uintptr_t)dst_gundl->vertices);
gbiSetSegment(0x04, (uintptr_t)dst_gundl->vertices);
gbiSetVtx(PD_BE32(src_gundl->ptr_vertices), dst_gundl->ptr_vertices);
gbiSetSegment(0x04, dst_gundl->ptr_vertices);
gbiGdlRewriteAddrs(dst, (uintptr_t)dst_gundl->opagdl);
gbiGdlRewriteAddrs(dst, (uintptr_t)dst_gundl->xlugdl);
gbiGdlRewriteAddrs(dst, dst_gundl->ptr_opagdl);
gbiGdlRewriteAddrs(dst, dst_gundl->ptr_xlugdl);
if (dst_gundl->opagdl) dst_gundl->opagdl = SEGADDR(dst_gundl->opagdl);
if (dst_gundl->xlugdl) dst_gundl->xlugdl = SEGADDR(dst_gundl->xlugdl);
if (dst_gundl->ptr_opagdl) dst_gundl->ptr_opagdl |= 1;
if (dst_gundl->ptr_xlugdl) dst_gundl->ptr_xlugdl |= 1;
lowestptr = minPtr3((uintptr_t)dst_gundl->opagdl, (uintptr_t)dst_gundl->xlugdl, (uintptr_t)dst_gundl->vertices);
lowestptr = minPtr3(dst_gundl->ptr_opagdl, dst_gundl->ptr_xlugdl, dst_gundl->ptr_vertices);
break;
}
case CT_RODATA_DISTANCE:
{
struct n64_modelrodata_distance *src_dist = src_thing;
struct modelrodata_distance *dst_dist = dst_thing;
dst_dist->target = (void *)(uintptr_t)resolvePointer(PD_BE32(src_dist->ptr_target));
struct n64_rodata_distance *src_dist = src_thing;
struct host_rodata_distance *dst_dist = dst_thing;
dst_dist->ptr_target = (resolvePointer(PD_BE32(src_dist->ptr_target)));
break;
}
case CT_RODATA_REORDER:
{
struct n64_modelrodata_reorder *src_reorder = src_thing;
struct modelrodata_reorder *dst_reorder = dst_thing;
dst_reorder->unk18 = (void *)(uintptr_t)resolvePointer(PD_BE32(src_reorder->ptr_node_unk18));
dst_reorder->unk1c = (void *)(uintptr_t)resolvePointer(PD_BE32(src_reorder->ptr_node_unk1c));
struct n64_rodata_reorder *src_reorder = src_thing;
struct host_rodata_reorder *dst_reorder = dst_thing;
dst_reorder->ptr_node_unk18 = (resolvePointer(PD_BE32(src_reorder->ptr_node_unk18)));
dst_reorder->ptr_node_unk1c = (resolvePointer(PD_BE32(src_reorder->ptr_node_unk1c)));
break;
}
case CT_RODATA_CHRGUNFIRE:
{
struct n64_modelrodata_chrgunfire *src_chrgunfire = src_thing;
struct modelrodata_chrgunfire *dst_chrgunfire = dst_thing;
dst_chrgunfire->texture = (void *)(uintptr_t)resolvePointer(PD_BE32(src_chrgunfire->ptr_texture));
if ((PD_BE32((u32)(uintptr_t)dst_chrgunfire->texture) & 0xff000000) == 0x05000000) {
gbiAddTexAddr(PD_BE32((u32)(uintptr_t)dst_chrgunfire->texture), (uintptr_t)dst_chrgunfire->texture);
struct n64_rodata_chrgunfire *src_chrgunfire = src_thing;
struct host_rodata_chrgunfire *dst_chrgunfire = dst_thing;
dst_chrgunfire->ptr_texture = (resolvePointer(PD_BE32(src_chrgunfire->ptr_texture)));
if ((PD_BE32(dst_chrgunfire->ptr_texture) & 0xff000000) == 0x05000000) {
gbiAddTexAddr(PD_BE32(dst_chrgunfire->ptr_texture), dst_chrgunfire->ptr_texture);
}
break;
}
case CT_RODATA_TOGGLE:
{
struct n64_modelrodata_toggle *src_toggle = src_thing;
struct modelrodata_toggle *dst_toggle = dst_thing;
dst_toggle->target = (void *)(uintptr_t)resolvePointer(PD_BE32(src_toggle->ptr_target));
struct n64_rodata_toggle *src_toggle = src_thing;
struct host_rodata_toggle *dst_toggle = dst_thing;
dst_toggle->ptr_target = (resolvePointer(PD_BE32(src_toggle->ptr_target)));
break;
}
case CT_RODATA_STARGUNFIRE:
{
struct n64_modelrodata_stargunfire *src_stargunfire = src_thing;
struct modelrodata_stargunfire *dst_stargunfire = dst_thing;
dst_stargunfire->vertices = (void *)(uintptr_t)resolvePointer(PD_BE32(src_stargunfire->ptr_vertices));
dst_stargunfire->gdl = (void *)(uintptr_t)resolvePointer(PD_BE32(src_stargunfire->ptr_gdl));
struct n64_rodata_stargunfire *src_stargunfire = src_thing;
struct host_rodata_stargunfire *dst_stargunfire = dst_thing;
dst_stargunfire->ptr_vertices = (resolvePointer(PD_BE32(src_stargunfire->ptr_vertices)));
dst_stargunfire->ptr_gdl = (resolvePointer(PD_BE32(src_stargunfire->ptr_gdl)));
gbiConvertVtx(dst, ((uintptr_t)dst_stargunfire->vertices) & 0x00ffffff, dst_stargunfire->unk00*4);
gbiConvertVtx(dst, dst_stargunfire->ptr_vertices & 0x00ffffff, dst_stargunfire->unk00*4);
gbiSetVtx(PD_BE32(src_stargunfire->ptr_vertices), (uintptr_t)dst_stargunfire->vertices);
gbiSetSegment(0x04, (uintptr_t)dst_stargunfire->vertices);
gbiGdlRewriteAddrs(dst, (uintptr_t)dst_stargunfire->gdl);
if (dst_stargunfire->gdl) dst_stargunfire->gdl = SEGADDR(dst_stargunfire->gdl);
gbiSetVtx(PD_BE32(src_stargunfire->ptr_vertices), dst_stargunfire->ptr_vertices);
gbiSetSegment(0x04, dst_stargunfire->ptr_vertices);
gbiGdlRewriteAddrs(dst, dst_stargunfire->ptr_gdl);
if (dst_stargunfire->ptr_gdl) dst_stargunfire->ptr_gdl |= 1;
lowestptr = minPtr((uintptr_t)dst_stargunfire->gdl, (uintptr_t)dst_stargunfire->vertices);
lowestptr = minPtr(dst_stargunfire->ptr_gdl, dst_stargunfire->ptr_vertices);
break;
}
case CT_RODATA_DL:
{
struct n64_modelrodata_dl *src_dl = src_thing;
struct modelrodata_dl *dst_dl = dst_thing;
dst_dl->opagdl = (void *)(uintptr_t)resolvePointer(PD_BE32(src_dl->ptr_opagdl));
dst_dl->xlugdl = (void *)(uintptr_t)resolvePointer(PD_BE32(src_dl->ptr_xlugdl));
dst_dl->colours = (void *)(uintptr_t)resolvePointer(PD_BE32(src_dl->ptr_colours));
dst_dl->vertices = (void *)(uintptr_t)resolvePointer(PD_BE32(src_dl->ptr_vertices));
struct n64_rodata_dl *src_dl = src_thing;
struct host_rodata_dl *dst_dl = dst_thing;
dst_dl->ptr_opagdl = (resolvePointer(PD_BE32(src_dl->ptr_opagdl)));
dst_dl->ptr_xlugdl = (resolvePointer(PD_BE32(src_dl->ptr_xlugdl)));
dst_dl->ptr_colours = (resolvePointer(PD_BE32(src_dl->ptr_colours)));
dst_dl->ptr_vertices = (resolvePointer(PD_BE32(src_dl->ptr_vertices)));
gbiConvertVtx(dst, ((uintptr_t)dst_dl->vertices) & 0x00ffffff, dst_dl->numvertices);
gbiConvertVtx(dst, dst_dl->ptr_vertices & 0x00ffffff, dst_dl->numvertices);
gbiSetVtx(PD_BE32(src_dl->ptr_vertices), (uintptr_t)dst_dl->vertices);
gbiSetSegment(0x04, (uintptr_t)dst_dl->vertices);
gbiGdlRewriteAddrs(dst, (uintptr_t)dst_dl->opagdl);
gbiGdlRewriteAddrs(dst, (uintptr_t)dst_dl->xlugdl);
gbiSetVtx(PD_BE32(src_dl->ptr_vertices), dst_dl->ptr_vertices);
gbiSetSegment(0x04, dst_dl->ptr_vertices);
gbiGdlRewriteAddrs(dst, dst_dl->ptr_opagdl);
gbiGdlRewriteAddrs(dst, dst_dl->ptr_xlugdl);
if (dst_dl->opagdl) dst_dl->opagdl = SEGADDR(dst_dl->opagdl);
if (dst_dl->xlugdl) dst_dl->xlugdl = SEGADDR(dst_dl->xlugdl);
if (dst_dl->ptr_opagdl) dst_dl->ptr_opagdl |= 1;
if (dst_dl->ptr_xlugdl) dst_dl->ptr_xlugdl |= 1;
lowestptr = minPtr3((uintptr_t)dst_dl->opagdl, (uintptr_t)dst_dl->xlugdl, (uintptr_t)dst_dl->colours);
lowestptr = minPtr(lowestptr, (uintptr_t)dst_dl->vertices);
lowestptr = minPtr3(dst_dl->ptr_opagdl, dst_dl->ptr_xlugdl, dst_dl->ptr_colours);
lowestptr = minPtr(lowestptr, dst_dl->ptr_vertices);
break;
}
case CT_TEXDATA:
-1
View File
@@ -235,7 +235,6 @@ static u32 convertCover(u8 *dst, u32 dstpos, u8 *src, u32 srcpos, int num_covers
host_covers[i].pos = PD_SWAPPED_VAL(n64_covers[i].pos);
host_covers[i].look = PD_SWAPPED_VAL(n64_covers[i].look);
host_covers[i].flags = PD_BE16(n64_covers[i].flags);
host_covers[i].unk1a = PD_BE16(n64_covers[i].unk1a);
}
dstpos += num_covers * sizeof(struct coverdefinition);
-4
View File
@@ -538,8 +538,6 @@ struct modelrodata_type11 { // type 0x11
u32 unk0c;
u32 unk10;
void *unk14;
u32 unk18;
u32 unk1c;
};
struct modelrodata_toggle { // type 0x12
@@ -550,7 +548,6 @@ struct modelrodata_toggle { // type 0x12
struct modelrodata_positionheld { // type 0x15
struct coord pos;
s16 mtxindex;
s32 unk10;
};
struct modelrodata_stargunfire { // type 0x16
@@ -2847,7 +2844,6 @@ struct coverdefinition {
struct coord pos;
struct coord look;
u16 flags;
u16 unk1a;
};
struct cover {