Skip to content

Instantly share code, notes, and snippets.

@satgo1546
Last active January 2, 2020 01:02
Show Gist options
  • Save satgo1546/d2074ff6b977b8089d1f40546f3a5b17 to your computer and use it in GitHub Desktop.
Save satgo1546/d2074ff6b977b8089d1f40546f3a5b17 to your computer and use it in GitHub Desktop.
-- av81033843
-- 用于BizHawk,逆转裁判2(CGP汉化组汉化版),在mGBA核心上测试过。
-- 在汉化组logo处,确认本脚本加载完毕后再按任意键。在此之后,本脚本会完全控制控制器。
-- 免责声明:本脚本仅供参考。
-- [帧] = <新消息编号 | 内存写入表 | 一个按键名>
local timelines = {
{
[968] = 0x2122,
[970] = 0x2122,
[972] = 0x2122,
[974] = 0x2122,
[976] = 0x2122,
[978] = 0x2122,
[980] = 0x2122,
[982] = 0x2122,
[984] = 0x2122,
[986] = 0x2122,
[988] = 0x2122,
[990] = 0x2122,
[992] = 0x2122,
[994] = 0x2122,
[996] = 0x2122,
[998] = 0x2122,
[1000] = 0x2122,
[1002] = 0x2122,
[1004] = 0x2122,
[1006] = 0x2122,
[1172] = 0x2122,
[1680] = 0x2122,
[1850] = 0x21e2,
[2050] = 0x2122,
[2140] = 0x2236,
[2648] = 0x2122,
[2890] = 0x22ea,
[3370] = 0x006c6f4e,
[3560] = 0xc46ecac8,
[4366] = 0x187f80e1,
[4450] = 0x187f80ea,
[6272] = 0x187f8ac2,
[7018] = 0x187f8e8c,
[7150] = 0x187f8f0e,
[7587] = {[0x384a] = 0x00},
[7588] = 0x42368fd0,
[7774] = 0x3694,
[8468] = {[0x384a] = 0x01},
[8470] = {[0x384a] = 0x02},
[8472] = {[0x384a] = 0x03},
[8474] = {[0x384a] = 0x04},
[8476] = {[0x384a] = 0x05},
[8478] = {[0x384a] = 0x06},
[8480] = {[0x384a] = 0x07},
[8482] = {[0x384a] = 0x08},
[8484] = {[0x384a] = 0x09},
[8486] = {[0x384a] = 0x0a},
[8488] = {[0x384a] = 0x0b},
[8490] = {[0x384a] = 0x0c},
[8492] = {[0x384a] = 0x0d},
[8494] = {[0x384a] = 0x0e},
[8496] = {[0x384a] = 0x0f},
[8498] = {[0x384a] = 0x10},
[8500] = {[0x384a] = 0x11},
[8502] = {[0x384a] = 0x12},
[8504] = {[0x384a] = 0x13},
[8506] = {[0x384a] = 0x14},
[8508] = {[0x384a] = 0x15},
[8510] = {[0x384a] = 0x16},
[8512] = {[0x384a] = 0x17},
[8514] = {[0x384a] = 0x18},
[8516] = {[0x384a] = 0x19},
[8518] = {[0x384a] = 0x1a},
[8520] = {[0x384a] = 0x1b},
[8522] = {[0x384a] = 0x1c},
[8524] = {[0x384a] = 0x1d},
[8526] = {[0x384a] = 0x1e},
[8528] = {[0x384a] = 0x1f},
[8530] = {[0x384a] = 0x20},
[8532] = {[0x384a] = 0x21},
[8534] = {[0x384a] = 0x22},
[8536] = {[0x384a] = 0x23},
[8538] = {[0x384a] = 0x24},
[8540] = {[0x384a] = 0x25},
[8542] = {[0x384a] = 0x26},
[8544] = {[0x384a] = 0x27},
[8546] = {[0x384a] = 0x28},
[8548] = {[0x384a] = 0x29},
[8550] = {[0x384a] = 0x2a},
[8552] = {[0x384a] = 0x2b},
[8554] = {[0x384a] = 0x2c},
[8556] = {[0x384a] = 0x2d},
[8558] = {[0x384a] = 0x2e},
[8560] = {[0x384a] = 0x2f},
[8562] = {[0x384a] = 0x30},
[8564] = {[0x384a] = 0x31},
[8566] = {[0x384a] = 0x32},
[8568] = {[0x384a] = 0x33},
[8570] = {[0x384a] = 0x34},
[8572] = {[0x384a] = 0x35},
[8574] = {[0x384a] = 0x36},
[8576] = {[0x384a] = 0x37},
[8578] = {[0x384a] = 0x38},
[8580] = {[0x384a] = 0x39},
[8582] = {[0x384a] = 0x3a},
[8584] = {[0x384a] = 0x3b},
[8586] = {[0x384a] = 0x3c},
[8588] = {[0x384a] = 0x3d},
[8590] = {[0x384a] = 0x3e},
[8592] = {[0x384a] = 0x3f},
[8594] = {[0x384a] = 0x40},
[8596] = {[0x384a] = 0x41},
[8598] = {[0x384a] = 0x42},
[8600] = {[0x384a] = 0x43},
[8602] = {[0x384a] = 0x44},
[8604] = {[0x384a] = 0x45},
[8606] = {[0x384a] = 0x46},
[8608] = {[0x384a] = 0x47},
[8610] = {[0x384a] = 0x48},
[8612] = {[0x384a] = 0x49},
[8614] = {[0x384a] = 0x4a},
[8616] = {[0x384a] = 0x4b},
[8618] = {[0x384a] = 0x4c},
[8620] = {[0x384a] = 0x4d},
[8622] = {[0x384a] = 0x4e},
[8624] = {[0x384a] = 0x4f},
[8626] = {[0x384a] = 0x50},
[9012] = {[0x384c] = 0x50},
[9014] = {[0x3848] = 0x28},
[9068] = {[0x384a] = 0x28},
[9217] = 0x5012,
[9240] = "Down",
[9270] = "Down",
[10150] = {[0x3848] = 0x28},
[10158] = {[0x384a] = 0x28},
[10160] = {[0x3848] = 0x20},
[10168] = {[0x384a] = 0x20},
[10170] = {[0x3848] = 0x18},
[10178] = {[0x384a] = 0x18},
[10180] = {[0x3848] = 0x10},
[10188] = {[0x384a] = 0x10},
[10190] = {[0x3848] = 0x08},
[10198] = {[0x384a] = 0x08},
[10200] = {[0x3848] = 0x00},
[10400] = 0x7f187f3e,
[10401] = {[0x3848] = 0x01},
[11418] = 0xc46ed47c,
[11466] = 0x7f18820a,
[11628] = 0x7f1887ec,
[11718] = {[0x3a71] = 0x22, [0x3a72] = 0x22, [0x3a73] = 0x22, [0x3a74] = 0x22},
[12010] = 0xc46ed006,
[14130] = 0xdac0dbd4,
[14545] = {[0x3a71] = 0x00, [0x3a72] = 0x00, [0x3a73] = 0x00},
[14645] = {[0x3a71] = 0x12, [0x3a72] = 0x33, [0x3a73] = 0x44},
},
{
[24] = "Up",
[48] = "A",
[400] = 0xc46ed9dc,
[1190] = "Right",
[1210] = "Left",
[1230] = "Right",
[1250] = "Left",
[1270] = "Right",
[1290] = "A",
[1478] = 0x213a,
[1490] = 0x212c,
[1556] = 0x2136,
[1560] = 0x2136,
[1576] = 0x2136,
[1872] = 0x2298,
[1896] = 0x2344,
[1962] = 0x260c,
[2184] = 0x2854,
[2290] = 0x30dc,
[2550] = 0x3836,
[2808] = 0x3b06,
[3154] = 0x3b6a,
[3164] = 0x3b66,
[3184] = 0x3b64,
[3198] = 0x3b6a,
[3300] = 0x3b76,
[3304] = 0x3b82,
[3720] = 0x51625212,
[4090] = 0x50a85094,
[4100] = 0x62686274,
[4228] = 0x62686370,
[4580] = 0x67ec6b9a,
[4816] = 0x72147818,
[5202] = 0x6c046c2c,
[5284] = "Right",
[5348] = 0x6c90,
[5470] = 0x6e5a,
[5728] = 0x72147b6a,
[5980] = 0x7bc8,
[6024] = 0x7bda,
[6526] = 0x7c92,
[6780] = 0x7d0e,
[6790] = 0x7cf6,
[6796] = 0x7d1e,
[7152] = 0x7d7e,
[7412] = 0x7e34,
[7678] = 0x7ef4,
[7928] = 0x7f3c,
[8654] = 0xa122a140,
[8803] = 0x6c606cae,
[8814] = 0xa122a1aa,
[8871] = "R",
[8917] = "Left",
[9059] = 0x6c606ce2,
[9127] = 0x721473d2,
[9658] = 0x7526,
[9678] = 0x7526,
[9688] = 0x7526,
[9698] = 0x7526,
[9708] = 0x7526,
[9728] = 0x7526,
[9748] = 0x7526,
[9768] = 0x7526,
[9966] = 0x75b8,
[9968] = 0x75b4,
[9972] = 0x75b4,
[9974] = 0x75ba,
[10066] = 0x7804,
[10402] = 0x78da,
[10424] = 0x78da,
[10446] = 0x78da,
[10468] = 0x78da,
[10490] = 0x78da,
[10512] = 0x78da,
[10562] = 0x8bfa8db6,
[10672] = {[0x384a] = 0x30},
[10683] = {[0x384a] = 0x20},
[10696] = {[0x384a] = 0x30},
[10710] = {[0x384a] = 0x10},
[10722] = {[0x384a] = 0x20},
[10736] = {[0x384a] = 0x10},
[10757] = {[0x384a] = 0x20},
[10768] = {[0x384a] = 0x10},
[10786] = {[0x384a] = 0x20},
[10800] = {[0x384a] = 0x30},
[10814] = {[0x384a] = 0x20},
[10832] = {[0x384a] = 0x10},
[10847] = {[0x384a] = 0x20},
[10864] = {[0x384a] = 0x30},
[10879] = {[0x384a] = 0x20},
[10882] = {[0x384a] = 0x30},
[10892] = 0x721475b4,
[10896] = {[0x384a] = 0x20},
[10905] = 0x8bfa8eaa,
[10910] = {[0x384a] = 0x30},
[10926] = {[0x384a] = 0x10},
[10940] = {[0x384a] = 0x30},
[10954] = {[0x384a] = 0x10},
[10967] = {[0x384a] = 0x30},
[10984] = {[0x384a] = 0x20},
[11000] = {[0x384a] = 0x10},
[11015] = {[0x384a] = 0x20},
[11031] = {[0x384a] = 0x10},
[11045] = {[0x384a] = 0x20},
[11060] = {[0x384a] = 0x30},
[11076] = {[0x384a] = 0x10},
[11089] = {[0x384a] = 0x20},
[11103] = {[0x384a] = 0x10},
[11108] = {[0x384a] = 0x30},
[11123] = {[0x384a] = 0x20},
[11139] = {[0x384a] = 0x10},
[11154] = {[0x384a] = 0x20},
[11170] = {[0x384a] = 0x10},
[11187] = {[0x384a] = 0x30},
[11200] = {[0x384a] = 0x10},
[11214] = {[0x384a] = 0x30},
[11229] = {[0x384a] = 0x10},
[11244] = {[0x384a] = 0x20},
[11259] = {[0x384a] = 0x30},
[11275] = {[0x384a] = 0x10},
[11280] = {[0x384a] = 0x20},
[11282] = 0x928e,
[11295] = {[0x384a] = 0x30},
[11300] = 0xacb2ae02,
[11310] = {[0x384a] = 0x20},
[11324] = {[0x384a] = 0x10},
[11340] = {[0x384a] = 0x30},
[11346] = 0xb608b70e,
[11354] = {[0x384a] = 0x20},
[11368] = {[0x384a] = 0x10},
[11382] = {[0x384a] = 0x20},
[11390] = {[0x384a] = 0x30},
[11404] = {[0x384a] = 0x20},
[11418] = {[0x384a] = 0x10},
[11434] = {[0x384a] = 0x30},
[11447] = {[0x384a] = 0x10},
[11466] = {[0x384a] = 0x30},
[11478] = {[0x384a] = 0x20},
[11493] = {[0x384a] = 0x10},
[11510] = {[0x384a] = 0x30},
[11525] = {[0x384a] = 0x10},
[11542] = {[0x384a] = 0x30},
[11548] = 0xb974,
[11556] = {[0x384a] = 0x20},
[11571] = {[0x384a] = 0x10},
[11572] = 0xbc9a,
[11586] = {[0x384a] = 0x20},
[11597] = {[0x384a] = 0x10},
[11611] = {[0x384a] = 0x30},
[11624] = {[0x384a] = 0x20},
[11632] = {[0x384a] = 0x30},
[11647] = {[0x384a] = 0x20},
[11651] = {[0x384a] = 0x30},
[11654] = {[0x384a] = 0x10},
[11662] = {[0x384a] = 0x20},
[11670] = {[0x384a] = 0x30},
[11744] = {[0x384a] = 0x50},
[11954] = 0xc47e,
[11992] = 0xbdca,
[12278] = 0xce6ed0f4,
[12424] = 0xb608bf6a,
[12761] = 0xc17c,
[12763] = 0xc216,
[13410] = 0xc440,
[13573] = 0xdb9cdc12,
[13784] = 0xea5aed00,
[14247] = 0xf492,
[14413] = 0xedee,
[14419] = 0xf4c8,
[14464] = 0xf690,
[14537] = 0xf73af818,
[14538] = {[0x384c] = 0x21},
[14778] = 0xf89a,
[15010] = 0xfa4efd2a,
[15013] = 0xfd76,
[15015] = 0xfd7c,
[15109] = 0xfdc6,
[15407] = 0xff4c,
[15418] = 0xfe60,
[16167] = 0x0080,
[16552] = 0x0cd81b2c,
[16553] = {[0x3c4a] = 0x02}, -- 剧情进程进位
[16744] = 0x1da21ff0,
[17018] = 0x2eae3928,
[17760] = 0x30b8,
[17777] = 0x39c4,
[17882] = 0x3c86,
[18601] = 0x3d623d88,
[18789] = 0x3dca,
[19037] = 0x4d64,
[19260] = 0x4dda,
[20164] = 0x53b8,
[20800] = "Right",
},
}
-- 选择实行的时间线编号
local timeline = timelines[1]
-- 若只需要OSD则可设此为假
local control_joypad = true
-- OSD显示当前帧数?
local osd_frame_count = true
local prev_message_start_frame = mainmemory.read_u32_le(0x37b0)
local prev_message = -1
event.onframestart(function()
local keys = {
A = false, B = false, L = false, R = false,
Up = false, Down = false, Left = false, Right = false,
}
local frame_count = mainmemory.read_u32_le(0x37b0)
local message = mainmemory.read_u16_le(0x3c44)
local message_head = mainmemory.read_u16_le(0x3c48)
local osd = ""
if osd_frame_count then
osd = osd .. string.format("%9d | ", frame_count)
end
osd = osd .. string.format("%04X %04X", message_head, message)
gui.drawText(0, 0, osd)
if message == prev_message then
if frame_count - prev_message_start_frame > 40 then
keys.A = true
end
else
prev_message_start_frame = frame_count
end
prev_message = message
local m = timeline[frame_count]
if m then
if type(m) == "table" then
for k, v in pairs(m) do
mainmemory.write_u8(k, v)
end
elseif type(m) == "string" then
keys.A = false
keys[m] = true
prev_message_start_frame = frame_count
elseif type(m) == "function" then
m(frame_count)
else
local mh = bit.rshift(m, 16)
mainmemory.write_u16_le(0x3c44, m)
if mh ~= 0 then
mainmemory.write_u16_le(0x3c48, mh)
end
end
end
if control_joypad then
joypad.set(keys)
end
end)
event.onframeend(function()
end)
while true do
emu.frameadvance()
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment