summaryrefslogtreecommitdiff
path: root/data/battle
diff options
context:
space:
mode:
Diffstat (limited to 'data/battle')
-rw-r--r--data/battle/accuracy_multipliers.asm17
-rw-r--r--data/battle/battle_text.asm1293
-rw-r--r--data/battle/critical_hits.asm18
-rw-r--r--data/battle/effect_command_pointers.asm182
-rw-r--r--data/battle/stat_multipliers.asm17
-rw-r--r--data/battle/stat_names.asm10
-rw-r--r--data/battle/type_boost_items.asm20
-rw-r--r--data/battle/type_matchups.asm119
8 files changed, 1676 insertions, 0 deletions
diff --git a/data/battle/accuracy_multipliers.asm b/data/battle/accuracy_multipliers.asm
new file mode 100644
index 000000000..a5a309bbd
--- /dev/null
+++ b/data/battle/accuracy_multipliers.asm
@@ -0,0 +1,17 @@
+; Multiplier ratios for accuracy from modifier -6 to +6
+; (for other stats, see data/battle/stat_multipliers.asm)
+
+AccuracyLevelMultipliers:
+ db 33, 100 ; -6 = 33%
+ db 36, 100 ; -5 = 36%
+ db 43, 100 ; -4 = 43%
+ db 50, 100 ; -3 = 50%
+ db 60, 100 ; -2 = 60%
+ db 75, 100 ; -1 = 75%
+ db 1, 1 ; 0 = 100%
+ db 133, 100 ; +1 = 133%
+ db 166, 100 ; +2 = 166%
+ db 2, 1 ; +3 = 200%
+ db 233, 100 ; +4 = 233%
+ db 133, 50 ; +5 = 266%
+ db 3, 1 ; +6 = 300%
diff --git a/data/battle/battle_text.asm b/data/battle/battle_text.asm
new file mode 100644
index 000000000..eaff02017
--- /dev/null
+++ b/data/battle/battle_text.asm
@@ -0,0 +1,1293 @@
+BattleText::
+
+BattleText_PlayerPickedUpPayDayMoney: ; 0x80730
+ text "<PLAYER> picked up"
+ line "¥@"
+ deciram wPayDayMoney, 3, 6
+ text "!"
+ prompt
+; 0x80746
+
+WildPokemonAppearedText: ; 0x80746
+ text "Wild @"
+ text_from_ram EnemyMonNick
+ text_start
+ line "appeared!"
+ prompt
+; 0x8075c
+
+HookedPokemonAttackedText: ; 0x8075c
+ text "The hooked"
+ line "@"
+ text_from_ram EnemyMonNick
+ text_start
+ cont "attacked!"
+ prompt
+; 0x80778
+
+PokemonFellFromTreeText: ; 0x80778
+ text_from_ram EnemyMonNick
+ text " fell"
+ line "out of the tree!"
+ prompt
+; 0x80793
+
+WildCelebiAppearedText: ; 0x80793
+ text "Wild @"
+ text_from_ram EnemyMonNick
+ text_start
+ line "appeared!"
+ prompt
+; 0x807a9
+
+WantsToBattleText:: ; 0x807a9
+ text "<ENEMY>"
+ line "wants to battle!"
+ prompt
+; 0x807bd
+
+BattleText_WildFled: ; 0x807bd
+ text "Wild @"
+ text_from_ram EnemyMonNick
+ text_start
+ line "fled!"
+ prompt
+; 0x807cf
+
+BattleText_EnemyFled: ; 0x807cf
+ text "Enemy @"
+ text_from_ram EnemyMonNick
+ text_start
+ line "fled!"
+ prompt
+; 0x807e2
+
+HurtByPoisonText: ; 0x807e2
+ text "<USER>"
+ line "is hurt by poison!"
+ prompt
+; 0x807f8
+
+HurtByBurnText: ; 0x807f8
+ text "<USER>'s"
+ line "hurt by its burn!"
+ prompt
+; 0x8080e
+
+LeechSeedSapsText: ; 0x8080e
+ text "LEECH SEED saps"
+ line "<USER>!"
+ prompt
+; 0x80822
+
+HasANightmareText: ; 0x80822
+ text "<USER>"
+ line "has a NIGHTMARE!"
+ prompt
+; 0x80836
+
+HurtByCurseText: ; 0x80836
+ text "<USER>'s"
+ line "hurt by the CURSE!"
+ prompt
+; 0x8084d
+
+SandstormHitsText: ; 0x8084d
+ text "The SANDSTORM hits"
+ line "<USER>!"
+ prompt
+; 0x80864
+
+PerishCountText: ; 0x80864
+ text "<USER>'s"
+ line "PERISH count is @"
+ deciram wd265, 1, 1
+ text "!"
+ prompt
+; 0x80880
+
+BattleText_TargetRecoveredWithItem: ; 0x80880
+ text "<TARGET>"
+ line "recovered with"
+ cont "@"
+ text_from_ram StringBuffer1
+ text "."
+ prompt
+; 0x80899
+
+BattleText_UserRecoveredPPUsing: ; 0x80899
+ text "<USER>"
+ line "recovered PP using"
+ cont "@"
+ text_from_ram StringBuffer1
+ text "."
+ prompt
+; 0x808b6
+
+BattleText_TargetWasHitByFutureSight: ; 0x808b6
+ text "<TARGET>"
+ line "was hit by FUTURE"
+ cont "SIGHT!"
+ prompt
+; 0x808d2
+
+BattleText_SafeguardFaded: ; 0x808d2
+ text "<USER>'s"
+ line "SAFEGUARD faded!"
+ prompt
+; 0x808e7
+
+BattleText_PkmnLightScreenFell: ; 0x808e7
+ text_from_ram StringBuffer1
+ text " #MON's"
+ line "LIGHT SCREEN fell!"
+ prompt
+; 0x80905
+
+BattleText_PkmnReflectFaded: ; 0x80905
+ text_from_ram StringBuffer1
+ text " #MON's"
+ line "REFLECT faded!"
+ prompt
+; 0x8091f
+
+BattleText_RainContinuesToFall: ; 0x8091f
+ text "Rain continues to"
+ line "fall."
+ prompt
+; 0x80938
+
+BattleText_TheSunlightIsStrong: ; 0x80938
+ text "The sunlight is"
+ line "strong."
+ prompt
+; 0x80951
+
+BattleText_TheSandstormRages: ; 0x80951
+ text "The SANDSTORM"
+ line "rages."
+ prompt
+; 0x80967
+
+BattleText_TheRainStopped: ; 0x80967
+ text "The rain stopped."
+ prompt
+; 0x8097a
+
+BattleText_TheSunlightFaded: ; 0x8097a
+ text "The sunlight"
+ line "faded."
+ prompt
+; 0x8098f
+
+BattleText_TheSandstormSubsided: ; 0x8098f
+ text "The SANDSTORM"
+ line "subsided."
+ prompt
+; 0x809a8
+
+BattleText_EnemyPkmnFainted: ; 0x809a8
+ text "Enemy @"
+ text_from_ram EnemyMonNick
+ text_start
+ line "fainted!"
+ prompt
+; 0x809be
+
+GotMoneyForWinningText:
+ text "<PLAYER> got ¥@"
+ deciram wBattleReward, 3, 6
+ text_start
+ line "for winning!"
+ prompt
+
+BattleText_EnemyWasDefeated: ; 0x809da
+ text "<ENEMY>"
+ line "was defeated!"
+ prompt
+; 0x809eb
+
+TiedAgainstText: ; 0x809eb
+ text "Tied against"
+ line "<ENEMY>!"
+ prompt
+; 0x809fc
+
+SentSomeToMomText:
+ text "<PLAYER> got ¥@"
+ deciram wBattleReward, 3, 6
+ text_start
+ line "for winning!"
+ cont "Sent some to MOM!"
+ prompt
+
+SentHalfToMomText:
+ text "Sent half to MOM!"
+ prompt
+
+SentAllToMomText:
+ text "Sent all to MOM!"
+ prompt
+
+BattleText_0x80a4f: ; 0x80a4f
+ text "<RIVAL>: Huh? I"
+ line "should've chosen"
+ cont "your #MON!"
+ prompt
+; 0x80a75
+
+BattleText_PkmnFainted: ; 0x80a75
+ text_from_ram BattleMonNick
+ text_start
+ line "fainted!"
+ prompt
+; 0x80a83
+
+BattleText_UseNextMon: ; 0x80a83
+ text "Use next #MON?"
+ done
+; 0x80a93
+
+BattleText_0x80a93: ; 0x80a93
+ text "<RIVAL>: Yes!"
+ line "I guess I chose a"
+ cont "good #MON!"
+ prompt
+; 0x80ab9
+
+LostAgainstText: ; 0x80ab9
+ text "Lost against"
+ line "<ENEMY>!"
+ prompt
+; 0x80aca
+
+BattleText_EnemyIsAboutToUseWillPlayerChangePkmn: ; 0x80aca
+ text "<ENEMY>"
+ line "is about to use"
+ cont "@"
+ text_from_ram EnemyMonNick
+ text "."
+
+ para "Will <PLAYER>"
+ line "change #MON?"
+ done
+; 0x80af8
+
+BattleText_EnemySentOut: ; 0x80af8
+ text "<ENEMY>"
+ line "sent out"
+ cont "@"
+ text_from_ram EnemyMonNick
+ text "!"
+ done
+; 0x80b0b
+
+BattleText_TheresNoWillToBattle: ; 0x80b0b
+ text "There's no will to"
+ line "battle!"
+ prompt
+; 0x80b26
+
+BattleText_AnEGGCantBattle: ; 0x80b26
+ text "An EGG can't"
+ line "battle!"
+ prompt
+; 0x80b3b
+
+BattleText_CantEscape2: ; 0x80b3b
+ text "Can't escape!"
+ prompt
+; 0x80b49
+
+BattleText_TheresNoEscapeFromTrainerBattle: ; 0x80b49
+ text "No! There's no"
+ line "running from a"
+ cont "trainer battle!"
+ prompt
+
+BattleText_GotAwaySafely: ; 0x80b77
+ text "Got away safely!"
+ prompt
+
+BattleText_UserFledUsingAStringBuffer1: ; 0x80b89
+ text "<USER>"
+ line "fled using a"
+ cont "@"
+ text_from_ram StringBuffer1
+ text "!"
+ prompt
+; 0x80ba0
+
+BattleText_CantEscape: ; 0x80ba0
+ text "Can't escape!"
+ prompt
+; 0x80bae
+
+BattleText_UserHurtBySpikes: ; 0x80bae
+ text "<USER>'s"
+ line "hurt by SPIKES!"
+ prompt
+; 0x80bc2
+
+RecoveredUsingText: ; 0x80bc2
+ text "<TARGET>"
+ line "recovered using a"
+ cont "@"
+ text_from_ram StringBuffer1
+ text "!"
+ prompt
+; 0x80bde
+
+BattleText_UsersStringBuffer1Activated: ; 0x80bde
+ text "<USER>'s"
+ line "@"
+ text_from_ram StringBuffer1
+ text_start
+ cont "activated!"
+ prompt
+; 0x80bf3
+
+BattleText_ItemsCantBeUsedHere: ; 0x80bf3
+ text "Items can't be"
+ line "used here."
+ prompt
+; 0x80c0d
+
+BattleText_PkmnIsAlreadyOut: ; 0x80c0d
+ text_from_ram BattleMonNick
+ text_start
+ line "is already out."
+ prompt
+; 0x80c22
+
+BattleText_PkmnCantBeRecalled: ; 0x80c22
+ text_from_ram BattleMonNick
+ text_start
+ line "can't be recalled!"
+ prompt
+; 0x80c39
+
+BattleText_TheresNoPPLeftForThisMove: ; 0x80c39
+ text "There's no PP left"
+ line "for this move!"
+ prompt
+; 0x80c5b
+
+BattleText_TheMoveIsDisabled: ; 0x80c5b
+ text "The move is"
+ line "DISABLED!"
+ prompt
+; 0x80c72
+
+BattleText_PkmnHasNoMovesLeft: ; 0x80c72
+ text_from_ram BattleMonNick
+ text_start
+ line "has no moves left!"
+ done
+; 0x80c8a
+
+BattleText_TargetsEncoreEnded: ; 0x80c8a
+ text "<TARGET>'s"
+ line "ENCORE ended!"
+ prompt
+; 0x80c9c
+
+BattleText_StringBuffer1GrewToLevel: ; 0x80c9c
+ text_from_ram StringBuffer1
+ text " grew to"
+ line "level @"
+ deciram CurPartyLevel, 1, 3
+ text "!@"
+ sound_dex_fanfare_50_79
+ db "@@"
+; 0x80cb9
+
+BattleText_WildPkmnIsEating: ; 0x80cba
+ text "Wild @"
+ text_from_ram EnemyMonNick
+ text_start
+ line "is eating!"
+ prompt
+; 0x80cd1
+
+BattleText_WildPkmnIsAngry: ; 0x80cd1
+ text "Wild @"
+ text_from_ram EnemyMonNick
+ text_start
+ line "is angry!"
+ prompt
+; 0x80ce7
+
+FastAsleepText: ; 0x80ce7
+ text "<USER>"
+ line "is fast asleep!"
+ prompt
+; 0x80cfa
+
+WokeUpText: ; 0x80cfa
+ text "<USER>"
+ line "woke up!"
+ prompt
+; 0x80d06
+
+FrozenSolidText: ; 0x80d06
+ text "<USER>"
+ line "is frozen solid!"
+ prompt
+; 0x80d1a
+
+FlinchedText: ; 0x80d1a
+ text "<USER>"
+ line "flinched!"
+ prompt
+; 0x80d27
+
+MustRechargeText: ; 0x80d27
+ text "<USER>"
+ line "must recharge!"
+ prompt
+; 0x80d39
+
+DisabledNoMoreText: ; 0x80d39
+ text "<USER>'s"
+ line "disabled no more!"
+ prompt
+; 0x80d4f
+
+IsConfusedText: ; 0x80d4f
+ text "<USER>"
+ line "is confused!"
+ prompt
+; 0x80d5f
+
+HurtItselfText: ; 0x80d5f
+ text "It hurt itself in"
+ line "its confusion!"
+ prompt
+; 0x80d81
+
+ConfusedNoMoreText: ; 0x80d81
+ text "<USER>'s"
+ line "confused no more!"
+ prompt
+; 0x80d97
+
+BecameConfusedText: ; 0x80d97
+ text "<TARGET>"
+ line "became confused!"
+ prompt
+; ItemHealedConfusion
+
+BattleText_ItemHealedConfusion: ; ItemHealedConfusion
+ text "A @"
+ text_from_ram StringBuffer1
+ text " rid"
+ line "<TARGET>"
+ cont "of its confusion."
+ prompt
+; 0x80dcc
+
+AlreadyConfusedText: ; 0x80dcc
+ text "<TARGET>'s"
+ line "already confused!"
+ prompt
+; 0x80de2
+
+BattleText_UsersHurtByStringBuffer1: ; 0x80de2
+ text "<USER>'s"
+ line "hurt by"
+ cont "@"
+ text_from_ram StringBuffer1
+ text "!"
+ prompt
+; 0x80df5
+
+BattleText_UserWasReleasedFromStringBuffer1: ; 0x80df5
+ text "<USER>"
+ line "was released from"
+ cont "@"
+ text_from_ram StringBuffer1
+ text "!"
+ prompt
+; 0x80e11
+
+UsedBindText: ; 0x80e11
+ text "<USER>"
+ line "used BIND on"
+ cont "<TARGET>!"
+ prompt
+; 0x80e24
+
+WhirlpoolTrapText: ; 0x80e24
+ text "<TARGET>"
+ line "was trapped!"
+ prompt
+; 0x80e34
+
+FireSpinTrapText: ; 0x80e34
+ text "<TARGET>"
+ line "was trapped!"
+ prompt
+; 0x80e44
+
+WrappedByText: ; 0x80e44
+ text "<TARGET>"
+ line "was WRAPPED by"
+ cont "<USER>!"
+ prompt
+; 0x80e59
+
+ClampedByText: ; 0x80e59
+ text "<TARGET>"
+ line "was CLAMPED by"
+ cont "<USER>!"
+ prompt
+; 0x80e6e
+
+StoringEnergyText: ; 0x80e6e
+ text "<USER>"
+ line "is storing energy!"
+ prompt
+; 0x80e84
+
+UnleashedEnergyText: ; 0x80e84
+ text "<USER>"
+ line "unleashed energy!"
+ prompt
+; 0x80e99
+
+HungOnText: ; 0x80e99
+ text "<TARGET>"
+ line "hung on with"
+ cont "@"
+ text_from_ram StringBuffer1
+ text "!"
+ prompt
+; 0x80eb0
+
+EnduredText: ; 0x80eb0
+ text "<TARGET>"
+ line "ENDURED the hit!"
+ prompt
+; 0x80ec4
+
+InLoveWithText: ; 0x80ec4
+ text "<USER>"
+ line "is in love with"
+ cont "<TARGET>!"
+ prompt
+; 0x80eda
+
+InfatuationText: ; 0x80eda
+ text "<USER>'s"
+ line "infatuation kept"
+ cont "it from attacking!"
+ prompt
+; 0x80f02
+
+DisabledMoveText: ; 0x80f02
+ text "<USER>'s"
+ line "@"
+ text_from_ram StringBuffer1
+ text " is"
+ cont "DISABLED!"
+ prompt
+; 0x80f19
+
+LoafingAroundText: ; 0x80f19
+ text_from_ram BattleMonNick
+ text " is"
+ line "loafing around."
+ prompt
+; 0x80f31
+
+BeganToNapText: ; 0x80f31
+ text_from_ram BattleMonNick
+ text " began"
+ line "to nap!"
+ prompt
+; 0x80f44
+
+WontObeyText: ; 0x80f44
+ text_from_ram BattleMonNick
+ text " won't"
+ line "obey!"
+ prompt
+; 0x80f54
+
+TurnedAwayText: ; 0x80f54
+ text_from_ram BattleMonNick
+ text " turned"
+ line "away!"
+ prompt
+; 0x80f66
+
+IgnoredOrdersText: ; 0x80f66
+ text_from_ram BattleMonNick
+ text " ignored"
+ line "orders!"
+ prompt
+; 0x80f7b
+
+IgnoredSleepingText: ; 0x80f7b
+ text_from_ram BattleMonNick
+ text " ignored"
+ line "orders…sleeping!"
+ prompt
+; 0x80f99
+
+NoPPLeftText: ; 0x80f99
+ text "But no PP is left"
+ line "for the move!"
+ prompt
+; 0x80fba
+
+HasNoPPLeftText: ; 0x80fba
+ text "<USER>"
+ line "has no PP left for"
+ cont "@"
+ text_from_ram StringBuffer2
+ text "!"
+ prompt
+; 0x80fd7
+
+WentToSleepText: ; 0x80fd7
+ text "<USER>"
+ line "went to sleep!"
+ done
+; 0x80fe9
+
+RestedText: ; 0x80fe9
+ text "<USER>"
+ line "fell asleep and"
+ cont "became healthy!"
+ done
+; 0x8100c
+
+RegainedHealthText: ; 0x8100c
+ text "<USER>"
+ line "regained health!"
+ prompt
+; 0x81020
+
+AttackMissedText: ; 0x81020
+ text "<USER>'s"
+ line "attack missed!"
+ prompt
+; 0x81033
+
+AttackMissed2Text: ; 0x81033
+ text "<USER>'s"
+ line "attack missed!"
+ prompt
+; 0x81046
+
+CrashedText: ; 0x81046
+ text "<USER>"
+ line "kept going and"
+ cont "crashed!"
+ prompt
+; 0x81061
+
+UnaffectedText: ; 0x81061
+ text "<TARGET>'s"
+ line "unaffected!"
+ prompt
+; 0x81071
+
+DoesntAffectText: ; 0x81071
+ text "It doesn't affect"
+ line "<TARGET>!"
+ prompt
+; 0x81086
+
+CriticalHitText: ; 0x81086
+ text "A critical hit!"
+ prompt
+; 0x81097
+
+OneHitKOText: ; 0x81097
+ text "It's a one-hit KO!"
+ prompt
+; 0x810aa
+
+SuperEffectiveText: ; 0x810aa
+ text "It's super-"
+ line "effective!"
+ prompt
+; 0x810c1
+
+NotVeryEffectiveText: ; 0x810c1
+ text "It's not very"
+ line "effective…"
+ prompt
+; 0x810da
+
+TookDownWithItText: ; 0x810da
+ text "<TARGET>"
+ line "took down with it,"
+ cont "<USER>!"
+ prompt
+; 0x810f3
+
+RageBuildingText: ; 0x810f3
+ text "<USER>'s"
+ line "RAGE is building!"
+ prompt
+; 0x81109
+
+GotAnEncoreText: ; 0x81109
+ text "<TARGET>"
+ line "got an ENCORE!"
+ prompt
+; 0x8111b
+
+SharedPainText: ; 0x8111b
+ text "The battlers"
+ line "shared pain!"
+ prompt
+; 0x81136
+
+TookAimText: ; 0x81136
+ text "<USER>"
+ line "took aim!"
+ prompt
+; 0x81143
+
+SketchedText: ; 0x81143
+ text "<USER>"
+ line "SKETCHED"
+ cont "@"
+ text_from_ram StringBuffer1
+ text "!"
+ prompt
+; 0x81156
+
+DestinyBondEffectText: ; 0x81156
+ text "<USER>'s"
+ line "trying to take its"
+ cont "opponent with it!"
+ prompt
+; 0x8117f
+
+SpiteEffectText: ; 0x8117f
+ text "<TARGET>'s"
+ line "@"
+ text_from_ram StringBuffer1
+ text " was"
+ cont "reduced by @"
+ deciram wd265, 1, 1
+ text "!"
+ prompt
+; 0x811a0
+
+BellChimedText: ; 0x811a0
+ text "A bell chimed!"
+ line ""
+ prompt
+; 0x811b1
+
+FellAsleepText: ; 0x811b1
+ text "<TARGET>"
+ line "fell asleep!"
+ prompt
+; 0x811c1
+
+AlreadyAsleepText: ; 0x811c1
+ text "<TARGET>'s"
+ line "already asleep!"
+ prompt
+; 0x811d5
+
+WasPoisonedText: ; 0x811d5
+ text "<TARGET>"
+ line "was poisoned!"
+ prompt
+; 0x811e6
+
+BadlyPoisonedText: ; 0x811e6
+ text "<TARGET>'s"
+ line "badly poisoned!"
+ prompt
+; 0x811fa
+
+AlreadyPoisonedText: ; 0x811fa
+ text "<TARGET>'s"
+ line "already poisoned!"
+ prompt
+; 0x81210
+
+SuckedHealthText: ; 0x81210
+ text "Sucked health from"
+ line "<TARGET>!"
+ prompt
+; 0x81227
+
+DreamEatenText: ; 0x81227
+ text "<TARGET>'s"
+ line "dream was eaten!"
+ prompt
+; 0x8123c
+
+WasBurnedText: ; 0x8123c
+ text "<TARGET>"
+ line "was burned!"
+ prompt
+; 0x8124b
+
+DefrostedOpponentText: ; 0x8124b
+ text "<TARGET>"
+ line "was defrosted!"
+ prompt
+; 0x8125d
+
+WasFrozenText: ; 0x8125d
+ text "<TARGET>"
+ line "was frozen solid!"
+ prompt
+; 0x81272
+
+WontRiseAnymoreText: ; 0x81272
+ text "<USER>'s"
+ line "@"
+ text_from_ram StringBuffer2
+ text " won't"
+ cont "rise anymore!"
+ prompt
+; 0x8128f
+
+WontDropAnymoreText: ; 0x8128f
+ text "<TARGET>'s"
+ line "@"
+ text_from_ram StringBuffer2
+ text " won't"
+ cont "drop anymore!"
+ prompt
+; 0x812ac
+
+FledFromBattleText:: ; 0x812ac
+ text "<USER>"
+ line "fled from battle!"
+ prompt
+; 0x812c1
+
+FledInFearText: ; 0x812c1
+ text "<TARGET>"
+ line "fled in fear!"
+ prompt
+; 0x812d2
+
+BlownAwayText: ; 0x812d2
+ text "<TARGET>"
+ line "was blown away!"
+ prompt
+; 0x812e5
+
+PlayerHitTimesText: ; 0x812e5
+ text "Hit @"
+ deciram PlayerDamageTaken, 1, 1
+ text " times!"
+ prompt
+; 0x812f8
+
+EnemyHitTimesText: ; 0x812f8
+ text "Hit @"
+ deciram EnemyDamageTaken, 1, 1
+ text " times!"
+ prompt
+; 0x8130b
+
+MistText: ; 0x8130b
+ text "<USER>'s"
+ line "shrouded in MIST!"
+ prompt
+; 0x81321
+
+ProtectedByMistText: ; 0x81321
+ text "<TARGET>'s"
+ line "protected by MIST."
+ prompt
+; 0x81338
+
+GettingPumpedText: ; 0x81338
+ interpret_data
+ text "<USER>'s"
+ line "getting pumped!"
+ prompt
+; 0x8134d
+
+RecoilText: ; 0x8134d
+ text "<USER>'s"
+ line "hit with recoil!"
+ prompt
+; 0x81362
+
+MadeSubstituteText: ; 0x81362
+ text "<USER>"
+ line "made a SUBSTITUTE!"
+ prompt
+; 0x81378
+
+HasSubstituteText: ; 0x81378
+ text "<USER>"
+ line "has a SUBSTITUTE!"
+ prompt
+; 0x8138d
+
+TooWeakSubText: ; 0x8138d
+ text "Too weak to make"
+ line "a SUBSTITUTE!"
+ prompt
+; 0x813ad
+
+SubTookDamageText: ; 0x813ad
+ text "The SUBSTITUTE"
+ line "took damage for"
+ cont "<TARGET>!"
+ prompt
+; 0x813d0
+
+SubFadedText: ; 0x813d0
+ text "<TARGET>'s"
+ line "SUBSTITUTE faded!"
+ prompt
+; 0x813e6
+
+LearnedMoveText: ; 0x813e6
+ text "<USER>"
+ line "learned"
+ cont "@"
+ text_from_ram StringBuffer1
+ text "!"
+ prompt
+; 0x813f8
+
+WasSeededText: ; 0x813f8
+ text "<TARGET>"
+ line "was seeded!"
+ prompt
+; 0x81407
+
+EvadedText: ; 0x81407
+ text "<TARGET>"
+ line "evaded the attack!"
+ prompt
+; 0x8141d
+
+WasDisabledText: ; 0x8141d
+ text "<TARGET>'s"
+ line "@"
+ text_from_ram StringBuffer1
+ text " was"
+ cont "DISABLED!"
+ prompt
+; 0x81435
+
+CoinsScatteredText: ; 0x81435
+ text "Coins scattered"
+ line "everywhere!"
+ prompt
+; 0x81452
+
+TransformedTypeText: ; 0x81452
+ text "<USER>"
+ line "transformed into"
+ cont "the @"
+ text_from_ram StringBuffer1
+ text "-type!"
+ prompt
+; 0x81476
+
+EliminatedStatsText: ; 0x81476
+ text "All stat changes"
+ line "were eliminated!"
+ prompt
+; 0x81499
+
+TransformedText: ; 0x81499
+ text "<USER>"
+ line "TRANSFORMED into"
+ cont "@"
+ text_from_ram StringBuffer1
+ text "!"
+ prompt
+; 0x814b4
+
+LightScreenEffectText: ; 0x814b4
+ text "<USER>'s"
+ line "SPCL.DEF rose!"
+ prompt
+; 0x814c7
+
+ReflectEffectText: ; 0x814c7
+ text "<USER>'s"
+ line "DEFENSE rose!"
+ prompt
+; 0x814d9
+
+NothingHappenedText: ; 0x814d9
+ text "But nothing"
+ line "happened."
+ prompt
+; 0x814f0
+
+ButItFailedText: ; 0x814f0
+ text "But it failed!"
+ prompt
+; 0x81500
+
+ItFailedText: ; 0x81500
+ text "It failed!"
+ prompt
+; 0x8150c
+
+DidntAffect1Text: ; 0x8150c
+ text "It didn't affect"
+ line "<TARGET>!"
+ prompt
+; 0x81520
+
+DidntAffect2Text: ; 0x81520
+ text "It didn't affect"
+ line "<TARGET>!"
+ prompt
+; 0x81534
+
+HPIsFullText: ; 0x81534
+ text "<USER>'s"
+ line "HP is full!"
+ prompt
+; 0x81544
+
+DraggedOutText: ; 0x81544
+ text "<USER>"
+ line "was dragged out!"
+ prompt
+; 0x81558
+
+ParalyzedText: ; 0x81558
+ text "<TARGET>'s"
+ line "paralyzed! Maybe"
+ cont "it can't attack!"
+ prompt
+; 0x8157d
+
+FullyParalyzedText: ; 0x8157d
+ text "<USER>'s"
+ line "fully paralyzed!"
+ prompt
+; 0x81592
+
+AlreadyParalyzedText: ; 0x81592
+ text "<TARGET>'s"
+ line "already paralyzed!"
+ prompt
+; 0x815a9
+
+ProtectedByText: ; 0x815a9
+ text "<TARGET>'s"
+ line "protected by"
+ cont "@"
+ text_from_ram StringBuffer1
+ text "!"
+ prompt
+; 0x815c1
+
+MirrorMoveFailedText: ; 0x815c1
+ text "The MIRROR MOVE"
+ next "failed!"
+ prompt
+; 0x815da
+
+StoleText: ; 0x815da
+ text "<USER>"
+ line "stole @"
+ text_from_ram StringBuffer1
+ text_start
+ cont "from its foe!"
+ prompt
+; 0x815f7
+
+CantEscapeNowText: ; 0x815f7
+ text "<TARGET>"
+ line "can't escape now!"
+ prompt
+; 0x8160b
+
+StartedNightmareText: ; 0x8160b
+ text "<TARGET>"
+ line "started to have a"
+ cont "NIGHTMARE!"
+ prompt
+; 0x8162b
+
+WasDefrostedText: ; 0x8162b
+ text "<USER>"
+ line "was defrosted!"
+ prompt
+; 0x8163d
+
+PutACurseText: ; 0x8163d
+ text "<USER>"
+ line "cut its own HP and"
+
+ para "put a CURSE on"
+ line "<TARGET>!"
+ prompt
+; 0x81665
+
+ProtectedItselfText: ; 0x81665
+ text "<USER>"
+ line "PROTECTED itself!"
+ prompt
+; 0x8167a
+
+ProtectingItselfText: ; 0x8167a
+ text "<TARGET>'s"
+ line "PROTECTING itself!"
+ done
+; 0x81691
+
+SpikesText: ; 0x81691
+ text "SPIKES scattered"
+ line "all around"
+ cont "<TARGET>!"
+ prompt
+; 0x816b1
+
+IdentifiedText: ; 0x816b1
+ text "<USER>"
+ line "identified"
+ cont "<TARGET>!"
+ prompt
+; 0x816c2
+
+StartPerishText: ; 0x816c2
+ text "Both #MON will"
+ line "faint in 3 turns!"
+ prompt
+; 0x816e4
+
+SandstormBrewedText: ; 0x816e4
+ text "A SANDSTORM"
+ line "brewed!"
+ prompt
+; 0x816f9
+
+BracedItselfText: ; 0x816f9
+ text "<USER>"
+ line "braced itself!"
+ prompt
+; 0x8170b
+
+FellInLoveText: ; 0x8170b
+ text "<TARGET>"
+ line "fell in love!"
+ prompt
+; 0x8171c
+
+CoveredByVeilText: ; 0x8171c
+ text "<USER>'s"
+ line "covered by a veil!"
+ prompt
+; 0x81733
+
+SafeguardProtectText: ; 0x81733
+ text "<TARGET>"
+ line "is protected by"
+ cont "SAFEGUARD!"
+ prompt
+; 0x81751
+
+MagnitudeText: ; 0x81751
+ text "Magnitude @"
+ deciram wd265, 1, 1
+ text "!"
+ prompt
+; 0x81764
+
+ReleasedByText: ; 0x81764
+ text "<USER>"
+ line "was released by"
+ cont "<TARGET>!"
+ prompt
+; 0x8177a
+
+ShedLeechSeedText: ; 0x8177a
+ text "<USER>"
+ line "shed LEECH SEED!"
+ prompt
+; 0x8178e
+
+BlewSpikesText: ; 0x8178e
+ text "<USER>"
+ line "blew away SPIKES!"
+ prompt
+; 0x817a3
+
+DownpourText: ; 0x817a3
+ text "A downpour"
+ line "started!"
+ prompt
+; 0x817b8
+
+SunGotBrightText: ; 0x817b8
+ text "The sunlight got"
+ line "bright!"
+ prompt
+; 0x817d2
+
+BellyDrumText: ; 0x817d2
+ text "<USER>"
+ line "cut its HP and"
+ cont "maximized ATTACK!"
+ prompt
+; 0x817f6
+
+CopiedStatsText: ; 0x817f6
+ text "<USER>"
+ line "copied the stat"
+
+ para "changes of"
+ line "<TARGET>!"
+ prompt
+; 0x81817
+
+ForesawAttackText: ; 0x81817
+ text "<USER>"
+ line "foresaw an attack!"
+ prompt
+; 0x8182d
+
+BeatUpAttackText: ; 0x8182d
+ text_from_ram StringBuffer1
+ text "'s"
+ line "attack!"
+ done
+; 0x8183b
+
+RefusedGiftText: ; 0x8183b
+ text "<TARGET>"
+ line "refused the gift!"
+ prompt
+; 0x81850
+
+IgnoredOrders2Text: ; 0x81850
+ text "<USER>"
+ line "ignored orders!"
+ prompt
+; 0x81863
+
+BattleText_LinkErrorBattleCanceled: ; 0x81863
+ text "Link error…"
+
+ para "The battle has"
+ line "been canceled…"
+ prompt
+; 0x8188e
+
+BattleText_0x8188e: ; 0x8188e
+ text "There is no time"
+ line "left today!"
+ done
+; 0x818ac
diff --git a/data/battle/critical_hits.asm b/data/battle/critical_hits.asm
new file mode 100644
index 000000000..5800d57f4
--- /dev/null
+++ b/data/battle/critical_hits.asm
@@ -0,0 +1,18 @@
+CriticalHitMoves:
+ db KARATE_CHOP
+ db RAZOR_WIND
+ db RAZOR_LEAF
+ db CRABHAMMER
+ db SLASH
+ db AEROBLAST
+ db CROSS_CHOP
+ db -1
+
+CriticalHitChances:
+ db 7 percent ; 0
+ db 12 percent + 2 ; +1
+ db 25 percent + 1 ; +2
+ db 33 percent + 1 ; +3
+ db 50 percent + 1 ; +4
+ db 50 percent + 1 ; +5
+ db 50 percent + 1 ; +6
diff --git a/data/battle/effect_command_pointers.asm b/data/battle/effect_command_pointers.asm
new file mode 100644
index 000000000..b3eeea273
--- /dev/null
+++ b/data/battle/effect_command_pointers.asm
@@ -0,0 +1,182 @@
+; battle commands are defined in engine/battle/effect_commands.asm
+
+ dw 0 ; padding
+
+BattleCommandPointers: ; 3fd28
+; entries correspond to macros/scripts/battle_commands.asm
+ dw BattleCommand_CheckTurn ; 34084
+ dw BattleCommand_CheckObedience ; 343db
+ dw BattleCommand_UsedMoveText ; 34541
+ dw BattleCommand_DoTurn ; 34555
+ dw BattleCommand_Critical ; 34631
+ dw BattleCommand_DamageStats ; 352dc
+ dw BattleCommand_Stab ; 346d2 - 07
+ dw BattleCommand_DamageVariation ; 34cfd
+ dw BattleCommand_CheckHit ; 34d32
+ dw BattleCommand_LowerSub ; 34eee
+ dw BattleCommand_HitTargetNoSub ; 34f60
+ dw BattleCommand_RaiseSub ; 35004
+ dw BattleCommand_FailureText ; 35023
+ dw BattleCommand_CheckFaint ; 3505e
+ dw BattleCommand_CriticalText ; 35175
+ dw BattleCommand_SuperEffectiveText ; 351ad
+ dw BattleCommand_CheckDestinyBond ; 351c0
+ dw BattleCommand_BuildOpponentRage ; 35250
+ dw BattleCommand_PoisonTarget ; 35eee
+ dw BattleCommand_SleepTarget ; 35e5c
+ dw BattleCommand_DrainTarget ; 35fff
+ dw BattleCommand_EatDream ; 36008
+ dw BattleCommand_BurnTarget ; 3608c
+ dw BattleCommand_FreezeTarget ; 36102
+ dw BattleCommand_ParalyzeTarget ; 36165
+ dw BattleCommand_Selfdestruct ; 37380
+ dw BattleCommand_MirrorMove ; 373c9
+ dw BattleCommand_StatUp ; 361e4
+ dw BattleCommand_StatDown ; 362e3
+ dw BattleCommand_PayDay ; 3705c
+ dw BattleCommand_Conversion ; 3707f
+ dw BattleCommand_ResetStats ; 3710e
+ dw BattleCommand_StoreEnergy ; 36671
+ dw BattleCommand_UnleashEnergy ; 366e5
+ dw BattleCommand_ForceSwitch ; 3680f
+ dw BattleCommand_EndLoop ; 369b6
+ dw BattleCommand_FlinchTarget ; 36aa0
+ dw BattleCommand_OHKO ; 36af3
+ dw BattleCommand_Recoil ; 36cb2
+ dw BattleCommand_Mist ; 36c7e
+ dw BattleCommand_FocusEnergy ; 36c98
+ dw BattleCommand_Confuse ; 36d3b
+ dw BattleCommand_ConfuseTarget ; 36d1d
+ dw BattleCommand_Heal ; 3713e
+ dw BattleCommand_Transform ; 371cd
+ dw BattleCommand_Screen ; 372fc
+ dw BattleCommand_Poison ; 35f2c
+ dw BattleCommand_Paralyze ; 36dc7
+ dw BattleCommand_Substitute ; 36e7c
+ dw BattleCommand_RechargeNextTurn ; 36f0b
+ dw BattleCommand_Mimic ; 36f46
+ dw BattleCommand_Metronome ; 37418
+ dw BattleCommand_LeechSeed ; 36f9d
+ dw BattleCommand_Splash ; 36fe1
+ dw BattleCommand_Disable ; 36fed
+ dw BattleCommand_ClearText ; 37e85
+ dw BattleCommand_Charge ; 36b4d
+ dw BattleCommand_CheckCharge ; 36b3a
+ dw BattleCommand_TrapTarget ; 36c2d
+ dw BattleCommand3c ; 36c2c
+ dw BattleCommand_Rampage ; 36751
+ dw BattleCommand_CheckRampage ; 3671a
+ dw BattleCommand_ConstantDamage ; 35726
+ dw BattleCommand_Counter ; 35813
+ dw BattleCommand_Encore ; 35864
+ dw BattleCommand_PainSplit ; 35926
+ dw BattleCommand_Snore ; 359d0
+ dw BattleCommand_Conversion2 ; 359e6
+ dw BattleCommand_LockOn ; 35a53
+ dw BattleCommand_Sketch ; 35a74
+ dw BattleCommand_DefrostOpponent ; 35b16
+ dw BattleCommand_SleepTalk ; 35b33
+ dw BattleCommand_DestinyBond ; 35bff
+ dw BattleCommand_Spite ; 35c0f
+ dw BattleCommand_FalseSwipe ; 35c94
+ dw BattleCommand_HealBell ; 35cc9
+ dw BattleCommand_HeldFlinch ; 36ac9
+ dw BattleCommand_TripleKick ; 346b2
+ dw BattleCommand_KickCounter ; 346cd
+ dw BattleCommand_Thief ; 37492
+ dw BattleCommand_ArenaTrap ; 37517
+ dw BattleCommand_Nightmare ; 37536
+ dw BattleCommand_Defrost ; 37563
+ dw BattleCommand_Curse ; 37588
+ dw BattleCommand_Protect ; 37618
+ dw BattleCommand_Spikes ; 37683
+ dw BattleCommand_Foresight ; 376a0
+ dw BattleCommand_PerishSong ; 376c2
+ dw BattleCommand_StartSandstorm ; 376f8
+ dw BattleCommand_Endure ; 3766f
+ dw BattleCommand_CheckCurl ; 37718
+ dw BattleCommand_RolloutPower ; 37734
+ dw BattleCommand5d ; 37791
+ dw BattleCommand_FuryCutter ; 37792
+ dw BattleCommand_Attract ; 377ce
+ dw BattleCommand_HappinessPower ; 3784b
+ dw BattleCommand_Present ; 37874
+ dw BattleCommand_DamageCalc ; 35612 - 62
+ dw BattleCommand_FrustrationPower ; 3790e
+ dw BattleCommand_Safeguard ; 37939
+ dw BattleCommand_CheckSafeguard ; 37972
+ dw BattleCommand_GetMagnitude ; 37991
+ dw BattleCommand_BatonPass ; 379c9
+ dw BattleCommand_Pursuit ; 37b1d
+ dw BattleCommand_ClearHazards ; 37b39
+ dw BattleCommand_HealMorn ; 37b74
+ dw BattleCommand_HealDay ; 37b78
+ dw BattleCommand_HealNite ; 37b7c
+ dw BattleCommand_HiddenPower ; 37be8
+ dw BattleCommand_StartRain ; 37bf4
+ dw BattleCommand_StartSun ; 37c07
+ dw BattleCommand_AttackUp ; 361ac
+ dw BattleCommand_DefenseUp ; 361b0
+ dw BattleCommand_SpeedUp ; 361b4
+ dw BattleCommand_SpecialAttackUp ; 361b8
+ dw BattleCommand_SpecialDefenseUp ; 361bc
+ dw BattleCommand_AccuracyUp ; 361c0
+ dw BattleCommand_EvasionUp ; 361c4
+ dw BattleCommand_AttackUp2 ; 361c8
+ dw BattleCommand_DefenseUp2 ; 361cc
+ dw BattleCommand_SpeedUp2 ; 361d0
+ dw BattleCommand_SpecialAttackUp2 ; 361d4
+ dw BattleCommand_SpecialDefenseUp2 ; 361d8
+ dw BattleCommand_AccuracyUp2 ; 361dc
+ dw BattleCommand_EvasionUp2 ; 361e0
+ dw BattleCommand_AttackDown ; 362ad
+ dw BattleCommand_DefenseDown ; 362b1
+ dw BattleCommand_SpeedDown ; 362b5
+ dw BattleCommand_SpecialAttackDown ; 362b9
+ dw BattleCommand_SpecialDefenseDown ; 362bd
+ dw BattleCommand_AccuracyDown ; 362c1
+ dw BattleCommand_EvasionDown ; 362c5
+ dw BattleCommand_AttackDown2 ; 362c9
+ dw BattleCommand_DefenseDown2 ; 362cd
+ dw BattleCommand_SpeedDown2 ; 362d1
+ dw BattleCommand_SpecialAttackDown2 ; 362d5
+ dw BattleCommand_SpecialDefenseDown2 ; 362d9
+ dw BattleCommand_AccuracyDown2 ; 362dd
+ dw BattleCommand_EvasionDown2 ; 362e1
+ dw BattleCommand_StatUpMessage ; 363b8
+ dw BattleCommand_StatDownMessage ; 363e9
+ dw BattleCommand_StatUpFailText ; 3644c
+ dw BattleCommand_StatDownFailText ; 3646a
+ dw BattleCommand_EffectChance ; 34ecc
+ dw BattleCommand_StatDownAnim ; 34fdb
+ dw BattleCommand_StatUpAnim ; 34fd1
+ dw BattleCommand_SwitchTurn ; 34ffd - 93
+ dw BattleCommand_FakeOut ; 36a82
+ dw BattleCommand_BellyDrum ; 37c1a
+ dw BattleCommand_PsychUp ; 37c55
+ dw BattleCommand_Rage ; 36f1d
+ dw BattleCommand_DoubleFlyingDamage ; 36f25
+ dw BattleCommand_DoubleUndergroundDamage ; 36f2f
+ dw BattleCommand_MirrorCoat ; 37c95
+ dw BattleCommand_CheckFutureSight ; 37d0d
+ dw BattleCommand_FutureSight ; 37d34
+ dw BattleCommand_DoubleMinimizeDamage ; 37ce6
+ dw BattleCommand_SkipSunCharge ; 37d02
+ dw BattleCommand_ThunderAccuracy ; 37d94
+ dw BattleCommand_Teleport ; 36778
+ dw BattleCommand_BeatUp ; 35461
+ dw BattleCommand_RageDamage ; 3527b
+ dw BattleCommand_ResetTypeMatchup ; 34833
+ dw BattleCommand_AllStatsUp ; 36500
+ dw BattleCommanda5 ; 35165
+ dw BattleCommand_RaiseSubNoAnim ; 365af
+ dw BattleCommand_LowerSubNoAnim ; 365c3
+ dw BattleCommanda8 ; 355b5
+ dw BattleCommand_ClearMissDamage ; 355d5 - a9
+ dw BattleCommand_MoveDelay ; 37e80
+ dw BattleCommand_HitTarget ; 34f57
+ dw BattleCommand_TriStatusChance ; 3658f
+ dw BattleCommand_SuperEffectiveLoopText ; 351a5
+ dw BattleCommand_StartLoop ; 35197
+ dw BattleCommand_Curl ; 365a7
+; 3fe86
diff --git a/data/battle/stat_multipliers.asm b/data/battle/stat_multipliers.asm
new file mode 100644
index 000000000..e7cf8e472
--- /dev/null
+++ b/data/battle/stat_multipliers.asm
@@ -0,0 +1,17 @@
+; Multiplier ratios for all stats from modifier -6 to +6
+; (except accuracy, see data/battle/accuracy_multipliers.asm)
+
+StatLevelMultipliers:
+ db 25, 100 ; -6 = 25%
+ db 28, 100 ; -5 = 28%
+ db 33, 100 ; -4 = 33%
+ db 40, 100 ; -3 = 40%
+ db 50, 100 ; -2 = 50%
+ db 66, 100 ; -1 = 66%
+ db 1, 1 ; 0 = 100%
+ db 15, 10 ; +1 = 150%
+ db 2, 1 ; +2 = 200%
+ db 25, 10 ; +3 = 250%
+ db 3, 1 ; +4 = 300%
+ db 35, 10 ; +5 = 350%
+ db 4, 1 ; +6 = 400%
diff --git a/data/battle/stat_names.asm b/data/battle/stat_names.asm
new file mode 100644
index 000000000..a144a225f
--- /dev/null
+++ b/data/battle/stat_names.asm
@@ -0,0 +1,10 @@
+StatNames:
+; entries correspond to stat ids
+ db "ATTACK@"
+ db "DEFENSE@"
+ db "SPEED@"
+ db "SPCL.ATK@"
+ db "SPCL.DEF@"
+ db "ACCURACY@"
+ db "EVASION@"
+ db "ABILITY@" ; used for BattleCommand_Curse
diff --git a/data/battle/type_boost_items.asm b/data/battle/type_boost_items.asm
new file mode 100644
index 000000000..3b7231a59
--- /dev/null
+++ b/data/battle/type_boost_items.asm
@@ -0,0 +1,20 @@
+TypeBoostItems: ; 35703
+ db HELD_NORMAL_BOOST, NORMAL ; PINK_BOW/POLKADOT_BOW
+ db HELD_FIGHTING_BOOST, FIGHTING ; BLACKBELT
+ db HELD_FLYING_BOOST, FLYING ; SHARP_BEAK
+ db HELD_POISON_BOOST, POISON ; POISON BARB
+ db HELD_GROUND_BOOST, GROUND ; SOFT_SAND
+ db HELD_ROCK_BOOST, ROCK ; HARD_STONE
+ db HELD_BUG_BOOST, BUG ; SILVERPOWDER
+ db HELD_GHOST_BOOST, GHOST ; SPELL_TAG
+ db HELD_FIRE_BOOST, FIRE ; CHARCOAL
+ db HELD_WATER_BOOST, WATER ; MYSTIC WATER
+ db HELD_GRASS_BOOST, GRASS ; MIRACLE_SEED
+ db HELD_ELECTRIC_BOOST, ELECTRIC ; MAGNET
+ db HELD_PSYCHIC_BOOST, PSYCHIC ; TWISTEDSPOON
+ db HELD_ICE_BOOST, ICE ; NEVERMELTICE
+ db HELD_DRAGON_BOOST, DRAGON ; DRAGON_SCALE
+ db HELD_DARK_BOOST, DARK ; BLACKGLASSES
+ db HELD_STEEL_BOOST, STEEL ; METAL_COAT
+ db -1
+; 35726
diff --git a/data/battle/type_matchups.asm b/data/battle/type_matchups.asm
new file mode 100644
index 000000000..90e38ae2c
--- /dev/null
+++ b/data/battle/type_matchups.asm
@@ -0,0 +1,119 @@
+TypeMatchups: ; 34bb1
+ ; attacker, defender, *=
+ db NORMAL, ROCK, NOT_VERY_EFFECTIVE
+ db NORMAL, STEEL, NOT_VERY_EFFECTIVE
+ db FIRE, FIRE, NOT_VERY_EFFECTIVE
+ db FIRE, WATER, NOT_VERY_EFFECTIVE
+ db FIRE, GRASS, SUPER_EFFECTIVE
+ db FIRE, ICE, SUPER_EFFECTIVE
+ db FIRE, BUG, SUPER_EFFECTIVE
+ db FIRE, ROCK, NOT_VERY_EFFECTIVE
+ db FIRE, DRAGON, NOT_VERY_EFFECTIVE
+ db FIRE, STEEL, SUPER_EFFECTIVE
+ db WATER, FIRE, SUPER_EFFECTIVE
+ db WATER, WATER, NOT_VERY_EFFECTIVE
+ db WATER, GRASS, NOT_VERY_EFFECTIVE
+ db WATER, GROUND, SUPER_EFFECTIVE
+ db WATER, ROCK, SUPER_EFFECTIVE
+ db WATER, DRAGON, NOT_VERY_EFFECTIVE
+ db ELECTRIC, WATER, SUPER_EFFECTIVE
+ db ELECTRIC, ELECTRIC, NOT_VERY_EFFECTIVE
+ db ELECTRIC, GRASS, NOT_VERY_EFFECTIVE
+ db ELECTRIC, GROUND, NO_EFFECT
+ db ELECTRIC, FLYING, SUPER_EFFECTIVE
+ db ELECTRIC, DRAGON, NOT_VERY_EFFECTIVE
+ db GRASS, FIRE, NOT_VERY_EFFECTIVE
+ db GRASS, WATER, SUPER_EFFECTIVE
+ db GRASS, GRASS, NOT_VERY_EFFECTIVE
+ db GRASS, POISON, NOT_VERY_EFFECTIVE
+ db GRASS, GROUND, SUPER_EFFECTIVE
+ db GRASS, FLYING, NOT_VERY_EFFECTIVE
+ db GRASS, BUG, NOT_VERY_EFFECTIVE
+ db GRASS, ROCK, SUPER_EFFECTIVE
+ db GRASS, DRAGON, NOT_VERY_EFFECTIVE
+ db GRASS, STEEL, NOT_VERY_EFFECTIVE
+ db ICE, WATER, NOT_VERY_EFFECTIVE
+ db ICE, GRASS, SUPER_EFFECTIVE
+ db ICE, ICE, NOT_VERY_EFFECTIVE
+ db ICE, GROUND, SUPER_EFFECTIVE
+ db ICE, FLYING, SUPER_EFFECTIVE
+ db ICE, DRAGON, SUPER_EFFECTIVE
+ db ICE, STEEL, NOT_VERY_EFFECTIVE
+ db ICE, FIRE, NOT_VERY_EFFECTIVE
+ db FIGHTING, NORMAL, SUPER_EFFECTIVE
+ db FIGHTING, ICE, SUPER_EFFECTIVE
+ db FIGHTING, POISON, NOT_VERY_EFFECTIVE
+ db FIGHTING, FLYING, NOT_VERY_EFFECTIVE
+ db FIGHTING, PSYCHIC, NOT_VERY_EFFECTIVE
+ db FIGHTING, BUG, NOT_VERY_EFFECTIVE
+ db FIGHTING, ROCK, SUPER_EFFECTIVE
+ db FIGHTING, DARK, SUPER_EFFECTIVE
+ db FIGHTING, STEEL, SUPER_EFFECTIVE
+ db POISON, GRASS, SUPER_EFFECTIVE
+ db POISON, POISON, NOT_VERY_EFFECTIVE
+ db POISON, GROUND, NOT_VERY_EFFECTIVE
+ db POISON, ROCK, NOT_VERY_EFFECTIVE
+ db POISON, GHOST, NOT_VERY_EFFECTIVE
+ db POISON, STEEL, NO_EFFECT
+ db GROUND, FIRE, SUPER_EFFECTIVE
+ db GROUND, ELECTRIC, SUPER_EFFECTIVE
+ db GROUND, GRASS, NOT_VERY_EFFECTIVE
+ db GROUND, POISON, SUPER_EFFECTIVE
+ db GROUND, FLYING, NO_EFFECT
+ db GROUND, BUG, NOT_VERY_EFFECTIVE
+ db GROUND, ROCK, SUPER_EFFECTIVE
+ db GROUND, STEEL, SUPER_EFFECTIVE
+ db FLYING, ELECTRIC, NOT_VERY_EFFECTIVE
+ db FLYING, GRASS, SUPER_EFFECTIVE
+ db FLYING, FIGHTING, SUPER_EFFECTIVE
+ db FLYING, BUG, SUPER_EFFECTIVE
+ db FLYING, ROCK, NOT_VERY_EFFECTIVE
+ db FLYING, STEEL, NOT_VERY_EFFECTIVE
+ db PSYCHIC, FIGHTING, SUPER_EFFECTIVE
+ db PSYCHIC, POISON, SUPER_EFFECTIVE
+ db PSYCHIC, PSYCHIC, NOT_VERY_EFFECTIVE
+ db PSYCHIC, DARK, NO_EFFECT
+ db PSYCHIC, STEEL, NOT_VERY_EFFECTIVE
+ db BUG, FIRE, NOT_VERY_EFFECTIVE
+ db BUG, GRASS, SUPER_EFFECTIVE
+ db BUG, FIGHTING, NOT_VERY_EFFECTIVE
+ db BUG, POISON, NOT_VERY_EFFECTIVE
+ db BUG, FLYING, NOT_VERY_EFFECTIVE
+ db BUG, PSYCHIC, SUPER_EFFECTIVE
+ db BUG, GHOST, NOT_VERY_EFFECTIVE
+ db BUG, DARK, SUPER_EFFECTIVE
+ db BUG, STEEL, NOT_VERY_EFFECTIVE
+ db ROCK, FIRE, SUPER_EFFECTIVE
+ db ROCK, ICE, SUPER_EFFECTIVE
+ db ROCK, FIGHTING, NOT_VERY_EFFECTIVE
+ db ROCK, GROUND, NOT_VERY_EFFECTIVE
+ db ROCK, FLYING, SUPER_EFFECTIVE
+ db ROCK, BUG, SUPER_EFFECTIVE
+ db ROCK, STEEL, NOT_VERY_EFFECTIVE
+ db GHOST, NORMAL, NO_EFFECT
+ db GHOST, PSYCHIC, SUPER_EFFECTIVE
+ db GHOST, DARK, NOT_VERY_EFFECTIVE
+ db GHOST, STEEL, NOT_VERY_EFFECTIVE
+ db GHOST, GHOST, SUPER_EFFECTIVE
+ db DRAGON, DRAGON, SUPER_EFFECTIVE
+ db DRAGON, STEEL, NOT_VERY_EFFECTIVE
+ db DARK, FIGHTING, NOT_VERY_EFFECTIVE
+ db DARK, PSYCHIC, SUPER_EFFECTIVE
+ db DARK, GHOST, SUPER_EFFECTIVE
+ db DARK, DARK, NOT_VERY_EFFECTIVE
+ db DARK, STEEL, NOT_VERY_EFFECTIVE
+ db STEEL, FIRE, NOT_VERY_EFFECTIVE
+ db STEEL, WATER, NOT_VERY_EFFECTIVE
+ db STEEL, ELECTRIC, NOT_VERY_EFFECTIVE
+ db STEEL, ICE, SUPER_EFFECTIVE
+ db STEEL, ROCK, SUPER_EFFECTIVE
+ db STEEL, STEEL, NOT_VERY_EFFECTIVE
+
+ db -2 ; end
+
+; Foresight removes Ghost's immunities.
+ db NORMAL, GHOST, NO_EFFECT
+ db FIGHTING, GHOST, NO_EFFECT
+
+ db -1 ; end (with Foresight)
+; 34cfd