mirror of
https://github.com/bryanthaboi/gen1recomp
synced 2026-09-26 13:33:27 -04:00
94 lines
3.6 KiB
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")
|