From 315a5642da5aa6f30a478e059a2f40b2d0c7f60e Mon Sep 17 00:00:00 2001 From: Raf <> Date: Tue, 23 Jul 2024 01:58:47 +0800 Subject: [PATCH] portx64: pd extract - font/anim/audio segments and tiles/pads files fixes --- port/pdextract/ext_anims.c | 13 +++++++------ port/pdextract/ext_audio.c | 4 ++-- port/pdextract/ext_file_pads.c | 8 +------- port/pdextract/ext_file_tiles.c | 6 +++--- port/pdextract/ext_fonts.c | 2 +- port/pdextract/ext_jpnfonts.c | 2 +- 6 files changed, 15 insertions(+), 20 deletions(-) diff --git a/port/pdextract/ext_anims.c b/port/pdextract/ext_anims.c index 09d413200..e833d472d 100644 --- a/port/pdextract/ext_anims.c +++ b/port/pdextract/ext_anims.c @@ -22,10 +22,10 @@ static void extract_anims_data(uint32_t romoffset, size_t len) fclose(fp); } -static void extract_anims_table(uint32_t romoffset) +static void extract_anims_table(uint32_t data_offset, uint32_t table_offset) { - int num_anims = srctoh32(*(uint32_t *) &g_Rom[romoffset]); - struct animtableentry *srcanims = (struct animtableentry *) &g_Rom[romoffset + 4]; + int num_anims = srctoh32(*(uint32_t *) &g_Rom[table_offset]); + struct animtableentry *srcanims = (struct animtableentry *) &g_Rom[table_offset + 4]; size_t dstlen = ALIGN16(4 + num_anims * sizeof(struct animtableentry)); uint8_t *dst = calloc(1, dstlen); @@ -42,9 +42,11 @@ static void extract_anims_table(uint32_t romoffset) } char outfilename[1024]; - sprintf(outfilename, "%s/anims_table.bin", g_OutPath); + sprintf(outfilename, "%s/segs/animations", g_OutPath); FILE *fp = openfile(outfilename); + size_t datalen = table_offset - data_offset; + fwrite(&g_Rom[data_offset], datalen, 1, fp); fwrite(dst, dstlen, 1, fp); fclose(fp); @@ -72,6 +74,5 @@ void extract_anims(void) break; } - extract_anims_data(data_offset, table_offset - data_offset); - extract_anims_table(table_offset); + extract_anims_table(data_offset, table_offset); } diff --git a/port/pdextract/ext_audio.c b/port/pdextract/ext_audio.c index 8a6278e4f..15ffd43d4 100644 --- a/port/pdextract/ext_audio.c +++ b/port/pdextract/ext_audio.c @@ -421,7 +421,7 @@ static void extract_audio_ctl(const char *filename, uint32_t romoffset, size_t s dstpos = convert_audio_bankfile(dst, dstpos, src, 0); char outfilename[1024]; - sprintf(outfilename, "%s/%s.ctl", g_OutPath, filename); + sprintf(outfilename, "%s/segs/%sctl", g_OutPath, filename); FILE *fp = openfile(outfilename); fwrite(dst, ALIGN16(dstpos), 1, fp); @@ -433,7 +433,7 @@ static void extract_audio_ctl(const char *filename, uint32_t romoffset, size_t s static void extract_audio_tbl(const char *filename, uint32_t romoffset, size_t len) { char outfilename[1024]; - sprintf(outfilename, "%s/%s.tbl", g_OutPath, filename); + sprintf(outfilename, "%s/segs/%stbl", g_OutPath, filename); FILE *fp = openfile(outfilename); fwrite(&g_Rom[romoffset], len, 1, fp); diff --git a/port/pdextract/ext_file_pads.c b/port/pdextract/ext_file_pads.c index bfb77cc1f..db642dc22 100644 --- a/port/pdextract/ext_file_pads.c +++ b/port/pdextract/ext_file_pads.c @@ -87,13 +87,7 @@ static int convert_pads(uint8_t *dst, int dstpos, uint8_t *src, int srcpos, int struct padheader *host_padheader = (struct padheader *) &dst[dstpos]; uint32_t flags = (n64_padheader >> 14) & 0x3ffff; -#ifdef FORCE_BE32 - *(uint32_t *) host_padheader = htodst32(n64_padheader); -#else - host_padheader->flags = flags; - host_padheader->room = (n64_padheader >> 4) & 0x3ff; - host_padheader->liftnum = n64_padheader & 0xf; -#endif + *(uint32_t*)host_padheader = htodst32(n64_padheader); srcpos += sizeof(struct padheader); dstpos += sizeof(struct padheader); diff --git a/port/pdextract/ext_file_tiles.c b/port/pdextract/ext_file_tiles.c index f074aa731..772bccb5c 100644 --- a/port/pdextract/ext_file_tiles.c +++ b/port/pdextract/ext_file_tiles.c @@ -33,7 +33,7 @@ void extract_file_tiles(char *filename, uint32_t romoffset, size_t len) int num_rooms = srctoh32(*(uint32_t *) src); size_t src_ptr_table_len = (num_rooms + 1) * 4; - size_t dst_ptr_table_len = (num_rooms + 1) * sizeof(uintptr_t); + size_t dst_ptr_table_len = (num_rooms + 1) * sizeof(uint32_t); uint32_t *src_offsets = (uint32_t *) &src[4]; @@ -43,8 +43,8 @@ void extract_file_tiles(char *filename, uint32_t romoffset, size_t len) *(uint32_t *) dst = htodst32(num_rooms); - uintptr_t *dst_offsets = (uintptr_t *) (dst + ALIGN(4, sizeof(uintptr_t))); - uint32_t cur_dst_offset = ALIGN(4, sizeof(uintptr_t)) + dst_ptr_table_len; + uint32_t*dst_offsets = (uint32_t*) (dst + sizeof(uint32_t)); + uint32_t cur_dst_offset = dst_ptr_table_len + sizeof(uint32_t); uint32_t cur_src_offset = srctoh32(src_offsets[0]); uint32_t end_src_offset = srctoh32(src_offsets[num_rooms]); diff --git a/port/pdextract/ext_fonts.c b/port/pdextract/ext_fonts.c index 3ff07b494..c7a9bd7c0 100644 --- a/port/pdextract/ext_fonts.c +++ b/port/pdextract/ext_fonts.c @@ -102,7 +102,7 @@ static void extract_font(const char *filename, uint32_t romoffset, size_t srclen // Write it char outfilename[1024]; - sprintf(outfilename, "%s/fonts/%s.bin", g_OutPath, filename); + sprintf(outfilename, "%s/segs/font%s", g_OutPath, filename); FILE *fp = openfile(outfilename); fwrite(dst, dst_offset, 1, fp); diff --git a/port/pdextract/ext_jpnfonts.c b/port/pdextract/ext_jpnfonts.c index ea68b0d70..02d04c67a 100644 --- a/port/pdextract/ext_jpnfonts.c +++ b/port/pdextract/ext_jpnfonts.c @@ -6,7 +6,7 @@ static void extract_jpnfont(const char *filename, uint32_t romoffset, size_t len) { char outfilename[1024]; - sprintf(outfilename, "%s/%s.bin", g_OutPath, filename); + sprintf(outfilename, "%s/segs/%s", g_OutPath, filename); FILE *fp = openfile(outfilename); fwrite(&g_Rom[romoffset], len, 1, fp);