# Adds an additional type to the attack
def FieldTypeChange(attacker,opponent,typemod,absorbtion=false)
case $fefieldeffect
when 1 # Electric Field
if (id == PBMoves::EXPLOSION || id == PBMoves::SELFDESTRUCT ||
id == PBMoves::SMACKDOWN || id == PBMoves::SURF ||
id == PBMoves::MUDDYWATER || id == PBMoves::HURRICANE ||
id == PBMoves::THOUSANDARROWS)
typemod2=pbTypeModifier(PBTypes::ELECTRIC,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::ELECTRIC
end
when 3 # Misty Terrain
if isConst?(type,PBTypes,:WATER)
typemod2=pbTypeModifier(PBTypes::FAIRY,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::FAIRY
end
when 4 # Dark Crystal Cavern
if isConst?(type,PBTypes,:GHOST)
typemod2=pbTypeModifier(PBTypes::DARK,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::DARK
end
when 5 # Chess Field
if (id == PBMoves::STRENGTH || id == PBMoves::PSYCHIC ||
id == PBMoves::ANCIENTPOWER)
typemod2=pbTypeModifier(PBTypes::ROCK,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::ROCK
end
if ($fecounter%6 == 2 || @battle.field.effects[PBEffects::PrevFECounter]%6 == 2 &&
attacker.hasWorkingAbility(:SKILLLINK)) && @battle.doublebattle # Queen (Doubles)
temptypemod = typemod
temptypemod = 16 if typemod == 4
temptypemod = 32 if typemod == 2
temptypemod = 64 if typemod <= 1
temptypemod = 4 if typemod == 16
temptypemod = 2 if typemod == 32
temptypemod = 1 if typemod == 64
typemod = temptypemod
end
when 7 # Burning Field
if (id == PBMoves::SMACKDOWN || id == PBMoves::THOUSANDARROWS ||
id == PBMoves::ROCKSLIDE || id == PBMoves::SMOG ||
id == PBMoves::CLEARSMOG)
typemod2=pbTypeModifier(PBTypes::FIRE,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::FIRE
end
if isConst?(type,PBTypes,:ROCK)
typemod2=pbTypeModifier(PBTypes::FIRE,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::FIRE
end
when 8 # Swamp Field
if (id == PBMoves::SMACKDOWN)
typemod2=pbTypeModifier(PBTypes::WATER,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::WATER
end
if isConst?(type,PBTypes,:GROUND)
typemod2=pbTypeModifier(PBTypes::WATER,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::WATER
end
when 9 # Rainbow Field
if isConst?(type,PBTypes,:NORMAL) && !pbIsPhysical?(pbType(@type,attacker,opponent))
if attacker.hasWorkingAbility(:SKILLLINK)
for i in 1...18 # Excludes Normal/Shadow/Fairy, but includes ???
if i == PBTypes::QMARKS
typemod2=pbTypeModifier(PBTypes::FAIRY,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
else
typemod2=pbTypeModifier(i,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
end
end
typeChange=rand(20) # Purely for Type Effectiveness Display
else
randoms=[]
[email protected](17) # 0 is Normal, 9 is ???, 18 is Shadow, 19 is Fairy
if rand == PBTypes::QMARKS
randoms.push(PBTypes::FAIRY)
else
randoms.push(rand)
end
typemod2=pbTypeModifier(randoms[0],attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=randoms[0]
end
end
when 10 # Corrosive Field
if isConst?(type,PBTypes,:GRASS)
typemod2=pbTypeModifier(PBTypes::POISON,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::POISON
end
if (id == PBMoves::SMACKDOWN || id == PBMoves::MUDDYWATER ||
id == PBMoves::WHIRLPOOL)
typemod2=pbTypeModifier(PBTypes::POISON,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::POISON
end
if isConst?(type,PBTypes,:GROUND)
typemod2=pbTypeModifier(PBTypes::POISON,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::POISON
end
when 11 # Corrosive Mist Field
if isConst?(type,PBTypes,:FLYING) &&
!pbIsPhysical?(pbType(@type,attacker,opponent))
typemod2=pbTypeModifier(PBTypes::POISON,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::POISON
end
if (id == PBMoves::BUBBLE || id == PBMoves::BUBBLEBEAM ||
id == PBMoves::ENERGYBALL || id == PBMoves::SPARKLINGARIA)
typemod2=pbTypeModifier(PBTypes::POISON,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::POISON
end
when 14 # Rocky Field
if (id == PBMoves::ROCKCLIMB || id == PBMoves::EARTHQUAKE ||
id == PBMoves::MAGNITUDE || id == PBMoves::STRENGTH ||
id == PBMoves::BULLDOZE)
typemod2=pbTypeModifier(PBTypes::ROCK,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::ROCK
end
when 15 # Forest Field
if (id == PBMoves::CUT || id == PBMoves::AIRSLASH ||
id == PBMoves::SLASH || id == PBMoves::PSYCHOCUT ||
id == PBMoves::FURYCUTTER || id == PBMoves::AIRCUTTER)
typemod2=pbTypeModifier(PBTypes::GRASS,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::GRASS
end
when 16 # Volcanic Top
if isConst?(type,PBTypes,:ROCK)
typemod2=pbTypeModifier(PBTypes::FIRE,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::FIRE
end
if (id == PBMoves::EXPLOSION || id == PBMoves::SELFDESTRUCT ||
id == PBMoves::MAGNETBOMB || id == PBMoves::EGGBOMB ||
id == PBMoves::DIVE || id == PBMoves::SEISMICTOSS ||
id == PBMoves::SEISMICTOSS || id == PBMoves::DIG)
typemod2=pbTypeModifier(PBTypes::FIRE,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::FIRE
end
if (id == PBMoves::OMINOUSWIND || id == PBMoves::SILVERWIND ||
id == PBMoves::RAZORWIND || id == PBMoves::ICYWIND ||
id == PBMoves::GUST || id == PBMoves::TWISTER ||
id == PBMoves::PRECIPICEBLADES || id == PBMoves::SMOG ||
id == PBMoves::CLEARSMOG)
typemod2=pbTypeModifier(PBTypes::FIRE,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::FIRE
end
when 17 # Factory Field
if attacker.hasWorkingAbility(:IRONFIST) && isPunchingMove?
typemod2=pbTypeModifier(PBTypes::STEEL,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::STEEL
end
when 18 # Shortcircuit Field
if (id == PBMoves::SURF || id == PBMoves::MUDDYWATER ||
id == PBMoves::MAGNETBOMB || id == PBMoves::GYROBALL ||
id == PBMoves::FLASHCANNON || id == PBMoves::GEARGRIND)
typemod2=pbTypeModifier(PBTypes::ELECTRIC,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::ELECTRIC
end
if isConst?(type,PBTypes,:STEEL) && attacker.hasWorkingAbility(:STEELWORKER)
typemod2=pbTypeModifier(PBTypes::ELECTRIC,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::ELECTRIC
end
when 19 # Wasteland Field
if (id == PBMoves::MUDBOMB || id == PBMoves::MUDSLAP ||
id == PBMoves::MUDSHOT)
typemod2=pbTypeModifier(PBTypes::POISON,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::POISON
end
if isConst?(type,PBTypes,:PSYCHIC)
typemod2=pbTypeModifier(PBTypes::POISON,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::POISON
end
when 20 # Ashen Beach
if (id == PBMoves::STRENGTH)
typemod2=pbTypeModifier(PBTypes::PSYCHIC,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::PSYCHIC
end
when 22 # Underwater
if isConst?(type,PBTypes,:GROUND)
typemod2=pbTypeModifier(PBTypes::WATER,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::WATER
end
when 25 # Crystal Cavern
if isConst?(type,PBTypes,:ROCK) || (id == PBMoves::JUDGMENT ||
id == PBMoves::ROCKCLIMB || id == PBMoves::STRENGTH ||
id == PBMoves::MULTIATTACK || id == PBMoves::PRISMATICLASER)
if attacker.hasWorkingAbility(:SKILLLINK)
crystalTypes = [PBTypes::WATER,PBTypes::GRASS,PBTypes::FIRE,PBTypes::PSYCHIC,
PBTypes::FAIRY,PBTypes::GHOST,PBTypes::ELECTRIC]
for t in crystalTypes
typemod2=pbTypeModifier(i,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
end
typeChange=crystalTypes[@battle.pbRandom(7)] # Purely for Type Effectiveness Display
else
randtype = @battle.pbRandom(7)
case randtype
when 0
typemod2=pbTypeModifier(PBTypes::ELECTRIC,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::ELECTRIC
when 1
typemod2=pbTypeModifier(PBTypes::WATER,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::WATER
when 2
typemod2=pbTypeModifier(PBTypes::GRASS,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::GRASS
when 3
typemod2=pbTypeModifier(PBTypes::FIRE,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::FIRE
when 4
typemod2=pbTypeModifier(PBTypes::PSYCHIC,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::PSYCHIC
when 5
typemod2=pbTypeModifier(PBTypes::FAIRY,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::FAIRY
when 6
typemod2=pbTypeModifier(PBTypes::GHOST,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::GHOST
end
end
end
when 26 # Murkwater Surface
if isConst?(type,PBTypes,:WATER) || isConst?(type,PBTypes,:GROUND)
typemod2=pbTypeModifier(PBTypes::POISON,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::POISON
end
if id == PBMoves::SLUDGEWAVE
typemod2=pbTypeModifier(PBTypes::WATER,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::WATER
end
when 28 # Snowy Mountain
if isConst?(type,PBTypes,:ROCK)
typemod2=pbTypeModifier(PBTypes::ICE,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::ICE
end
when 29 # Holy Field
=begin
if (id == PBMoves::MULTIPULSE)
!pbIsPhysical?(pbType(@type,attacker,opponent)) # Rainbow Field
randoms=[]
rand=1+rand(17)
randoms.push(rand)
typemod2=pbTypeModifier(randoms[0],attacker,opponent)
typemod3= ((typemod*typemod2) * 0.25).ceil
typemod=typemod3
typeChange=randoms[0]
end
=end
when 31 # Fairy Tale
if isConst?(type,PBTypes,:FIRE)
typemod2=pbTypeModifier(PBTypes::DRAGON,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::DRAGON
end
when 32 # Dragon's Den
if (id == PBMoves::SMACKDOWN || id == PBMoves::THOUSANDARROWS)
typemod2=pbTypeModifier(PBTypes::FIRE,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::FIRE
end
when 34 # Starlight Arena
if isConst?(type,PBTypes,:DARK)
typemod2=pbTypeModifier(PBTypes::FAIRY,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::FAIRY
end
when 36 # Inverse Field
if !attacker.hasWorkingAbility([:SIMPLE,:UNAWARE,:AURABREAK,:INFILTRATOR]) &&
!opponent.hasWorkingAbility([:SIMPLE,:UNAWARE,:AURABREAK])
temptypemod = typemod
temptypemod = 16 if typemod == 4
temptypemod = 32 if typemod == 2
temptypemod = 64 if typemod <= 1
temptypemod = 4 if typemod == 16
temptypemod = 2 if typemod == 32
temptypemod = 1 if typemod == 64
typemod = temptypemod
end
when 37 # Psychic Terrain
if (id == PBMoves::STRENGTH || id == PBMoves::ANCIENTPOWER ||
id == PBMoves::DRAGONPULSE|| id == PBMoves::WATERPULSE)
typemod2=pbTypeModifier(PBTypes::PSYCHIC,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::PSYCHIC
end
when 39 # Angie
if (id == PBMoves::SURF || id == PBMoves::WATERPULSE ||
id == PBMoves::DARKPULSE || id == PBMoves::NIGHTSLASH ||
id == PBMoves::HYDROPUMP|| id == PBMoves::MUDDYWATER)
typemod2=pbTypeModifier(PBTypes::ICE,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::ICE
end
when 40 # Haunted
if (id == PBMoves::FLAMECHARGE || id == PBMoves::FLAMEBURST ||
id == PBMoves::FIRESPIN || id == PBMoves::INFERNO)
typemod2=pbTypeModifier(PBTypes::GHOST,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::GHOST
end
when 41 # Corrupted Cave
if (id == PBMoves::ROCKSLIDE || id == PBMoves::SMACKDOWN ||
id == PBMoves::STONEEDGE|| id == PBMoves::ROCKTOMB)
typemod2=pbTypeModifier(PBTypes::POISON,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::POISON
end
if (id == PBMoves::GUNKSHOT || id == PBMoves::SLUDGEWAVE)
typemod2=pbTypeModifier(PBTypes::ROCK,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::ROCK
end
when 43 # Sky Field
if (id == PBMoves::DIVE || id == PBMoves::TWISTER)
typemod2=pbTypeModifier(PBTypes::FLYING,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::FLYING
end
when 46 # Subzero
if (id == PBMoves::GUST || id == PBMoves::RAZORWIND || id == PBMoves::SILVERWIND || id == PBMoves::OMINOUSWIND || id == PBMoves::FAIRYWIND)
typemod2=pbTypeModifier(PBTypes::ICE,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::ICE
end
if isConst?(type,PBTypes,:GROUND)
typemod2=pbTypeModifier(PBTypes::ICE,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::ICE
end
when 48 # Beach
if (id == PBMoves::STRENGTH)
typemod2=pbTypeModifier(PBTypes::PSYCHIC,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::PSYCHIC
end
if (id == PBMoves::MUDSHOT || id == PBMoves::MUDSLAP || id == PBMoves::MUDBOMB)
typemod2=pbTypeModifier(PBTypes::WATER,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::WATER
end
if (id == PBMoves::MUDDYWATER)
typemod2=pbTypeModifier(PBTypes::GROUND,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::GROUND
end
when 49 # Xeric Shrubland
if isConst?(type,PBTypes,:ROCK)
typemod2=pbTypeModifier(PBTypes::GROUND,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::GROUND
end
if isConst?(type,PBTypes,:ICE)
typemod2=pbTypeModifier(PBTypes::WATER,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::WATER
end
if (id == PBMoves::ICYWIND || id == PBMoves::OMINOUSWIND ||
id == PBMoves::SILVERWIND || id == PBMoves::RAZORWIND ||
id == PBMoves::FAIRYWIND || id == PBMoves::AEROBLAST ||
id == PBMoves::TWISTER || id == PBMoves::HURRICANE || id == PBMoves::GUST)
typemod2=pbTypeModifier(PBTypes::GROUND,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::GROUND
end
end
if attacker.hasWorkingAbility(:KICKIGNITION) && isKickingMove? && !pbType == PBTypes::FIRE
typemod2=pbTypeModifier(PBTypes::FIRE,attacker,opponent)
typemod3= ((typemod*typemod2) * 0.125).ceil
typemod=typemod3
typeChange=PBTypes::FIRE
end
if absorbtion
return typeChange
else
return typemod
end
end