Files
gen1recomp/tests/engine/thrash_menu_flash_bug2252.lua
T

119 lines
3.5 KiB
Lua

-- engine/battle/core.asm:293
package.path = "./?.lua;./?/init.lua;" .. package.path
local T = require("tests.modkit")
local Data = T.fixtures.fresh()
require("src.render.Font").load(Data)
local BattleState = require("src.battle.BattleState")
local Pokemon = require("src.pokemon.Pokemon")
local SaveData = require("src.core.SaveData")
local TypeChart = require("src.battle.TypeChart")
TypeChart.load(Data)
Data.moves.FIX_THRASH = {
id = "FIX_THRASH", index = 91, name = "FIX THRASH", type = "NORMAL",
power = 90, accuracy = 100, pp = 20, effect = "THRASH_PETAL_DANCE_EFFECT",
}
local function newBattle()
local save = SaveData.newGame()
save.party = { Pokemon.new(Data, "FIXMON_A", 40) }
local game = { data = Data, save = save,
input = { wasPressed = function() return false end,
isDown = function() return false end },
stack = { top = function() return nil end, push = function() end } }
local battle = BattleState.newWild(game, "FIXMON_C", 40)
battle.rng = function(a) if a then return a end return 0 end
battle.introSlide = nil
return battle
end
local function drainToMenu(battle)
battle.queue, battle.nextInsert = { { wait = 2 } }, 0
battle.phase = "messages"
battle.afterQueue = "menu"
end
local function stepNeverMenu(battle, label)
local sawMenu, turns = nil, 0
local startTurn = battle.turnCount or 0
for i = 1, 10 do
battle:update(1 / 60)
if battle.phase == "menu" and not sawMenu then sawMenu = i end
end
turns = (battle.turnCount or 0) - startTurn
T.check(sawMenu == nil, label .. ": no frame leaves phase == menu (first seen frame "
.. tostring(sawMenu) .. ")")
T.check(turns >= 1, label .. ": the locked turn still resolves")
end
do
local battle = newBattle()
battle.player.thrashTurns = 2
battle.player.thrashMove = battle.player.curMoves[1]
battle.player.thrashAnnounced = true
drainToMenu(battle)
stepNeverMenu(battle, "thrash")
end
do
local battle = newBattle()
battle.player.mustRecharge = true
drainToMenu(battle)
stepNeverMenu(battle, "recharge")
end
do
local battle = newBattle()
battle.player.charging = battle.player.curMoves[1]
drainToMenu(battle)
stepNeverMenu(battle, "charging")
end
do
local battle = newBattle()
battle.player.flinched = true
battle.player.thrashTurns = 2
battle.player.thrashMove = battle.player.curMoves[1]
battle.player.thrashAnnounced = true
battle.player.mon.hp = 40
battle.player.shownHP = 10
drainToMenu(battle)
battle:update(1 / 60)
battle:update(1 / 60)
battle:update(1 / 60)
battle:update(1 / 60)
T.check(battle.player.flinched == false, "the locked drain clears the player's flinch")
end
do
local battle = newBattle()
drainToMenu(battle)
local reached
for i = 1, 10 do
battle:update(1 / 60)
if battle.phase == "menu" then reached = reached or i end
end
T.check(reached ~= nil, "an unlocked player reaches the command menu")
T.eq(battle.phase, "menu", "and stays on it")
end
do
local battle = newBattle()
battle.kind = "link"
battle.player.thrashTurns = 2
battle.player.thrashMove = battle.player.curMoves[1]
battle.player.thrashAnnounced = true
local resolved = 0
battle.resolveTurn = function() resolved = resolved + 1 end
drainToMenu(battle)
for _ = 1, 4 do
if battle.phase ~= "messages" then break end
battle:update(1 / 60)
end
T.eq(battle.phase, "menu", "a link battle's drain still lands on phase == menu")
T.eq(resolved, 0, "and leaves the locked action to the menu branch")
end
T.finish("locked turn skips the command menu frame (#2252)")