diff --git a/Lua/actor lister.lua b/Lua/actor lister.lua index d99f1bf..64c436b 100755 --- a/Lua/actor lister.lua +++ b/Lua/actor lister.lua @@ -1,6 +1,7 @@ require "boilerplate" require "addrs.init" require "classes" +require "messages" -- check for errors in the actor linked lists local validate = false @@ -27,15 +28,6 @@ function sort_by_key(t) return sorted end -function T(x, y, color, pos, fmt, ...) - gui.text(10*x + 2, 16*y + 4, fmt:format(...), nil, color or "white", pos or "bottomright") -end - -function T_BR(x, y, color, ...) T(x, y, color, "bottomright", ...) end -function T_BL(x, y, color, ...) T(x, y, color, "bottomleft", ...) end -function T_TL(x, y, color, ...) T(x, y, color, "topleft", ...) end -function T_TR(x, y, color, ...) T(x, y, color, "topright", ...) end - function get_actor_count(i) return R4(addrs.actor_counts[i].addr) end diff --git a/Lua/cheat menu.lua b/Lua/cheat menu.lua index fcc4c9a..1726ba3 100755 --- a/Lua/cheat menu.lua +++ b/Lua/cheat menu.lua @@ -2,18 +2,7 @@ require "boilerplate" require "addrs.init" require "classes" require "menu classes" - -function T(x, y, color, pos, s, ...) - if #{...} > 0 then - s = s:format(...) - end - gui.text(10*x + 2, 16*y + 4, s, nil, color or "white", pos or "bottomright") -end - -function T_BR(x, y, color, ...) T(x, y, color, "bottomright", ...) end -function T_BL(x, y, color, ...) T(x, y, color, "bottomleft", ...) end -function T_TL(x, y, color, ...) T(x, y, color, "topleft", ...) end -function T_TR(x, y, color, ...) T(x, y, color, "topright", ...) end +require "messages" local passives = {} diff --git a/Lua/messages.lua b/Lua/messages.lua new file mode 100644 index 0000000..0fde663 --- /dev/null +++ b/Lua/messages.lua @@ -0,0 +1,48 @@ +-- gui.addmessage sucks so we're doing this our way + +function T(x, y, color, pos, s, ...) + if #{...} > 0 then + s = s:format(...) + end + gui.text(10*x + 2, 16*y + 4, s, nil, color or "white", pos or "bottomright") +end + +function T_BR(x, y, color, ...) T(x, y, color, "bottomright", ...) end +function T_BL(x, y, color, ...) T(x, y, color, "bottomleft", ...) end +function T_TL(x, y, color, ...) T(x, y, color, "topleft", ...) end +function T_TR(x, y, color, ...) T(x, y, color, "topright", ...) end + +messages = {} +__messages_then = 0 + +function message(text, frames) + local now = emu.framecount() + frames = frames or 60 + local when = now + frames + table.insert(messages, {text=text, when=when}) +end + +function draw_messages() + local now = emu.framecount() + if now == __messages_then then + -- already drawn this frame + return + end + if now ~= __messages_then + 1 then + -- nonlinearity in time, probably a savestate + messages = {} + end + + local okay = {} + for i, t in ipairs(messages) do + if now < t.when then + table.insert(okay, t) + end + end + for i, t in ipairs(okay) do + T_BL(0, i - 1, nil, t.text) + end + + messages = okay + __messages_then = now +end