diff options
| author | 2019-03-25 22:44:58 +0100 | |
|---|---|---|
| committer | 2019-03-25 22:44:58 +0100 | |
| commit | c24473ddff715ecec2e258a6eb38960cf8c8e98e (patch) | |
| tree | 8ea44b6396a6129913c0aac13859b5de9965e972 /plugins | |
| parent | 009cba4fb8102102168ef32870892438327f3705 (diff) | |
| parent | 598cd5227223c3b04ca31f0dbc1981256d9ea3ff (diff) | |
conflict resolution (nw)
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/cheatfind/init.lua | 333 | ||||
| -rw-r--r-- | plugins/console/init.lua | 12 | ||||
| -rw-r--r-- | plugins/hiscore/hiscore.dat | 391 | ||||
| -rw-r--r-- | plugins/hiscore/init.lua | 50 |
4 files changed, 545 insertions, 241 deletions
diff --git a/plugins/cheatfind/init.lua b/plugins/cheatfind/init.lua index 86fcf04ca49..276193acc13 100644 --- a/plugins/cheatfind/init.lua +++ b/plugins/cheatfind/init.lua @@ -106,7 +106,9 @@ function cheatfind.startplugin() if not step or step <= 0 then step = 1 end - + if (olddata.shift < 0) and (step < (1 << -olddata.shift)) then + step = 1 << -olddata.shift; + end local cfoper = { lt = function(a, b, val) return (a < b and val == 0) or (val > 0 and (a + val) == b) end, gt = function(a, b, val) return (a > b and val == 0) or (val > 0 and (a - val) == b) end, @@ -192,7 +194,7 @@ function cheatfind.startplugin() oldval = old, newval = new, bitmask = bitmask } - ref[ret[#ret].addr] = #ret + ref[addr] = #ret end end end @@ -257,18 +259,35 @@ function cheatfind.startplugin() local devtable = {} local devsel = 1 local devcur = 1 - local formtable = { " I1", " i1", "<I2", ">I2", "<i2", ">i2", "<I4", ">I4", "<i4", ">i4", "<I8", ">I8", "<i8", ">i8", }-- " <f", " >f", " <d", " >d" } - local formname = { "u8", "s8", "little u16", "big u16", "little s16", "big s16", - "little u32", "big u32", "little s32", "big s32", "little u64", "big u64", "little s64", "big s64", } - -- "little float", "big float", "little double", "big double" } + + + --local formtable = { " I1", " i1", "<I2", ">I2", "<i2", ">i2", "<I4", ">I4", "<i4", ">i4", "<I8", ">I8", "<i8", ">i8", }-- " <f", " >f", " <d", " >d" } + --local formname = { "u8", "s8", "little u16", "big u16", "little s16", "big s16", + -- "little u32", "big u32", "little s32", "big s32", "little u64", "big u64", "little s64", "big s64", } + -- -- "little float", "big float", "little double", "big double" } + -- Reordered into likelyhood of use order: unsigned byte by big endian unsigned by little endian unsigned then unsigned in same order + local formtable = { " I1", ">I2", ">I4", ">I8", "<I2", "<I4", "<I8", " i1", ">i2", ">i4", ">i8", "<i2", "<i4", "<i8", }-- " <f", " >f", " <d", " >d" } + local formname = { "u8", "big u16", "big u32", "big u64", "little u16", "little u32", + "little u64", "s8", "big s16", "big s32", "big s64", "little s16", "little s32", "little s64", } + local width = 1 local bcd = 0 local align = 0 local optable = { "lt", "gt", "eq", "ne", "beq", "bne", "ltv", "gtv", "eqv", "nev" } local opsel = 1 local value = 0 - local leftop = 2 + local leftop = 1 local rightop = 1 + local leftop_text = "Slot 1" + local rightop_text = "Slot 1" + local value_text = "" + local expression_text = "Slot 1 < Slot 1" + local pausetable = { "Automatic", "Manual" } + local pausesel = 1 + local pokevaltable = { "Slot 1 Value", "Last Slot Value", "0x00", "0x01", "0x02", "0x03", "0x04", "0x05", "0x06", "0x07", "0x08", "0x09", "0x63 (Decimal 99)", "0x99 (BCD 99)", + "0xFF (Decimal 255)" , "0x3E7 (Decimal 999)", "0x999 (BCD 999)", "0x270F (Decimal 9999)", "0x9999 (BCD 9999)", "0xFFFF (Decimal 65535)" } + local pokevalsel = 1 + local matches = {} local matchsel = 0 local matchpg = 0 @@ -289,7 +308,7 @@ function cheatfind.startplugin() bcd = 0 opsel = 1 value = 0 - leftop = 2 + leftop = 1 rightop = 1 matches = {} matchsel = 0 @@ -332,7 +351,14 @@ function cheatfind.startplugin() emu.register_start(start) + local menu_is_showing = false + local tabbed_out = false + local function menu_populate() + if pausesel == 1 then + emu.pause() + menu_is_showing = true + end local menu = {} local function menu_prepare() @@ -430,6 +456,8 @@ function cheatfind.startplugin() file:close() file = io.open(cheat_save.path .. "/cheat.simple", "a") file:write(string.format(cheat_save.simple, desc)) + -- old cheat .dat format, write support only (for cheat forum posting of new cheats if posted in simple format) + file:write(string.format(cheat_save.dat, desc)) file:close() manager:machine():popmessage(string.format(_("Cheat written to %s and added to cheat.simple"), filename)) end @@ -438,6 +466,8 @@ function cheatfind.startplugin() file = io.open(cheat_save.path .. "/cheat.simple", "a") if file then file:write(string.format(cheat_save.simple, desc)) + -- old cheat .dat format, write support only (for cheat forum posting of new cheats if posted in simple format) + file:write(string.format(cheat_save.dat, desc)) file:close() manager:machine():popmessage(_("Cheat added to cheat.simple")) written = true @@ -471,6 +501,28 @@ function cheatfind.startplugin() end menu[#menu + 1] = function() + local m = { _("Pause Mode"), pausetable[pausesel], 0 } + menu_lim(pausesel, 1, pausetable, m) + local function f(event) + if (event == "left" or event == "right") then + if pausesel == 1 then + pausesel = 2 + menu_is_showing = false + manager:machine():popmessage(_("Manually pause & unpause the game when needed with the pause hotkey")) + else + pausesel = 1 + emu.pause() + end + end + + return true + end + return m, f + end + + + + menu[#menu + 1] = function() local function f(event) local ret = false if event == "select" then @@ -481,16 +533,26 @@ function cheatfind.startplugin() menu_blocks[num] = {} menu_blocks[num][1] = cheat.save(devtable[devcur].space, region.offset, region.size) end - manager:machine():popmessage(_("Data cleared and current state saved")) + manager:machine():popmessage(_("All slots cleared and current state saved to Slot 1")) watches = {} - leftop = 2 + opsel = 1 + value = 0 + leftop = 1 rightop = 1 + leftop_text = "Slot 1" + rightop_text = "Slot 1" + value_text = "" + expression_text = "Slot 1 < Slot 1" matchsel = 0 return true end end + local opsel = 1 return { _("Start new search"), "", 0 }, f end + + + if #menu_blocks ~= 0 then menu[#menu + 1] = function() return { "---", "", "off" }, nil end menu[#menu + 1] = function() @@ -499,15 +561,28 @@ function cheatfind.startplugin() for num, region in ipairs(devtable[devcur].ram) do menu_blocks[num][#menu_blocks[num] + 1] = cheat.save(devtable[devcur].space, region.offset, region.size) end - manager:machine():popmessage(_("Current state saved")) - leftop = (leftop == #menu_blocks[1]) and #menu_blocks[1] + 1 or leftop - rightop = (rightop == #menu_blocks[1] - 1) and #menu_blocks[1] or rightop + manager:machine():popmessage(string.format(_("Memory State saved to Slot %d"), #menu_blocks[1])) + + if (leftop == #menu_blocks[1] - 1 and rightop == #menu_blocks[1] - 2 ) then + leftop = #menu_blocks[1] + rightop = #menu_blocks[1]-1 + elseif (leftop == #menu_blocks[1] - 2 and rightop == #menu_blocks[1] - 1 ) then + leftop = #menu_blocks[1]-1 + rightop = #menu_blocks[1] + elseif (leftop == #menu_blocks[1] - 1 ) then + leftop = #menu_blocks[1] + elseif (rightop == #menu_blocks[1] - 1) then + rightop = #menu_blocks[1] + end + leftop_text = string.format("Slot %d", leftop) + rightop_text = string.format("Slot %d", rightop) devsel = devcur return true end end - return { _("Save current -- #") .. #menu_blocks[1] + 1, "", 0 }, f + return { _("Save Current Memory State to Slot ") .. #menu_blocks[1] + 1, "", 0 }, f end + menu[#menu + 1] = function() return { "---", "", "off" }, nil end menu[#menu + 1] = function() local function f(event) if event == "select" then @@ -523,26 +598,16 @@ function cheatfind.startplugin() if #matches == 0 then matches[1] = {} for num = 1, #menu_blocks do - if leftop == #menu_blocks[1] + 1 then - matches[1][num] = cheat.compcur(menu_blocks[num][rightop], optable[opsel], - formtable[width], value, bcd == 1, step) - else - matches[1][num] = cheat.comp(menu_blocks[num][leftop], menu_blocks[num][rightop], - optable[opsel], formtable[width], value, bcd == 1, step) - end + matches[1][num] = cheat.comp(menu_blocks[num][leftop], menu_blocks[num][rightop], + optable[opsel], formtable[width], value, bcd == 1, step) count = count + #matches[1][num] end else lastmatch = matches[#matches] matches[#matches + 1] = {} for num = 1, #menu_blocks do - if leftop == #menu_blocks[1] + 1 then - matches[#matches][num] = cheat.compcurnext(menu_blocks[num][rightop], lastmatch[num], - optable[opsel], formtable[width], value, bcd == 1, step) - else - matches[#matches][num] = cheat.compnext(menu_blocks[num][leftop], menu_blocks[num][rightop], - lastmatch[num], optable[opsel], formtable[width], value, bcd == 1, step) - end + matches[#matches][num] = cheat.compnext(menu_blocks[num][leftop], menu_blocks[num][rightop], + lastmatch[num], optable[opsel], formtable[width], value, bcd == 1, step) count = count + #matches[#matches][num] end end @@ -553,31 +618,64 @@ function cheatfind.startplugin() return true end end - return { _("Compare"), "", 0 }, f + + if optable[opsel] == "lt" then + if (value == 0 ) then + expression_text = string.format("%s < %s", leftop_text, rightop_text) + else + expression_text = string.format("%s == %s - %d", leftop_text, rightop_text, value) + end + elseif optable[opsel] == "gt" then + if (value == 0 ) then + expression_text = string.format("%s > %s", leftop_text, rightop_text) + else + expression_text = string.format("%s == %s + %d", leftop_text, rightop_text, value) + end + elseif optable[opsel] == "eq" then + expression_text = string.format("%s == %s", leftop_text, rightop_text) + elseif optable[opsel] == "ne" then + if (value == 0 ) then + expression_text = string.format("%s != %s", leftop_text, rightop_text) + else + expression_text = string.format("%s == %s +/- %d", leftop_text, rightop_text, value) + end + elseif optable[opsel] == "beq" then + expression_text = string.format("%s BITWISE== %s", leftop_text, rightop_text) + elseif optable[opsel] == "bne" then + expression_text = string.format("%s BITWISE!= %s", leftop_text, rightop_text) + elseif optable[opsel] == "ltv" then + expression_text = string.format("%s < %d", leftop_text, value) + elseif optable[opsel] == "gtv" then + expression_text = string.format("%s > %d", leftop_text, value) + elseif optable[opsel] == "eqv" then + expression_text = string.format("%s == %d", leftop_text, value) + elseif optable[opsel] == "nev" then + string.format("%s != %d", leftop_text, value) + end + return { _("Perform Compare : ") .. expression_text, "", 0 }, f end + menu[#menu + 1] = function() return { "---", "", "off" }, nil end menu[#menu + 1] = function() - local m = { _("Left operand"), leftop, "" } - menu_lim(leftop, 1, #menu_blocks[1] + 1, m) - if leftop == #menu_blocks[1] + 1 then - m[2] = _("Current") - end - return m, function(event) local r leftop, r = incdec(event, leftop, 1, #menu_blocks[1] + 1) return r end + local m = { _(leftop), "", 0 } + menu_lim(leftop, 1, #menu_blocks[1], m) + m[1] = string.format("Slot %d", leftop) + return m, function(event) local r leftop, r = incdec(event, leftop, 1, #menu_blocks[1]) leftop_text = "Slot " .. leftop return r end end menu[#menu + 1] = function() - local m = { _("Operator"), optable[opsel], "" } + local m = { _(optable[opsel]), "", 0 } menu_lim(opsel, 1, #optable, m) local function f(event) local r opsel, r = incdec(event, opsel, 1, #optable) if event == "left" or event == "right" or event == "comment" then if optable[opsel] == "lt" then - manager:machine():popmessage(_("Left less than right, value is difference")) + manager:machine():popmessage(_("Left less than right")) elseif optable[opsel] == "gt" then - manager:machine():popmessage(_("Left greater than right, value is difference")) + manager:machine():popmessage(_("Left greater than right")) elseif optable[opsel] == "eq" then manager:machine():popmessage(_("Left equal to right")) elseif optable[opsel] == "ne" then - manager:machine():popmessage(_("Left not equal to right, value is difference")) + manager:machine():popmessage(_("Left not equal to right")) elseif optable[opsel] == "beq" then manager:machine():popmessage(_("Left equal to right with bitmask")) elseif optable[opsel] == "bne" then @@ -600,15 +698,21 @@ function cheatfind.startplugin() if optable[opsel]:sub(3, 3) == "v" then return nil end - local m = { _("Right operand"), rightop, "" } + local m = { _(rightop), "", 0 } menu_lim(rightop, 1, #menu_blocks[1], m) - return m, function(event) local r rightop, r = incdec(event, rightop, 1, #menu_blocks[1]) return r end + m[1] = string.format("Slot %d", rightop) + return m, function(event) local r rightop, r = incdec(event, rightop, 1, #menu_blocks[1]) rightop_text = "Slot " .. rightop return r end end menu[#menu + 1] = function() if optable[opsel] == "bne" or optable[opsel] == "beq" or optable[opsel] == "eq" then return nil end - local m = { _("Value"), value, "" } + local m + if optable[opsel] == "ltv" or optable[opsel] == "gtv" or optable[opsel] == "eqv" or optable[opsel] == "nev" then + m = { _("Value"), value, "" } + else + m = { _("Difference"), value, "" } + end local max = 100 -- max value? menu_lim(value, 0, max, m) if value == 0 and optable[opsel]:sub(3, 3) ~= "v" then @@ -622,6 +726,62 @@ function cheatfind.startplugin() menu_lim(width, 1, #formtable, m) return m, function(event) local r width, r = incdec(event, width, 1, #formtable) return r end end + + menu[#menu + 1] = function() + local m = { _("Test/Write Poke Value"), pokevaltable[pokevalsel], 0 } + menu_lim(pokevalsel, 1, #pokevaltable, m) + local function f(event) + local r + pokevalsel, r = incdec(event, pokevalsel, 1, #pokevaltable) + if event == "left" or event == "right" or event == "comment" then + if pokevalsel == 1 then + manager:machine():popmessage(_("Use this if you want to poke the Slot 1 value (eg. You started with something but lost it)")) + elseif pokevalsel == 2 then + manager:machine():popmessage(_("Use this if you want to poke the Last Slot value (eg. You started without an item but finally got it)")) + elseif pokevalsel == 3 then + manager:machine():popmessage(_("Use this if you want to poke 0x00")) + elseif pokevalsel == 4 then + manager:machine():popmessage(_("Use this if you want to poke 0x01")) + elseif pokevalsel == 5 then + manager:machine():popmessage(_("Use this if you want to poke 0x02")) + elseif pokevalsel == 6 then + manager:machine():popmessage(_("Use this if you want to poke 0x03")) + elseif pokevalsel == 7 then + manager:machine():popmessage(_("Use this if you want to poke 0x04")) + elseif pokevalsel == 8 then + manager:machine():popmessage(_("Use this if you want to poke 0x05")) + elseif pokevalsel == 9 then + manager:machine():popmessage(_("Use this if you want to poke 0x06")) + elseif pokevalsel == 10 then + manager:machine():popmessage(_("Use this if you want to poke 0x07")) + elseif pokevalsel == 11 then + manager:machine():popmessage(_("Use this if you want to poke 0x08")) + elseif pokevalsel == 12 then + manager:machine():popmessage(_("Use this if you want to poke 0x09")) + elseif pokevalsel == 13 then + manager:machine():popmessage(_("Use this if you want to poke 0x63 (Decimal 99)")) + elseif pokevalsel == 14 then + manager:machine():popmessage(_("Use this if you want to poke 0x99 (BCD 99)")) + elseif pokevalsel == 15 then + manager:machine():popmessage(_("Use this if you want to poke 0xFF (Decimal 255)")) + elseif pokevalsel == 16 then + manager:machine():popmessage(_("Use this if you want to poke 0x3E7 (Decimal 999)")) + elseif pokevalsel == 17 then + manager:machine():popmessage(_("Use this if you want to poke 0x999 (BCD 999)")) + elseif pokevalsel == 18 then + manager:machine():popmessage(_("Use this if you want to poke 0x270F (Decimal 9999)")) + elseif pokevalsel == 19 then + manager:machine():popmessage(_("Use this if you want to poke 0x9999 (BCD 9999)")) + elseif pokevalsel == 20 then + manager:machine():popmessage(_("Use this if you want to poke 0xFFFF (Decimal 65535)")) + end + end + return r + end + return m, f + end + + menu[#menu + 1] = function() if optable[opsel] == "bne" or optable[opsel] == "beq" then return nil @@ -713,10 +873,66 @@ function cheatfind.startplugin() local function match_exec(match) local dev = devtable[devcur] - local cheat = { desc = string.format(_("Test cheat at addr %08X"), match.addr), script = {} } + local wid = formtable[width]:sub(3, 3) local widchar + local pokevalue local form + + if pokevalsel == 1 then + pokevalue = match.oldval + elseif pokevalsel == 2 then + pokevalue = match.newval + elseif pokevalsel == 3 then + pokevalue = 0 + elseif pokevalsel == 4 then + pokevalue = 1 + elseif pokevalsel == 5 then + pokevalue = 2 + elseif pokevalsel == 6 then + pokevalue = 3 + elseif pokevalsel == 7 then + pokevalue = 4 + elseif pokevalsel == 8 then + pokevalue = 5 + elseif pokevalsel == 9 then + pokevalue = 6 + elseif pokevalsel == 10 then + pokevalue = 7 + elseif pokevalsel == 11 then + pokevalue = 8 + elseif pokevalsel == 12 then + pokevalue = 9 + elseif pokevalsel == 13 then + pokevalue = 99 + elseif pokevalsel == 14 then + pokevalue = 153 + elseif pokevalsel == 15 then + pokevalue = 255 + elseif pokevalsel == 16 and wid == "1" then + pokevalue = 99 + elseif pokevalsel == 17 and wid == "1" then + pokevalue = 153 + elseif pokevalsel == 18 and wid == "1" then + pokevalue = 99 + elseif pokevalsel == 19 and wid == "1" then + pokevalue = 153 + elseif pokevalsel == 20 and wid == "1" then + pokevalue = 255 + elseif pokevalsel == 16 then + pokevalue = 999 + elseif pokevalsel == 17 then + pokevalue = 2457 + elseif pokevalsel == 18 then + pokevalue = 9999 + elseif pokevalsel == 19 then + pokevalue = 39321 + elseif pokevalsel == 20 then + pokevalue = 65535 + end + + local cheat = { desc = string.format(_("Test Cheat %08X:%02X"), match.addr, pokevalue), script = {} } + if wid == "2" then wid = "u16" form = "%08x %04x" @@ -743,16 +959,15 @@ function cheatfind.startplugin() widchar = "b" end - if getmetatable(dev.space).__name:match("device_t") then cheat.ram = { ram = dev.tag } - cheat.script.run = "ram:write(" .. match.addr .. "," .. match.newval .. ")" + cheat.script.run = "ram:write(" .. match.addr .. "," .. pokevalue .. ")" elseif getmetatable(dev.space).__name:match("memory_share") then cheat.share = { share = dev.tag } - cheat.script.run = "share:write_" .. wid .. "(" .. match.addr .. "," .. match.newval .. ")" + cheat.script.run = "share:write_" .. wid .. "(" .. match.addr .. "," .. pokevalue .. ")" else cheat.space = { cpu = { tag = dev.tag, type = dev.sname } } - cheat.script.run = "cpu:write_" .. wid .. "(" .. match.addr .. "," .. match.newval .. ")" + cheat.script.run = "cpu:write_" .. wid .. "(" .. match.addr .. "," .. pokevalue .. ")" end if match.mode == 1 then if not _G.ce then @@ -784,8 +999,9 @@ function cheatfind.startplugin() local json = require("json") cheat.desc = "%s" cheat_save.json = json.stringify({[1] = cheat}, {indent = true}) - cheat_save.xml = string.format("<mamecheat version=\"1\">\n<cheat desc=\"%%s\">\n<script state=\"run\">\n<action>%s.pp%s@%X=%X</action>\n</script>\n</cheat>\n</mamecheat>", dev.tag:sub(2), widchar, match.addr, match.newval) - cheat_save.simple = string.format("%s,%s,%X,%s,%X,%%s\n", setname, dev.tag, match.addr, widchar, match.newval) + cheat_save.xml = string.format("<mamecheat version=\"1\">\n <cheat desc=\"%%s\">\n <script state=\"run\">\n <action>%s.pp%s@%X=%X</action>\n </script>\n </cheat>\n</mamecheat>", dev.tag:sub(2), widchar, match.addr, match.newval) + cheat_save.simple = string.format("%s,%s,%X,%s,%X,%%s\n", setname, dev.tag, match.addr, widchar, pokevalue) + cheat_save.dat = string.format(":%s:40000000:%X:%08X:FFFFFFFF:%%s\n", setname, match.addr, pokevalue) manager:machine():popmessage(string.format(_("Default name is %s"), cheat_save.name)) return true else @@ -829,7 +1045,7 @@ function cheatfind.startplugin() local m = { _("Page"), matchpg, 0 } local max if matchsel == 0 then - max = math.ceil(matches[#matches].count / 100) + max = math.ceil(matches[#matches].count / 100) - 1 else max = #matches[#matches][matchsel] end @@ -852,6 +1068,11 @@ function cheatfind.startplugin() end local function menu_callback(index, event) + if event == "cancel" and pausesel == 1 then + emu.unpause() + menu_is_showing = false + return {0,0,0} + end return menu_func[index](event) end emu.register_menu(menu_callback, menu_populate, _("Cheat Finder")) @@ -861,7 +1082,19 @@ function cheatfind.startplugin() for num, watch in ipairs(watches) do screen:draw_text("left", num * height, string.format(watch.format, watch.addr, watch.func())) end + if tabbed_out and manager:ui():is_menu_active() then + emu.pause() + menu_is_showing = true + tabbed_out = false + end end) + emu.register_periodic(function () + if menu_is_showing and not manager:ui():is_menu_active() then + emu.unpause() + menu_is_showing = false + tabbed_out = true + end + end) end return exports diff --git a/plugins/console/init.lua b/plugins/console/init.lua index 3cb75f55528..52d54fdcc1a 100644 --- a/plugins/console/init.lua +++ b/plugins/console/init.lua @@ -18,6 +18,16 @@ function console.startplugin() local matches = {} local lastindex = 0 local consolebuf + _G.history = function (index) + local history = ln.historyget() + if index then + ln.preload(history[index]) + return + end + for num, line in ipairs(history) do + print(num, line) + end + end print(" _/ _/ _/_/ _/ _/ _/_/_/_/"); print(" _/_/ _/_/ _/ _/ _/_/ _/_/ _/ "); print(" _/ _/ _/ _/_/_/_/ _/ _/ _/ _/_/_/ "); @@ -28,7 +38,7 @@ function console.startplugin() -- linenoise isn't thread safe but that means history can handled here -- that also means that bad things will happen if anything outside lua tries to use it -- especially the completion callback - ln.historysetmaxlen(10) + ln.historysetmaxlen(50) local scr = [[ local ln = require('linenoise') ln.setcompletion(function(c, str, pos) diff --git a/plugins/hiscore/hiscore.dat b/plugins/hiscore/hiscore.dat index a8480580d3e..dcb14dcd893 100644 --- a/plugins/hiscore/hiscore.dat +++ b/plugins/hiscore/hiscore.dat @@ -99,6 +99,43 @@ undoukai: ;@s:8080bw.cpp +alieninvp2: +cosmicin: +galmonst: +invader4: +invaders: +invadersem: +invadrmr: +invasion: +invasiona: +invasiona2: +invasionb: +invasionrz: +invasionrza: +searthin: +searthina: +sicv: +sicv1: +sinvemag: +sinvzen: +sisv: +sisv1: +sisv2: +sisv3: +sitv: +sitv1: +spaceat2: +spaceatt: +spaceatt2k: +spaceattbp: +spacecom: +spacerng: +spceking: +superinv: +ultrainv: +@:maincpu,program,20f4,02,00,00 + + crashrd: @:maincpu,program,233f,03,01,00 @:maincpu,program,2244,0a,02,1b @@ -156,42 +193,6 @@ swipeout: @:maincpu,program,35be,1,41,41 -alieninvp2: -cosmicin: -galmonst: -invader4: -invaders: -invadersem: -invadrmr: -invasion: -invasiona: -invasionb: -invasionrz: -invasionrza: -searthin: -searthina: -sicv: -sicv1: -sinvemag: -sinvzen: -sisv: -sisv1: -sisv2: -sisv3: -sitv: -sitv1: -spaceat2: -spaceatt: -spaceatt2k: -spaceattbp: -spacecom: -spacerng: -spceking: -superinv: -ultrainv: -@:maincpu,program,20f4,02,00,00 - - ozmawarsmr: @:maincpu,program,2043,02,00,00 @:maincpu,program,2023,01,01,01 @@ -1040,7 +1041,7 @@ spacezap: ;gorf:* resetting screws up 2 scores and top score gorf: gorfpgm1: -@:maincpu,program,d010,22,00,00 +@:maincpu,:protected_ram/share,0010,22,00,00 robby: @@ -1149,6 +1150,7 @@ eto: earthjkr: earthjkrp: +earthjkra: @:maincpu,program,103204,2f,00,42 @@ -1436,6 +1438,7 @@ bionicc2: bioniccbl: bioniccbl2: topsecrt: +topsecrt2: @:maincpu,program,fff9e2,4f,00,4d @:maincpu,program,ffc57a,4,00,00 @:maincpu,program,fec0d9,1,20,20 @@ -2264,8 +2267,8 @@ cchasm1: ;@s:cclimber.cpp ;rpatrol:******River Patrol (Orca) -rpatroln: rpatrol: +rpatroln: @:maincpu,program,919b,4,18,0a @:maincpu,program,91ba,6,00,00 @:maincpu,program,921b,4,18,0a @@ -2418,6 +2421,7 @@ centiped: centiped2: centiped3: centipedj: +centipdb2: @:maincpu,program,000b,0f,10,01 @:maincpu,program,0023,0f,04,12 @@ -2596,7 +2600,8 @@ circusce: ;@s:cischeat.cpp f1gpstar: -f1gpstaro: +f1gpstar2: +f1gpstar3: @:cpu1,program,f2803,5e3,04,4d @@ -2855,6 +2860,12 @@ cosmica2: ;@s:cps1.cpp +sf2yyc: +@:maincpu,program,ffd276,28,02,20 +@:maincpu,program,ffd2c6,14,ff,96 +@:maincpu,program,ffd2ee,04,02,53 + + ;street fighter 2 (US 910318)(clone)(by tamphax) sf2: sf2b: @@ -2888,6 +2899,8 @@ sf2uf: sf2ug: sf2ui: sf2uk: +sf2ea: +sf2uh: @:maincpu,program,ffd28a,30,00,20 @:maincpu,program,ffd302,04,00,00 @@ -2934,7 +2947,6 @@ sf2mdtb: sf2rb: sf2rb2: sf2rb3: -sf2yyc: @:maincpu,program,ffd276,28,00,20 @:maincpu,program,ffd2c6,14,ff,96 @:maincpu,program,ffd2ee,04,00,00 @@ -3262,6 +3274,25 @@ lostwrldo: ;@s:cps2.cpp +;xmcotar1d:******X-Men: Children of the Atom (Euro 950105 Phoenix Edition) +xmcota: +xmcotaa: +xmcotaar1: +xmcotaar2: +xmcotab: +xmcotah: +xmcotahr1: +xmcotaj: +xmcotaj1: +xmcotaj2: +xmcotaj3: +xmcotajr: +xmcotar1: +xmcotar1d: +xmcotau: +@:maincpu,program,ffec8e,3c,00,01 + + ssf2: ssf2a: ssf2ar1: @@ -3281,24 +3312,6 @@ ssf2ud: @:maincpu,program,ffd61a,4,00,00 -;xmcotar1d:******X-Men: Children of the Atom (Euro 950105 Phoenix Edition) -xmcota: -xmcotaa: -xmcotaar1: -xmcotab: -xmcotah: -xmcotahr1: -xmcotaj: -xmcotaj1: -xmcotaj2: -xmcotaj3: -xmcotajr: -xmcotar1: -xmcotar1d: -xmcotau: -@:maincpu,program,ffec8e,3c,00,01 - - ;ddsomud:******Dungeons & Dragons: Shadow over Mystara (USA 960619 Phoenix Edition) (bootleg) ddsom: ddsoma: @@ -4939,6 +4952,7 @@ rolcrush: ;*******dragon master drgnmst: +drgnmst2: @:maincpu,program,ff84f0,4,00,00 @:maincpu,program,ff8450,6c,00,01 @@ -5429,6 +5443,7 @@ fantlanda: ;*******galaxy gunners galaxygn: +galaxygnh: @:maincpu,program,01e9c,190,50,00 @:maincpu,program,0202a,1,0a,0a @@ -5690,20 +5705,21 @@ funkybeeb: ;@s:funkyjet.cpp -;(sotsugyo shousho) (by GeoMan) -sotsugyo: -@:maincpu,program,14269c,10,00,32 -@:maincpu,program,1426ac,50,04,00 - - ;funkyjetj:******Funky Jet (Japan) funkyjet: funkyjeta: +funkyjetb: funkyjetj: @:maincpu,program,143a01,20,00,10 @:maincpu,program,143a21,140,12,00 +;(sotsugyo shousho) (by GeoMan) +sotsugyo: +@:maincpu,program,14269c,10,00,32 +@:maincpu,program,1426ac,50,04,00 + + ;@s:funybubl.cpp ;funybublc:******Funny Bubble (Comad version) @@ -5927,6 +5943,24 @@ galaxiac: ;@s:galaxian.cpp +;amidar:[Special thanks to Cananas for enhancing this entry] +amidar: +amidar1: +amidarb: +amidaro: +amidaru: +amigo: +amigo2: +scobra: +scobrab: +scobrag: +scobraggi: +scobras: +scobrase: +@:maincpu,program,8200,1e,00,01 +@:maincpu,program,80a8,03,00,01 + + ;(zero time) asideral: astrians: @@ -5995,23 +6029,6 @@ froggervd: @:maincpu,program,43ef,0d,63,05 -;amidar:[Special thanks to Cananas for enhancing this entry] -amidar: -amidar1: -amidarb: -amidaro: -amidaru: -amigo: -amigo2: -scobra: -scobrab: -scobrag: -scobras: -scobrase: -@:maincpu,program,8200,1e,00,01 -@:maincpu,program,80a8,03,00,01 - - mshuttlea: @:maincpu,program,808a,57,00,24 @@ -7022,12 +7039,11 @@ hvyunitu: ;@s:hyperspt.cpp -;roadf (& clones) fixed thanks to thomas busse roadf: roadf2: roadf3: @:maincpu,program,3bd0,b0,01,20 -@:maincpu,program,3004,0,01,01 +@:maincpu,program,3066,3,01,00 ;@s:hyprduel.cpp @@ -7187,6 +7203,13 @@ junofrstg: ;@s:kaneko16.cpp +;(Blaze On) (by tamphax) +blazeon: +blazeonj: +@:maincpu,program,304fb0,77,00,0d +@:maincpu,program,30020c,8,00,00 + + ;*******bakuretsu breaker ;******Explosive Breaker bakubrkr: @@ -7207,12 +7230,6 @@ wingforc: @:maincpu,program,30d7e7,13f,00,35 -;(Blaze On) (by tamphax) -blazeon: -@:maincpu,program,304fb0,77,00,0d -@:maincpu,program,30020c,8,00,00 - - berlwall: berlwallk: berlwallt: @@ -8016,6 +8033,7 @@ rtypejp: loht: lohtb2: lohtj: +lohtb3: @:maincpu,program,a3af4,32,36,20 @:maincpu,program,a3adc,02,36,11 @@ -8557,6 +8575,10 @@ genesis,tf3: ;@s:megadriv_acbl.cpp +barek3mb: +@:maincpu,program,e0ff31,99,01,04 + + ssf2mdb: @:maincpu,program,fffcb3,29,00,20 @@ -8908,6 +8930,7 @@ mhavoc: mikie: mikiehs: mikiej: +mikiek: @:maincpu,program,2a00,01,1d,1d @:maincpu,program,2a01,01,2c,2c @:maincpu,program,2a02,01,1f,1f @@ -9243,14 +9266,16 @@ mustachei: ;@s:mw8080bw.cpp -blueshrk: -blueshrkmr: -@:maincpu,program,200a,05,00,00 - - +;** lagunar - wait until cars race in attract mode for hi-scores to appear *** lagunar: @:maincpu,program,2011,9,00,00 @:maincpu,program,2005,3,00,00 +@:maincpu,program,2031,1,89,89 + + +blueshrk: +blueshrkmr: +@:maincpu,program,200a,05,00,00 spcenctr: @@ -9612,16 +9637,17 @@ blazer: ;@s:namcos11.cpp -tekken: -tekkenac: -@:maincpu,program,1e0498,17f,04,4b - - xevi3dg: +xevi3dga: xevi3dgj: @:maincpu,program,1512b8,3b,48,4b +tekken: +tekkenac: +@:maincpu,program,1e0498,17f,04,4b + + tekkenjb: @:maincpu,program,1e0148,17f,04,4e @@ -9964,6 +9990,11 @@ hcrashc: ;@s:neogeo.cpp +viewpoin: +@:100000:2:42:41 +@:1000c8:3d:00:00 + + ;******metal slug 2 turbo ;mslug2:******metal slug 2 mslug2: @@ -10159,6 +10190,15 @@ pclubysa: ;@s:nmk16.cpp +;(bubble 2000) (by GeoMan) +;hotbubl:******Hot Bubble +bubl2000: +bubl2000a: +hotbubl: +hotbubla: +@:maincpu,program,3c0600,50,00,20 + + raphero: @:maincpu,program,1fe601,5b,01,70 @@ -10184,6 +10224,7 @@ rapheroa: hachamfa: +hachamfp: @:maincpu,program,fc000,3df,01,4e @@ -10251,14 +10292,6 @@ mangchi: @:maincpu,program,1c1b02,4c,27,20 -;(bubble 2000) (by GeoMan) -;hotbubl:******Hot Bubble -bubl2000: -hotbubl: -hotbubla: -@:maincpu,program,3c0600,50,00,20 - - ;(many block) (by GeoMan) manybloc: @:maincpu,program,f0050,4,00,19 @@ -10528,6 +10561,13 @@ paclandm2: ;@s:pacman.cpp +;******Crush Roller (Kural TWT) +crush4: +crush5: +@:maincpu,program,4c80,3,00,00 +@:maincpu,program,4c83,1,04,04 + + ;*** puckman/pacman (and clones) for pacmame & regular mame builds ** ;abscam:******Abscam ;mspacmbe:******Ms. Pac-Man (bootleg, (encrypted)) @@ -10730,12 +10770,6 @@ maketrxb: @:maincpu,program,4e40,1e,4b,00 -;******Crush Roller (Kural TWT) -crush4: -@:maincpu,program,4c80,3,00,00 -@:maincpu,program,4c83,1,04,04 - - ;(dream shopper) dremshpr: @:maincpu,program,4c00,f0,00,01 @@ -11423,9 +11457,9 @@ s1945: s1945a: s1945bl: s1945j: -s1945jn: s1945k: s1945n: +s1945nj: @:maincpu,program,fe2af8,78,2d,f8 @@ -12101,6 +12135,7 @@ scotrsht: 800fath: 800fatha: bomber: +kamikazesp: knockout: knockoutb: knockoutc: @@ -12524,6 +12559,20 @@ outrundxj: ;@s:segas16a.cpp +;shinobls:******Shinobi (Star bootleg, System 16A) +shinobi: +shinobi1: +shinobi2: +shinobi3: +shinobi4: +shinobi5: +shinobi6: +shinobld: +shinobls: +@:maincpu,program,fffc00,142,00,54 +@:maincpu,program,fff010,4,00,00 + + fantzone1: fantzonep: fantzonepr: @@ -12580,19 +12629,6 @@ dumpmtmt: @:maincpu,program,fffcfa,1,03,03 -;shinobls:******Shinobi (Star bootleg, System 16A) -shinobi: -shinobi1: -shinobi2: -shinobi3: -shinobi4: -shinobi5: -shinobld: -shinobls: -@:maincpu,program,fffc00,142,00,54 -@:maincpu,program,fff010,4,00,00 - - ;(major league) (by GeoMan) mjleague: @:maincpu,program,ffe000,50,00,20 @@ -12600,6 +12636,13 @@ mjleague: ;@s:segas16b.cpp +fantzone: +fantzonee: +fantzoneta: +@:maincpu,program,fffc00,38,00,52 +@:maincpu,program,ffc22c,4,00,00 + + ;******action fighter (fd1089a 317-0018) afighter: afightera: @@ -12693,12 +12736,6 @@ mvpj: @:maincpu,program,ff3800,8b,01,01 -fantzone: -fantzoneta: -@:maincpu,program,fffc00,38,00,52 -@:maincpu,program,ffc22c,4,00,00 - - hwchamp: hwchampj: @:maincpu,program,fff400,318,10,00 @@ -13117,6 +13154,10 @@ starforce: ;@s:seta.cpp +msgundamb: +@:maincpu,program,20424f,63,01,10 + + simpsonjr: @:maincpu,program,20561e,4f,00,20 @@ -13295,6 +13336,12 @@ pairlove: ;@s:seta2.cpp +;*******guardians/denjin makai II(By Firebrand) +grdians: +grdiansa: +@:maincpu,program,201581,4b,00,01 + + ;*******(penguin brothers (japan)) ablast: penbros: @@ -13311,11 +13358,6 @@ gundamex: @:maincpu,program,2078a7,63,01,50 -;*******guardians/denjin makai II(By Firebrand) -grdians: -@:maincpu,program,201582,4a,c3,01 - - ;@s:sf.cpp sf: @@ -13612,6 +13654,12 @@ skydiver: ;@s:skyfox.cpp +skyfox: +@:maincpu,program,de00,a,00,00 +@:maincpu,program,df00,28,00,00 +@:maincpu,program,c01a,01,79,79 + + exerizer: exerizerb: @:maincpu,program,de00,a,00,00 @@ -13624,11 +13672,6 @@ exerizerb: @:maincpu,program,d36a,1,00,00 -skyfox: -@:maincpu,program,de00,a,00,00 -@:maincpu,program,df00,23,00,00 - - ;@s:skykid.cpp ;(dragon buster) @@ -14249,6 +14292,10 @@ sstrangr2: ;@s:ssv.cpp +pastelis: +@:maincpu,program,2461,34,a0,04 + + ;*******ultra x weapons / ultra keibitai ultrax: ultraxg: @@ -14290,6 +14337,7 @@ dynagear: ;eaglshot:******eagle shot golf eaglshot: +eaglshotj: @:maincpu,program,20,62,48,18 @@ -14535,7 +14583,6 @@ superchsu: ;@s:superqix.cpp -;** this only saves the hiscore table, the top score will stay at default ** sqix: sqixb1: sqixb2: @@ -14543,6 +14590,7 @@ sqixr0: sqixr1: sqixu: @:maincpu,program,f4c0,28,00,03 +@:maincpu,program,f8f1,4,75,00 ;********perestroika girls (japan) @@ -15901,6 +15949,16 @@ horekidb: ;@s:tetrisp2.cpp +;(tetris plus 2(JAPAN)) +tetrisp2: +tetrisp2a: +tetrisp2j: +tetrisp2ja: +@:maincpu,program,10dfb7,b3,01,00 +@:maincpu,program,10e065,1,01,01 +@:maincpu,program,10b0f2,460,03,09 + + ;rocknms:******Rock'n MegaSession (Japan, bootleg) rocknms: @:maincpu,program,1043bd,14d,3d,00 @@ -15925,15 +15983,6 @@ rockn3: @:maincpu,program,1043b1,13b,3d,06 -;(tetris plus 2(JAPAN)) -tetrisp2: -tetrisp2j: -tetrisp2ja: -@:maincpu,program,10dfb7,b3,01,00 -@:maincpu,program,10e065,1,01,01 -@:maincpu,program,10b0f2,460,03,09 - - ;rockn2:******Rock'n Tread 2 (Japan, bootleg) rockn2: @:maincpu,program,104383,13b,3d,06 @@ -16323,6 +16372,18 @@ insectxj: ;@s:toaplan1.cpp +;fireshrkd:******Fire Shark (Korea, set 1, easier) +;fireshrkdh:******Fire Shark (Korea, set 2, harder) +fireshrk: +fireshrka: +fireshrkd: +fireshrkdh: +samesamecn: +@:maincpu,program,c1ae8,194,00,01 +@:maincpu,program,c1c29,1,2d,2d +@:maincpu,program,c1dc5,1d,2d,00 + + samesame: samesamenh: @:maincpu,program,c1778,194,00,01 @@ -16419,18 +16480,13 @@ hellfire1a: @:maincpu,program,42357,21,2e,30 -;fireshrkd:******Fire Shark (Korea, set 1, easier) -;fireshrkdh:******Fire Shark (Korea, set 2, harder) -fireshrk: -fireshrka: -fireshrkd: -fireshrkdh: -@:maincpu,program,c1ae8,194,00,01 -@:maincpu,program,c1c29,1,2d,2d -@:maincpu,program,c1dc5,1d,2d,00 +;@s:toaplan2.cpp +snowbro2: +snowbro2b: +snowbro2b2: +@:maincpu,program,1000a0,28,00,45 -;@s:toaplan2.cpp ghoxjo: @:maincpu,program,805a4,64,00,8e @@ -16466,11 +16522,6 @@ grindstma: @:maincpu,program,100438,4,00,00 -snowbro2: -snowbro2b: -@:maincpu,program,1000a0,28,00,45 - - ;batsugun:[Special thanks to Cananas for making this entry work] batsugun: batsuguna: @@ -16767,6 +16818,10 @@ noahsark: ;@s:tumbleb.cpp +magipur: +@:maincpu,program,4eda,ac,00,20 + + ;******Super Trio Thanks to Mr Valtric for this addition ****** suprtrio: @:maincpu,program,f03308,5a,01,4e diff --git a/plugins/hiscore/init.lua b/plugins/hiscore/init.lua index a89acfb33e3..ded3f0e44d2 100644 --- a/plugins/hiscore/init.lua +++ b/plugins/hiscore/init.lua @@ -33,6 +33,7 @@ function hiscore.startplugin() local mem_check_passed = false; local found_hiscore_entry = false; local timed_save = true; + local delaytime = 0; local positions = {}; -- Configuration file will be searched in the first path defined @@ -59,29 +60,34 @@ function hiscore.startplugin() local function parse_table ( dsting ) local _table = {}; for line in string.gmatch(dsting, '([^\n]+)') do - local cpu, mem; - local cputag, space, offs, len, chk_st, chk_ed, fill = string.match(line, '^@([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),?(%x?%x?)'); - cpu = manager:machine().devices[cputag]; - if not cpu then - error(cputag .. " device not found") - end - local rgnname, rgntype = space:match("([^/]*)/?([^/]*)") - if rgntype == "share" then - mem = manager:machine():memory().shares[rgnname] + local delay = line:match('^@delay=([.%d]*)') + if delay and #delay > 0 then + delaytime = emu.time() + tonumber(delay) else - mem = cpu.spaces[space] - end - if not mem then - error(space .. " space not found") + local cpu, mem; + local cputag, space, offs, len, chk_st, chk_ed, fill = string.match(line, '^@([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),?(%x?%x?)'); + cpu = manager:machine().devices[cputag]; + if not cpu then + error(cputag .. " device not found") + end + local rgnname, rgntype = space:match("([^/]*)/?([^/]*)") + if rgntype == "share" then + mem = manager:machine():memory().shares[rgnname] + else + mem = cpu.spaces[space] + end + if not mem then + error(space .. " space not found") + end + _table[ #_table + 1 ] = { + mem = mem, + addr = tonumber(offs, 16), + size = tonumber(len, 16), + c_start = tonumber(chk_st, 16), + c_end = tonumber(chk_ed, 16), + fill = tonumber(fill, 16) + }; end - _table[ #_table + 1 ] = { - mem = mem, - addr = tonumber(offs, 16), - size = tonumber(len, 16), - c_start = tonumber(chk_st, 16), - c_end = tonumber(chk_ed, 16), - fill = tonumber(fill, 16) - }; end return _table; end @@ -211,7 +217,7 @@ function hiscore.startplugin() local function init () if not scores_have_been_read then - if check_mem( positions ) then + if (delaytime <= emu.time()) and check_mem( positions ) then default_checksum = check_scores( positions ); if read_scores( positions ) then emu.print_verbose( "hiscore: scores read OK" ); |
