mirror of
https://github.com/bryanthaboi/gen1recomp
synced 2026-09-26 13:33:27 -04:00
58 lines
2.3 KiB
Lua
58 lines
2.3 KiB
Lua
-- AdjustDamageForMoveType (engine/battle/core.asm:5169-5176)
|
|
package.path = "./?.lua;./?/init.lua;" .. package.path
|
|
|
|
local T = require("tests.modkit")
|
|
local Data = T.fixtures.fresh()
|
|
require("src.render.Font").load(Data)
|
|
table.insert(Data.type_chart.matchups,
|
|
{ attacker = "FIRE", defender = "FIX_DEF_A", multiplier = 5 })
|
|
local TypeChart = require("src.battle.TypeChart")
|
|
TypeChart.load(Data)
|
|
local BattleState = require("src.battle.BattleState")
|
|
local Damage = require("src.battle.Damage")
|
|
local Pokemon = require("src.pokemon.Pokemon")
|
|
local SaveData = require("src.core.SaveData")
|
|
|
|
local faithful = require("src.battle.rulesets.gen1_faithful")
|
|
local modern = require("src.battle.rulesets.modern_clean")
|
|
|
|
Data.moves.FIX_WEAK_FIRE = {
|
|
id = "FIX_WEAK_FIRE", index = 95, name = "FIX WEAK",
|
|
type = "FIRE", power = 1, accuracy = 100, pp = 35,
|
|
effect = "NO_ADDITIONAL_EFFECT",
|
|
}
|
|
local move = Data.moves.FIX_WEAK_FIRE
|
|
|
|
local save = SaveData.newGame()
|
|
save.party = { Pokemon.new(Data, "FIXMON_A", 5) }
|
|
local game = { data = Data, save = save,
|
|
stack = { top = function() return nil end, push = function() end } }
|
|
local battle = BattleState.newWild(game, "FIXMON_C", 5)
|
|
local atk, dfn = battle.player, battle.enemy
|
|
dfn.curTypes = { "WATER", "FIX_DEF_A" }
|
|
local opts = { forceCrit = false, rng = function(_, hi) return hi end }
|
|
|
|
T.eq(TypeChart.effectiveness("FIRE", dfn.curTypes), 2,
|
|
"the matchup is 0.25x (x10 scale)")
|
|
|
|
local d, info = Damage.compute(faithful, atk, dfn, move, opts)
|
|
T.eq(d, 0, "gen1_faithful floors the hit to zero")
|
|
T.eq(info.missed, true, "and flags it as a miss (core.asm:5171)")
|
|
|
|
local dm, im = Damage.compute(modern, atk, dfn, move, opts)
|
|
T.eq(dm, 1, "modern_clean deals the minimum 1 instead")
|
|
T.eq(im.missed, nil, "and never reports a miss")
|
|
|
|
local unset = { name = "fix_unset", randMin = 217, randMax = 255,
|
|
critUsesBaseSpeed = true, critIgnoresStages = true }
|
|
T.eq(select(2, Damage.compute(unset, atk, dfn, move, opts)).missed, true,
|
|
"an unset flag defaults to the Gen 1 quirk")
|
|
|
|
T.eq(Damage.accuracyThreshold(modern, { accuracy = 100 }, atk, dfn), 256,
|
|
"modern_clean still removes the 1/256 miss")
|
|
T.eq(Damage.accuracyThreshold(faithful, { accuracy = 100 }, atk, dfn), 255,
|
|
"gen1_faithful keeps it")
|
|
|
|
Data.moves.FIX_WEAK_FIRE = nil
|
|
T.finish("zero-damage miss is ruleset-gated (#2153)")
|