summaryrefslogtreecommitdiff
path: root/csrc/mkf.c
diff options
context:
space:
mode:
authorIru Cai <mytbk920423@gmail.com>2018-09-28 10:26:17 +0800
committerIru Cai <mytbk920423@gmail.com>2018-09-28 10:26:17 +0800
commit8db05a1a311f5d196c14e7946a1c0e6c3603007f (patch)
tree2e353b7c66088c788bee55f887d55d6d75bd2e5d /csrc/mkf.c
parentced4f8d857dd37c3d3317dbb78b6e6798a747e63 (diff)
downloadrich4-8db05a1a311f5d196c14e7946a1c0e6c3603007f.tar.xz
restruct mkf functions
Diffstat (limited to 'csrc/mkf.c')
-rw-r--r--csrc/mkf.c37
1 files changed, 33 insertions, 4 deletions
diff --git a/csrc/mkf.c b/csrc/mkf.c
index f7406ff..535d120 100644
--- a/csrc/mkf.c
+++ b/csrc/mkf.c
@@ -5,6 +5,8 @@
#include <windows.h>
#include <stdint.h>
+#include <string.h>
+#include "mkf.h"
#define NULL_HND ((HANDLE)(-1))
@@ -13,7 +15,6 @@ void fcn_00455040(char *arg1, char *arg2);
/* mkf_cfunc.c */
void fcn_00451801(int16_t *a, int nbytes);
-void fcn_00450069(char *s);
struct mkf
{
@@ -22,7 +23,7 @@ struct mkf
};
struct mkf mkf_stdata[16] = { { NULL_HND, NULL } }; // 0x4762f4
-int32_t load_mkf(const char *fn)
+int load_mkf(const char *fn)
{
int i;
int32_t x;
@@ -60,7 +61,35 @@ void unload_mkf(int mkf_idx)
m->data = NULL;
}
-char * read_mkf(int mkf_idx, int a1, char *buf, int *bufsize) //0x00450441
+static void update_spr_smp_ptr(char *s)
+{
+ struct spr_smp *sst = (struct spr_smp*)s;
+ int lastsz;
+
+ if (strcmp(sst->sig, "SPR") == 0) {
+ lastsz = sst->chunk_tab[0].chunk_sz;
+ sst->chunk_tab[0].chunk_sz = (int32_t)s + sst->start_offset + 0x200;
+
+ for (int i = 1; i < sst->nchunk; i++) {
+ int t = sst->chunk_tab[i].chunk_sz;
+ sst->chunk_tab[i].chunk_sz = lastsz + sst->chunk_tab[i-1].chunk_sz;
+ lastsz = t;
+ }
+ }
+
+ if (strcmp(sst->sig, "SMP") == 0) {
+ lastsz = sst->chunk_tab[0].chunk_sz;
+ sst->chunk_tab[0].chunk_sz = (int32_t)s + sst->start_offset;
+
+ for (int i = 1; i < sst->nchunk; i++) {
+ int t = sst->chunk_tab[i].chunk_sz;
+ sst->chunk_tab[i].chunk_sz = lastsz + sst->chunk_tab[i-1].chunk_sz;
+ lastsz = t;
+ }
+ }
+}
+
+char * read_mkf(int mkf_idx, int a1, char *buf, int *bufsize)
{
uint32_t data[4];
int sz;
@@ -93,7 +122,7 @@ char * read_mkf(int mkf_idx, int a1, char *buf, int *bufsize) //0x00450441
}
if (strncmp(buf, "SPR", 3) == 0
|| strncmp(buf, "SMP", 3) == 0) {
- fcn_00450069(buf);
+ update_spr_smp_ptr(buf);
}
return buf;
}