summaryrefslogtreecommitdiff
path: root/VP-miscwork.lua
diff options
context:
space:
mode:
Diffstat (limited to 'VP-miscwork.lua')
-rw-r--r--VP-miscwork.lua59
1 files changed, 59 insertions, 0 deletions
diff --git a/VP-miscwork.lua b/VP-miscwork.lua
new file mode 100644
index 0000000..31f7e92
--- /dev/null
+++ b/VP-miscwork.lua
@@ -0,0 +1,59 @@
+function process_arcgfx(fname, h, size, ext)
+ log("Processing " .. fname .. "." .. ext)
+ if dump_mode then
+ o = Output(fname .. "." .. ext)
+ o:copyfrom(h, size)
+ o:destroy()
+ h:seek(-size, SEEK_CUR)
+ end
+ log("Extracting " .. fname .. " - format 'arcgfx'")
+ dump_mkdir(fname)
+ local nfiles = h:readU32()
+ local extra = h:readU32()
+ local ret
+ if dump_mode then
+ o = Output(fname .. "/--extra.bin")
+ o:writeU32(extra)
+ o:destroy()
+ o = Output(fname .. string.format("/0000-%08X", extra))
+ o:writeU32(extra)
+ o:destroy()
+ else
+ ret = Buffer(true)
+ ret:writeU32(nfiles)
+ ret:writeU32(extra)
+ end
+
+ index = {}
+ for i = 1, nfiles do
+ index[i] = {}
+ index[i].extra = h:readU32()
+ index[i].size = h:readU32()
+ end
+
+ local tell
+ local outfile = {}
+ for i = 1, nfiles do
+ tell = h:tell()
+ outfile[i] = process_single_file(fname .. string.format("/%04i-%08X", i, index[i].extra), h, index[i].size, ext)
+ h:seek(tell + index[i].size)
+ end
+
+ if not dump_mode then
+ for i = 1, nfiles do
+ local alignment_bytes = alignment(outfile[i]:getsize(), 4)
+ for j = 1, alignment_bytes do
+ outfile[i]:writeU8(0)
+ end
+ ret:writeU32(index[i].extra)
+ ret:writeU32(outfile[i]:getsize())
+ end
+ for i = 1, nfiles do
+ ret:copyfrom(outfile[i])
+ outfile[i]:destroy()
+ end
+ end
+
+-- return ret
+end
+