-- Megaman X4's french patch -- $Id:$ COPY_MODE2_FORM1 = 1 COPY_MODE2 = 2 function mainpatch() local i, v, falsesect, slusdirent, slussect, pvd, root, systemcnfstring, systemcnf slusdirent = cdutil:findpath "/SLUS_005.61;1" or cdutil:findpath "/SLPS_009.02;1" or error "This is not a US Megaman X4 CD." print(slusdirent.id) if (slusdirent.id == "SLUS_005.61;1") then print "US CD detected." japmode = false else print "Japanese CD detected." japmode = true videos_jap = 0 error "Le patch sur la version japonaise n'est pas fonctionnel pour le moment." end iso:foreword(cdutil) pvd = createpvd(cdutil) if (japmode) then pvd.volid = "MMX4-FRJ-b" else pvd.volid = "MMX4-FR-b" end root = iso:setbasics(pvd) if (videos_jap == 1) then for i, v in pairs(videos_jap_override) do mmx4_index[i] = v end end root:setbasicsxa() root:fromdir(cdutil:findpath "/") if (japmode) then systemcnfstring = "BOOT = cdrom:\\MMX4-FRJ.EXE;1\r\nTCB = 4\r\nEVENT = 16\r\nSTACK = 801FFF00\r\n" else systemcnfstring = "BOOT = cdrom:\\MMX4-FR.EXE;1\r\nTCB = 4\r\nEVENT = 16\r\nSTACK = 801FFF00\r\n" end systemcnf = Buffer() systemcnf:write(systemcnfstring) iso:createfile(root, "SYSTEM.CNF", systemcnf, slusdirent) inslus = cdutil:cdfile(slusdirent) slus = Buffer(true) slus:copyfrom(inslus) if (japmode) then apply_hacks(slus_hacks_jap, slus) else apply_hacks(slus_hacks, slus) end slussect = iso:getdispsect() slus:seek(0) if (japmode) then iso:createfile(root, "MMX4-FRJ.EXE", slus, slusdirent):setbasicsxa() else iso:createfile(root, "MMX4-FR.EXE", slus, slusdirent):setbasicsxa() end falsesect = {} process_data(slus) slus:seek(0) iso:putfile(slus, -1, slussect) iso:createfile(root, "README.TXT", Input("readme.txt")):setbasicsxa() for i = 1, 148, 1 do iso:createsector(falsesect, MODE2) end iso:close() end function apply_hacks(hacks, file) local k, v, i, h for k, v in pairs(hacks) do for i, h in ipairs(v) do file[k + i - 1] = h end end end function process_data(slus) local i, ftype, sector, sector_out, size, flags, vfile, mode, already_written, count if (japmode) then slus:seek(0xe17b4, SEEK_SET); slus:wseek(0xe17b4, SEEK_SET); count = 158 else slus:seek(0xe1618, SEEK_SET) slus:wseek(0xe1618, SEEK_SET) count = 159 end for i = 0, count, 1 do if (japmode) then ftype = mmx4_index_jap[i] else ftype = mmx4_index[i] end sector = slus:readU32() size = slus:readU32() flags = slus:readU32() already_written = false sector_out = iso:getdispsect() if (type(ftype) == "number") then -- print("File number " .. i .. " @ " .. sector .. " size = " .. size .. " flags = " .. hex(flags, "%08X") .. " ftype = " .. ftype) if (japmode) then print("Copying file " .. i .. ": " .. filenames_jap[i + 1]) else print("Copying file " .. i .. ": " .. filenames[i + 1]) end if (ftype == COPY_MODE2_FORM1) then vfile = cdutil:cdfile(sector, size, MODE2_FORM1) mode = MODE2_FORM1 elseif (ftype == COPY_MODE2) then vfile = cdutil:cdfile(sector, size, MODE2) mode = MODE2 else error "Error in script - wrong copy type." end elseif (type(ftype) == "table") then -- print("File number " .. i .. " @ " .. sector .. " size = " .. size .. " flags = " .. hex(flags, "%08X") .. " ftype = array") if (japmode) then print("Processing file " .. i .. ": " .. filenames_jap[i + 1]) else print("Processing file " .. i .. ": " .. filenames[i + 1]) end vfile, size, mode, already_written = ftype:func(sector, size) if (not size) then size = vfile:getsize() end if (not mode) then mode = MODE2_FORM1 end else error "Error in script - wrong copy argument." end if (not already_written) then iso:putfile(vfile, mode) end slus:writeU32(sector_out) slus:writeU32(size) slus:writeU32(flags) end end function buffer_pad(buffer, padding) local rest, i if (not padding) then rest = 2048 - andB(buffer:getsize(), 0x7ff) if (rest == 2048) then return end else rest = padding - math.mod(buffer:getsize(), padding) end buffer:wseek(0, SEEK_END) for i = 1, rest, 1 do buffer:writeU8(0) end end function arc_patch(self, sector, size) local args, nfiles, size, file, tmpfile, subfile, files, cursect, index, i args = self.args files = {} index = cdutil:cdfile(sector, 2048, MODE2_FORM1) nfiles = index:readU32() size = index:readU32() cursect = sector + 1 for i = 0, nfiles - 1, 1 do subfile = {} subfile.flags = index:readU32() subfile.size = index:readU32() subfile.handle = cdutil:cdfile(cursect, subfile.size, MODE2_FORM1) files[i] = subfile if (andB(subfile.size, 0x7ff) ~= 0) then cursect = cursect + 1 end cursect = cursect + shr(subfile.size, 11) end for i,tmpfile in pairs(args) do if (type(tmpfile) == "string") then file = Buffer(true) file:copyfrom(Input(tmpfile)) tmpfile = file buffer_pad(tmpfile, 4) end files[i].size = tmpfile:getsize() files[i].handle = tmpfile end file = Buffer(true) file:writeU32(nfiles) file:writeU32(size) for i = 0, nfiles - 1, 1 do file:writeU32(files[i].flags) file:writeU32(files[i].size) end buffer_pad(file) for i = 0, nfiles - 1, 1 do file:copyfrom(files[i].handle) buffer_pad(file) end file:wseek(4, SEEK_SET) file:writeU32(file:getsize()) return file end SECTOR_EMPTY = 0 SECTOR_VIDEO = 1 SECTOR_AUDIO = 2 function apply_ssa(stateful, args, bs_in, frameno, width, height, maxsize) local rgb_picture, pos, bfile, tfile if (not stateful.loaded) then if ((japmode) or (videos_jap == 1)) then tfile = Input("SUBS-JAP" .. "/" .. args.name .. "/index.lua") else tfile = Input("SUBS-US" .. "/" .. args.name .. "/index.lua") end bfile = Buffer(true) tfile:copyto(bfile) load(bfile) stateful.loaded = true end if (not frames[frameno]) then return end if (stateful.overlay_number ~= frames[frameno]) then stateful.overlay_number = frames[frameno] if ((japmode) or (videos_jap == 1)) then tfile = Input("SUBS-JAP" .. "/" .. args.name .. "/sub-" .. frames[frameno] .. ".rgba") else tfile = Input("SUBS-US" .. "/" .. args.name .. "/sub-" .. frames[frameno] .. ".rgba") end stateful.overlay = Buffer(true) stateful.overlay:copyfrom(tfile) end rgb_picture = bsdecode(bs_in, width, height) rgb_picture:seek(0) rgb_picture:wseek(0) rgb_picture_overlay = stateful.overlay rgb_picture_overlay:seek(0) pos = sub_pos[stateful.overlay_number] blit(rgb_picture, rgb_picture_overlay, width, height, pos.w, pos.h, pos.x, pos.y, BLIT_ALPHA) rgb_picture:seek(0) return bsencode(rgb_picture, width, height, maxsize) end function change_xa(stateful, args, frameno) local tfile, r if (not stateful.loaded) then tfile = Input("MEDIA/" .. args.xa_name .. ".xa") stateful.xa_file=Buffer() stateful.xa_file:copyfrom(tfile) stateful.loaded = true end r = Buffer() stateful.xa_file:copyto(r, 2324) return r end function str_process(self, sector, size) local in_file, args, n_sectors, i, j, FN, CN, SM, CI, sectors, cur_sector, eoframe, bspicture_in, bspicture_in_full, rgb_picture, rgb_picture_overlay, bspicture_out, bsptr, file, framesize, bs_stateful, xa_stateful, final_size, xa_frame, xa_frameno bs_stateful = {} xa_stateful = {} final_size = 0 xa_frameno = 0 args = self.args print("STR processing: sector = " .. sector .. " size = " .. size) n_sectors = size / 2336 in_file = cdutil:cdfile(sector, size, MODE2) sectors = {} cur_sector = 1 for i = 0, n_sectors - 1, 1 do in_file:seek(2336 * i) FN = in_file:readU8() CN = in_file:readU8() SM = in_file:readU8() CI = in_file:readU8() in_file:readU8() -- second FN in_file:readU8() -- second CN in_file:readU8() -- second SM in_file:readU8() -- second CI eoframe = false sectors[cur_sector] = {} if ((andB(SM, 2) == 2) or (andB(SM, 8) == 8)) then sectors[cur_sector].type = SECTOR_VIDEO sectors[cur_sector].FN = FN sectors[cur_sector].CN = CN sectors[cur_sector].SM = SM sectors[cur_sector].CI = CI sectors[cur_sector].ststatus = in_file:readU16() sectors[cur_sector].sttype = in_file:readU16() sectors[cur_sector].stoffset = in_file:readU16() sectors[cur_sector].stsize = in_file:readU16() sectors[cur_sector].stframeno = in_file:readU32() sectors[cur_sector].stsectorsize = in_file:readU32() sectors[cur_sector].stwidth = in_file:readU16() sectors[cur_sector].stheight = in_file:readU16() sectors[cur_sector].stheadm = in_file:readU32() sectors[cur_sector].stheadv = in_file:readU32() sectors[cur_sector].stchannels = in_file:readU16() sectors[cur_sector].unknown = in_file:readU16() -- huh ? sectors[cur_sector].data = Buffer(true) sectors[cur_sector].data:copyfrom(in_file, 2016) if ((sectors[cur_sector].stoffset + 1) == sectors[cur_sector].stsize) then eoframe = true end elseif (andB(SM, 4) == 4) then sectors[cur_sector].type = SECTOR_AUDIO sectors[cur_sector].FN = FN sectors[cur_sector].CN = CN sectors[cur_sector].SM = SM sectors[cur_sector].CI = CI sectors[cur_sector].data = Buffer(true) sectors[cur_sector].data:copyfrom(in_file, 2324) if (cur_sector == 1) then eoframe = true end elseif ((CN == 0) and (SM == 0) and (CI == 0)) then sectors[cur_sector].type = SECTOR_EMPTY sectors[cur_sector].FN = FN sectors[cur_sector].CN = CN sectors[cur_sector].SM = SM sectors[cur_sector].CI = CI else print("FN = " .. hex(FN) .. ", CN = " .. hex(CN) .. ", SM = " .. hex(SM) .. ", CI = " .. hex(CI)) error("Strange frame in str file, sector " .. (i + sector)) end if (eoframe) then if (cur_sector == 1) then -- single audio sector. file = Buffer(true) FN = sectors[cur_sector].FN CN = sectors[cur_sector].CN SM = sectors[cur_sector].SM CI = sectors[cur_sector].CI xa_frameno = xa_frameno + 1 xa_frame = nil if (args.xa_func) then xa_frame = args.xa_func(xa_stateful, args, xa_frameno) end if (xa_frame == nil) then file:copyfrom(sectors[cur_sector].data, 2324) else file:copyfrom(xa_frame, 2324) end iso:createsector(file, MODE2_FORM2, -1, FN, CN, SM, CI) final_size = final_size + 2336 else -- full video sectors, maybe with audio interlaced. has_to_reencode = true if (has_to_reencode) then bspicture_in_full = Buffer(true) for j = 1, cur_sector, 1 do if (sectors[j].type == SECTOR_VIDEO) then bspicture_in_full:copyfrom(sectors[j].data) end end print("Processing video::" .. args.name .. "::frame_" .. sectors[cur_sector].stframeno .. " (" .. (math.floor(100 * i / n_sectors)) .. "%)") bspicture_out = nil bspicture_in = Buffer(true) bspicture_in:copyfrom(bspicture_in_full, sectors[cur_sector].stsectorsize) if (args.bs_func) then bspicture_out, filesize = args.bs_func(bs_stateful, args, bspicture_in, sectors[cur_sector].stframeno, sectors[cur_sector].stwidth, sectors[cur_sector].stheight, sectors[cur_sector].stsize * 2016) end if (not bspicture_out) then bspicture_out = bspicture_in end if (not framesize) then framesize = bspicture_out:getsize() end for j = 1, cur_sector, 1 do file = Buffer(true) FN = sectors[j].FN CN = sectors[j].CN SM = sectors[j].SM CI = sectors[j].CI if (sectors[j].type == SECTOR_VIDEO) then file:writeU16(sectors[j].ststatus) file:writeU16(sectors[j].sttype) file:writeU16(sectors[j].stoffset) file:writeU16(sectors[j].stsize) file:writeU32(sectors[j].stframeno) file:writeU32(framesize) file:writeU16(sectors[j].stwidth) file:writeU16(sectors[j].stheight) file:writeU32(sectors[j].stheadm) file:writeU32(sectors[j].stheadv) file:writeU16(sectors[j].stchannels) file:writeU16(sectors[j].unknown) file:copyfrom(bspicture_out, 2016) iso:createsector(file, MODE2_FORM1, -1, FN, CN, SM, CI) elseif (sectors[j].type == SECTOR_AUDIO) then xa_frameno = xa_frameno + 1 xa_frame = nil if (args.xa_func) then xa_frame = args.xa_func(xa_stateful, args, xa_frameno) end if (xa_frame == nil) then file:copyfrom(sectors[j].data, 2324) else file:copyfrom(xa_frame, 2324) end iso:createsector(file, MODE2_FORM2, -1, FN, CN, SM, CI) elseif (sectors[j].type == SECTOR_EMPTY) then iso:createsector(file, MODE2_FORM1, -1, FN, CN, SM, CI) end final_size = final_size + 2336 end end end sectors = {} cur_sector = 1 else cur_sector = cur_sector + 1 end end return nil, final_size, MODE2, true end function create_intro(self, sector, size) local i, abs_time, cur_time, scale, dummy, current, duration, picture, pictureB, effect, final_size, rgb_picture, bs_picture, frameno, file, frame_size, in_file, FN, CN, SM, CI, n_sector, xa, tfile xa = Buffer() tfile = Input("INTRO/intro.xa") tfile:copyto(xa) in_file = cdutil:cdfile(sector, size, MODE2) n_sectors = size / 2336 frameno = 1 abs_time = 0 final_size = 0 for dummy, current in ipairs(intro_timeline) do picture = Buffer(true) tfile = Input("INTRO/" .. current.picture) tfile:copyto(picture) duration = current.duration if (current.pictureB ~= nil) then pictureB = Buffer(true) tfile = Input("INTRO/" .. current.pictureB) tfile:copyto(pictureB) else pictureB = nil end if (current.effect ~= nil) then effect = current.effect else effect = nil end cur_time = 0 while (cur_time <= duration) do print("Generating and encoding intro (" .. (math.floor(abs_time / 59.73 * 1000) / 10) .. "%)") scale = cur_time / duration picture:seek(0) if (effect) then pictureB:seek(0) rgb_picture = effect(picture, pictureB, scale) else rgb_picture = picture end rgb_picture:seek(0) bs_picture = bsencode(rgb_picture, 320, 240, 7 * 2016) frame_size = 0 for i = 0, 6, 1 do file = Buffer(true) file:writeU16(0x160) file:writeU16(0x8001) file:writeU16(i) file:writeU16(7) file:writeU32(frameno) file:writeU32(bs_picture:getsize()) file:writeU16(320) file:writeU16(240) file:writeU32(0) -- headm file:writeU32(0) -- headv file:writeU16(0) -- channels file:writeU16(0) if (frame_size < bs_picture:getsize()) then file:copyfrom(bs_picture, 2016) end iso:createsector(file, MODE2_FORM1, -1, 1, 1, 66, 128) frame_size = frame_size + 2016 final_size = final_size + 2336 end file = Buffer(true) file:copyfrom(xa, 2324) iso:createsector(file, MODE2_FORM2, -1, 1, 1, 100, 1) final_size = final_size + 2336 cur_time = cur_time + 1/15 abs_time = abs_time + 1/15 frameno = frameno + 1 end end print "Appending old intro" for i = 0, n_sectors - 1, 1 do in_file:seek(2336 * i) FN = in_file:readU8() CN = in_file:readU8() SM = in_file:readU8() CI = in_file:readU8() in_file:readU8() -- second FN in_file:readU8() -- second CN in_file:readU8() -- second SM in_file:readU8() -- second CI file = Buffer(true) if ((andB(SM, 2) == 2) or (andB(SM, 8) == 8)) then file:writeU16(in_file:readU16()) file:writeU16(in_file:readU16()) file:writeU16(in_file:readU16()) file:writeU16(in_file:readU16()) file:writeU32(in_file:readU32() + frameno) file:writeU32(in_file:readU32()) file:writeU16(in_file:readU16()) file:writeU16(in_file:readU16()) file:writeU32(in_file:readU32()) file:writeU32(in_file:readU32()) file:writeU16(in_file:readU16()) file:writeU16(in_file:readU16()) -- huh ? file:copyfrom(in_file, 2016) iso:createsector(file, MODE2_FORM1, -1, FN, CN, SM, CI) elseif (andB(SM, 4) == 4) then file:copyfrom(in_file, 2324) iso:createsector(file, MODE2_FORM2, -1, FN, CN, SM, CI) elseif ((CN == 0) and (SM == 0) and (CI == 0)) then iso:createsector(file, MODE2_FORM1, -1, FN, CN, SM, CI) else print("FN = " .. hex(FN) .. ", CN = " .. hex(CN) .. ", SM = " .. hex(SM) .. ", CI = " .. hex(CI)) error("Strange frame in str file, sector " .. (i + sector)) end final_size = final_size + 2336 end frameno = frameno + 0x92 if (japmode) then slus[0xe2698] = andB(frameno, 255) slus[0xe2699] = shr(frameno, 8) else slus[0xe2508] = andB(frameno, 255) slus[0xe2509] = shr(frameno, 8) end return nil, final_size, MODE2, true end function fade_in(pictureA, pictureB, scale) local out out = Buffer(true) out:copyfrom(pictureA) out:seek(0) out:wseek(0) blit(out, pictureB, 320, 240, 320, 240, 0, 0, BLIT_FADE, scale) return out end function bounce_in(pictureA, pictureB, scale) local out, y y = -240 * math.exp(-scale / .2) * math.cos(2 * math.pi * scale / .55) out = Buffer(true) out:copyfrom(pictureA) out:seek(0) out:wseek(0) blit(out, pictureB, 320, 240, 320, 240, 0, y, BLIT_ALPHA) return out end function bounce_out(pictureA, pictureB, scale) local out, y y = 240 * scale * scale out = Buffer(true) out:copyfrom(pictureA) out:seek(0) out:wseek(0) blit(out, pictureB, 320, 240, 320, 240, 0, y, BLIT_ALPHA) return out end function alpha_blend(pictureA, pictureB, scale) local out out = Buffer(true) out:copyfrom(pictureA) out:seek(0) out:wseek(0) blit(out, pictureB, 320, 240, 320, 240, 0, 0, BLIT_ALPHA) return out end intro_timeline = { { ["duration"] = 2.0, ["picture"] = "black.rgb", ["pictureB"] = "white.rgb", ["effect"] = fade_in }, { ["duration"] = 2.0, ["picture"] = "white.rgb", ["pictureB"] = "frame-01.rgb", ["effect"] = fade_in }, { ["duration"] = 1.4, ["picture"] = "frame-01.rgb" }, { ["duration"] = 2.0, ["picture"] = "frame-01.rgb", ["pictureB"] = "frame-02.rgb", ["effect"] = fade_in }, { ["duration"] = 1.2, ["picture"] = "frame-02.rgb" }, { ["duration"] = 2.0, ["picture"] = "frame-02.rgb", ["pictureB"] = "frame-03.rgb", ["effect"] = fade_in }, { ["duration"] = 1.5, ["picture"] = "frame-03.rgb" }, { ["duration"] = 1.0, ["picture"] = "frame-03.rgb", ["pictureB"] = "frame-04.rgb", ["effect"] = fade_in }, { ["duration"] = 0.2, ["picture"] = "frame-04.rgb" }, { ["duration"] = 1.6, ["picture"] = "frame-04.rgb", ["pictureB"] = "title-01.rgba", ["effect"] = bounce_in }, { ["duration"] = 4.0, ["picture"] = "frame-04.rgb", ["pictureB"] = "title-01.rgba", ["effect"] = alpha_blend }, { ["duration"] = 0.6, ["picture"] = "frame-04.rgb", ["pictureB"] = "title-01.rgba", ["effect"] = bounce_out }, { ["duration"] = 1.6, ["picture"] = "frame-04.rgb", ["pictureB"] = "title-02.rgba", ["effect"] = bounce_in }, { ["duration"] = 3.0, ["picture"] = "frame-04.rgb", ["pictureB"] = "title-02.rgba", ["effect"] = alpha_blend }, { ["duration"] = 0.6, ["picture"] = "frame-04.rgb", ["pictureB"] = "title-02.rgba", ["effect"] = bounce_out }, { ["duration"] = 1.6, ["picture"] = "frame-04.rgb", ["pictureB"] = "title-03.rgba", ["effect"] = bounce_in }, { ["duration"] = 3.0, ["picture"] = "frame-04.rgb", ["pictureB"] = "title-03.rgba", ["effect"] = alpha_blend }, { ["duration"] = 0.6, ["picture"] = "frame-04.rgb", ["pictureB"] = "title-03.rgba", ["effect"] = bounce_out }, { ["duration"] = 1.6, ["picture"] = "frame-04.rgb", ["pictureB"] = "title-04.rgba", ["effect"] = bounce_in }, { ["duration"] = 3.0, ["picture"] = "frame-04.rgb", ["pictureB"] = "title-04.rgba", ["effect"] = alpha_blend }, { ["duration"] = 0.6, ["picture"] = "frame-04.rgb", ["pictureB"] = "title-04.rgba", ["effect"] = bounce_out }, { ["duration"] = 1.6, ["picture"] = "frame-04.rgb", ["pictureB"] = "title-05.rgba", ["effect"] = bounce_in }, { ["duration"] = 3.0, ["picture"] = "frame-04.rgb", ["pictureB"] = "title-05.rgba", ["effect"] = alpha_blend }, { ["duration"] = 0.6, ["picture"] = "frame-04.rgb", ["pictureB"] = "title-05.rgba", ["effect"] = bounce_out }, { ["duration"] = 1.6, ["picture"] = "frame-04.rgb", ["pictureB"] = "title-06.rgba", ["effect"] = bounce_in }, { ["duration"] = 3.0, ["picture"] = "frame-04.rgb", ["pictureB"] = "title-06.rgba", ["effect"] = alpha_blend }, { ["duration"] = 0.6, ["picture"] = "frame-04.rgb", ["pictureB"] = "title-06.rgba", ["effect"] = bounce_out }, { ["duration"] = 0.3, ["picture"] = "frame-04.rgb" }, { ["duration"] = 1.8, ["picture"] = "frame-04.rgb", ["pictureB"] = "frame-last.rgb", ["effect"] = fade_in }, { ["duration"] = 5.6, ["picture"] = "frame-last.rgb" }, { ["duration"] = 2.0, ["picture"] = "frame-last.rgb", ["pictureB"] = "black.rgb", ["effect"] = fade_in }, { ["duration"] = 3.0, ["picture"] = "black.rgb" }, } slus_hacks = { -- Extra ASM code [0x01e10] = { 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x02, 0x96, 0x21, 0x18, 0x00, 0x00, 0x00, 0x02, 0x42, 0x30, 0x03, 0x00, 0x40, 0x14, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x03, 0x24, 0x0C, 0x00, 0x03, 0xA2, 0x01, 0x80, 0x01, 0x3C, 0x08, 0x00, 0xE0, 0x03, 0x10, 0x16, 0x23, 0xA0, 0x01, 0x80, 0x03, 0x3C, 0x10, 0x16, 0x63, 0x90, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x24, 0xA3, 0x8C, 0x00, 0x08, 0x0E, 0x00, 0x82, 0xA0 }, -- Text hook 1 [0x137fc] = { 0x8f, 0x45, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, -- Text hook 2 [0x13e00] = { 0x85, 0x45, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00 }, } slus_hacks_jap = { -- Extra ASM code [0x01e44] = { 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x02, 0x96, 0x21, 0x18, 0x00, 0x00, 0x00, 0x02, 0x42, 0x30, 0x03, 0x00, 0x40, 0x14, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x03, 0x24, 0x0C, 0x00, 0x03, 0xA2, 0x01, 0x80, 0x01, 0x3C, 0x08, 0x00, 0xE0, 0x03, 0x44, 0x16, 0x23, 0xA0, 0x01, 0x80, 0x03, 0x3C, 0x44, 0x16, 0x63, 0x90, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x24, 0xB6, 0x8C, 0x00, 0x08, 0x0E, 0x00, 0x82, 0xA0 }, -- Text hook 1 [0x13848] = { 0x9C, 0x45, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, -- Text hook 2 [0x13e4c] = { 0x92, 0x45, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00 }, -- Text spacing [0x13ccc] = { 0x0c }, } mmx4_index = { [0] = COPY_MODE2_FORM1, -- CAPCOM.ARC [1] = COPY_MODE2_FORM1, -- COL00_0X.ARC [2] = COPY_MODE2_FORM1, -- COL00_0Z.ARC [3] = COPY_MODE2_FORM1, -- COL00_1X.ARC [4] = COPY_MODE2_FORM1, -- COL00_1Z.ARC [5] = COPY_MODE2_FORM1, -- COL01_0X.ARC [6] = COPY_MODE2_FORM1, -- COL01_0Z.ARC [7] = COPY_MODE2_FORM1, -- COL01_1X.ARC [8] = COPY_MODE2_FORM1, -- COL01_1Z.ARC [9] = COPY_MODE2_FORM1, -- COL02_0X.ARC [10] = COPY_MODE2_FORM1, -- COL02_0Z.ARC [11] = COPY_MODE2_FORM1, -- COL02_1X.ARC [12] = COPY_MODE2_FORM1, -- COL02_1Z.ARC [13] = COPY_MODE2_FORM1, -- COL03_0X.ARC [14] = COPY_MODE2_FORM1, -- COL03_0Z.ARC [15] = COPY_MODE2_FORM1, -- COL03_1X.ARC [16] = COPY_MODE2_FORM1, -- COL03_1Z.ARC [17] = COPY_MODE2_FORM1, -- COL04_0X.ARC [18] = COPY_MODE2_FORM1, -- COL04_0Z.ARC [19] = COPY_MODE2_FORM1, -- COL04_1X.ARC [20] = COPY_MODE2_FORM1, -- COL04_1Z.ARC [21] = COPY_MODE2_FORM1, -- COL05_0X.ARC [22] = COPY_MODE2_FORM1, -- COL05_0Z.ARC [23] = COPY_MODE2_FORM1, -- COL05_1X.ARC [24] = COPY_MODE2_FORM1, -- COL05_1Z.ARC [25] = COPY_MODE2_FORM1, -- COL06_0X.ARC [26] = COPY_MODE2_FORM1, -- COL06_0Z.ARC [27] = COPY_MODE2_FORM1, -- COL06_1X.ARC [28] = COPY_MODE2_FORM1, -- COL06_1Z.ARC [29] = COPY_MODE2_FORM1, -- COL07_0X.ARC [30] = COPY_MODE2_FORM1, -- COL07_0Z.ARC [31] = COPY_MODE2_FORM1, -- COL07_1X.ARC [32] = COPY_MODE2_FORM1, -- COL07_1Z.ARC [33] = COPY_MODE2_FORM1, -- COL08_0X.ARC [34] = COPY_MODE2_FORM1, -- COL08_0Z.ARC [35] = COPY_MODE2_FORM1, -- COL08_1X.ARC [36] = COPY_MODE2_FORM1, -- COL08_1Z.ARC [37] = COPY_MODE2_FORM1, -- COL09_0X.ARC [38] = COPY_MODE2_FORM1, -- COL09_0Z.ARC [39] = COPY_MODE2_FORM1, -- COL0A_0X.ARC [40] = COPY_MODE2_FORM1, -- COL0A_0Z.ARC [41] = COPY_MODE2_FORM1, -- COL0B_0X.ARC [42] = COPY_MODE2_FORM1, -- COL0B_0Z.ARC [43] = COPY_MODE2_FORM1, -- COL0B_1X.ARC [44] = COPY_MODE2_FORM1, -- COL0B_1Z.ARC [45] = COPY_MODE2_FORM1, -- COL0C_0X.ARC [46] = COPY_MODE2_FORM1, -- COL0C_0Z.ARC [47] = COPY_MODE2_FORM1, -- COL0C_1X.ARC [48] = COPY_MODE2_FORM1, -- COL0C_1Z.ARC [49] = COPY_MODE2_FORM1, -- COL0D_0X.ARC [50] = COPY_MODE2_FORM1, -- COL0D_0Z.ARC [51] = COPY_MODE2_FORM1, -- COL0E_U0.ARC [52] = COPY_MODE2_FORM1, -- COL0E_U1.ARC [53] = COPY_MODE2_FORM1, -- COL0F_U0.ARC [54] = COPY_MODE2_FORM1, -- COL0F_U1.ARC [55] = COPY_MODE2_FORM1, -- COLD_1U1.ARC [56] = COPY_MODE2_FORM1, -- COLD_1U2.ARC [57] = COPY_MODE2_FORM1, -- COLD_1U3.ARC [58] = COPY_MODE2_FORM1, -- COLD_1U4.ARC [59] = COPY_MODE2_FORM1, -- COLD_1U5.ARC [60] = COPY_MODE2_FORM1, -- COLD_1U6.ARC [61] = COPY_MODE2_FORM1, -- COLD_1U7.ARC [62] = COPY_MODE2_FORM1, -- COLD_1U8.ARC [63] = COPY_MODE2_FORM1, -- FONT8X8.ARC [64] = { ["func"] = arc_patch, ["args"] = { [1] = "FONT.BIN" } }, -- LOAD_U.ARC [65] = COPY_MODE2_FORM1, -- MOJIPAT.ARC [66] = COPY_MODE2_FORM1, -- ONPARE1.ARC [67] = COPY_MODE2_FORM1, -- ONPARE2.ARC [68] = COPY_MODE2_FORM1, -- ONPARE3.ARC [69] = COPY_MODE2_FORM1, -- ONPARE4.ARC [70] = COPY_MODE2_FORM1, -- ONPARE5.ARC [71] = COPY_MODE2_FORM1, -- ONPARE6.ARC [72] = COPY_MODE2_FORM1, -- ONPARE7.ARC [73] = COPY_MODE2_FORM1, -- ONPARE8.ARC [74] = COPY_MODE2_FORM1, -- PL00SEP.ARC [75] = { ["func"] = arc_patch, ["args"] = { [15] = "PL00.BIN" } }, -- PL00_U.ARC [76] = COPY_MODE2_FORM1, -- PL01SEP.ARC [77] = { ["func"] = arc_patch, ["args"] = { [15] = "PL01.BIN" } }, -- PL01_U.ARC [78] = COPY_MODE2_FORM1, [78] = { ["func"] = arc_patch, ["args"] = { [15] = "PL00.BIN" } }, -- PL02_U.ARC [79] = COPY_MODE2_FORM1, -- PLDEMO.ARC [80] = COPY_MODE2_FORM1, -- PLDEMO00.ARC [81] = COPY_MODE2_FORM1, -- PLDEMO01.ARC [82] = COPY_MODE2_FORM1, -- PLDEMO02.ARC [83] = COPY_MODE2_FORM1, -- PLDEMO03.ARC [84] = COPY_MODE2_FORM1, -- ST00_00.ARC [85] = COPY_MODE2_FORM1, -- ST00_01.ARC [86] = COPY_MODE2_FORM1, -- ST01_00.ARC [87] = COPY_MODE2_FORM1, -- ST01_01.ARC [88] = COPY_MODE2_FORM1, -- ST02_00.ARC [89] = COPY_MODE2_FORM1, -- ST02_01.ARC [90] = COPY_MODE2_FORM1, -- ST03_00.ARC [91] = COPY_MODE2_FORM1, -- ST03_01.ARC [92] = COPY_MODE2_FORM1, -- ST04_00.ARC [93] = COPY_MODE2_FORM1, -- ST04_01.ARC [94] = COPY_MODE2_FORM1, -- ST05_00.ARC [95] = COPY_MODE2_FORM1, -- ST05_01.ARC [96] = COPY_MODE2_FORM1, -- ST06_00.ARC [97] = COPY_MODE2_FORM1, -- ST06_01.ARC [98] = COPY_MODE2_FORM1, -- ST07_00.ARC [99] = COPY_MODE2_FORM1, -- ST07_01.ARC [100] = COPY_MODE2_FORM1, -- ST08_00.ARC [101] = COPY_MODE2_FORM1, -- ST08_01.ARC [102] = COPY_MODE2_FORM1, -- ST09_00.ARC [103] = COPY_MODE2_FORM1, -- ST0A_00.ARC [104] = COPY_MODE2_FORM1, -- ST0B_00.ARC [105] = COPY_MODE2_FORM1, -- ST0B_01.ARC [106] = COPY_MODE2_FORM1, -- ST0B_0X.ARC [107] = COPY_MODE2_FORM1, -- ST0B_0Z.ARC [108] = COPY_MODE2_FORM1, -- ST0C_00.ARC [109] = COPY_MODE2_FORM1, -- ST0C_01.ARC [110] = COPY_MODE2_FORM1, -- ST0C_U1.ARC [111] = COPY_MODE2_FORM1, -- ST0D_0X.ARC [112] = COPY_MODE2_FORM1, -- ST0D_0Z.ARC [113] = COPY_MODE2_FORM1, -- ST0E_U0.ARC [114] = COPY_MODE2_FORM1, -- ST0E_U1.ARC [115] = COPY_MODE2_FORM1, -- ST0F_U1.ARC [116] = COPY_MODE2_FORM1, -- ST0F_UX.ARC [117] = COPY_MODE2_FORM1, -- ST0F_UZ.ARC [118] = COPY_MODE2_FORM1, -- ST0_1_1.ARC [119] = COPY_MODE2_FORM1, -- ST1_1_1.ARC [120] = COPY_MODE2_FORM1, -- ST2_1_1.ARC [121] = COPY_MODE2_FORM1, -- ST3_1_1.ARC [122] = COPY_MODE2_FORM1, -- ST4_1_1.ARC [123] = COPY_MODE2_FORM1, -- ST5_1_1.ARC [124] = COPY_MODE2_FORM1, -- ST6_1_1.ARC [125] = COPY_MODE2_FORM1, -- ST7_1_1.ARC [126] = COPY_MODE2_FORM1, -- ST8_1_1.ARC [127] = COPY_MODE2_FORM1, -- STA_0_1.ARC [128] = COPY_MODE2_FORM1, -- STB_1_1.ARC [129] = COPY_MODE2_FORM1, -- STC_1_1.ARC [130] = COPY_MODE2_FORM1, -- STD_1_1U.ARC [131] = COPY_MODE2_FORM1, -- STD_1_2U.ARC [132] = COPY_MODE2_FORM1, -- STD_1_3U.ARC [133] = COPY_MODE2_FORM1, -- STD_1_4U.ARC [134] = COPY_MODE2_FORM1, -- STD_1_5U.ARC [135] = COPY_MODE2_FORM1, -- STD_1_6U.ARC [136] = COPY_MODE2_FORM1, -- STD_1_7U.ARC [137] = COPY_MODE2_FORM1, -- STD_1_8U.ARC [138] = { ["func"] = create_intro, ["args"] = { ["name"] = "138-CAPCOM20" } }, -- CAPCOM20.STR [139] = COPY_MODE2, -- OP_U.STR [140] = { ["func"] = str_process, ["args"] = { ["bs_func"] = apply_ssa, ["name"] = "140-X1_U" } }, -- X1_U.STR [141] = { ["func"] = str_process, ["args"] = { ["bs_func"] = apply_ssa, ["name"] = "141-X2_U" } }, -- X2_U.STR [142] = { ["func"] = str_process, ["args"] = { ["bs_func"] = apply_ssa, ["name"] = "142-X3_U" } }, -- X3_U.STR [143] = { ["func"] = str_process, ["args"] = { ["bs_func"] = apply_ssa, ["name"] = "143-X4_U" } }, -- X4_U.STR [144] = { ["func"] = str_process, ["args"] = { ["bs_func"] = apply_ssa, ["name"] = "144-Z1_U" } }, -- Z1_U.STR [145] = { ["func"] = str_process, ["args"] = { ["bs_func"] = apply_ssa, ["name"] = "145-Z2_U" } }, -- Z2_U.STR [146] = { ["func"] = str_process, ["args"] = { ["bs_func"] = apply_ssa, ["name"] = "146-Z3_U" } }, -- Z3_U.STR [147] = { ["func"] = str_process, ["args"] = { ["bs_func"] = apply_ssa, ["name"] = "147-Z4_U" } }, -- Z4_U.STR [148] = { ["func"] = str_process, ["args"] = { ["bs_func"] = apply_ssa, ["name"] = "148-Z5_U" } }, -- Z5_U.STR [149] = COPY_MODE2, -- BGM1_U.XA [150] = COPY_MODE2, -- BGM2.XA [151] = COPY_MODE2, -- BGM3.XA [152] = COPY_MODE2, -- BGM4.XA [153] = COPY_MODE2, -- BGM5_U.XA [154] = COPY_MODE2, -- BOSINT_U.XA [155] = COPY_MODE2, -- VOICE1_U.XA [156] = COPY_MODE2, -- VOICE2_U.XA [157] = COPY_MODE2, -- VOICE3_U.XA [158] = COPY_MODE2, -- VOICE4_U.XA [159] = COPY_MODE2, -- VOICE5_U.XA -- 160 is system.cnf, 161 is slus, and 162 is dummy... } mmx4_index_jap = { [0] = COPY_MODE2_FORM1, -- CAPCOM.ARC [1] = COPY_MODE2_FORM1, -- COL00_0X.ARC [2] = COPY_MODE2_FORM1, -- COL00_0Z.ARC [3] = COPY_MODE2_FORM1, -- COL00_1X.ARC [4] = COPY_MODE2_FORM1, -- COL00_1Z.ARC [5] = COPY_MODE2_FORM1, -- COL01_0X.ARC [6] = COPY_MODE2_FORM1, -- COL01_0Z.ARC [7] = COPY_MODE2_FORM1, -- COL01_1X.ARC [8] = COPY_MODE2_FORM1, -- COL01_1Z.ARC [9] = COPY_MODE2_FORM1, -- COL02_0X.ARC [10] = COPY_MODE2_FORM1, -- COL02_0Z.ARC [11] = COPY_MODE2_FORM1, -- COL02_1X.ARC [12] = COPY_MODE2_FORM1, -- COL02_1Z.ARC [13] = COPY_MODE2_FORM1, -- COL03_0X.ARC [14] = COPY_MODE2_FORM1, -- COL03_0Z.ARC [15] = COPY_MODE2_FORM1, -- COL03_1X.ARC [16] = COPY_MODE2_FORM1, -- COL03_1Z.ARC [17] = COPY_MODE2_FORM1, -- COL04_0X.ARC [18] = COPY_MODE2_FORM1, -- COL04_0Z.ARC [19] = COPY_MODE2_FORM1, -- COL04_1X.ARC [20] = COPY_MODE2_FORM1, -- COL04_1Z.ARC [21] = COPY_MODE2_FORM1, -- COL05_0X.ARC [22] = COPY_MODE2_FORM1, -- COL05_0Z.ARC [23] = COPY_MODE2_FORM1, -- COL05_1X.ARC [24] = COPY_MODE2_FORM1, -- COL05_1Z.ARC [25] = COPY_MODE2_FORM1, -- COL06_0X.ARC [26] = COPY_MODE2_FORM1, -- COL06_0Z.ARC [27] = COPY_MODE2_FORM1, -- COL06_1X.ARC [28] = COPY_MODE2_FORM1, -- COL06_1Z.ARC [29] = COPY_MODE2_FORM1, -- COL07_0X.ARC [30] = COPY_MODE2_FORM1, -- COL07_0Z.ARC [31] = COPY_MODE2_FORM1, -- COL07_1X.ARC [32] = COPY_MODE2_FORM1, -- COL07_1Z.ARC [33] = COPY_MODE2_FORM1, -- COL08_0X.ARC [34] = COPY_MODE2_FORM1, -- COL08_0Z.ARC [35] = COPY_MODE2_FORM1, -- COL08_1X.ARC [36] = COPY_MODE2_FORM1, -- COL08_1Z.ARC [37] = COPY_MODE2_FORM1, -- COL09_0X.ARC [38] = COPY_MODE2_FORM1, -- COL09_0Z.ARC [39] = COPY_MODE2_FORM1, -- COL0A_0X.ARC [40] = COPY_MODE2_FORM1, -- COL0A_0Z.ARC [41] = COPY_MODE2_FORM1, -- COL0B_0X.ARC [42] = COPY_MODE2_FORM1, -- COL0B_0Z.ARC [43] = COPY_MODE2_FORM1, -- COL0B_1X.ARC [44] = COPY_MODE2_FORM1, -- COL0B_1Z.ARC [45] = COPY_MODE2_FORM1, -- COL0C_0X.ARC [46] = COPY_MODE2_FORM1, -- COL0C_0Z.ARC [47] = COPY_MODE2_FORM1, -- COL0C_1X.ARC [48] = COPY_MODE2_FORM1, -- COL0C_1Z.ARC [49] = COPY_MODE2_FORM1, -- COL0D_0X.ARC [50] = COPY_MODE2_FORM1, -- COL0D_0Z.ARC [51] = COPY_MODE2_FORM1, -- COL0E_00.ARC [52] = COPY_MODE2_FORM1, -- COL0E_01.ARC [53] = COPY_MODE2_FORM1, -- COL0E_U0.ARC [54] = COPY_MODE2_FORM1, -- COL0F_00.ARC [55] = COPY_MODE2_FORM1, -- COL0F_01.ARC [56] = COPY_MODE2_FORM1, -- COLD_1_1.ARC [57] = COPY_MODE2_FORM1, -- COLD_1_2.ARC [58] = COPY_MODE2_FORM1, -- COLD_1_3.ARC [59] = COPY_MODE2_FORM1, -- COLD_1_4.ARC [60] = COPY_MODE2_FORM1, -- COLD_1_5.ARC [61] = COPY_MODE2_FORM1, -- COLD_1_6.ARC [62] = COPY_MODE2_FORM1, -- COLD_1_7.ARC [63] = COPY_MODE2_FORM1, -- COLD_1_8.ARC [64] = COPY_MODE2_FORM1, -- FONT8X8.ARC [65] = { ["func"] = arc_patch, ["args"] = { [1] = "FONT.BIN" } }, -- LOAD_U.ARC [66] = COPY_MODE2_FORM1, -- MOJIPAT.ARC [67] = COPY_MODE2_FORM1, -- ONPARE1.ARC [68] = COPY_MODE2_FORM1, -- ONPARE2.ARC [69] = COPY_MODE2_FORM1, -- ONPARE3.ARC [70] = COPY_MODE2_FORM1, -- ONPARE4.ARC [71] = COPY_MODE2_FORM1, -- ONPARE5.ARC [72] = COPY_MODE2_FORM1, -- ONPARE6.ARC [73] = COPY_MODE2_FORM1, -- ONPARE7.ARC [74] = COPY_MODE2_FORM1, -- ONPARE8.ARC [75] = { ["func"] = arc_patch, ["args"] = { [15] = "PL00.BIN" } }, -- PL00.ARC [76] = COPY_MODE2_FORM1, -- PL00SEP.ARC [77] = { ["func"] = arc_patch, ["args"] = { [15] = "PL01.BIN" } }, -- PL01.ARC [78] = COPY_MODE2_FORM1, -- PL01SEP.ARC [79] = { ["func"] = arc_patch, ["args"] = { [15] = "PL00.BIN" } }, -- PL02.ARC [80] = COPY_MODE2_FORM1, -- PLDEMO00.ARC [81] = COPY_MODE2_FORM1, -- PLDEMO01.ARC [82] = COPY_MODE2_FORM1, -- PLDEMO02.ARC [83] = COPY_MODE2_FORM1, -- PLDEMO03.ARC [84] = COPY_MODE2_FORM1, -- ST00_00.ARC [85] = COPY_MODE2_FORM1, -- ST00_01.ARC [86] = COPY_MODE2_FORM1, -- ST01_00.ARC [87] = COPY_MODE2_FORM1, -- ST01_01.ARC [88] = COPY_MODE2_FORM1, -- ST02_00.ARC [89] = COPY_MODE2_FORM1, -- ST02_01.ARC [90] = COPY_MODE2_FORM1, -- ST03_00.ARC [91] = COPY_MODE2_FORM1, -- ST03_01.ARC [92] = COPY_MODE2_FORM1, -- ST04_00.ARC [93] = COPY_MODE2_FORM1, -- ST04_01.ARC [94] = COPY_MODE2_FORM1, -- ST05_00.ARC [95] = COPY_MODE2_FORM1, -- ST05_01.ARC [96] = COPY_MODE2_FORM1, -- ST06_00.ARC [97] = COPY_MODE2_FORM1, -- ST06_01.ARC [98] = COPY_MODE2_FORM1, -- ST07_00.ARC [99] = COPY_MODE2_FORM1, -- ST07_01.ARC [100] = COPY_MODE2_FORM1, -- ST08_00.ARC [101] = COPY_MODE2_FORM1, -- ST08_01.ARC [102] = COPY_MODE2_FORM1, -- ST09_00.ARC [103] = COPY_MODE2_FORM1, -- ST0A_00.ARC [104] = COPY_MODE2_FORM1, -- ST0B_01.ARC [105] = COPY_MODE2_FORM1, -- ST0B_0X.ARC [106] = COPY_MODE2_FORM1, -- ST0B_0Z.ARC [107] = COPY_MODE2_FORM1, -- ST0C_00.ARC [108] = COPY_MODE2_FORM1, -- ST0C_01.ARC [109] = COPY_MODE2_FORM1, -- ST0D_0X.ARC [110] = COPY_MODE2_FORM1, -- ST0D_0Z.ARC [111] = COPY_MODE2_FORM1, -- ST0E_00.ARC [112] = COPY_MODE2_FORM1, -- ST0E_01.ARC [113] = COPY_MODE2_FORM1, -- ST0E_U0.ARC [114] = COPY_MODE2_FORM1, -- ST0F_01.ARC [115] = COPY_MODE2_FORM1, -- ST0F_0X.ARC [116] = COPY_MODE2_FORM1, -- ST0F_0Z.ARC [117] = COPY_MODE2_FORM1, -- ST0_1_1.ARC [118] = COPY_MODE2_FORM1, -- ST1_1_1.ARC [119] = COPY_MODE2_FORM1, -- ST2_1_1.ARC [120] = COPY_MODE2_FORM1, -- ST3_1_1.ARC [121] = COPY_MODE2_FORM1, -- ST4_1_1.ARC [122] = COPY_MODE2_FORM1, -- ST5_1_1.ARC [123] = COPY_MODE2_FORM1, -- ST6_1_1.ARC [124] = COPY_MODE2_FORM1, -- ST7_1_1.ARC [125] = COPY_MODE2_FORM1, -- ST8_1_1.ARC [126] = COPY_MODE2_FORM1, -- STA_0_1.ARC [127] = COPY_MODE2_FORM1, -- STB_1_1.ARC [128] = COPY_MODE2_FORM1, -- STC_1_1.ARC [129] = COPY_MODE2_FORM1, -- STD_1_1.ARC [130] = COPY_MODE2_FORM1, -- STD_1_2.ARC [131] = COPY_MODE2_FORM1, -- STD_1_3.ARC [132] = COPY_MODE2_FORM1, -- STD_1_4.ARC [133] = COPY_MODE2_FORM1, -- STD_1_5.ARC [134] = COPY_MODE2_FORM1, -- STD_1_6.ARC [135] = COPY_MODE2_FORM1, -- STD_1_7.ARC [136] = COPY_MODE2_FORM1, -- STD_1_8.ARC [137] = { ["func"] = create_intro, ["args"] = { ["name"] = "138-CAPCOM20" } }, -- CAPCOM20.STR [138] = { ["func"] = str_process, ["args"] = { ["bs_func"] = apply_ssa, ["name"] = "138-OP" } }, -- OP.STR [139] = { ["func"] = str_process, ["args"] = { ["bs_func"] = apply_ssa, ["name"] = "139-X1" } }, -- X1.STR [140] = { ["func"] = str_process, ["args"] = { ["bs_func"] = apply_ssa, ["name"] = "140-X2" } }, -- X2.STR [141] = { ["func"] = str_process, ["args"] = { ["bs_func"] = apply_ssa, ["name"] = "141-X3" } }, -- X3.STR [142] = { ["func"] = str_process, ["args"] = { ["bs_func"] = apply_ssa, ["name"] = "142-X4" } }, -- X4.STR [143] = { ["func"] = str_process, ["args"] = { ["bs_func"] = apply_ssa, ["name"] = "143-Z1" } }, -- Z1.STR [144] = { ["func"] = str_process, ["args"] = { ["bs_func"] = apply_ssa, ["name"] = "144-Z2" } }, -- Z2.STR [145] = { ["func"] = str_process, ["args"] = { ["bs_func"] = apply_ssa, ["name"] = "145-Z3" } }, -- Z3.STR [146] = { ["func"] = str_process, ["args"] = { ["bs_func"] = apply_ssa, ["name"] = "146-Z4" } }, -- Z4.STR [147] = { ["func"] = str_process, ["args"] = { ["bs_func"] = apply_ssa, ["name"] = "147-Z5" } }, -- Z5.STR [148] = COPY_MODE2, -- BGM1.XA [149] = COPY_MODE2, -- BGM2.XA [150] = COPY_MODE2, -- BGM3.XA [151] = COPY_MODE2, -- BGM4.XA [152] = COPY_MODE2, -- BGM5.XA [153] = COPY_MODE2, -- BOSINT.XA [154] = COPY_MODE2, -- VOICE1.XA [155] = COPY_MODE2, -- VOICE2.XA [156] = COPY_MODE2, -- VOICE3.XA [157] = COPY_MODE2, -- VOICE4.XA [158] = COPY_MODE2, -- VOICE5.XA -- 160 is system.cnf, 161 is slus, and 162 is dummy... } videos_jap_override = { [139] = { ["func"] = str_process, ["args"] = { ["xa_func"] = change_xa, ["bs_func"] = apply_ssa, ["name"] = "138-OP", ["xa_name"] = "op" } }, -- OP_U.STR [140] = { ["func"] = str_process, ["args"] = { ["xa_func"] = change_xa, ["bs_func"] = apply_ssa, ["name"] = "139-X1", ["xa_name"] = "x1" } }, -- X1_U.STR [141] = { ["func"] = str_process, ["args"] = { ["xa_func"] = change_xa, ["bs_func"] = apply_ssa, ["name"] = "140-X2", ["xa_name"] = "x2" } }, -- X2_U.STR [142] = { ["func"] = str_process, ["args"] = { ["xa_func"] = change_xa, ["bs_func"] = apply_ssa, ["name"] = "141-X3", ["xa_name"] = "x3" } }, -- X3_U.STR [143] = { ["func"] = str_process, ["args"] = { ["xa_func"] = change_xa, ["bs_func"] = apply_ssa, ["name"] = "142-X4", ["xa_name"] = "x4" } }, -- X4_U.STR [144] = { ["func"] = str_process, ["args"] = { ["xa_func"] = change_xa, ["bs_func"] = apply_ssa, ["name"] = "143-Z1", ["xa_name"] = "z1" } }, -- Z1_U.STR [145] = { ["func"] = str_process, ["args"] = { ["xa_func"] = change_xa, ["bs_func"] = apply_ssa, ["name"] = "144-Z2", ["xa_name"] = "z2" } }, -- Z2_U.STR [146] = { ["func"] = str_process, ["args"] = { ["xa_func"] = change_xa, ["bs_func"] = apply_ssa, ["name"] = "145-Z3", ["xa_name"] = "z3" } }, -- Z3_U.STR [147] = { ["func"] = str_process, ["args"] = { ["xa_func"] = change_xa, ["bs_func"] = apply_ssa, ["name"] = "146-Z4", ["xa_name"] = "z4" } }, -- Z4_U.STR [148] = { ["func"] = str_process, ["args"] = { ["xa_func"] = change_xa, ["bs_func"] = apply_ssa, ["name"] = "147-Z5", ["xa_name"] = "z5" } }, -- Z5_U.STR } filenames = { "CAPCOM.ARC", "COL00_0X.ARC", "COL00_0Z.ARC", "COL00_1X.ARC", "COL00_1Z.ARC", "COL01_0X.ARC", "COL01_0Z.ARC", "COL01_1X.ARC", "COL01_1Z.ARC", "COL02_0X.ARC", "COL02_0Z.ARC", "COL02_1X.ARC", "COL02_1Z.ARC", "COL03_0X.ARC", "COL03_0Z.ARC", "COL03_1X.ARC", "COL03_1Z.ARC", "COL04_0X.ARC", "COL04_0Z.ARC", "COL04_1X.ARC", "COL04_1Z.ARC", "COL05_0X.ARC", "COL05_0Z.ARC", "COL05_1X.ARC", "COL05_1Z.ARC", "COL06_0X.ARC", "COL06_0Z.ARC", "COL06_1X.ARC", "COL06_1Z.ARC", "COL07_0X.ARC", "COL07_0Z.ARC", "COL07_1X.ARC", "COL07_1Z.ARC", "COL08_0X.ARC", "COL08_0Z.ARC", "COL08_1X.ARC", "COL08_1Z.ARC", "COL09_0X.ARC", "COL09_0Z.ARC", "COL0A_0X.ARC", "COL0A_0Z.ARC", "COL0B_0X.ARC", "COL0B_0Z.ARC", "COL0B_1X.ARC", "COL0B_1Z.ARC", "COL0C_0X.ARC", "COL0C_0Z.ARC", "COL0C_1X.ARC", "COL0C_1Z.ARC", "COL0D_0X.ARC", "COL0D_0Z.ARC", "COL0E_U0.ARC", "COL0E_U1.ARC", "COL0F_U0.ARC", "COL0F_U1.ARC", "COLD_1U1.ARC", "COLD_1U2.ARC", "COLD_1U3.ARC", "COLD_1U4.ARC", "COLD_1U5.ARC", "COLD_1U6.ARC", "COLD_1U7.ARC", "COLD_1U8.ARC", "FONT8X8.ARC", "LOAD_U.ARC", "MOJIPAT.ARC", "ONPARE1.ARC", "ONPARE2.ARC", "ONPARE3.ARC", "ONPARE4.ARC", "ONPARE5.ARC", "ONPARE6.ARC", "ONPARE7.ARC", "ONPARE8.ARC", "PL00SEP.ARC", "PL00_U.ARC", "PL01SEP.ARC", "PL01_U.ARC", "PL02_U.ARC", "PLDEMO.ARC", "PLDEMO00.ARC", "PLDEMO01.ARC", "PLDEMO02.ARC", "PLDEMO03.ARC", "ST00_00.ARC", "ST00_01.ARC", "ST01_00.ARC", "ST01_01.ARC", "ST02_00.ARC", "ST02_01.ARC", "ST03_00.ARC", "ST03_01.ARC", "ST04_00.ARC", "ST04_01.ARC", "ST05_00.ARC", "ST05_01.ARC", "ST06_00.ARC", "ST06_01.ARC", "ST07_00.ARC", "ST07_01.ARC", "ST08_00.ARC", "ST08_01.ARC", "ST09_00.ARC", "ST0A_00.ARC", "ST0B_00.ARC", "ST0B_01.ARC", "ST0B_0X.ARC", "ST0B_0Z.ARC", "ST0C_00.ARC", "ST0C_01.ARC", "ST0C_U1.ARC", "ST0D_0X.ARC", "ST0D_0Z.ARC", "ST0E_U0.ARC", "ST0E_U1.ARC", "ST0F_U1.ARC", "ST0F_UX.ARC", "ST0F_UZ.ARC", "ST0_1_1.ARC", "ST1_1_1.ARC", "ST2_1_1.ARC", "ST3_1_1.ARC", "ST4_1_1.ARC", "ST5_1_1.ARC", "ST6_1_1.ARC", "ST7_1_1.ARC", "ST8_1_1.ARC", "STA_0_1.ARC", "STB_1_1.ARC", "STC_1_1.ARC", "STD_1_1U.ARC", "STD_1_2U.ARC", "STD_1_3U.ARC", "STD_1_4U.ARC", "STD_1_5U.ARC", "STD_1_6U.ARC", "STD_1_7U.ARC", "STD_1_8U.ARC", "CAPCOM20.STR", "OP_U.STR", "X1_U.STR", "X2_U.STR", "X3_U.STR", "X4_U.STR", "Z1_U.STR", "Z2_U.STR", "Z3_U.STR", "Z4_U.STR", "Z5_U.STR", "BGM1_U.XA", "BGM2.XA", "BGM3.XA", "BGM4.XA", "BGM5_U.XA", "BOSINT_U.XA", "VOICE1_U.XA", "VOICE2_U.XA", "VOICE3_U.XA", "VOICE4_U.XA", "VOICE5_U.XA", } filenames_jap = { "CAPCOM.ARC", "COL00_0X.ARC", "COL00_0Z.ARC", "COL00_1X.ARC", "COL00_1Z.ARC", "COL01_0X.ARC", "COL01_0Z.ARC", "COL01_1X.ARC", "COL01_1Z.ARC", "COL02_0X.ARC", "COL02_0Z.ARC", "COL02_1X.ARC", "COL02_1Z.ARC", "COL03_0X.ARC", "COL03_0Z.ARC", "COL03_1X.ARC", "COL03_1Z.ARC", "COL04_0X.ARC", "COL04_0Z.ARC", "COL04_1X.ARC", "COL04_1Z.ARC", "COL05_0X.ARC", "COL05_0Z.ARC", "COL05_1X.ARC", "COL05_1Z.ARC", "COL06_0X.ARC", "COL06_0Z.ARC", "COL06_1X.ARC", "COL06_1Z.ARC", "COL07_0X.ARC", "COL07_0Z.ARC", "COL07_1X.ARC", "COL07_1Z.ARC", "COL08_0X.ARC", "COL08_0Z.ARC", "COL08_1X.ARC", "COL08_1Z.ARC", "COL09_0X.ARC", "COL09_0Z.ARC", "COL0A_0X.ARC", "COL0A_0Z.ARC", "COL0B_0X.ARC", "COL0B_0Z.ARC", "COL0B_1X.ARC", "COL0B_1Z.ARC", "COL0C_0X.ARC", "COL0C_0Z.ARC", "COL0C_1X.ARC", "COL0C_1Z.ARC", "COL0D_0X.ARC", "COL0D_0Z.ARC", "COL0E_00.ARC", "COL0E_01.ARC", "COL0E_U0.ARC", "COL0F_00.ARC", "COL0F_01.ARC", "COLD_1_1.ARC", "COLD_1_2.ARC", "COLD_1_3.ARC", "COLD_1_4.ARC", "COLD_1_5.ARC", "COLD_1_6.ARC", "COLD_1_7.ARC", "COLD_1_8.ARC", "FONT8X8.ARC", "LOAD_U.ARC", "MOJIPAT.ARC", "ONPARE1.ARC", "ONPARE2.ARC", "ONPARE3.ARC", "ONPARE4.ARC", "ONPARE5.ARC", "ONPARE6.ARC", "ONPARE7.ARC", "ONPARE8.ARC", "PL01.ARC", "PL00SEP.ARC", "PL01.ARC", "PL01SEP.ARC", "PL02.ARC", "PLDEMO00.ARC", "PLDEMO01.ARC", "PLDEMO02.ARC", "PLDEMO03.ARC", "ST00_00.ARC", "ST00_01.ARC", "ST01_00.ARC", "ST01_01.ARC", "ST02_00.ARC", "ST02_01.ARC", "ST03_00.ARC", "ST03_01.ARC", "ST04_00.ARC", "ST04_01.ARC", "ST05_00.ARC", "ST05_01.ARC", "ST06_00.ARC", "ST06_01.ARC", "ST07_00.ARC", "ST07_01.ARC", "ST08_00.ARC", "ST08_01.ARC", "ST09_00.ARC", "ST0A_00.ARC", "ST0B_01.ARC", "ST0B_0X.ARC", "ST0B_0Z.ARC", "ST0C_00.ARC", "ST0C_01.ARC", "ST0D_0X.ARC", "ST0D_0Z.ARC", "ST0E_00.ARC", "ST0E_01.ARC", "ST0E_U0.ARC", "ST0F_01.ARC", "ST0F_0X.ARC", "ST0F_0Z.ARC", "ST0_1_1.ARC", "ST1_1_1.ARC", "ST2_1_1.ARC", "ST3_1_1.ARC", "ST4_1_1.ARC", "ST5_1_1.ARC", "ST6_1_1.ARC", "ST7_1_1.ARC", "ST8_1_1.ARC", "STA_0_1.ARC", "STB_1_1.ARC", "STC_1_1.ARC", "STD_1_1.ARC", "STD_1_2.ARC", "STD_1_3.ARC", "STD_1_4.ARC", "STD_1_5.ARC", "STD_1_6.ARC", "STD_1_7.ARC", "STD_1_8.ARC", "CAPCOM20.STR", "OP.STR", "X1.STR", "X2.STR", "X3.STR", "X4.STR", "Z1.STR", "Z2.STR", "Z3.STR", "Z4.STR", "Z5.STR", "BGM1.XA", "BGM2.XA", "BGM3.XA", "BGM4.XA", "BGM5.XA", "BOSINT.XA", "VOICE1.XA", "VOICE2.XA", "VOICE3.XA", "VOICE4.XA", "VOICE5.XA", }