def pbTypeModifier(type,attacker,opponent)
return 4 if type<0
return 4 if isConst?(type,PBTypes,:GROUND) && opponent.pbHasType?(:FLYING) &&
isConst?(opponent.item,PBItems,:IRONBALL)
atype=type # attack type
otype1=opponent.type1
otype2=opponent.type2
otype3=opponent.type3
if isConst?(otype1,PBTypes,:FLYING) && opponent.effects[PBEffects::Roost]
if isConst?(otype2,PBTypes,:FLYING)
otype1=getConst(PBTypes,:NORMAL) || 0
else
otype1=otype2
end
end
if isConst?(otype2,PBTypes,:FLYING) && opponent.effects[PBEffects::Roost]
otype2=otype1
end
mod1=PBTypes.getEffectiveness(atype,otype1)
mod2=(otype1==otype2) ? 2 : PBTypes.getEffectiveness(atype,otype2)
mod3=1
if not otype3==nil
mod3=PBTypes.getEffectiveness(atype,otype3)
end
if isConst?(opponent.item,PBItems,:RINGTARGET)
mod1=2 if mod1==0
mod2=2 if mod2==0
mod3=2 if mod3==0
end
if isConst?(attacker.ability,PBAbilities,:SCRAPPY) ||
opponent.effects[PBEffects::Foresight]
mod1=2 if isConst?(otype1,PBTypes,:GHOST) &&
(isConst?(atype,PBTypes,:NORMAL) || isConst?(atype,PBTypes,:FIGHTING))
mod2=2 if isConst?(otype2,PBTypes,:GHOST) &&
(isConst?(atype,PBTypes,:NORMAL) || isConst?(atype,PBTypes,:FIGHTING))
mod3=2 if isConst?(otype3,PBTypes,:GHOST) &&
(isConst?(atype,PBTypes,:NORMAL) || isConst?(atype,PBTypes,:FIGHTING))
end
if opponent.effects[PBEffects::Ingrain] ||
opponent.effects[PBEffects::SmackDown] ||
attacker.pbOwnSide.effects[PBEffects::Gravity]>0 ||
attacker.pbOpposingSide.effects[PBEffects::Gravity]>0
mod1=2 if isConst?(otype1,PBTypes,:FLYING) && isConst?(atype,PBTypes,:GROUND)
mod2=2 if isConst?(otype2,PBTypes,:FLYING) && isConst?(atype,PBTypes,:GROUND)
mod1=2 if isConst?(otype3,PBTypes,:FLYING) && isConst?(atype,PBTypes,:GROUND)
end
if opponent.effects[PBEffects::MiracleEye]
mod1=2 if isConst?(otype1,PBTypes,:DARK) && isConst?(atype,PBTypes,:PSYCHIC)
mod2=2 if isConst?(otype2,PBTypes,:DARK) && isConst?(atype,PBTypes,:PSYCHIC)
mod3=2 if isConst?(otype3,PBTypes,:DARK) && isConst?(atype,PBTypes,:PSYCHIC)
end
return mod1*mod2*mod3
end