mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-16 16:21:30 +02:00
91 lines
3.2 KiB
Lua
91 lines
3.2 KiB
Lua
-- #1228: `givepoke` with the 3-argument (untrained) form must run
|
|
-- GiveANickname_YesNo, the same as a wild catch does.
|
|
-- engine/pokemon/move_mon.asm:1632-1645, 1753-1757, 1787
|
|
package.path = "./?.lua;./?/init.lua;" .. package.path
|
|
|
|
local T = require("tests.harness")
|
|
|
|
local Vm = require("src.script.gen2.Vm")
|
|
local Events = require("src.world.gen2.Events")
|
|
|
|
-- Elm's `givepoke CYNDAQUIL, 5, BERRY` shape: no trainer operand, so
|
|
-- Vm.lua's arg4 fallback reads it as 0 (untrained).
|
|
local scripts = {
|
|
generation = 2,
|
|
["s:give"] = {
|
|
{ op = "givepoke", species = 155, level = 5, item = 0, trainer = 0 },
|
|
{ op = "end" },
|
|
},
|
|
}
|
|
|
|
local mon = { species = 155, level = 5 }
|
|
local renamed
|
|
local vm = Vm.new(scripts, {}, Events.new(), {
|
|
givePoke = function() return mon end,
|
|
yesorno = function(onChoose) onChoose(true) end,
|
|
showText = function(_, onDone) onDone() end,
|
|
specials = {
|
|
monName = function(species) return species == 155 and "CYNDAQUIL" or "?" end,
|
|
renameMon = function(m, done, opts)
|
|
renamed = { mon = m, blank = opts and opts.blank }
|
|
done("SPARKY")
|
|
end,
|
|
},
|
|
})
|
|
|
|
T.check(vm:start("s:give"), "starter script starts")
|
|
for _ = 1, 10 do vm:update() end
|
|
T.check(not vm:running(), "script finished")
|
|
T.eq(mon.nickname, "SPARKY",
|
|
"givepoke with trainer=0 runs the nickname prompt and stores the answer")
|
|
T.check(renamed ~= nil and renamed.mon == mon,
|
|
"renameMon opened on the mon givepoke just handed over")
|
|
T.check(renamed.blank == true,
|
|
"the keyboard opens blank, same as InitNickname on a fresh catch")
|
|
|
|
-- The trade-gift form (trainer ~= 0, e.g. GiftSpearowName's 8-byte
|
|
-- Route35GoldenrodGate.asm:30 shape) must never open the keyboard.
|
|
local mon2 = { species = 155, level = 5 }
|
|
local renamed2 = false
|
|
local scripts2 = {
|
|
generation = 2,
|
|
["s:give2"] = {
|
|
{ op = "givepoke", species = 155, level = 5, item = 0, trainer = 1 },
|
|
{ op = "end" },
|
|
},
|
|
}
|
|
local vm2 = Vm.new(scripts2, {}, Events.new(), {
|
|
givePoke = function() return mon2 end,
|
|
yesorno = function() error("a trainer-labelled gift must never prompt") end,
|
|
showText = function(_, onDone) onDone() end,
|
|
specials = { renameMon = function() renamed2 = true end },
|
|
})
|
|
T.check(vm2:start("s:give2"), "trainer-gift script starts")
|
|
for _ = 1, 10 do vm2:update() end
|
|
T.check(mon2.nickname == nil, "trainer arm leaves the nickname untouched")
|
|
T.check(not renamed2, "and never opens the keyboard")
|
|
|
|
-- A NO answer, and an all-spaces keyboard entry, both leave the species
|
|
-- name standing (_InitString's blank test, home/string.asm:6-30).
|
|
local mon3 = { species = 155, level = 5 }
|
|
local scripts3 = {
|
|
generation = 2,
|
|
["s:give3"] = {
|
|
{ op = "givepoke", species = 155, level = 5, item = 0, trainer = 0 },
|
|
{ op = "end" },
|
|
},
|
|
}
|
|
local vm3 = Vm.new(scripts3, {}, Events.new(), {
|
|
givePoke = function() return mon3 end,
|
|
yesorno = function(onChoose) onChoose(false) end,
|
|
showText = function(_, onDone) onDone() end,
|
|
specials = {
|
|
renameMon = function() error("NO must not open the keyboard") end,
|
|
},
|
|
})
|
|
T.check(vm3:start("s:give3"), "NO-answer script starts")
|
|
for _ = 1, 10 do vm3:update() end
|
|
T.check(mon3.nickname == nil, "answering NO leaves the nickname unset")
|
|
|
|
T.finish("gen2_starter_nickname_bug1228")
|