Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;!dmg attacking(pokemon) IVs EVs(+/-) Level Ability: @Item | defending(pokemon) IVs EVs± Level Ability: @Item | Move | Extra
- /*
- */
- on $*:TEXT:/^!dmg( (help))?$/:*: {
- var %window = $iif($chan, $chan, $nick)
- msg %window !dmg Attacker IVs EVs± <Level> <Ability> <@Item> <Boosts> $(|) Target IVs EVs± <Level> <Ability> <@Item> <Boosts> $(|) Move $(|) Extras
- msg %window Conditions: (Prefix with -) View all with !dmg Extras. i.e -Stealth Rock, -Flower Gift
- msg %window suffix +/- at the end of EVs to specify Nature.; Ways to minimize input can be found in !dmg tips
- }
- on $*:TEXT:/^!dmg (tips|extras)$/:*: {
- var %window = $iif($chan == $null, $nick, $chan)
- if ($2 == tips) {
- msg %window IVs of 31 and 0 can be substituted with + or -, Both Pokemon are assumed to be Level 100
- msg %window -weather(x) can be substituted with -x, -Stealth Rock can be abbreviated -SR and -Spikes(#) can be abbreviated -S#
- msg %window You can abbreviate a pokemon's ability with Abi0, Abi1, or AbiDW.
- msg %window You can use the highest base power for a varying base power move by adding the -MaxBP condition.
- msg %window Typing VGC after !dmg will assume both pokemon are level 50 unless otherwise specified.
- return
- }
- else if ($2 == Extras) {
- msg %window List of extras: Seperate multiple parameters with "-"
- msg %window Crit, Charge, Weather(), Spread [if more than 1 target], Screen [Reflect/Light Screen], Flower Gift
- msg %window Friend Guard, Retaliate, Flash Fire, Fusion [for fusion moves], Slow Start, Moved Last, Wonder Room
- msg %window TargetStatus(), UserStatus(), Mud Sport, Water Sport, Stealth Rock, Spikes(#), Helping Hand, MaxBP
- ;TargetHP(Fraction), UserHP(Fraction),
- return
- }
- }
- ; !dmg [setting] Atacker IVs EVs [Level] Boost Ability @Item
- on *:TEXT:!dmg *|*|*:*: {
- var %window = $iif($chan,$chan,$nick)
- if ($findTok(TS VGC LC RAND, $2, 32)) { var %dmg.setting = $2, %input = $3-, %autoLevel = $getTok(100 50 5 R, $v1, 32) }
- else { var %dmg.setting = $false, %input = $2-, %autoLevel = 100 }
- ; Some Move Stuff
- var %move = $toID($gettok(%input, 3, 124)), %cat = $move(%move).category, %extra = $gettok(%input, 4, 124)
- if (!$move(%move).basePower) { msg %window %move is not a valid damaging move. | return }
- /* TODO: Randbat Damage Calc
- if (%dmg.setting == RAND) {
- ;----------| Attacking Pokemon Stat
- tokenize 32 $gettok(%input,1,124)
- var %attacker = $toID($1).pkm
- if (!$isPokemon(%attacker)) { msg %window $1 is not a Pokemon | return }
- var %attackerName = $pokemon(%attacker).species, %atk = $iif(%cat == Physical, atk, spa), %$2_Is_Level = $iif(($2 isnum 1-100) && (+* !iswm $2) && (-* !iswm $2),$true,$false), %attackerLevel = $iif(%$2_Is_Level,$2,$randlevel(%attacker))
- var %atkEVs = 84, %atkivs = 31, %attackStat = $stat($($!pokemon(%attacker). $+ %atk, 2),%atkIVs,%atkEVs,%attackerLevel)
- var %attackerInfo = $iif(%$2_Is_Level, $3-, $2-)
- if (!%attackBoost) {
- if ($wildTok(%attackerInfo, +*, 1, 32)) { var %attackBoost = $v1, %attackerInfo = $remtok(%attackerInfo,%attackBoost,1,32) }
- elseif ($wildTok(%attackerInfo, -*, 1, 32)) { var %attackBoost = $v1, %attackerInfo = $remtok(%attackerInfo,%attackBoost,1,32) }
- else { var %attackBoost = 0 }
- }
- else { %attackerInfo = $remtok(%attackerInfo,%attackBoost,1,32) }
- if ($wildtok(%attackerInfo,@*,1,32)) { var %attackerItem = $right($gettok(%attackerInfo,$+($findtok(%attackerInfo, $v1, 1, 32),-),32), -1), %attackerAbility = $remove(%attackerInfo,%attackerItem,@) }
- ;if ($nick == V4) { msg %window %attackerInfo | halt }
- if ($regex(userabi,%attackerAbility,/Abi(lity)?([01]|DW)/)) { var %attackerAbility = $($!pokemon(%attacker).ability $+ $regml(userabi,1), 2) }
- if (%attackerItem == No Item) { var %attackerItem = $false }
- if (%attackerAbility == $null) { %attackerAbility = $sorttok() }
- ;----------| Defending Pokemon Stats
- tokenize 32 $gettok(%input,2,124)
- var %defender = $toID($1).pkm
- if (!$isPokemon(%defender)) { msg %window $1 is not a pokemon | return }
- var %defenderName = $pokemon(%defender).species, %def = $iif(%cat == Physical || $move(%move).shortdesc == $move(psystrike).shortdesc, def, spd)
- var %hpIVs = $typo($gettok($2,1,47)).iv, %defIVs = $typo($iif(/ isin $2,$gettok($2,2,47),$2)).iv, %$4_Is_Level = $iif(($4 isnum 1-100) && (+* !iswm $4) && (-* !iswm $4),$true,$false), %defenderLevel = $iif(%$4_Is_Level,$4,$iif(%autolevel !isnum, $randlevel(%user), $v1))
- var %EVs = $3, %hpEVs = $gettok(%EVs,1,47), %defEVs = $gettok(%EVs,$numtok(%EVs,47),47), %maxHP = $stat($pokemon(%defender).HP,%hpIVs,%hpEVs,%defenderLevel).hp, %defenseStat = $stat($($!pokemon(%defender). $+ %def, 3),%defIVs,%defEVs,%defenderLevel)
- var %defenderInfo = $iif(%$4_Is_Level, $5-, $4-)
- if (!%defenseBoost) {
- if ($wildTok(%defenderInfo, +*, 1, 32)) { var %defenseBoost = $v1, %defenderInfo = $remtok(%defenderInfo,%defenseBoost,1,32) }
- elseif ($wildTok(%defenderInfo, -*, 1, 32)) { var %defenseBoost = $v1, %defenderInfo = $remtok(%defenderInfo,%defenseBoost,1,32) }
- else { var %defenseBoost = 0 }
- }
- else { %defenderInfo = $remtok(%defenderInfo,%defenseBoost,1,32) }
- if ($wildtok(%defenderInfo,@*,1,32)) { var %defenderItem = $right($gettok(%defenderInfo,$+($findtok(%defenderInfo, $v1, 1, 32),-),32), -1), %defenderAbility = $remove(%defenderInfo,%defenderItem,@) }
- if ($regex(targetabi,%defenderAbility,/Abi(lity)?([01]|DW)/)) { var %defenderAbility = $($!pokemon(%defender).ability $+ $regml(targetabi,1)) }
- if (%defenderItem == No Item) { var %defenderItem = $false }
- }
- */
- ;----------| Attacking Pokemon Stat
- tokenize 32 $gettok(%input,1,124)
- var %attacker = $toID($1).pkm
- if (!$isPokemon(%attacker)) { msg %window $1 is not a Pokemon | return }
- var %attackerName = $pokemon(%attacker).species, %atk = $iif(%cat == Physical, atk, spa), %$4_Is_Level = $iif(($4 isnum) && (+* !iswm $4) && (-* !iswm $4),$true,$false), %attackerLevel = $iif(%$4_Is_Level,$4,$iif(%autolevel !isnum, $randlevel(%attacker), $v1))
- var %atkEVs = $iif($remove($3,+,-) isnum, $3, $2), %atkivs = $iif($remove($3,+,-) isnum, 31, $2)
- var %tierShift = $iif(%dmg.setting != TS, 0, $gettok(5 5 10 10 15 15 15, $findtok(BL UU BL2 RU BL3 NU NFE, $pokemon(%pokemon).tier, 1, 32), 32)), %attackStat = $stat($calc($($!pokemon(%attacker). $+ %atk, 2) + %tierShift),%atkIVs,%atkEVs,%attackerLevel)
- var %attackerInfo = $iif(%$4_Is_Level, $5-, $4-)
- if (!%attackBoost) {
- if ($wildTok(%attackerInfo, +*, 1, 32)) { var %attackBoost = $v1, %attackerInfo = $remtok(%attackerInfo,%attackBoost,1,32) }
- elseif ($wildTok(%attackerInfo, -*, 1, 32)) { var %attackBoost = $v1, %attackerInfo = $remtok(%attackerInfo,%attackBoost,1,32) }
- else { var %attackBoost = 0 }
- }
- else { %attackerInfo = $remtok(%attackerInfo,%attackBoost,1,32) }
- if ($wildtok(%attackerInfo,@*,1,32)) { var %attackerItem = $right($gettok(%attackerInfo,$+($findtok(%attackerInfo, $v1, 1, 32),-),32), -1), %attackerAbility = $remove(%attackerInfo,%attackerItem,@) }
- else { var %attackerItem = $false, %attackerAbility = %attackerInfo }
- ;if ($nick == V4) { msg %window %attackerInfo | halt }
- if ($regex(userabi,%attackerAbility,/Abi(lity)?([01]|DW)/)) { var %attackerAbility = $($!pokemon(%attacker).ability $+ $regml(userabi,1)) }
- if (%attackerItem == No Item) { var %attackerItem = $false }
- ;----------| Defending Pokemon Stats
- tokenize 32 $gettok(%input,2,124)
- var %defender = $toID($1).pkm
- if (!$isPokemon(%defender)) { msg %window $1 is not a pokemon | return }
- var %defenderName = $pokemon(%defender).species, %def = $iif(%cat == Physical || $move(%move).shortdesc == $move(psystrike).shortdesc, def, spd)
- var %hpIVs = $typo($gettok($2,1,47)).iv, %defIVs = $typo($iif(/ isin $2,$gettok($2,2,47),$2)).iv, %$4_Is_Level = $iif(($4 isnum) && (+* !iswm $4) && (-* !iswm $4),$true,$false), %defenderLevel = $iif(%$4_Is_Level,$4,$iif(%autolevel !isnum, $randlevel(%user), $v1))
- var %EVs = $3, %hpEVs = $gettok(%EVs,1,47), %defEVs = $gettok(%EVs,$numtok(%EVs,47),47), %maxHP = $stat($pokemon(%defender).HP,%hpIVs,%hpEVs,%defenderLevel).hp, %defenseStat = $stat($($!pokemon(%defender). $+ %def, 3),%defIVs,%defEVs,%defenderLevel)
- var %defenderInfo = $iif(%$4_Is_Level, $5-, $4-)
- if (!%defenseBoost) {
- if ($wildTok(%defenderInfo, +*, 1, 32)) { var %defenseBoost = $v1, %defenderInfo = $remtok(%defenderInfo,%defenseBoost,1,32) }
- elseif ($wildTok(%defenderInfo, -*, 1, 32)) { var %defenseBoost = $v1, %defenderInfo = $remtok(%defenderInfo,%defenseBoost,1,32) }
- else { var %defenseBoost = 0 }
- }
- else { %defenderInfo = $remtok(%defenderInfo,%defenseBoost,1,32) }
- if ($wildtok(%defenderInfo,@*,1,32)) { var %defenderItem = $right($gettok(%defenderInfo,$+($findtok(%defenderInfo, $v1, 1, 32),-),32), -1), %defenderAbility = $remove(%defenderInfo,%defenderItem,@) }
- else { var %defenderItem = $false, %defenderAbility = %defenderInfo }
- if ($regex(targetabi,%defenderAbility,/Abi(lity)?([01]|DW)/)) { var %defenderAbility = $($!pokemon(%defender).ability $+ $regml(targetabi,1)) }
- if (%defenderItem == No Item) { var %defenderItem = $false }
- :damage
- ; Get Damage
- var %damageNumbers = $dmg(%attacker, %attackStat, %attackBoost, %attackerLevel, %attackerAbility, %attackerItem, %defender, %defenseStat, %defenseBoost, %defenderAbility, %defenderItem, $gettok(%input, 3, 124), %extra)
- :display
- if (-Debug isin %extra) {
- var %output = msg %window
- %output %damageNumbers
- %output $~($dmg(%attacker, %attackStat, %attackBoost, %attackerLevel, %attackerAbility, %attackerItem, %defender, %defenseStat, %defenseBoost, %defenderAbility, %defenderItem, $gettok(%input, 3, 124), %extra), 0)
- %output %attacker , %attackStat , %attackBoost , %attackerLevel , %attackerAbility , %attackerItem , %defender , %defenseStat , %defenseBoost , %defenderAbility , %defenderItem , $gettok(%input,3,124) , %extra
- %output HP IVs: %hpIVs HP EVs: %hpEVs HP Stat: %maxHP
- }
- ; Display Damage
- tokenize 32 %damageNumbers
- var %minDamage = $1, %maxDamage = $16
- var %maxPercent = $round($calc(%maxDamage / %maxHP * 100),2), %minPercent = $round($calc(%minDamage / %maxHP * 100),2)
- msg %window $pokemon(%attacker).species $+ 's $move(%move).name vs $pokemon(%defender).species ( $+ %minDamage $chr(45) %maxdamage HP) Damage: %minPercent $+ % - %maxPercent $+ %
- ;$+(%moveName,$iif(%gklk, $+($chr(32),$chr(40),%originalPower,$chr(32),BP,$chr(41))))
- $iif(-Dmg# isin %extra, msg %window Damage Numbers: $1- )
- :error
- if ($error) { msg %window $error }
- }
- /*
- ; Get Attacker Input
- tokenize 32 $gettok(%input, 1, 124)
- var %attacker = $toID($1), %attackerLevel = $iif($isTok(- +, $left($4,1), 32),%autolevel,$4), %attackStat = $stat($($!pokemon(%attacker). $+ $iif($move($toID($gettok(%input, 3, 124))).category == Special, SpA, Atk)),$2,$3,%attackerLevel)
- ; Get Defender Input
- */
- alias dmg {
- if (!$isID) { return }
- if ($prop == syntax) { return $ $+ dmg(Attacker, Attack Stat, Attack Boosts, Attack Level, Attack Ability, Attack Item, Defender, Defense Stat, Defense Boosts, Defend Ability, Defend Item, Move, Extras) }
- if ($prop == reload) { .timer -m 1 200 reload -rs $script | return }
- if (return(*) iswm $prop) { var %return = $replace($isolate($prop),$chr(44),$chr(32)) }
- ;----------| Attacking Pokemon Stat
- var %user = $toID($1), %userName = $pokemon(%pokemon).species, %userLevel = $4, %atkStat = $2, %userAbility = $toID($5), %userItemID = $toID($6), %userItem = %userItemID, %atkboost = $3, %userType1 = $pokemon(%user).type1, %userType2 = $pokemon(%user).type2, %userTypes = %userType1 %userType2
- if ($regex(userabi,%userAbility,/^[Aa]bi(lity)? ?([01]|[Dd][Ww])$/)) { var %userAbility = $pokemon(%user).ability [ $+ [ $regml(userabi,1) ] ] }
- if (%userItem == $null) { var %userItem = $false }
- ;----------| Defending Pokemon Stats
- var %target = $toID($7), %targetName = $pokemon(%target).species, %defStat = $8, %defBoost = $9, %targetItemID = $toID($11), %targetItem = %targetItemID, %targetAbility = $toID($10), %targetType1 = $pokemon(%target).type1, %targetType2 = $pokemon(%target).type2, %targetTypes = %targetType1 %targetType2
- if ($regex(targetabi,%targetAbility,/Abi(lity)?([01]|DW)/)) { var %targetAbility = $~($!pokemon(%target).ability $+ $regml(targetabi,1), 2) }
- if (!%targetItem) { var %targetItem = $false }
- ;----------| Get Move Info
- var %move = $toID($12), %moveName = $move(%move).name
- if (!$move(%move).basePower && $move(%move).status) { return $str(0,16) }
- ; (Temporary) Assume max power for variable BP moves
- if ($istok(Return Frustration, %move, 32)) { var %power = 102 }
- elseif ($istok(WaterSpout Eruption GyroBall ElectroBall,%move, 32)) { var %power = 150 }
- var %cat = $move(%move).category, %movetype = $move(%move).type
- ;-----| Store Extra Parameters
- var %extra = $remove($13, $chr(32))
- var %leftovers = $iif(%targetItem == Leftovers,$true,$false)
- var %blackSludge = $iif((%targetItem == BlackSludge) && (%userTypes, Poison, 32), $true, $false)
- var %rolledDamage = $iif($wildTok(%extra,Dmg(*),1,45), $isolate($v1))
- var %crit = $iif($isTok(%extra,Crit,45) || $move(%move).shortdesc == Always results in a critical hit., $true, $false)
- var %maxBP = $iif($isTok(%extra,MaxBP,45), $true, $false)
- var %screen = $iif($isTok(%extra,Screen,45), $true, $false)
- var %spread = $iif($isTok(%extra,Spread,45), $true, $false)
- var %charge = $iif($isTok(%extra,Charge,45), $true, $false)
- var %waterSport = $iif($isTok(%extra,WaterSport,45), $true, $false)
- var %mudSport = $iif($isTok(%extra,MudSport,45), $true, $false)
- var %friendGuard = $iif($isTok(%extra,FriendGuard,45), $true, $false)
- var %movedLast = $iif($isTok(%extra,MovedLast,45), $true, $false)
- var %helpingHand = $iif($isTok(%extra,HelpingHand,45) || $isTok(%extra,HH,45), $true, $false)
- var %flashFire = $iif($isTok(%extra,FlashFire,45) || $isTok(%extra,FF,45), $true, $false)
- var %wonderRoom = $iif($isTok(%extra,WonderRoom,45) || $isTok(%extra,WR, 45), $true, $false)
- var %slowStart = $iif($isTok(%extra,SlowStart,45) || $isTok(%extra,SS,45), $true, $false)
- var %crisis = $iif($isTok(%extra,Crisis,45), $true, $false)
- var %stealthRock = $iif((($isTok(%extra, StealthRock, 45)) || (-SR isin %extra)) && (%targetAbility != Magic Guard), $true, $false)
- var %metronome = $iif($wildtok(%extra,Metronome(*),1,45), $isolate($v1), $v1)
- if (($wildtok(%extra,-Spikes(*),0,45)) && (%targetAbility != Magic Guard) && (%targetItem != Air Balloon)) {
- var %spikesEff = $iif($gettok(%userTypes, 2, 32), $type(Ground,$gettok(%userTypes, 1, 32)) * $type(Ground,$v1), $type(Ground,$gettok(%userTypes, 1, 32)))
- if (%spikesEff > 0) {
- var %layers = $isolate($wildtok(%extra,-Spikes(*),1,32))
- if (%layers isnum 1-3) { var %spikes = %layers }
- else { var %spikes = 3 }
- }
- else { var %spikes = $false }
- }
- if ($wildtok(%extra,-weather(*),1,45)) {
- var %weather = $remove($isolate($v1).parantheses, $chr(32))
- if ($findtok(Rain Sun Sand Hail Drizzle RainDance Drought SunnyDay Sandstorm SandStream SnowWarning, %weather, 32)) {
- %weather = $gettok(Rain Sun Sand Hail Rain Rain Sun Sun Sand Sand Hail, $v1, 32)
- }
- else { var %weather = $false }
- }
- else { var %weather = $false }
- if ($wildtok(%extra,UserStatus(*),1,45)) { var %userStatus = $replace($isolate($v1).parantheses,Burned,BRN,Burn,BRN,Poisoned,PSN,Poison,PSN,Paralyzed,PAR,Paralysis,PAR,Para,PAR) }
- else { var %userStatus = $false }
- if ($wildtok(%extra,TargetStatus(*),1,45)) { var %targetStatus = $replace($isolate($v1).parantheses,Burned,BRN,Burn,BRN,Poisoned,PSN,Poison,PSN,Paralyzed,PAR,Paralysis,PAR,Para,PAR) }
- else { var %targetStatus = $false }
- var %hazards = $iif((%stealthRock) || (%spikes), $true, $false)
- if (!%weather) { var %weather = $iif($isTok(%extra,Sun,45), Sun, $iif($isTok(%extra,Rain,45), Rain, $iif($isTok(%extra,Sand,45), Sand, $iif($isTok(%extra,Hail,45), Hail, $false)))) }
- ;-----| Modify Stats
- ;----------| Base Attacking Stat
- if (%targetAbility = Unaware) { var %atkboosts = 0 }
- ;----------| Apply Boosts
- if (%atkboost isnum 1-6) { var %atkStat = $int($calc(%atkStat * (2 + %atkboost) / 2)) }
- else if (%atkboost isnum -6--1) && (!%crit) { var %atkStat = $int($calc(%atkStat * 2 / (2 - %atkboost))) }
- ;throwDebug %atkStat
- ;----------| Apply Modifiers
- if (%targetAbility == ThickFat) && ($isTok(Fire Ice, %moveType, 32)) { var %mod1 = 800, %atkMods = %atkMods %mod1 }
- if (%userAbility) {
- if (%userAbility == Guts) && (%userStatus) { var %mod2 = 1800, %atkMods = %atkMods %mod2 }
- else if ($ability(%userAbility).shortdesc == When this Pokemon has 1/3 or less of its max HP, its %moveType attacks do 1.5x damage.) { var %mod2 = 1800, %atkMods = %atkMods %mod2 }
- ;$calc(%lowerHP / %maxHP) <= 1/2
- else if (%userAbility == Defeatist) && ($false) { var %mod2 = %800, %atkMods = %atkMods %mod2 }
- else if ($isTok(PurePower HugePower, %userAbility, 32)) { var %mod2 = 2000, %atkMods = %atkMods %mod2 }
- else if (%userAbility == SolarPower) { var %mod2 = 1800, %atkMods = %atkMods %mod2 }
- else if (%userAbility == Hustle) { var %atkStat = $mod(%atkStat,1800) }
- else if (%userAbility == FlashFire || !%userAbility) && (%flashFire) && (%moveType == Fire) { var %mod2 = 1800, %atkMods = %atkMods %mod2 }
- else if (%userAbility == SlowStart || !%userAbility) && (%slowStart) { var %mod2 = 800, %atkMods = %atkMods %mod2 }
- else if ((%userAbility == FlowerGift) && (%cat == Physical) && (%weather == Sun)) { var %mod2 = 1800, %atkMods = %atkMods %mod3 }
- }
- if (%userItem) {
- if ((%userItem == ThickClub) && (%cat == Physical) && ((%user == Cubone) || (%attacker == Marowak))) { var %mod4 = 2000, %atkMods = %atkMods %mod4 }
- elseif ((%userItem == DeepSeaTooth) && (%cat == Special) && (%user == Clamperl)) { var %mod4 = 2000, %atkMods = %atkMods %mod4 }
- elseif ((%userItem == LightBall) && (%user == Pikachu)) { var %mod4 = 2000, %atkMods = %atkMods %mod4 }
- elseif ((%userItem == SoulDew) && (%cat == Special) && ($isTok(Latios Latias, %user, 32))) { var %mod4 = 1800, %atkMods = %atkMods %mod4 }
- elseif ((%userItem == ChoiceBand) && (%cat == Physical)) { var %mod4 = 1800, %atkMods = %atkMods %mod4 }
- elseif ((%userItem == ChoiceSpecs) && (%cat == Special)) { var %mod4 = 1800, %atkMods = %atkMods %mod4 }
- }
- if (%atkMods != $null) { var %atkStat = $mod(%atkStat, $chain(%atkMods)) }
- ;-----| Modify Defensive Stat
- ;----------| Base Defense Stat
- /* Gunna have to handle it in the main script -_-
- if ($move(%move).ShortDesc === Damages target based on Defense, not Sp. Def.) && (!%wonderRoom) {
- var %defStat = $stat(%target,def,%defIVs,%defEVs). [ $+ [ %targetLevel ] ]
- }
- if (%wonderRoom) {
- var %defStat = $stat(%target,$iif(%cat == Physical, spd, def),%defIVs,%defEVs). [ $+ [ %targetLevel ] ]
- }
- */
- ;----------| Apply Boosts
- if (%userAbility == Unaware) || ($move(%move).shortdesc == Ignores the target's stat modifiers.) {
- if (%defboost isnum 1-6) && (!%crit) { var %defStat = $int($calc(%defStat * (2 + %defboost) / 2)) }
- else if (%defboost isnum -6--1) { var %defStat = $int($calc(%defStat * 2 / (2 - %defboost))) }
- }
- ;----------| Apply Modifiers
- if ((%weather == Sand) && (%cat == Special) && ($isTok(%targetTypes, Rock, 32))) { var %defStat = $mod(%defStat,1800) }
- if (%targetAbility == MarvelScale) && (%targetStatus) && (%cat == Physical) { var %mod1 = 1800, %defMods = %defMods %mod1 }
- elseif ((%targetAbility == FlowerGift) && (%cat == Special) && (%weather == Sun)) { var %mod2 = 1800, %defMods = %defMods %mod2 }
- if (%targetItem) {
- if ((%targetItem == DeepSeaScale) && (%cat == Special) && (%target == Clamperl)) { var %mod3 = 1800, %defMods = %defMods %mod3 }
- elseif ((%targetItem == MetalPowder) && (%cat == Physical) && (%target == Ditto)) { var %mod3 = 2000, %defMods = %defMods %mod3 }
- elseif (%targetItem == Eviolite) { var %mod3 = 1800, %defMods = %defMods %mod3 }
- elseif ((%targetItem == SoulDew) && (%cat == Special) && $isTok(Latios Latias, %target, 32)) { var %mod4 = 1800, %defMods = %defMods %mod4 }
- }
- if (%defMods != $null) { var %defStat = $mod(%defStat, $chain(%defMods)) }
- ;-----| Get Base Power
- if (!%power) { var %power = $move(%move).basePower }
- if ($isTok(GrassKnot LowKick, %move, 32)) { var %power = $gklk(%target), %gklk = $true }
- elseif (%moveName == Acrobatics) && ((!%userItem || (%userItem == FlyingGem)) || %maxBP) { %power = 110 }
- elseif ((%moveName == Payback) && (%movedLast || %maxBP)) { var %power = 100 }
- elseif ((%moveName == Payback) && (%maxBP)) { var %power = 80 }
- elseif ((%moveName == Assurance) && (%maxBP)) { var %power = %power * 2 }
- var %originalPower = %power
- ;-----| Apply Modifiers
- if (%userAbility) {
- if (%userAbility == Technician) && (%power <= 60) { var %mod1 = 1800, %moveMods = %moveMods %mod1 }
- elseif (%userAbility == FlareBoost) && (%userStatus) && (%cat == Special) { var %mod1 = 1800, %moveMods = %moveMods %mod1 }
- elseif (%userAbility == Analytic) && (%movedLast) { var %mod1 = 14CD, %moveMods = %moveMods %mod1 }
- elseif (%userAbility == Reckless) && ((recoil isin $move(%move).ShortDesc) || (Jump Kick isin %move)) { var %mod1 = 1333, %moveMods = %moveMods %mod1 }
- elseif (%userAbility == IronFist) && ($move(%move).isPunchAttack) { var %mod1 = 1333, %moveMods = %moveMods %mod1 }
- elseif (%userAbility == ToxicBoost) && (%userStatus == PSN) && (%cat == Physical) { var %mod1 = 1800, %moveMods = %moveMods %mod1 }
- elseif (%userAbility == Rivalry) && (%rivalry) { var %mod1 = $iif(%rivalry == +, 1800, C00), %moveMods = %moveMods %mod1 }
- elseif (%userAbility == SandForce) && (%weather == Sand) && ($isTok(Rock Ground Steel, %moveType, 32)) { var %mod1 = 14CD, %moveMods = %moveMods %mod1 }
- }
- if (%targetAbility) {
- if (%targetAbility == Heatproof) && (%moveType == Fire) { var %mod2 = 800, %moveMods = %moveMods %mod2 }
- elseif (%targetAbility == DrySkin) && (%moveType == Fire) { var %mod2 = 1400, %moveMods = %moveMods %mod2 }
- }
- if (%userAbility == SheerForce) && ($move(%move).secondary) { var %mod1 = 14CD, %moveMods = %moveMods %mod1 }
- if (%userItem) {
- if ($item(%userItem).desc === Holder's %moveType $+ -type attacks have 1.2x power.) { var %mod3 = 1333, %moveMods = %moveMods %mod3 }
- elseif (%userItem == MuscleBand) && (%cat == Physical) { var %mod3 = 1199, %moveMods = %moveMods %mod3 }
- elseif (%userItem == WiseGlasses) && (%cat == Special) { var %mod3 = 1199, %moveMods = %moveMods %mod3 }
- elseif (%userItem == LustrousOrb) && (%user == Palkia) && ((%moveType == Dragon) || (%moveType == Water)) { var %mod3 = 1333, %moveMods = %moveMods %mod3 }
- elseif (%userItem == GriseousOrb) && (%user == GiratinaOrigin) && ((%moveType == Dragon) || (%moveType == Ghost)) { var %mod3 = 1333, %moveMods = %moveMods %mod3 }
- elseif (%userItem == AdamantOrb) && (%user == Dialga) && ((%moveType == Dragon) || (%moveType == Steel)) { var %mod3 = 1333, %moveMods = %moveMods %mod3 }
- elseif (%userItem == %moveType $+ Gem) { var %mod3 = 1800, %moveMods = %moveMods %mod3, %gem = $true }
- }
- if (%moveName == Facade) && (%userStatus) { var %mod4 = 2000, %moveMods = %moveMods %mod4 }
- ;elseif (%moveName == Brine) && ($calc(%userHP / %maxHP) !> 1/2) { var %mod4 = 2000, %moveMods = %moveMods %mod4 }
- elseif (%moveName == Venoshock) && (%targetStatus == PSN) { var %mod4 = 2000, %moveMods = %moveMods %mod4 }
- elseif (%moveName == Retaliate) && (%retaliate) { var %mod4 = 2000, %moveMods = %moveMods %mod4 }
- elseif ((%moveName == Fusion Flare) || (%moveName == Fusion Bolt)) && (%combo) { var %mod4 = 2000, %moveMods = %moveMods %mod4 }
- if (%meFirst) { var %mod5 = 1800, %moveMods = %moveMods %mod5 }
- if (%moveName == SolarBeam) && (%weather) && (%weather != Sun) { var %mod4 = 800, %moveMods = %moveMods %mod4 }
- if (%charge) && (%moveType == Electric) { var %mod6 = 2000, %moveMods = %moveMods %mod6 }
- if (%helpingHand) { var %mod7 = 1800, %moveMods = %moveMods %mod7 }
- if (%waterSport) && (%moveType == Fire) { var %mod8 = 548, %moveMods = %moveMods %mod8 }
- if (%mudSport) && (%moveType == Electric) { var %mod8 = 548, %moveMods = %moveMods %mod8 }
- if (%moveMods != $null) { var %power = $mod(%power, $chain(%moveMods)) }
- ;-----| Calculate Base Damage
- var %baseDamage = $int($calc(((((2 * %userLevel) / 5 + 2) * %power * %atkStat) / %defStat) / 50 + 2))
- ;----------| Apply Modifiers
- ;Apply the multi-target modifier
- var %baseDamage = $mod(%baseDamage,$iif(%spread,C00,1000))
- ;Apply the weather modifier
- if (%weather) {
- if ((%weather == Rain) && (%moveType == Water)) || ((%weather == Sun) && (%moveType == Fire)) { var %baseDamage = $mod(%baseDamage,1800) }
- elseif ((%weather == Rain) && (%moveType == Fire)) || ((%weather == Sun) && (%moveType == Water)) { var %baseDamage = $mod(%baseDamage,800) }
- }
- else { var %baseDamage = $mod(%baseDamage,1000) }
- ;In case of a critical hit, double the value
- if (%crit) { var %baseDamage = 2 * %baseDamage }
- ;goto return
- var %dmgRoll = 16
- while (%dmgRoll) {
- dec %dmgRoll
- if (%rolledDamage isnum 0-15) { %dmgRoll = %rolledDamage }
- ;Alter with a random factor
- var %damage = $int($calc(%baseDamage * (100 - %dmgRoll) / 100))
- ;Apply STAB modifier
- var %STAB = $isTok(%userType1 %userType2, %moveType, 32)
- if (%STAB) { var %damage = $mod(%damage,$iif(%userAbility == Adaptability,2000,1800)) }
- else { var %damage = $mod(%damage,1000) }
- ;Apply type effectiveness
- var %typeEff = $type(%movetype,%targetType1)
- if (%targetType2) { %typeEff = %typeEff * $type(%moveType,$v1) }
- if ((%targetItem == AirBalloon || %targetAbility == Levitate) && (%moveType == Ground)) { var %typeEff = 0 }
- elseif (($isTok(StormDrain WaterAbsorb DrySkin,%targetAbilityID,32)) && (%moveType == Water)) { var %typeEff = 0 }
- elseif (($isTok(LightningRod MotorDrive, %targetAbility, 32)) && (%moveType == Electric)) { var %typeEff = 0 }
- elseif ((%targetAbility == FlashFire) && (%moveType == Fire)) { var %typeEff = 0 }
- elseif ((%targetAbility == SapSipper) && (%moveType == Grass)) { var %typeEff = 0 }
- var %damage = %damage * %typeEff, %damage = $int(%damage)
- ;Apply user's burn
- if (%userStatus == BRN) && (%cat == Physical) && (%userAbility != Guts) { var %damage = %damage / 2, %damage = $int(%damage) }
- ;Minimum amount of Damage
- if (%damage < 1) { %damage = 1 }
- ;Apply the final modifiers
- ;--| Check for Screen
- if (%screen) && (!%crit) && (%userAbility != Infiltrator) { var %mod1 = $iif(%spread,A8F,800), %finalMods = %finalMods %mod1 }
- ;Check Abilities
- ;--| Check for Multiscale
- if (%targetAbility == Multiscale) && (!(%stealthRock) || (!$isImmuneToGround(%target) && %spikes)) { var %mod2 = 800, %finalMods = %finalMods %mod2 }
- ;--| Check for Tinted Lens
- if (%userAbility == TintedLens) && (%typeEff < 1) { var %mod3 = 2000, %finalMods = %finalMods %mod3 }
- ;--| Check for Friend Guard
- if (%friendGuard) { var %mod4 = C00, %finalMods = %finalMods %mod4 }
- ;--| Check for Sniper
- if (%userAbility == Sniper) && (%crit) { var %mod3 = 1800, %finalMods = %finalMods %mod3 }
- ;--| Check for Solid Rock / Filter
- if ($isTok(SolidRock Filter, %targetAbility, 32)) && (%typeEff > 1) { var %mod2 = C00, %finalMods = %finalMods %mod2 }
- ;Check Item
- /* Figure something out
- ;--| Check for Metronome
- if (%Metronome) {
- var %mod5 = $iif(%metronome < 5, $base($calc($hex(1000) + %metronome * $hex(333)),10,16), 2000), %finalMods = $instok(%finalMods,% $+ mod5, 10, 44)
- }
- */
- ;--| Check for Expert Belt
- if (%userItem == ExpertBelt) && (%typeEff > 1) { var %mod5 = 1333, %finalMods = %finalMods %mod5 }
- ;--| Check for Life Orb
- elseif (%userItem == LifeOrb) { var %mod5 = 14CC, %finalMods = %finalMods %mod5 }
- ;--| Check for Berry
- if ($item(%targetItem).desc == Halves damage taken from a super effective %moveType $+ -type attack. Single use.) { var %mod6 = 800, %finalMods = %finalMods %mod6 }
- elseif ($item(%targetItem).desc == Halves damage taken from a %moveType $+ -type attack. Single use.) { var %mod6 = 800, %finalMods = %finalMods %mod6 }
- ;Chain Modifiers
- if (%finalMods != $null) { var %damage = $mod(%damage, $chain(%finalMods)) }
- unset %finalMods
- var %damageNumbers = %damageNumbers %damage
- if (%rolledDamage isnum 0-15) { var %dmgRoll = $false }
- }
- :return
- if (%return) { returnex $~(%return, 2) }
- return %damageNumbers
- :error
- return $error
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement