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