mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-18 19:54:21 +02:00
CLOSES #1211, CLOSES #1228, CLOSES #1229, CLOSES #1232, CLOSES #1251, CLOSES #1265, CLOSES #1267, CLOSES #1276, CLOSES #1279, CLOSES #1282, CLOSES #1293, CLOSES #1296, CLOSES #1303, CLOSES #1329, CLOSES #1338, CLOSES #1341, CLOSES #1343, CLOSES #1344, CLOSES #1368, CLOSES #1385, CLOSES #1388, CLOSES #1389, CLOSES #1391
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
-- #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")
|
||||
Reference in New Issue
Block a user