Made it so crits ignore defense boosts and elements use enumerations for type effectiveness

This commit is contained in:
dalyjame 2019-06-24 16:51:31 -04:00
parent 4d456d7e5d
commit 7c9942066f
8 changed files with 373 additions and 347 deletions

View File

@ -21,8 +21,9 @@ import org.yaml.snakeyaml.nodes.Tag
import org.yaml.snakeyaml.constructor._ import org.yaml.snakeyaml.constructor._
import org.yaml.snakeyaml.representer._ import org.yaml.snakeyaml.representer._
import fmon.stat.Element import fmon.stat.{Effectiveness, Element}
import fmon.util.YamlHelper import fmon.util.YamlHelper
import Effectiveness._
import TableColumn._ import TableColumn._
@ -37,10 +38,10 @@ class ObsElement(name_ : String, bgColor_ : Color = Color.Gray, fontColor_ : Col
val weak = new ObservableBuffer[ObsElement]() val weak = new ObservableBuffer[ObsElement]()
def asElement = { def asElement = {
def toMap(buffer: ObservableBuffer[ObsElement], mult: Double) = { def toMap(buffer: ObservableBuffer[ObsElement], mult: Effectiveness) = {
buffer.map(e => (e.name(), mult)).toMap buffer.map(e => (e.name(), mult)).toMap
} }
val effect = toMap(immune, 0.0) ++ toMap(resist, 0.5) ++ toMap(normal, 1.0) ++ toMap(weak, 2.0) val effect = toMap(immune, Immune) ++ toMap(resist, Resist) ++ toMap(normal, Regular) ++ toMap(weak, Weak)
new Element(name(), bgColor(), fontColor(), effect) new Element(name(), bgColor(), fontColor(), effect)
} }
@ -184,15 +185,12 @@ class ElementBuilder extends Savable {
es.foreach(eo => es.foreach(fo => { es.foreach(eo => es.foreach(fo => {
val e = elementMap(eo.name()) val e = elementMap(eo.name())
val f = elementMap(fo.name()) val f = elementMap(fo.name())
val mult = e <-- f e.effect.getOrElse(f.name, Regular) match {
if (mult < 0.1) { case Immune => eo.immune += fo
eo.immune += fo case Resist => eo.resist += fo
} else if (mult < 0.75) { case Regular => eo.normal += fo
eo.resist += fo case Weak => eo.weak += fo
} else if (mult < 1.25) { case _ => throw new IllegalArgumentException
eo.normal += fo
} else {
eo.weak += fo
} }
})) }))
elementList.clear() elementList.clear()

View File

@ -6,6 +6,9 @@ case class Config(
val title: String, val title: String,
val crit: Double, val crit: Double,
val stab: Double, val stab: Double,
val resistMult: Double,
val weakMult: Double,
val immuneMult: Double,
val maxBoost: Int val maxBoost: Int
) { ) {
@ -17,5 +20,8 @@ object Config {
def title = config.title def title = config.title
def crit = config.crit def crit = config.crit
def stab = config.stab def stab = config.stab
def resistMult = config.resistMult
def weakMult = config.weakMult
def immuneMult = config.immuneMult
def maxBoost = config.maxBoost def maxBoost = config.maxBoost
} }

View File

@ -1,5 +1,8 @@
title: FakeMon Engine Demo title: FakeMon Engine Demo
crit: 1.5 crit: 1.5
stab: 1.5 stab: 1.5
weakMult: 2.0
resistMult: 0.5
immuneMult: 0.0
maxBoost: 6 maxBoost: 6
newday: 02:00 newday: 02:00

View File

@ -1,16 +1,29 @@
package fmon.stat package fmon.stat
import com.fasterxml.jackson.module.scala.JsonScalaEnumeration
import scala.io.Source import scala.io.Source
import scalafx.scene.paint.Color import scalafx.scene.paint.Color
import fmon.util.YamlHelper import fmon._
import fmon.util._
case class Element(val name : String, val bgColor: Color, val fontColor: Color, val effect : Map[String, Double]) { object Effectiveness extends Enumeration {
case class Val protected(val mult: Double) extends super.Val
val Immune = Val(Config.immuneMult)
val Resist = Val(Config.resistMult)
val Regular = Val(1.0)
val Weak = Val(Config.weakMult)
}
class EffectivenessType extends TypeReference[Effectiveness.type]
case class Element(val name : String, val bgColor: Color, val fontColor: Color, @JsonScalaEnumeration(classOf[EffectivenessType]) val effect : Map[String, Effectiveness]) {
def -->(other : Element) = other <-- this def -->(other : Element) = other <-- this
def <--(other : Element) = effect.getOrElse(other.name, 1.0) def <--(other : Element) = effect.getOrElse(other.name, Effectiveness.Regular).mult
override def toString = name override def toString = name
} }

View File

@ -148,12 +148,17 @@ abstract class Move extends MoveTurn {
if (damageCallback != null) { if (damageCallback != null) {
damageCallback(user, this, target, reader, rng) damageCallback(user, this, target, reader, rng)
} else { } else {
val crit = critMultiplier(user, target)
println(crit)
val atkStat = if (category == MoveType.Physical) PAtk else MAtk val atkStat = if (category == MoveType.Physical) PAtk else MAtk
val defStat = if (category == MoveType.Physical) PDef else MDef val defStat = if (category == MoveType.Physical) PDef else MDef
val atk = if (crit > 1.0) Math.max(user(atkStat), user.stats(atkStat)) else user(atkStat)
val defense = if (crit > 1.0) Math.min(target(defStat), target.stats(defStat)) else user(defStat)
println(target(defStat), target.stats(defStat), defense)
val actualPow = if (powCallback != null) powCallback(user, this, target, reader, rng) else pow val actualPow = if (powCallback != null) powCallback(user, this, target, reader, rng) else pow
val baseDmg = (2 * user.level / 5 + 2) * actualPow * user(atkStat) / (target(defStat) * 50) + 2 val baseDmg = (2 * user.level / 5 + 2) * actualPow * atk / (defense * 50) + 2
val effectiveness = target.effectiveness(element) val effectiveness = target.effectiveness(element)
val multiplier = effectiveness * critMultiplier(user, target) * stabMultiplier(user) val multiplier = effectiveness * crit * stabMultiplier(user)
if (effectiveness > 1.0) { if (effectiveness > 1.0) {
reader ! Message("It's super effective!") reader ! Message("It's super effective!")
} else if (effectiveness < 1.0) { } else if (effectiveness < 1.0) {

View File

@ -11,12 +11,12 @@ object Statistic extends Enumeration {
val Evasion = Value("Evasion") val Evasion = Value("Evasion")
def apply(s : String) = s match { def apply(s : String) = s match {
case "hp" => Hp case "hp" | "Hp" => Hp
case "patk" => PAtk case "patk" | "PAtk" => PAtk
case "pdef" => PDef case "pdef" | "PDef" => PDef
case "matk" => MAtk case "matk" | "MAtk" => MAtk
case "mdef" => MDef case "mdef" | "MDef" => MDef
case "spd" => Speed case "spd" | "Spd" => Speed
case "acc" => Accuracy case "acc" => Accuracy
case "evd" => Evasion case "evd" => Evasion
} }

View File

@ -10,24 +10,24 @@ Normal:
green: 0.0 green: 0.0
blue: 0.0 blue: 0.0
effect: effect:
Normal: 1.0 Normal: Regular
Electric: 1.0 Electric: Regular
Poison: 1.0 Poison: Regular
Rock: 1.0 Rock: Regular
Flying: 1.0 Flying: Regular
Ghost: 0.0 Ghost: Immune
Ice: 1.0 Ice: Regular
Water: 1.0 Water: Regular
Fighting: 2.0 Fighting: Weak
Ground: 1.0 Ground: Regular
Steel: 1.0 Steel: Regular
Bug: 1.0 Bug: Regular
Fire: 1.0 Fire: Regular
Fairy: 1.0 Fairy: Regular
Dragon: 1.0 Dragon: Regular
Psychic: 1.0 Psychic: Regular
Grass: 1.0 Grass: Regular
Dark: 1.0 Dark: Regular
Electric: Electric:
name: "Electric" name: "Electric"
bgColor: bgColor:
@ -39,24 +39,24 @@ Electric:
green: 0.0 green: 0.0
blue: 0.0 blue: 0.0
effect: effect:
Normal: 1.0 Normal: Regular
Electric: 0.5 Electric: Resist
Poison: 1.0 Poison: Regular
Rock: 1.0 Rock: Regular
Flying: 0.5 Flying: Resist
Ghost: 1.0 Ghost: Regular
Ice: 1.0 Ice: Regular
Water: 1.0 Water: Regular
Fighting: 1.0 Fighting: Regular
Ground: 2.0 Ground: Weak
Steel: 0.5 Steel: Resist
Bug: 1.0 Bug: Regular
Fire: 1.0 Fire: Regular
Fairy: 1.0 Fairy: Regular
Dragon: 1.0 Dragon: Regular
Psychic: 1.0 Psychic: Regular
Grass: 1.0 Grass: Regular
Dark: 1.0 Dark: Regular
Poison: Poison:
name: "Poison" name: "Poison"
bgColor: bgColor:
@ -68,24 +68,24 @@ Poison:
green: 0.0 green: 0.0
blue: 0.0 blue: 0.0
effect: effect:
Normal: 1.0 Normal: Regular
Electric: 1.0 Electric: Regular
Poison: 0.5 Poison: Resist
Rock: 1.0 Rock: Regular
Flying: 1.0 Flying: Regular
Ghost: 1.0 Ghost: Regular
Ice: 1.0 Ice: Regular
Water: 1.0 Water: Regular
Fighting: 0.5 Fighting: Resist
Ground: 2.0 Ground: Weak
Steel: 1.0 Steel: Regular
Bug: 0.5 Bug: Resist
Fire: 1.0 Fire: Regular
Fairy: 0.5 Fairy: Resist
Dragon: 1.0 Dragon: Regular
Psychic: 2.0 Psychic: Weak
Grass: 0.5 Grass: Resist
Dark: 1.0 Dark: Regular
Rock: Rock:
name: "Rock" name: "Rock"
bgColor: bgColor:
@ -97,24 +97,24 @@ Rock:
green: 0.0 green: 0.0
blue: 0.0 blue: 0.0
effect: effect:
Normal: 0.5 Normal: Resist
Electric: 1.0 Electric: Regular
Poison: 0.5 Poison: Resist
Rock: 1.0 Rock: Regular
Flying: 0.5 Flying: Resist
Ghost: 1.0 Ghost: Regular
Ice: 1.0 Ice: Regular
Water: 2.0 Water: Weak
Fighting: 2.0 Fighting: Weak
Ground: 2.0 Ground: Weak
Steel: 2.0 Steel: Weak
Bug: 1.0 Bug: Regular
Fire: 0.5 Fire: Resist
Fairy: 1.0 Fairy: Regular
Dragon: 1.0 Dragon: Regular
Psychic: 1.0 Psychic: Regular
Grass: 2.0 Grass: Weak
Dark: 1.0 Dark: Regular
Flying: Flying:
name: "Flying" name: "Flying"
bgColor: bgColor:
@ -126,24 +126,24 @@ Flying:
green: 0.0 green: 0.0
blue: 0.0 blue: 0.0
effect: effect:
Normal: 1.0 Normal: Regular
Electric: 2.0 Electric: Weak
Poison: 1.0 Poison: Regular
Rock: 2.0 Rock: Weak
Flying: 1.0 Flying: Regular
Ghost: 1.0 Ghost: Regular
Ice: 2.0 Ice: Weak
Water: 1.0 Water: Regular
Fighting: 0.5 Fighting: Resist
Ground: 0.0 Ground: Immune
Steel: 1.0 Steel: Regular
Bug: 0.5 Bug: Resist
Fire: 1.0 Fire: Regular
Fairy: 1.0 Fairy: Regular
Dragon: 1.0 Dragon: Regular
Psychic: 1.0 Psychic: Regular
Grass: 0.5 Grass: Resist
Dark: 1.0 Dark: Regular
Ghost: Ghost:
name: "Ghost" name: "Ghost"
bgColor: bgColor:
@ -155,24 +155,24 @@ Ghost:
green: 0.0 green: 0.0
blue: 0.0 blue: 0.0
effect: effect:
Normal: 0.0 Normal: Immune
Electric: 1.0 Electric: Regular
Poison: 0.5 Poison: Resist
Rock: 1.0 Rock: Regular
Flying: 1.0 Flying: Regular
Ghost: 2.0 Ghost: Weak
Ice: 1.0 Ice: Regular
Water: 1.0 Water: Regular
Fighting: 0.0 Fighting: Immune
Ground: 1.0 Ground: Regular
Steel: 1.0 Steel: Regular
Bug: 0.5 Bug: Resist
Fire: 1.0 Fire: Regular
Fairy: 1.0 Fairy: Regular
Dragon: 1.0 Dragon: Regular
Psychic: 1.0 Psychic: Regular
Grass: 1.0 Grass: Regular
Dark: 2.0 Dark: Weak
Ice: Ice:
name: "Ice" name: "Ice"
bgColor: bgColor:
@ -184,24 +184,24 @@ Ice:
green: 0.0 green: 0.0
blue: 0.0 blue: 0.0
effect: effect:
Normal: 1.0 Normal: Regular
Electric: 1.0 Electric: Regular
Poison: 1.0 Poison: Regular
Rock: 2.0 Rock: Weak
Flying: 1.0 Flying: Regular
Ghost: 1.0 Ghost: Regular
Ice: 0.5 Ice: Resist
Water: 1.0 Water: Regular
Fighting: 2.0 Fighting: Weak
Ground: 1.0 Ground: Regular
Steel: 2.0 Steel: Weak
Bug: 1.0 Bug: Regular
Fire: 2.0 Fire: Weak
Fairy: 1.0 Fairy: Regular
Dragon: 1.0 Dragon: Regular
Psychic: 1.0 Psychic: Regular
Grass: 1.0 Grass: Regular
Dark: 1.0 Dark: Regular
Water: Water:
name: "Water" name: "Water"
bgColor: bgColor:
@ -213,24 +213,24 @@ Water:
green: 0.0 green: 0.0
blue: 0.0 blue: 0.0
effect: effect:
Normal: 1.0 Normal: Regular
Electric: 2.0 Electric: Weak
Poison: 1.0 Poison: Regular
Rock: 1.0 Rock: Regular
Flying: 1.0 Flying: Regular
Ghost: 1.0 Ghost: Regular
Ice: 0.5 Ice: Resist
Water: 0.5 Water: Resist
Fighting: 1.0 Fighting: Regular
Ground: 1.0 Ground: Regular
Steel: 0.5 Steel: Resist
Bug: 1.0 Bug: Regular
Fire: 0.5 Fire: Resist
Fairy: 1.0 Fairy: Regular
Dragon: 1.0 Dragon: Regular
Psychic: 1.0 Psychic: Regular
Grass: 2.0 Grass: Weak
Dark: 1.0 Dark: Regular
Fighting: Fighting:
name: "Fighting" name: "Fighting"
bgColor: bgColor:
@ -242,24 +242,24 @@ Fighting:
green: 0.0 green: 0.0
blue: 0.0 blue: 0.0
effect: effect:
Normal: 1.0 Normal: Regular
Electric: 1.0 Electric: Regular
Poison: 1.0 Poison: Regular
Rock: 0.5 Rock: Resist
Flying: 2.0 Flying: Weak
Ghost: 1.0 Ghost: Regular
Ice: 1.0 Ice: Regular
Water: 1.0 Water: Regular
Fighting: 1.0 Fighting: Regular
Ground: 1.0 Ground: Regular
Steel: 1.0 Steel: Regular
Bug: 0.5 Bug: Resist
Fire: 1.0 Fire: Regular
Fairy: 2.0 Fairy: Weak
Dragon: 1.0 Dragon: Regular
Psychic: 2.0 Psychic: Weak
Grass: 1.0 Grass: Regular
Dark: 0.5 Dark: Resist
Ground: Ground:
name: "Ground" name: "Ground"
bgColor: bgColor:
@ -271,24 +271,24 @@ Ground:
green: 0.0 green: 0.0
blue: 0.0 blue: 0.0
effect: effect:
Normal: 1.0 Normal: Regular
Electric: 0.0 Electric: Immune
Poison: 0.5 Poison: Resist
Rock: 0.5 Rock: Resist
Flying: 1.0 Flying: Regular
Ghost: 1.0 Ghost: Regular
Ice: 2.0 Ice: Weak
Water: 2.0 Water: Weak
Fighting: 1.0 Fighting: Regular
Ground: 1.0 Ground: Regular
Steel: 1.0 Steel: Regular
Bug: 1.0 Bug: Regular
Fire: 1.0 Fire: Regular
Fairy: 1.0 Fairy: Regular
Dragon: 1.0 Dragon: Regular
Psychic: 1.0 Psychic: Regular
Grass: 2.0 Grass: Weak
Dark: 1.0 Dark: Regular
Steel: Steel:
name: "Steel" name: "Steel"
bgColor: bgColor:
@ -300,24 +300,24 @@ Steel:
green: 0.0 green: 0.0
blue: 0.0 blue: 0.0
effect: effect:
Normal: 0.5 Normal: Resist
Electric: 1.0 Electric: Regular
Poison: 0.0 Poison: Immune
Rock: 0.5 Rock: Resist
Flying: 0.5 Flying: Resist
Ghost: 1.0 Ghost: Regular
Ice: 0.5 Ice: Resist
Water: 1.0 Water: Regular
Fighting: 2.0 Fighting: Weak
Ground: 2.0 Ground: Weak
Steel: 0.5 Steel: Resist
Bug: 0.5 Bug: Resist
Fire: 2.0 Fire: Weak
Fairy: 0.5 Fairy: Resist
Dragon: 0.5 Dragon: Resist
Psychic: 0.5 Psychic: Resist
Grass: 0.5 Grass: Resist
Dark: 1.0 Dark: Regular
Bug: Bug:
name: "Bug" name: "Bug"
bgColor: bgColor:
@ -329,24 +329,24 @@ Bug:
green: 0.0 green: 0.0
blue: 0.0 blue: 0.0
effect: effect:
Normal: 1.0 Normal: Regular
Electric: 1.0 Electric: Regular
Poison: 1.0 Poison: Regular
Rock: 2.0 Rock: Weak
Flying: 2.0 Flying: Weak
Ghost: 1.0 Ghost: Regular
Ice: 1.0 Ice: Regular
Water: 1.0 Water: Regular
Fighting: 0.5 Fighting: Resist
Ground: 0.5 Ground: Resist
Steel: 1.0 Steel: Regular
Bug: 1.0 Bug: Regular
Fire: 2.0 Fire: Weak
Fairy: 1.0 Fairy: Regular
Dragon: 1.0 Dragon: Regular
Psychic: 1.0 Psychic: Regular
Grass: 0.5 Grass: Resist
Dark: 1.0 Dark: Regular
Fire: Fire:
name: "Fire" name: "Fire"
bgColor: bgColor:
@ -358,24 +358,24 @@ Fire:
green: 0.0 green: 0.0
blue: 0.0 blue: 0.0
effect: effect:
Normal: 1.0 Normal: Regular
Electric: 1.0 Electric: Regular
Poison: 1.0 Poison: Regular
Rock: 2.0 Rock: Weak
Flying: 1.0 Flying: Regular
Ghost: 1.0 Ghost: Regular
Ice: 0.5 Ice: Resist
Water: 2.0 Water: Weak
Fighting: 1.0 Fighting: Regular
Ground: 2.0 Ground: Weak
Steel: 0.5 Steel: Resist
Bug: 0.5 Bug: Resist
Fire: 0.5 Fire: Resist
Fairy: 0.5 Fairy: Resist
Dragon: 1.0 Dragon: Regular
Psychic: 1.0 Psychic: Regular
Grass: 0.5 Grass: Resist
Dark: 1.0 Dark: Regular
Fairy: Fairy:
name: "Fairy" name: "Fairy"
bgColor: bgColor:
@ -387,24 +387,24 @@ Fairy:
green: 0.0 green: 0.0
blue: 0.0 blue: 0.0
effect: effect:
Normal: 1.0 Normal: Regular
Electric: 1.0 Electric: Regular
Poison: 2.0 Poison: Weak
Rock: 1.0 Rock: Regular
Flying: 1.0 Flying: Regular
Ghost: 1.0 Ghost: Regular
Ice: 1.0 Ice: Regular
Water: 1.0 Water: Regular
Fighting: 0.5 Fighting: Resist
Ground: 1.0 Ground: Regular
Steel: 2.0 Steel: Weak
Bug: 0.5 Bug: Resist
Fire: 1.0 Fire: Regular
Fairy: 1.0 Fairy: Regular
Dragon: 0.0 Dragon: Immune
Psychic: 1.0 Psychic: Regular
Grass: 1.0 Grass: Regular
Dark: 0.5 Dark: Resist
Dragon: Dragon:
name: "Dragon" name: "Dragon"
bgColor: bgColor:
@ -416,24 +416,24 @@ Dragon:
green: 0.0 green: 0.0
blue: 0.0 blue: 0.0
effect: effect:
Normal: 1.0 Normal: Regular
Electric: 0.5 Electric: Resist
Poison: 1.0 Poison: Regular
Rock: 1.0 Rock: Regular
Flying: 1.0 Flying: Regular
Ghost: 1.0 Ghost: Regular
Ice: 2.0 Ice: Weak
Water: 0.5 Water: Resist
Fighting: 1.0 Fighting: Regular
Ground: 1.0 Ground: Regular
Steel: 1.0 Steel: Regular
Bug: 1.0 Bug: Regular
Fire: 0.5 Fire: Resist
Fairy: 2.0 Fairy: Weak
Dragon: 2.0 Dragon: Weak
Psychic: 1.0 Psychic: Regular
Grass: 0.5 Grass: Resist
Dark: 1.0 Dark: Regular
Psychic: Psychic:
name: "Psychic" name: "Psychic"
bgColor: bgColor:
@ -445,24 +445,24 @@ Psychic:
green: 0.0 green: 0.0
blue: 0.0 blue: 0.0
effect: effect:
Normal: 1.0 Normal: Regular
Electric: 1.0 Electric: Regular
Poison: 1.0 Poison: Regular
Rock: 1.0 Rock: Regular
Flying: 1.0 Flying: Regular
Ghost: 2.0 Ghost: Weak
Ice: 1.0 Ice: Regular
Water: 1.0 Water: Regular
Fighting: 0.5 Fighting: Resist
Ground: 1.0 Ground: Regular
Steel: 1.0 Steel: Regular
Bug: 2.0 Bug: Weak
Fire: 1.0 Fire: Regular
Fairy: 1.0 Fairy: Regular
Dragon: 1.0 Dragon: Regular
Psychic: 0.5 Psychic: Resist
Grass: 1.0 Grass: Regular
Dark: 2.0 Dark: Weak
Grass: Grass:
name: "Grass" name: "Grass"
bgColor: bgColor:
@ -474,24 +474,24 @@ Grass:
green: 0.0 green: 0.0
blue: 0.0 blue: 0.0
effect: effect:
Normal: 1.0 Normal: Regular
Electric: 0.5 Electric: Resist
Poison: 2.0 Poison: Weak
Rock: 1.0 Rock: Regular
Flying: 2.0 Flying: Weak
Ghost: 1.0 Ghost: Regular
Ice: 2.0 Ice: Weak
Water: 0.5 Water: Resist
Fighting: 1.0 Fighting: Regular
Ground: 0.5 Ground: Resist
Steel: 1.0 Steel: Regular
Bug: 2.0 Bug: Weak
Fire: 2.0 Fire: Weak
Fairy: 1.0 Fairy: Regular
Dragon: 1.0 Dragon: Regular
Psychic: 1.0 Psychic: Regular
Grass: 0.5 Grass: Resist
Dark: 1.0 Dark: Regular
Dark: Dark:
name: "Dark" name: "Dark"
bgColor: bgColor:
@ -503,21 +503,21 @@ Dark:
green: 0.0 green: 0.0
blue: 0.0 blue: 0.0
effect: effect:
Normal: 1.0 Normal: Regular
Electric: 1.0 Electric: Regular
Poison: 1.0 Poison: Regular
Rock: 1.0 Rock: Regular
Flying: 1.0 Flying: Regular
Ghost: 0.5 Ghost: Resist
Ice: 1.0 Ice: Regular
Water: 1.0 Water: Regular
Fighting: 2.0 Fighting: Weak
Ground: 1.0 Ground: Regular
Steel: 1.0 Steel: Regular
Bug: 2.0 Bug: Weak
Fire: 1.0 Fire: Regular
Fairy: 2.0 Fairy: Weak
Dragon: 1.0 Dragon: Regular
Psychic: 0.0 Psychic: Immune
Grass: 1.0 Grass: Regular
Dark: 0.5 Dark: Resist

View File

@ -8,6 +8,7 @@ import fmon.util.Dice
package object stat { package object stat {
type Stat = Statistic.Value type Stat = Statistic.Value
type Effectiveness = Effectiveness.Val
type EffectType = EffectType.Value type EffectType = EffectType.Value
type MoveType = MoveType.Value type MoveType = MoveType.Value
type Gender = Gender.Value type Gender = Gender.Value