From b88c3a120b164a769f0d5a3947b20b605f2048ee Mon Sep 17 00:00:00 2001 From: fgsfds Date: Thu, 14 Nov 2024 19:20:27 +0100 Subject: [PATCH 1/4] port: add scopes to cases in preprocess to prevent older compilers from having a heart attack --- port/src/preprocess/filemodel.c | 794 ++++++++++++++++++-------------- port/src/preprocess/filesetup.c | 2 +- 2 files changed, 439 insertions(+), 357 deletions(-) diff --git a/port/src/preprocess/filemodel.c b/port/src/preprocess/filemodel.c index c2ff8c100..24ed3de8f 100644 --- a/port/src/preprocess/filemodel.c +++ b/port/src/preprocess/filemodel.c @@ -263,87 +263,109 @@ static void populateMarkers(u8 *src) switch (marker->type) { case CT_MODELDEF: - struct n64_modeldef *src_modeldef = src_thing; - int num_texconfigs = PD_BE16(src_modeldef->numtexconfigs); - u32 texconfigpos = PD_BE32(src_modeldef->ptr_texconfigs); - setMarker(PD_BE32(src_modeldef->ptr_rootnode), CT_NODE, marker->src_offset); - setMarker(PD_BE32(src_modeldef->ptr_parts), CT_PARTS, marker->src_offset); - - for (int i = 0; i < num_texconfigs; i++) { - setMarker(texconfigpos + sizeof(struct n64_textureconfig) * i, CT_TEXCONFIG, marker->src_offset); + { + struct n64_modeldef *src_modeldef = src_thing; + int num_texconfigs = PD_BE16(src_modeldef->numtexconfigs); + u32 texconfigpos = PD_BE32(src_modeldef->ptr_texconfigs); + setMarker(PD_BE32(src_modeldef->ptr_rootnode), CT_NODE, marker->src_offset); + setMarker(PD_BE32(src_modeldef->ptr_parts), CT_PARTS, marker->src_offset); + + for (int i = 0; i < num_texconfigs; i++) { + setMarker(texconfigpos + sizeof(struct n64_textureconfig) * i, CT_TEXCONFIG, marker->src_offset); + } + break; } - break; case CT_NODE: - struct n64_modelnode *src_node = src_thing; - u32 node_type = PD_BE16(src_node->type) & 0xff; - setMarker(PD_BE32(src_node->ptr_rodata), nodeTypeToContentType[node_type], marker->src_offset); - setMarker(PD_BE32(src_node->ptr_parent), CT_NODE, marker->src_offset); - setMarker(PD_BE32(src_node->ptr_next), CT_NODE, marker->src_offset); - setMarker(PD_BE32(src_node->ptr_prev), CT_NODE, marker->src_offset); - setMarker(PD_BE32(src_node->ptr_child), CT_NODE, marker->src_offset); - break; + { + struct n64_modelnode *src_node = src_thing; + u32 node_type = PD_BE16(src_node->type) & 0xff; + setMarker(PD_BE32(src_node->ptr_rodata), nodeTypeToContentType[node_type], marker->src_offset); + setMarker(PD_BE32(src_node->ptr_parent), CT_NODE, marker->src_offset); + setMarker(PD_BE32(src_node->ptr_next), CT_NODE, marker->src_offset); + setMarker(PD_BE32(src_node->ptr_prev), CT_NODE, marker->src_offset); + setMarker(PD_BE32(src_node->ptr_child), CT_NODE, marker->src_offset); + break; + } case CT_TEXCONFIG: - struct n64_textureconfig *src_texconfig = src_thing; - if ((PD_BE32(src_texconfig->ptr) & 0xff000000) == 0x05000000) { - setMarker(PD_BE32(src_texconfig->ptr), CT_TEXDATA, marker->src_offset); + { + struct n64_textureconfig *src_texconfig = src_thing; + if ((PD_BE32(src_texconfig->ptr) & 0xff000000) == 0x05000000) { + setMarker(PD_BE32(src_texconfig->ptr), CT_TEXDATA, marker->src_offset); + } + break; } - break; case CT_PARTS: - struct n64_modeldef *src_modeldef2 = (struct n64_modeldef *) src; - u32 *src_parts = (u32 *) src_thing; - int num_parts = PD_BE16(src_modeldef2->numparts); + { + struct n64_modeldef *src_modeldef2 = (struct n64_modeldef *) src; + u32 *src_parts = (u32 *) src_thing; + int num_parts = PD_BE16(src_modeldef2->numparts); - for (int i = 0; i < num_parts; i++) { - setMarker(PD_BE32(src_parts[i]), CT_NODE, marker->src_offset); + for (int i = 0; i < num_parts; i++) { + setMarker(PD_BE32(src_parts[i]), CT_NODE, marker->src_offset); + } + break; } - break; case CT_RODATA_CHRINFO: break; case CT_RODATA_POSITION: break; case CT_RODATA_GUNDL: - struct n64_modelrodata_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); - break; + { + struct n64_modelrodata_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); + break; + } case CT_RODATA_DISTANCE: - struct n64_modelrodata_distance *src_dist = src_thing; - setMarker(PD_BE32(src_dist->ptr_target), CT_NODE, marker->src_offset); - break; + { + struct n64_modelrodata_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; - 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; + { + struct n64_modelrodata_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; - setMarker(PD_BE32(src_chrgunfire->ptr_texture), CT_TEXCONFIG, marker->src_offset); - break; + { + struct n64_modelrodata_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; - setMarker(PD_BE32(src_toggle->ptr_target), CT_NODE, marker->src_offset); - break; + { + struct n64_modelrodata_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; - colstart = PD_BE32(src_stargunfire->unk00)*4*(sizeof(s16) * 6); - u32 vtxstart = PD_BE32(src_stargunfire->ptr_vertices); - u32 vtxend = vtxstart + colstart; - colstart = ALIGN8(vtxstart + colstart); - setMarker(vtxstart, CT_VTXCOL4, marker->src_offset); - if (vtxend != colstart) { - setMarker(vtxend, CT_SKIP, marker->src_offset); - } - setMarker(colstart, CT_VTXCOL, marker->src_offset); - setMarker(PD_BE32(src_stargunfire->ptr_gdl), CT_GDL, marker->src_offset); - break; + { + struct n64_modelrodata_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; + colstart = ALIGN8(vtxstart + colstart); + setMarker(vtxstart, CT_VTXCOL4, marker->src_offset); + if (vtxend != colstart) { + setMarker(vtxend, CT_SKIP, marker->src_offset); + } + setMarker(colstart, CT_VTXCOL, marker->src_offset); + setMarker(PD_BE32(src_stargunfire->ptr_gdl), CT_GDL, marker->src_offset); + break; + } case CT_RODATA_DL: - struct n64_modelrodata_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); - setMarker(PD_BE32(src_dl->ptr_vertices), CT_VTXCOL, marker->src_offset); - break; + { + struct n64_modelrodata_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); + setMarker(PD_BE32(src_dl->ptr_vertices), CT_VTXCOL, marker->src_offset); + break; + } case CT_TEXDATA: case CT_VTXCOL: case CT_GDL: @@ -397,231 +419,269 @@ static u32 convertContent(u8 *dst, u8 *src, u32 src_file_len) switch (marker->type) { 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); - dst_modeldef->numparts = PD_BE16(src_modeldef->numparts); - dst_modeldef->nummatrices = PD_BE16(src_modeldef->nummatrices); - dst_modeldef->scale = PD_BE32(src_modeldef->scale); - dst_modeldef->rwdatalen = PD_BE16(src_modeldef->rwdatalen); - dst_modeldef->numtexconfigs = PD_BE16(src_modeldef->numtexconfigs); - dstpos += sizeof(*dst_modeldef); - break; + { + 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); + dst_modeldef->numparts = PD_BE16(src_modeldef->numparts); + dst_modeldef->nummatrices = PD_BE16(src_modeldef->nummatrices); + dst_modeldef->scale = PD_BE32(src_modeldef->scale); + dst_modeldef->rwdatalen = PD_BE16(src_modeldef->rwdatalen); + dst_modeldef->numtexconfigs = PD_BE16(src_modeldef->numtexconfigs); + dstpos += sizeof(*dst_modeldef); + break; + } case CT_NODE: - struct n64_modelnode *src_node = src_thing; - struct modelnode *dst_node = dst_thing; - dst_node->type = PD_BE16(src_node->type); - dstpos += sizeof(*dst_node); - break; + { + struct n64_modelnode *src_node = src_thing; + struct modelnode *dst_node = dst_thing; + dst_node->type = PD_BE16(src_node->type); + dstpos += sizeof(*dst_node); + break; + } case CT_TEXCONFIG: - struct n64_textureconfig *src_texconfig = src_thing; - struct 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); + { + struct n64_textureconfig *src_texconfig = src_thing; + struct 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->width = src_texconfig->width; + dst_texconfig->height = src_texconfig->height; + dst_texconfig->level = src_texconfig->level; + dst_texconfig->format = src_texconfig->format; + dst_texconfig->depth = src_texconfig->depth; + dst_texconfig->s = src_texconfig->s; + dst_texconfig->t = src_texconfig->t; + dst_texconfig->unk0b = src_texconfig->unk0b; + + dstpos += sizeof(*dst_texconfig); + src_len -= sizeof(*src_texconfig); + src_texconfig++; + dst_texconfig++; } - - dst_texconfig->width = src_texconfig->width; - dst_texconfig->height = src_texconfig->height; - dst_texconfig->level = src_texconfig->level; - dst_texconfig->format = src_texconfig->format; - dst_texconfig->depth = src_texconfig->depth; - dst_texconfig->s = src_texconfig->s; - dst_texconfig->t = src_texconfig->t; - dst_texconfig->unk0b = src_texconfig->unk0b; - - dstpos += sizeof(*dst_texconfig); - src_len -= sizeof(*src_texconfig); - src_texconfig++; - dst_texconfig++; + break; } - break; case CT_TEXDATA: memcpy(dst_thing, src_thing, src_len); dstpos += src_len; break; case CT_PARTS: - struct n64_modeldef *src_modeldef2 = (struct n64_modeldef *) src; - u32 *src_parts = (u32 *) src_thing; - uintptr_t *dst_parts = (uintptr_t *) dst_thing; - int num_parts = PD_BE16(src_modeldef2->numparts); - u16 *src_nums = (u16 *) &src_parts[num_parts]; - u16 *dst_nums = (u16 *) &dst_parts[num_parts]; - - for (int i = 0; i < num_parts; i++) { - dst_nums[i] = PD_BE16(src_nums[i]); - } - dstpos += num_parts * sizeof(uintptr_t) + num_parts * sizeof(u16); - if (num_parts) { - dstpos = ALIGN8(dstpos); + { + struct n64_modeldef *src_modeldef2 = (struct n64_modeldef *) src; + u32 *src_parts = (u32 *) src_thing; + uintptr_t *dst_parts = (uintptr_t *) dst_thing; + int num_parts = PD_BE16(src_modeldef2->numparts); + u16 *src_nums = (u16 *) &src_parts[num_parts]; + u16 *dst_nums = (u16 *) &dst_parts[num_parts]; + + for (int i = 0; i < num_parts; i++) { + dst_nums[i] = PD_BE16(src_nums[i]); + } + dstpos += num_parts * sizeof(uintptr_t) + num_parts * sizeof(u16); + if (num_parts) { + dstpos = ALIGN8(dstpos); + } + break; } - break; case CT_VTXCOL: case CT_VTXCOL4: memcpy(dst_thing, src_thing, src_len); dstpos += src_len; break; case CT_GDL: - struct marker *parent = findMarker(marker->parent_src_offset); - u32 src_vtx; - 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]; - src_vtx = PD_BE32(src_rodata->ptr_vertices) & 0x00ffffff; - dst_vtx = ((uintptr_t)dst_rodata->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]; - src_vtx = PD_BE32(src_rodata->ptr_vertices) & 0x00ffffff; - dst_vtx = ((uintptr_t)dst_rodata->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]; - src_vtx = PD_BE32(src_rodata->ptr_vertices) & 0x00ffffff; - dst_vtx = ((uintptr_t)dst_rodata->vertices) & 0x00ffffff; - } - - dstpos = gbiConvertGdl(dst, dstpos, src, marker->src_offset, 0); - break; + { + struct marker *parent = findMarker(marker->parent_src_offset); + u32 src_vtx; + 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]; + src_vtx = PD_BE32(src_rodata->ptr_vertices) & 0x00ffffff; + dst_vtx = ((uintptr_t)dst_rodata->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]; + src_vtx = PD_BE32(src_rodata->ptr_vertices) & 0x00ffffff; + dst_vtx = ((uintptr_t)dst_rodata->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]; + src_vtx = PD_BE32(src_rodata->ptr_vertices) & 0x00ffffff; + dst_vtx = ((uintptr_t)dst_rodata->vertices) & 0x00ffffff; + } + + dstpos = gbiConvertGdl(dst, dstpos, src, marker->src_offset, 0); + break; + } case CT_RODATA_CHRINFO: - struct modelrodata_chrinfo *src_chrinfo = src_thing; - struct modelrodata_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); - dst_chrinfo->rwdataindex = PD_BE16(src_chrinfo->rwdataindex); - dstpos += sizeof(*dst_chrinfo); - break; + { + struct modelrodata_chrinfo *src_chrinfo = src_thing; + struct modelrodata_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); + dst_chrinfo->rwdataindex = PD_BE16(src_chrinfo->rwdataindex); + dstpos += sizeof(*dst_chrinfo); + break; + } 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); - 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); - dstpos += sizeof(*dst_position); - break; + { + struct modelrodata_position *src_position = src_thing; + struct modelrodata_position *dst_position = dst_thing; + dst_position->pos = PD_SWAPPED_VAL(src_position->pos); + 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); + 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; - dst_gundl->numvertices = PD_BE16(src_gundl->numvertices); - dst_gundl->unk12 = PD_BE16(src_gundl->unk12); - dstpos += sizeof(*dst_gundl); - break; + { + struct n64_modelrodata_gundl *src_gundl = src_thing; + struct modelrodata_gundl *dst_gundl = dst_thing; + dst_gundl->vertices = NULL; + dst_gundl->numvertices = PD_BE16(src_gundl->numvertices); + dst_gundl->unk12 = PD_BE16(src_gundl->unk12); + dstpos += sizeof(*dst_gundl); + break; + } 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); - dst_dist->rwdataindex = PD_BE16(src_dist->rwdataindex); - dstpos += sizeof(*dst_dist); - break; + { + 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); + 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]); - dst_reorder->side = PD_BE16(src_reorder->side); - dst_reorder->rwdataindex = PD_BE16(src_reorder->rwdataindex); - dstpos += sizeof(*dst_reorder); - break; + { + 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]); + dst_reorder->side = PD_BE16(src_reorder->side); + dst_reorder->rwdataindex = PD_BE16(src_reorder->rwdataindex); + dstpos += sizeof(*dst_reorder); + break; + } case CT_RODATA_BBOX: - struct modelrodata_bbox *src_bbox = src_thing; - struct modelrodata_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); - dstpos += sizeof(*dst_bbox); - break; + { + struct modelrodata_bbox *src_bbox = src_thing; + struct modelrodata_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); + 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); - dst_chrgunfire->rwdataindex = PD_BE16(src_chrgunfire->rwdataindex); - dst_chrgunfire->baseaddr = NULL; - dstpos += sizeof(*dst_chrgunfire); - break; + { + 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); + dst_chrgunfire->rwdataindex = PD_BE16(src_chrgunfire->rwdataindex); + dst_chrgunfire->baseaddr = NULL; + dstpos += sizeof(*dst_chrgunfire); + break; + } case CT_RODATA_11: - struct n64_modelrodata_type11 *src_type11 = src_thing; - struct modelrodata_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); - dstpos += sizeof(*dst_type11); - break; + { + struct n64_modelrodata_type11 *src_type11 = src_thing; + struct modelrodata_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); + dstpos += sizeof(*dst_type11); + break; + } case CT_RODATA_TOGGLE: - struct n64_modelrodata_toggle *src_toggle = src_thing; - struct modelrodata_toggle *dst_toggle = dst_thing; - dst_toggle->rwdataindex = PD_BE16(src_toggle->rwdataindex); - dstpos += sizeof(*dst_toggle); - break; + { + struct n64_modelrodata_toggle *src_toggle = src_thing; + struct modelrodata_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); - dst_posheld->mtxindex = PD_BE16(src_posheld->mtxindex); - dst_posheld->unk10 = PD_BE32(src_posheld->unk10); - dstpos += sizeof(*dst_posheld); - break; + { + struct modelrodata_positionheld *src_posheld = src_thing; + struct modelrodata_positionheld *dst_posheld = dst_thing; + dst_posheld->pos = PD_SWAPPED_VAL(src_posheld->pos); + dst_posheld->mtxindex = PD_BE16(src_posheld->mtxindex); + dst_posheld->unk10 = PD_BE32(src_posheld->unk10); + dstpos += sizeof(*dst_posheld); + break; + } case CT_RODATA_STARGUNFIRE: - struct n64_modelrodata_stargunfire *src_stargunfire = src_thing; - struct modelrodata_stargunfire *dst_stargunfire = dst_thing; - dst_stargunfire->unk00 = PD_BE32(src_stargunfire->unk00); - dstpos += sizeof(*dst_stargunfire); - break; + { + struct n64_modelrodata_stargunfire *src_stargunfire = src_thing; + struct modelrodata_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; - dst_headspot->rwdataindex = PD_BE16(src_headspot->rwdataindex); - dstpos += sizeof(*dst_headspot); - break; + { + struct modelrodata_headspot *src_headspot = src_thing; + struct modelrodata_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; - dst_dl->numvertices = PD_BE16(src_dl->numvertices); - dst_dl->mcount = PD_BE16(src_dl->mcount); - dst_dl->rwdataindex = PD_BE16(src_dl->rwdataindex); - dst_dl->numcolours = PD_BE16(src_dl->numcolours); - dstpos += sizeof(*dst_dl); - break; + { + struct n64_modelrodata_dl *src_dl = src_thing; + struct modelrodata_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); + dst_dl->numcolours = PD_BE16(src_dl->numcolours); + dstpos += sizeof(*dst_dl); + break; + } case CT_RODATA_19: - struct modelrodata_type19 *src_type19 = src_thing; - struct modelrodata_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); - - dst_type19->numvertices = (num_vertices); - dstpos += sizeof(u32); - - for (int i = 0; i < num_vertices; i++) { - dst_vertices[i * 3 + 0] = PD_BE32(src_vertices[i * 3 + 0]); - dst_vertices[i * 3 + 1] = PD_BE32(src_vertices[i * 3 + 1]); - dst_vertices[i * 3 + 2] = PD_BE32(src_vertices[i * 3 + 2]); - dstpos += sizeof(u32) * 3; + { + struct modelrodata_type19 *src_type19 = src_thing; + struct modelrodata_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); + + dst_type19->numvertices = (num_vertices); + dstpos += sizeof(u32); + + for (int i = 0; i < num_vertices; i++) { + dst_vertices[i * 3 + 0] = PD_BE32(src_vertices[i * 3 + 0]); + dst_vertices[i * 3 + 1] = PD_BE32(src_vertices[i * 3 + 1]); + dst_vertices[i * 3 + 2] = PD_BE32(src_vertices[i * 3 + 2]); + dstpos += sizeof(u32) * 3; + } + break; } - break; case CT_SKIP: break; } @@ -655,125 +715,147 @@ static u8 *relinkPointers(u8 *dst, u8 *src) switch (marker->type) { 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)); - break; + { + 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)); + 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)); - - lowestptr = (uintptr_t)dst_node->rodata; - break; + { + 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)); + + lowestptr = (uintptr_t)dst_node->rodata; + break; + } case CT_TEXCONFIG: - struct n64_textureconfig *src_texconfig = src_thing; - struct 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); + { + struct n64_textureconfig *src_texconfig = src_thing; + struct 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); + } + break; } - break; case CT_PARTS: - struct n64_modeldef *src_modeldef2 = (struct n64_modeldef *) src; - u32 *src_parts = (u32 *) src_thing; - uintptr_t *dst_parts = (uintptr_t *) dst_thing; - int num_parts = PD_BE16(src_modeldef2->numparts); - - for (int i = 0; i < num_parts; i++) { - dst_parts[i] = (resolvePointer(PD_BE32(src_parts[i]))); + { + struct n64_modeldef *src_modeldef2 = (struct n64_modeldef *) src; + u32 *src_parts = (u32 *) src_thing; + uintptr_t *dst_parts = (uintptr_t *) dst_thing; + int num_parts = PD_BE16(src_modeldef2->numparts); + + for (int i = 0; i < num_parts; i++) { + dst_parts[i] = (resolvePointer(PD_BE32(src_parts[i]))); + } + break; } - 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)); - - gbiConvertVtx(dst, ((uintptr_t)dst_gundl->vertices) & 0x00ffffff, dst_gundl->numvertices); - - gbiSetVtx(PD_BE32(src_gundl->ptr_vertices), (uintptr_t)dst_gundl->vertices); - gbiSetSegment(0x04, (uintptr_t)dst_gundl->vertices); - - gbiGdlRewriteAddrs(dst, (uintptr_t)dst_gundl->opagdl); - gbiGdlRewriteAddrs(dst, (uintptr_t)dst_gundl->xlugdl); - - if (dst_gundl->opagdl) dst_gundl->opagdl = SEGADDR(dst_gundl->opagdl); - if (dst_gundl->xlugdl) dst_gundl->xlugdl = SEGADDR(dst_gundl->xlugdl); - - lowestptr = minPtr3((uintptr_t)dst_gundl->opagdl, (uintptr_t)dst_gundl->xlugdl, (uintptr_t)dst_gundl->vertices); - break; + { + 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)); + + gbiConvertVtx(dst, ((uintptr_t)dst_gundl->vertices) & 0x00ffffff, dst_gundl->numvertices); + + gbiSetVtx(PD_BE32(src_gundl->ptr_vertices), (uintptr_t)dst_gundl->vertices); + gbiSetSegment(0x04, (uintptr_t)dst_gundl->vertices); + + gbiGdlRewriteAddrs(dst, (uintptr_t)dst_gundl->opagdl); + gbiGdlRewriteAddrs(dst, (uintptr_t)dst_gundl->xlugdl); + + if (dst_gundl->opagdl) dst_gundl->opagdl = SEGADDR(dst_gundl->opagdl); + if (dst_gundl->xlugdl) dst_gundl->xlugdl = SEGADDR(dst_gundl->xlugdl); + + lowestptr = minPtr3((uintptr_t)dst_gundl->opagdl, (uintptr_t)dst_gundl->xlugdl, (uintptr_t)dst_gundl->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)); - break; + { + 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)); + 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)); - break; + { + 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)); + 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_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); + } + break; } - 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)); - break; + { + 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)); + 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_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)); - gbiConvertVtx(dst, ((uintptr_t)dst_stargunfire->vertices) & 0x00ffffff, dst_stargunfire->unk00*4); + gbiConvertVtx(dst, ((uintptr_t)dst_stargunfire->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), (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); - lowestptr = minPtr((uintptr_t)dst_stargunfire->gdl, (uintptr_t)dst_stargunfire->vertices); - break; + lowestptr = minPtr((uintptr_t)dst_stargunfire->gdl, (uintptr_t)dst_stargunfire->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)); - - gbiConvertVtx(dst, ((uintptr_t)dst_dl->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); - - if (dst_dl->opagdl) dst_dl->opagdl = SEGADDR(dst_dl->opagdl); - if (dst_dl->xlugdl) dst_dl->xlugdl = SEGADDR(dst_dl->xlugdl); - - 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); - break; + { + 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)); + + gbiConvertVtx(dst, ((uintptr_t)dst_dl->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); + + if (dst_dl->opagdl) dst_dl->opagdl = SEGADDR(dst_dl->opagdl); + if (dst_dl->xlugdl) dst_dl->xlugdl = SEGADDR(dst_dl->xlugdl); + + 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); + break; + } case CT_TEXDATA: case CT_VTXCOL: case CT_VTXCOL4: diff --git a/port/src/preprocess/filesetup.c b/port/src/preprocess/filesetup.c index 5e5ab9cc9..3d764cdf7 100644 --- a/port/src/preprocess/filesetup.c +++ b/port/src/preprocess/filesetup.c @@ -1003,7 +1003,7 @@ static u32 convertProps(u8* dst, u8* src) static uintptr_t convertIntro(u8 *dst, u8 *src) { - u8 cmd_size[] = { + static const u8 cmd_size[] = { 3, // INTROCMD_SPAWN 4, // INTROCMD_WEAPON 4, // INTROCMD_AMMO From 130b286d0daf3c571a90118ed6e035606547288e Mon Sep 17 00:00:00 2001 From: fgsfds Date: Thu, 14 Nov 2024 23:00:30 +0100 Subject: [PATCH 2/4] port: avoid stack corruption in bmoveProcessInput --- src/game/bondmove.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/game/bondmove.c b/src/game/bondmove.c index ede1b11d0..400cfa00c 100644 --- a/src/game/bondmove.c +++ b/src/game/bondmove.c @@ -907,7 +907,9 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i aimoffhist[i] = !aimonhist[i]; } - g_Vars.currentplayer->insightaimmode = aimonhist[numsamples - 1]; + if (numsamples > 0) { + g_Vars.currentplayer->insightaimmode = aimonhist[numsamples - 1]; + } } if (!lvIsPaused()) { @@ -1238,7 +1240,9 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i aimoffhist[i] = !aimonhist[i]; } - g_Vars.currentplayer->insightaimmode = aimonhist[numsamples - 1]; + if (numsamples > 0) { + g_Vars.currentplayer->insightaimmode = aimonhist[numsamples - 1]; + } } if (!lvIsPaused()) { From 28fceb67decc8803505b7f5e33f063fb815993ad Mon Sep 17 00:00:00 2001 From: fgsfds Date: Fri, 15 Nov 2024 00:42:04 +0100 Subject: [PATCH 3/4] 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 --- port/src/preprocess/filemodel.c | 482 +++++++++++++++++++++----------- port/src/preprocess/filepads.c | 1 - src/include/types.h | 4 - 3 files changed, 315 insertions(+), 172 deletions(-) diff --git a/port/src/preprocess/filemodel.c b/port/src/preprocess/filemodel.c index 24ed3de8f..189c7faae 100644 --- a/port/src/preprocess/filemodel.c +++ b/port/src/preprocess/filemodel.c @@ -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)); - - lowestptr = (uintptr_t)dst_node->rodata; + 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 = 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: diff --git a/port/src/preprocess/filepads.c b/port/src/preprocess/filepads.c index 1ba7e59d2..84dafe405 100644 --- a/port/src/preprocess/filepads.c +++ b/port/src/preprocess/filepads.c @@ -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); diff --git a/src/include/types.h b/src/include/types.h index 2936c93f9..da5d058b4 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -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 { From f514e25208ba4835de7683ae8591de3653c38420 Mon Sep 17 00:00:00 2001 From: fgsfds Date: Fri, 15 Nov 2024 01:32:21 +0100 Subject: [PATCH 4/4] port: fix #219, #506 --- src/game/sight.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/game/sight.c b/src/game/sight.c index cc55ffc59..78359c4ef 100644 --- a/src/game/sight.c +++ b/src/game/sight.c @@ -312,7 +312,7 @@ void sightTick(bool sighton) if (g_Vars.currentplayer->lookingatprop.prop != g_Vars.currentplayer->trackedprops[0].prop) { struct sndstate *handle; - handle = snd00010718(&handle, 0, AL_VOL_FULL, AL_PAN_CENTER, SFX_0007, 1, 1, -1, true); + handle = snd00010718(NULL, 0, AL_VOL_FULL, AL_PAN_CENTER, SFX_0007, 1, 1, -1, true); trackedprop = &g_Vars.currentplayer->trackedprops[0]; @@ -338,7 +338,7 @@ void sightTick(bool sighton) if (index >= 0) { struct sndstate *handle; - handle = snd00010718(&handle, 0, AL_VOL_FULL, AL_PAN_CENTER, SFX_0007, 1, 1, -1, 1); + handle = snd00010718(NULL, 0, AL_VOL_FULL, AL_PAN_CENTER, SFX_0007, 1, 1, -1, 1); trackedprop = &g_Vars.currentplayer->trackedprops[index]; @@ -361,7 +361,7 @@ void sightTick(bool sighton) if (index >= 0) { struct sndstate *handle; - handle = snd00010718(&handle, 0, AL_VOL_FULL, AL_PAN_CENTER, SFX_0007, 1, 1, -1, 1); + handle = snd00010718(NULL, 0, AL_VOL_FULL, AL_PAN_CENTER, SFX_0007, 1, 1, -1, 1); trackedprop = &g_Vars.currentplayer->trackedprops[index];