Files
gen1recomp/tests/engine/gen2_daily_move_tutor_bug1963.lua

94 lines
3.6 KiB
Lua

-- ../pokecrystal/engine/overworld/time.asm:102
package.path = "./?.lua;./?/init.lua;" .. package.path
local T = require("tests.harness")
local check, eq = T.check, T.eq
love = love or require("tests.love_stub")
local Apricorns = require("src.core.gen2.Apricorns")
-- ../pokecrystal/constants/engine_flags.asm:25
local CRYSTAL = {
ENGINE_KURT_MAKING_BALLS = 80,
ENGINE_DAILY_BUG_CONTEST = 81,
ENGINE_QWILFISH_SWARM = 82,
ENGINE_TIME_CAPSULE = 83,
ENGINE_ALL_FRUIT_TREES = 84,
ENGINE_GOT_SHUCKIE_TODAY = 85,
ENGINE_GOLDENROD_UNDERGROUND_MERCHANT_CLOSED = 86,
ENGINE_FOUGHT_IN_TRAINER_HALL_TODAY = 87,
ENGINE_MT_MOON_SQUARE_CLEFAIRY = 88,
ENGINE_UNION_CAVE_LAPRAS = 89,
ENGINE_GOLDENROD_UNDERGROUND_GOT_HAIRCUT = 90,
ENGINE_GOLDENROD_DEPT_STORE_TM27_RETURN = 91,
ENGINE_DAISYS_GROOMING = 92,
ENGINE_INDIGO_PLATEAU_RIVAL_FIGHT = 93,
ENGINE_DAILY_MOVE_TUTOR = 94,
ENGINE_BUENAS_PASSWORD = 95,
}
local function crystalResolver(name, goldId)
return CRYSTAL[name] or goldId
end
local tutor, buena, rival
for _, row in ipairs(Apricorns.DAILY_ENGINE_FLAGS) do
if row.name == "ENGINE_DAILY_MOVE_TUTOR" then tutor = row end
if row.name == "ENGINE_BUENAS_PASSWORD" then buena = row end
if row.name == "ENGINE_INDIGO_PLATEAU_RIVAL_FIGHT" then rival = row end
end
check(tutor ~= nil, "ENGINE_DAILY_MOVE_TUTOR is a daily flag")
check(buena ~= nil, "ENGINE_BUENAS_PASSWORD is a daily flag")
eq(tutor and tutor.id, nil, "with no pokegold id to fall back on")
eq(buena and buena.id, nil, "nor has Buena's password one")
eq(rival and rival.id, 92, "ENGINE_INDIGO_PLATEAU_RIVAL_FIGHT keeps gold's 92")
-- ../pokecrystal/maps/GoldenrodCity.asm:34
do
local save = { engineFlags = {} }
for _, id in pairs(CRYSTAL) do save.engineFlags[id] = true end
Apricorns.startDailyResetTimer(save, { day = 10, hour = 9 })
check(not Apricorns.checkDailyResetTimer(save, { day = 10, hour = 23 },
crystalResolver), "the same day never rolls over")
check(save.engineFlags[94], "so the tutor flag is still set")
check(Apricorns.checkDailyResetTimer(save, { day = 11, hour = 0 },
crystalResolver), "midnight rolls over")
eq(save.engineFlags[94], nil, "and clears ENGINE_DAILY_MOVE_TUTOR")
eq(save.engineFlags[95], nil, "and Buena's password with it")
eq(save.engineFlags[93], nil, "and the Indigo Plateau rival fight")
for name, id in pairs(CRYSTAL) do
eq(save.engineFlags[id], nil, name .. " is cleared under Crystal")
end
end
-- ../pokegold/engine/overworld/time.asm:89
do
local save = { engineFlags = {} }
for id = 79, 92 do save.engineFlags[id] = true end
save.engineFlags[26] = true
Apricorns.startDailyResetTimer(save, { day = 3, hour = 9 })
check(Apricorns.checkDailyResetTimer(save, { day = 4, hour = 0 }),
"a Gold save with no resolver still rolls over")
for id = 79, 92 do
eq(save.engineFlags[id], nil, "gold daily flag " .. id .. " is cleared")
end
check(save.engineFlags[26], "and ENGINE_ZEPHYRBADGE is not a daily flag")
end
-- ../pokecrystal/constants/engine_flags.asm:98
do
local save = { engineFlags = {} }
save.engineFlags[Apricorns.ENGINE_KURT_MAKING_BALLS] = true
save.engineFlags[Apricorns.ENGINE_ALL_FRUIT_TREES] = true
Apricorns.startDailyResetTimer(save, { day = 3, hour = 9 })
check(Apricorns.checkDailyResetTimer(save, { day = 4, hour = 0 },
crystalResolver), "a Crystal rollover")
eq(save.engineFlags[Apricorns.ENGINE_KURT_MAKING_BALLS], nil,
"still finishes Kurt's ball")
eq(save.engineFlags[Apricorns.ENGINE_ALL_FRUIT_TREES], nil,
"and still refills the fruit trees")
end
T.finish("gen2 daily move tutor bug 1963")