mirror of
https://github.com/bryanthaboi/gen1recomp
synced 2026-10-02 07:50:13 -04:00
76 lines
3.2 KiB
Lua
76 lines
3.2 KiB
Lua
package.path = "./?.lua;./?/init.lua;" .. package.path
|
|
|
|
local T = require("tests.harness")
|
|
local GameVersion = require("src.core.GameVersion")
|
|
local Runtime = require("src.core.game3.runtime")
|
|
local Options = require("src.core.game3.options")
|
|
local Message = require("src.ui.game3.message")
|
|
local Hud = require("src.ui.game3.hud")
|
|
local TextIR = require("src.core.game3.scripting.text_ir")
|
|
local input = {
|
|
wasPressed = function(_, key) return key == "a" end,
|
|
isDown = function() return false end,
|
|
}
|
|
local game = { input = input }
|
|
local ir = TextIR.fromAscii("First paragraph.\\pSecond paragraph.")
|
|
|
|
local function exercise(version, speed, text)
|
|
GameVersion.set(version)
|
|
local session = { version = version }
|
|
Runtime.session = session
|
|
Options.set(session, "textSpeed", speed)
|
|
Message.showStay(text)
|
|
T.check(Message.isTyping() and Message._page == 1 and Message._revealed == 0,
|
|
version .. " implicit option " .. speed .. " starts typing first paragraph")
|
|
local first = Message.currentPage()
|
|
Message.tick()
|
|
Hud.update(game, 1 / 60)
|
|
T.eq(Message._page, 1, version .. " opening A preserves first paragraph at option " .. speed)
|
|
T.eq(Message.currentPage(), first, "opening A keeps first paragraph text")
|
|
T.check(Message.isWaiting(), "opening A finishes first paragraph reveal")
|
|
Message.advance()
|
|
T.eq(Message._page, 2, "fresh A advances exactly once")
|
|
T.check(Message.isTyping(), "second paragraph starts typing")
|
|
Message.close()
|
|
end
|
|
|
|
for _, version in ipairs({ "firered", "leafgreen", "emerald" }) do
|
|
for speed = 0, 2 do
|
|
exercise(version, speed, ir)
|
|
Message.showStay("ABC")
|
|
Message.tick()
|
|
T.eq(Message._revealed, 1, "first glyph prints on first tick")
|
|
local delay = ({ 8, 4, 1 })[speed + 1]
|
|
for _ = 1, delay - 1 do Message.tick() end
|
|
T.eq(Message._revealed, 1, version .. " no-input glyph interval " .. delay)
|
|
Message.tick()
|
|
T.eq(Message._revealed, 2, version .. " next glyph after " .. delay .. " ticks")
|
|
Message.showStay(ir, { speed = 0 })
|
|
T.check(Message.isWaiting() and Message._revealed == Message._total,
|
|
version .. " explicit speed zero stays instant at option " .. speed)
|
|
Message.close()
|
|
end
|
|
end
|
|
|
|
GameVersion.set("firered")
|
|
local bundle = require("tests.game3_cache").bundle("scripts/events.lua")
|
|
if bundle then
|
|
local event = assert(bundle.events.FR_VIRIDIAN_CITY_POKEMON_CENTER_1F)
|
|
for _, npc in ipairs({ { id = 2, name = "Viridian gentleman" }, { id = 3, name = "Viridian boy" } }) do
|
|
local scriptKey
|
|
for _, object in ipairs(event.objects) do
|
|
if object.localId == npc.id then scriptKey = object.scriptKey break end
|
|
end
|
|
local script = assert(bundle.scripts[assert(scriptKey, npc.name .. " event script")])
|
|
local command = assert(script[1])
|
|
assert(command.op == "loadword" and command.dest == 0, npc.name .. " cached message pointer")
|
|
local text = assert(bundle.text[command.value], npc.name .. " cached text IR")
|
|
T.eq(#TextIR.splitPages(TextIR.toTextBox(text, { maxWidth = 208 })), 2,
|
|
npc.name .. " cached literal text has two paragraphs")
|
|
exercise("firered", 0, text)
|
|
end
|
|
else
|
|
print("[skip] cached ROM message acceptance: " .. tostring(require("tests.game3_cache").reason))
|
|
end
|
|
T.finish("game3_message_speed")
|