mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-12 16:31:05 +02:00
61 lines
1.8 KiB
Lua
61 lines
1.8 KiB
Lua
local Pokemon = require("src.pokemon.Pokemon")
|
|
local Stats = require("src.pokemon.Stats")
|
|
local Growth = require("src.pokemon.Growth")
|
|
|
|
local MonOps = {}
|
|
|
|
function MonOps.create(data, species, level)
|
|
return Pokemon.new(data, species, level)
|
|
end
|
|
|
|
function MonOps.recalc(data, mon)
|
|
local def = data.pokemon[mon.species]
|
|
assert(def, "unknown species")
|
|
mon.stats = Stats.calc(def, mon.level, mon.dvs, mon.statExp)
|
|
mon.hp = math.max(0, math.min(mon.hp or mon.stats.hp, mon.stats.hp))
|
|
end
|
|
|
|
function MonOps.setLevel(data, mon, level)
|
|
level = math.max(1, math.min(100, math.floor(level)))
|
|
local def = data.pokemon[mon.species]
|
|
mon.level = level
|
|
mon.exp = Growth.expForLevel(def.growthRate, level)
|
|
MonOps.recalc(data, mon)
|
|
end
|
|
|
|
function MonOps.setMove(data, mon, slot, moveId)
|
|
assert(slot >= 1 and slot <= 4)
|
|
local mdef = data.moves[moveId]
|
|
assert(mdef, "unknown move")
|
|
mon.moves = mon.moves or {}
|
|
mon.moves[slot] = {
|
|
id = moveId,
|
|
pp = mdef.pp + ((mon.moves[slot] and mon.moves[slot].ppUps) or 0) * math.floor(mdef.pp / 5),
|
|
ppUps = mon.moves[slot] and mon.moves[slot].ppUps or nil,
|
|
}
|
|
end
|
|
|
|
-- HP DV is derived from the low bits of the other four (Stats.randomDVs).
|
|
function MonOps.syncHpDv(dvs)
|
|
dvs.hp = (dvs.attack % 2) * 8 + (dvs.defense % 2) * 4
|
|
+ (dvs.speed % 2) * 2 + (dvs.special % 2)
|
|
return dvs
|
|
end
|
|
|
|
function MonOps.setDv(data, mon, key, value)
|
|
mon.dvs[key] = math.max(0, math.min(15, math.floor(value)))
|
|
if key ~= "hp" then
|
|
MonOps.syncHpDv(mon.dvs)
|
|
end
|
|
MonOps.recalc(data, mon)
|
|
end
|
|
|
|
-- Keep level; resync exp to the species growth curve (species changes).
|
|
function MonOps.setSpecies(data, mon, species)
|
|
assert(data.pokemon[species], "unknown species")
|
|
mon.species = species
|
|
MonOps.setLevel(data, mon, mon.level)
|
|
end
|
|
|
|
return MonOps
|