summaryrefslogtreecommitdiff
path: root/constants
diff options
context:
space:
mode:
authorsceptillion <33798691+sceptillion@users.noreply.github.com>2017-12-16 23:54:22 -0800
committersceptillion <33798691+sceptillion@users.noreply.github.com>2017-12-16 23:54:22 -0800
commit670fef77ac4d9116d5fdc28c0da40622919a062b (patch)
tree61c0e925f059404473826ac775305ba5e2706ab1 /constants
first commit
Diffstat (limited to 'constants')
-rw-r--r--constants/battle.inc101
-rw-r--r--constants/battle_move_constants.inc15
-rw-r--r--constants/battle_text.inc352
-rw-r--r--constants/berry_constants.inc6
-rw-r--r--constants/constants.inc12
-rw-r--r--constants/contest_constants.inc68
-rw-r--r--constants/contest_move_effects.inc49
-rw-r--r--constants/gba_constants.inc490
-rw-r--r--constants/item_data_constants.inc5
-rw-r--r--constants/m4a_constants.inc199
-rw-r--r--constants/misc_constants.inc51
-rw-r--r--constants/pokemon_data_constants.inc78
-rw-r--r--constants/trainer_constants.inc243
-rw-r--r--constants/type_constants.inc18
-rw-r--r--constants/variables.inc6
-rw-r--r--constants/version.inc91
16 files changed, 1784 insertions, 0 deletions
diff --git a/constants/battle.inc b/constants/battle.inc
new file mode 100644
index 000000000..94b7a6d48
--- /dev/null
+++ b/constants/battle.inc
@@ -0,0 +1,101 @@
+@ status 1
+.equiv SLP, 0x07
+.equiv PSN, 0x08
+.equiv BRN, 0x10
+.equiv FRZ, 0x20
+.equiv PAR, 0x40
+.equiv TOX, 0x80
+
+@ status 2
+.equiv S_CONFUSED, 0x00000007
+.equiv S_CONTINUE, 0x00001000
+.equiv S_TEMP_TRAP, 0x0000E000 @ Wrap, Bind, etc.
+.equiv S_INFATUATED, 0x000F0000
+.equiv S_FOCUS_ENERGY, 0x00100000
+.equiv S_SUBSTITUTE, 0x01000000
+.equiv S_MEAN_LOOK, 0x04000000
+.equiv S_NIGHTMARE, 0x08000000
+.equiv S_CURSED, 0x10000000
+.equiv S_FORESIGHT, 0x20000000
+.equiv S_TORMENT, 0x80000000
+
+@ status 3
+.equiv S_LEECH_SEED, 0x00000004
+.equiv S_ALWAYS_HIT, 0x00000010
+.equiv S_PERISH_SONG, 0x00000020
+.equiv S_ROOTED, 0x00000400
+.equiv S_YAWN, 0x00001800
+.equiv S_IMPRISONED, 0x00002000
+.equiv S_MUD_SPORT, 0x00010000
+.equiv S_WATER_SPORT, 0x00020000
+
+@ status 4
+.equiv S_REFLECT, 0x0001
+.equiv S_LIGHT_SCREEN, 0x0002
+.equiv S_SPIKES, 0x0010
+.equiv S_SAFEGUARD, 0x0020
+.equiv S_FUTURE_SIGHT, 0x0040
+.equiv S_MIST, 0x0100
+
+.equiv TARGET, 0
+.equiv USER, 1
+
+.equiv WEATHER_SUN, 0
+.equiv WEATHER_RAIN, 1
+.equiv WEATHER_SANDSTORM, 2
+.equiv WEATHER_HAIL, 3
+
+ enum_start 1
+ enum ATTACK
+ enum DEFENSE
+ enum SPEED
+ enum SP_ATTACK
+ enum SP_DEFENSE
+ enum ACCURACY
+ enum EVASION
+
+@ status animation table
+.equiv B_ANIM_STATUS_PSN, 0x0
+.equiv B_ANIM_STATUS_CONFUSION, 0x1
+.equiv B_ANIM_STATUS_BRN, 0x2
+.equiv B_ANIM_STATUS_INFATUATION, 0x3
+.equiv B_ANIM_STATUS_SLP, 0x4
+.equiv B_ANIM_STATUS_PRZ, 0x5
+.equiv B_ANIM_STATUS_FRZ, 0x6
+.equiv B_ANIM_STATUS_CURSED, 0x7
+.equiv B_ANIM_STATUS_NIGHTMARE, 0x8
+.equiv B_ANIM_STATUS_WRAPPED, 0x9
+
+@ general animation table
+.equiv B_ANIM_CASTFORM_CHANGE, 0x0
+.equiv B_ANIM_STATS_CHANGE, 0x1
+.equiv B_ANIM_SUBSTITUTE_FADE, 0x2
+.equiv B_ANIM_SUBSTITUTE_APPEAR, 0x3
+.equiv B_ANIM_POKEBLOCK_THROW, 0x4
+.equiv B_ANIM_ITEM_KNOCKOFF, 0x5
+.equiv B_ANIM_TURN_TRAP, 0x6
+.equiv B_ANIM_ITEM_EFFECT, 0x7
+.equiv B_ANIM_SMOKEBALL_ESCAPE, 0x8
+.equiv B_ANIM_HANGED_ON, 0x9
+.equiv B_ANIM_RAIN_CONTINUES, 0xA
+.equiv B_ANIM_SUN_CONTINUES, 0xB
+.equiv B_ANIM_SANDSTORM_CONTINUES, 0xC
+.equiv B_ANIM_HAIL_CONTINUES, 0xD
+.equiv B_ANIM_LEECH_SEED_DRAIN, 0xE
+.equiv B_ANIM_MON_HIT, 0xF
+.equiv B_ANIM_ITEM_STEAL, 0x10
+.equiv B_ANIM_SNATCH_MOVE, 0x11
+.equiv B_ANIM_FUTURE_SIGHT_HIT, 0x12
+.equiv B_ANIM_DOOM_DESIRE_HIT, 0x13
+.equiv B_ANIM_FOCUS_PUNCH_SET_UP, 0x14
+.equiv B_ANIM_INGRAIN_HEAL, 0x15
+.equiv B_ANIM_WISH_HEAL, 0x16
+
+@ special animation table
+.equiv B_ANIM_LVL_UP, 0x0
+.equiv B_ANIM_SWITCH_OUT_PLAYER_MON, 0x1
+.equiv B_ANIM_SWITCH_OUT_OPPONENT_MON, 0x2
+.equiv B_ANIM_BALL_THROW, 0x3
+.equiv B_ANIM_SAFARI_BALL_THROW, 0x4
+.equiv B_ANIM_SUBSTITUTE_TO_MON, 0x5
+.equiv B_ANIM_MON_TO_SUBSTITUTE, 0x6
diff --git a/constants/battle_move_constants.inc b/constants/battle_move_constants.inc
new file mode 100644
index 000000000..a05da3db3
--- /dev/null
+++ b/constants/battle_move_constants.inc
@@ -0,0 +1,15 @@
+ .set TARGET_SELECTED_POKEMON, 0
+
+ .set F_TARGET_SPECIAL, 1 << 0
+ .set F_TARGET_RANDOM, 1 << 2
+ .set F_TARGET_BOTH_ENEMIES, 1 << 3
+ .set F_TARGET_USER, 1 << 4
+ .set F_TARGET_ALL_EXCEPT_USER, 1 << 5
+ .set F_TARGET_ENEMY_SIDE, 1 << 6
+
+ .set F_MAKES_CONTACT, 1 << 0
+ .set F_AFFECTED_BY_PROTECT, 1 << 1
+ .set F_AFFECTED_BY_MAGIC_COAT, 1 << 2
+ .set F_AFFECTED_BY_SNATCH, 1 << 3
+ .set F_MIRROR_MOVE_COMPATIBLE, 1 << 4
+ .set F_AFFECTED_BY_KINGS_ROCK, 1 << 5
diff --git a/constants/battle_text.inc b/constants/battle_text.inc
new file mode 100644
index 000000000..f7025f68f
--- /dev/null
+++ b/constants/battle_text.inc
@@ -0,0 +1,352 @@
+ enum_start 12
+ enum BATTLE_TEXT_UnknownString
+ enum BATTLE_TEXT_GainExpPoints
+ enum BATTLE_TEXT_GrewLevel
+ enum BATTLE_TEXT_LearnedMove
+ enum BATTLE_TEXT_TryingToLearnMove
+ enum BATTLE_TEXT_CantLearnMore
+ enum BATTLE_TEXT_DeleteMove
+ enum BATTLE_TEXT_DeletedMove
+ enum BATTLE_TEXT_StopLearning
+ enum BATTLE_TEXT_DidNotLearn
+ enum BATTLE_TEXT_LearnedMove2
+ enum BATTLE_TEXT_AttackMissed
+ enum BATTLE_TEXT_ProtectedItself
+ enum BATTLE_TEXT_StatNoHigher
+ enum BATTLE_TEXT_AvoidedDamage
+ enum BATTLE_TEXT_DoesntAffect
+ enum BATTLE_TEXT_AttackingFainted
+ enum BATTLE_TEXT_DefendingFainted
+ enum BATTLE_TEXT_WinningPrize
+ enum BATTLE_TEXT_OutOfUsablePoke
+ enum BATTLE_TEXT_WhitedOut
+ enum BATTLE_TEXT_PreventEscape
+ enum BATTLE_TEXT_HitMulti
+ enum BATTLE_TEXT_FellAsleep
+ enum BATTLE_TEXT_MadeAsleep
+ enum BATTLE_TEXT_DefendingAsleep
+ enum BATTLE_TEXT_AttackingAsleep
+ enum BATTLE_TEXT_WasntAffected
+ enum BATTLE_TEXT_Poisoned
+ enum BATTLE_TEXT_Poisoned2
+ enum BATTLE_TEXT_PoisonHurt
+ enum BATTLE_TEXT_AlreadyPoisoned
+ enum BATTLE_TEXT_BadlyPoisoned
+ enum BATTLE_TEXT_EnergyDrained
+ enum BATTLE_TEXT_Burned
+ enum BATTLE_TEXT_Burned2
+ enum BATTLE_TEXT_BurnHurt
+ enum BATTLE_TEXT_Frozen
+ enum BATTLE_TEXT_Frozen2
+ enum BATTLE_TEXT_FrozenSolid
+ enum BATTLE_TEXT_DefendingDefrosted
+ enum BATTLE_TEXT_AttackingDefrosted
+ enum BATTLE_TEXT_Defrosted
+ enum BATTLE_TEXT_Paralyzed
+ enum BATTLE_TEXT_Paralyzed2
+ enum BATTLE_TEXT_Paralyzed3
+ enum BATTLE_TEXT_AlreadyParalyzed
+ enum BATTLE_TEXT_ParalysisHealed
+ enum BATTLE_TEXT_DreamEaten
+ enum BATTLE_TEXT_AttackingStatNoHigher
+ enum BATTLE_TEXT_DefendingStatNoHigher
+ enum BATTLE_TEXT_StoppedWorking
+ enum BATTLE_TEXT_StoppedWorking2
+ enum BATTLE_TEXT_Confused
+ enum BATTLE_TEXT_ConfusionSnapOut
+ enum BATTLE_TEXT_BecameConfused
+ enum BATTLE_TEXT_AlreadyConfused
+ enum BATTLE_TEXT_FellLove
+ enum BATTLE_TEXT_InLoveWith
+ enum BATTLE_TEXT_ImmobilizedBy
+ enum BATTLE_TEXT_BlownAway
+ enum BATTLE_TEXT_TypeTransform
+ enum BATTLE_TEXT_Flinched
+ enum BATTLE_TEXT_RegainedHealth
+ enum BATTLE_TEXT_HPFull
+ enum BATTLE_TEXT_RaisedSpDef
+ enum BATTLE_TEXT_RaisedDefense
+ enum BATTLE_TEXT_CoveredVeil
+ enum BATTLE_TEXT_SafeguardActive
+ enum BATTLE_TEXT_SafeguardFaded
+ enum BATTLE_TEXT_WentToSleep
+ enum BATTLE_TEXT_SpeltHealthy
+ enum BATTLE_TEXT_WhipWhirlwind
+ enum BATTLE_TEXT_TookSunlight
+ enum BATTLE_TEXT_LoweredHead
+ enum BATTLE_TEXT_IsGlowing
+ enum BATTLE_TEXT_FlewHigh
+ enum BATTLE_TEXT_DugHole
+ enum BATTLE_TEXT_SqueezedBind
+ enum BATTLE_TEXT_TrappedVortex
+ enum BATTLE_TEXT_Wrapped
+ enum BATTLE_TEXT_Clamped
+ enum BATTLE_TEXT_HurtBy
+ enum BATTLE_TEXT_FreedFrom
+ enum BATTLE_TEXT_KeptGoingCrash
+ enum BATTLE_TEXT_MistShroud
+ enum BATTLE_TEXT_MistProtect
+ enum BATTLE_TEXT_GetPumped
+ enum BATTLE_TEXT_HitRecoil
+ enum BATTLE_TEXT_ProtectedItself2
+ enum BATTLE_TEXT_SandBuffeted
+ enum BATTLE_TEXT_HailStricken
+ enum BATTLE_TEXT_WasSeeded
+ enum BATTLE_TEXT_EvadedAttack
+ enum BATTLE_TEXT_HealthSapped
+ enum BATTLE_TEXT_FastAsleep
+ enum BATTLE_TEXT_WokeUp
+ enum BATTLE_TEXT_UproarAwake
+ enum BATTLE_TEXT_UproarWoke
+ enum BATTLE_TEXT_UproarCaused
+ enum BATTLE_TEXT_UproarMaking
+ enum BATTLE_TEXT_CalmedDown
+ enum BATTLE_TEXT_UproarCantSleep
+ enum BATTLE_TEXT_Stockpiled
+ enum BATTLE_TEXT_StockpiledCant
+ enum BATTLE_TEXT_UproarCantSleep2
+ enum BATTLE_TEXT_UproarKeptAwake
+ enum BATTLE_TEXT_StayedAwake
+ enum BATTLE_TEXT_StoringEnergy
+ enum BATTLE_TEXT_UnleashedEnergy
+ enum BATTLE_TEXT_FatigueConfuse
+ enum BATTLE_TEXT_PickedUpYen
+ enum BATTLE_TEXT_Unaffected
+ enum BATTLE_TEXT_Transformed
+ enum BATTLE_TEXT_SubMade
+ enum BATTLE_TEXT_SubAlready
+ enum BATTLE_TEXT_SubTookDamage
+ enum BATTLE_TEXT_SubFaded
+ enum BATTLE_TEXT_MustRecharge
+ enum BATTLE_TEXT_RageBuilding
+ enum BATTLE_TEXT_MoveWasDisabled
+ enum BATTLE_TEXT_MoveIsDisabled
+ enum BATTLE_TEXT_DisabledNoMore
+ enum BATTLE_TEXT_EncoreGot
+ enum BATTLE_TEXT_EncoreEnded
+ enum BATTLE_TEXT_TookAim
+ enum BATTLE_TEXT_SketchedMove
+ enum BATTLE_TEXT_DestinyBondTake
+ enum BATTLE_TEXT_DestinyBondTaken
+ enum BATTLE_TEXT_ReducedBy
+ enum BATTLE_TEXT_StoleSomething
+ enum BATTLE_TEXT_CantEscapeNow
+ enum BATTLE_TEXT_NightmareStart
+ enum BATTLE_TEXT_NightmareLock
+ enum BATTLE_TEXT_CurseLay
+ enum BATTLE_TEXT_CurseAfflict
+ enum BATTLE_TEXT_SpikesScattered
+ enum BATTLE_TEXT_SpikesHurt
+ enum BATTLE_TEXT_IdentifiedPoke
+ enum BATTLE_TEXT_PerishSongFell
+ enum BATTLE_TEXT_BracedItself
+ enum BATTLE_TEXT_EnduredHit
+ enum BATTLE_TEXT_MagnitudeCount
+ enum BATTLE_TEXT_CutHPMaxATK
+ enum BATTLE_TEXT_CopyStatChanges
+ enum BATTLE_TEXT_GotFreeFrom
+ enum BATTLE_TEXT_LeechShed
+ enum BATTLE_TEXT_SpikesBlownAway
+ enum BATTLE_TEXT_FledBattle
+ enum BATTLE_TEXT_ForesawAttack
+ enum BATTLE_TEXT_TookAttack
+ enum BATTLE_TEXT_PokeAttack
+ enum BATTLE_TEXT_CenterAttention
+ enum BATTLE_TEXT_ChargingPower
+ enum BATTLE_TEXT_NaturePower
+ enum BATTLE_TEXT_StatusNormal
+ enum BATTLE_TEXT_NoMovesLeft
+ enum BATTLE_TEXT_TormentSubject
+ enum BATTLE_TEXT_TormentNoUse
+ enum BATTLE_TEXT_TightenFocus
+ enum BATTLE_TEXT_TauntFell
+ enum BATTLE_TEXT_TauntNoUse
+ enum BATTLE_TEXT_ReadyToHelp
+ enum BATTLE_TEXT_SwitchedItems
+ enum BATTLE_TEXT_CopiedObject
+ enum BATTLE_TEXT_WishMade
+ enum BATTLE_TEXT_WishTrue
+ enum BATTLE_TEXT_PlantedRoots
+ enum BATTLE_TEXT_AbsorbNutrients
+ enum BATTLE_TEXT_AnchoredItself
+ enum BATTLE_TEXT_DrowsyMade
+ enum BATTLE_TEXT_KnockedOffItem
+ enum BATTLE_TEXT_AbilitySwap
+ enum BATTLE_TEXT_SealedMove
+ enum BATTLE_TEXT_SealedNoUse
+ enum BATTLE_TEXT_GrudgeBear
+ enum BATTLE_TEXT_GrudgeLosePP
+ enum BATTLE_TEXT_ShroudedItself
+ enum BATTLE_TEXT_MagicCoatBounce
+ enum BATTLE_TEXT_AwaitMove
+ enum BATTLE_TEXT_SnatchedMove
+ enum BATTLE_TEXT_RainMade
+ enum BATTLE_TEXT_SpeedRisen
+ enum BATTLE_TEXT_ProtectedBy
+ enum BATTLE_TEXT_PreventedBy
+ enum BATTLE_TEXT_HPRestoredUsing
+ enum BATTLE_TEXT_MadeType
+ enum BATTLE_TEXT_PreventedPara
+ enum BATTLE_TEXT_PreventedRomance
+ enum BATTLE_TEXT_PreventedPoison
+ enum BATTLE_TEXT_PreventedConfusion
+ enum BATTLE_TEXT_RaisedFirePower
+ enum BATTLE_TEXT_AnchorsItself
+ enum BATTLE_TEXT_CutsAttack
+ enum BATTLE_TEXT_PreventedStatLoss
+ enum BATTLE_TEXT_HurtOther
+ enum BATTLE_TEXT_Traced
+ enum BATTLE_TEXT_Sharply
+ enum BATTLE_TEXT_Rose
+ enum BATTLE_TEXT_Harshly
+ enum BATTLE_TEXT_Fell
+ enum BATTLE_TEXT_UnknownString7
+ enum BATTLE_TEXT_UnknownString3
+ enum BATTLE_TEXT_UnknownString5
+ enum BATTLE_TEXT_UnknownString6
+ enum BATTLE_TEXT_Critical
+ enum BATTLE_TEXT_GrandSlam
+ enum BATTLE_TEXT_MoveForget123
+ enum BATTLE_TEXT_MoveForgetAnd
+ enum BATTLE_TEXT_NotEffective
+ enum BATTLE_TEXT_SuperEffective
+ enum BATTLE_TEXT_GotAwaySafely
+ enum BATTLE_TEXT_FledWild
+ enum BATTLE_TEXT_NoRunning
+ enum BATTLE_TEXT_CantEscape2
+ enum BATTLE_TEXT_BirchDontLeaveMe
+ enum BATTLE_TEXT_Nothing
+ enum BATTLE_TEXT_Failed
+ enum BATTLE_TEXT_HurtItself
+ enum BATTLE_TEXT_MirrorFail
+ enum BATTLE_TEXT_RainStart
+ enum BATTLE_TEXT_PourStart
+ enum BATTLE_TEXT_RainCont1
+ enum BATTLE_TEXT_PourCont
+ enum BATTLE_TEXT_RainStop
+ enum BATTLE_TEXT_SandBrewed
+ enum BATTLE_TEXT_SandRages
+ enum BATTLE_TEXT_SandSubsided
+ enum BATTLE_TEXT_SunBright
+ enum BATTLE_TEXT_SunStrong
+ enum BATTLE_TEXT_SunFaded
+ enum BATTLE_TEXT_HailStart
+ enum BATTLE_TEXT_HailCont
+ enum BATTLE_TEXT_HailStop
+ enum BATTLE_TEXT_SpitUpFail
+ enum BATTLE_TEXT_SwallowFail
+ enum BATTLE_TEXT_WindHeatWave
+ enum BATTLE_TEXT_StatElim
+ enum BATTLE_TEXT_CoinScatter
+ enum BATTLE_TEXT_SubWeak
+ enum BATTLE_TEXT_PainSplit
+ enum BATTLE_TEXT_BellChime
+ enum BATTLE_TEXT_PerishSong
+ enum BATTLE_TEXT_NoPP1
+ enum BATTLE_TEXT_NoPP2
+ enum BATTLE_TEXT_Used1
+ enum BATTLE_TEXT_TutorialUsed
+ enum BATTLE_TEXT_BlockBall
+ enum BATTLE_TEXT_DontBeAThief
+ enum BATTLE_TEXT_DodgeBall
+ enum BATTLE_TEXT_MissPoke
+ enum BATTLE_TEXT_BallBrokeOhNo
+ enum BATTLE_TEXT_BallBrokeAppeared
+ enum BATTLE_TEXT_BallBrokeAlmost
+ enum BATTLE_TEXT_BallBrokeSoClose
+ enum BATTLE_TEXT_BallCaught1
+ enum BATTLE_TEXT_BallCaught2
+ enum BATTLE_TEXT_GiveNickname
+ enum BATTLE_TEXT_SentToPC
+ enum BATTLE_TEXT_AddedToDex
+ enum BATTLE_TEXT_Raining
+ enum BATTLE_TEXT_Sandstorm
+ enum BATTLE_TEXT_CantEscape
+ enum BATTLE_TEXT_IgnoredOrdersSLP
+ enum BATTLE_TEXT_IgnoredOrders
+ enum BATTLE_TEXT_BeganNap
+ enum BATTLE_TEXT_LoafingAround
+ enum BATTLE_TEXT_WontObey
+ enum BATTLE_TEXT_TurnedAway
+ enum BATTLE_TEXT_NotNotice
+ enum BATTLE_TEXT_WillSwitch
+ enum BATTLE_TEXT_CreptCloser
+ enum BATTLE_TEXT_CantGetCloser
+ enum BATTLE_TEXT_WatchingCarefully
+ enum BATTLE_TEXT_CuriousAbout
+ enum BATTLE_TEXT_EnthralledBy
+ enum BATTLE_TEXT_IgnoredThing
+ enum BATTLE_TEXT_ThrewBlock
+ enum BATTLE_TEXT_SafariOver
+ enum BATTLE_TEXT_CuredParalysis
+ enum BATTLE_TEXT_CuredPoison
+ enum BATTLE_TEXT_CuredBurn
+ enum BATTLE_TEXT_CuredFreeze
+ enum BATTLE_TEXT_CuredSleep
+ enum BATTLE_TEXT_CuredConfusion
+ enum BATTLE_TEXT_CuredStatus
+ enum BATTLE_TEXT_RestoredHealth
+ enum BATTLE_TEXT_RestoredPP
+ enum BATTLE_TEXT_RestoredStatus
+ enum BATTLE_TEXT_RestoredHPLittle
+ enum BATTLE_TEXT_ChoiceBand
+ enum BATTLE_TEXT_FocusSash
+ enum BATTLE_TEXT_Terminator2 @ terminator?
+ enum BATTLE_TEXT_PreventedBurn
+ enum BATTLE_TEXT_BlocksOther
+ enum BATTLE_TEXT_RestoredHPByItem
+ enum BATTLE_TEXT_WhipSandstorm
+ enum BATTLE_TEXT_PreventedLoss
+ enum BATTLE_TEXT_InfatuatedPoke
+ enum BATTLE_TEXT_MadeIneffective
+ enum BATTLE_TEXT_CuredProblem
+ enum BATTLE_TEXT_OozeSuckup
+ enum BATTLE_TEXT_Transformed2
+ enum BATTLE_TEXT_ElecWeakened
+ enum BATTLE_TEXT_FireWeakened
+ enum BATTLE_TEXT_HidUnderwater
+ enum BATTLE_TEXT_SprangUp
+ enum BATTLE_TEXT_CantForgetHM
+ enum BATTLE_TEXT_FoundOne
+ enum BATTLE_TEXT_PlayerDefeatedTrainer2
+ enum BATTLE_TEXT_SoothingAroma
+ enum BATTLE_TEXT_CantUseItems
+ enum BATTLE_TEXT_UnknownString2
+ enum BATTLE_TEXT_UnknownString4
+ enum BATTLE_TEXT_HustleUse
+ enum BATTLE_TEXT_MadeUseless
+ enum BATTLE_TEXT_SandTombTrapped @ sand tomb
+ enum BATTLE_TEXT_Terminator
+ enum BATTLE_TEXT_BoostedExp
+ enum BATTLE_TEXT_SunIntensified
+ enum BATTLE_TEXT_GroundMoveNegate
+ enum BATTLE_TEXT_WallyBall
+ enum BATTLE_TEXT_TookAttack2
+ enum BATTLE_TEXT_ChoseDestiny
+ enum BATTLE_TEXT_LostFocus
+ enum BATTLE_TEXT_UseNext
+ enum BATTLE_TEXT_FledUsingItem
+ enum BATTLE_TEXT_FledUsingOther
+ enum BATTLE_TEXT_DraggedOut
+ enum BATTLE_TEXT_PreventedOther
+ enum BATTLE_TEXT_NormalizedStatus
+ enum BATTLE_TEXT_Used2
+ enum BATTLE_TEXT_BoxFull
+ enum BATTLE_TEXT_AvoidedAttack
+ enum BATTLE_TEXT_MadeIneffective2
+ enum BATTLE_TEXT_PreventedFlinching
+ enum BATTLE_TEXT_AlreadyBurned
+ enum BATTLE_TEXT_StatNoLower
+ enum BATTLE_TEXT_BlocksOther2
+ enum BATTLE_TEXT_WoreOff
+ enum BATTLE_TEXT_RaisedDefenseLittle
+ enum BATTLE_TEXT_RaisedSpDefLittle
+ enum BATTLE_TEXT_BrokeWall
+ enum BATTLE_TEXT_PreventedOther2
+ enum BATTLE_TEXT_CuredOfProblem
+ enum BATTLE_TEXT_AttackingCantEscape
+ enum BATTLE_TEXT_Obtained1
+ enum BATTLE_TEXT_Obtained2
+ enum BATTLE_TEXT_Obtained3
+ enum BATTLE_TEXT_NoEffect
+ enum BATTLE_TEXT_NoEffectOn
diff --git a/constants/berry_constants.inc b/constants/berry_constants.inc
new file mode 100644
index 000000000..2ecd7ac36
--- /dev/null
+++ b/constants/berry_constants.inc
@@ -0,0 +1,6 @@
+ .set BERRY_FIRMNESS_UNKNOWN, 0
+ .set BERRY_FIRMNESS_VERY_SOFT, 1
+ .set BERRY_FIRMNESS_SOFT, 2
+ .set BERRY_FIRMNESS_HARD, 3
+ .set BERRY_FIRMNESS_VERY_HARD, 4
+ .set BERRY_FIRMNESS_SUPER_HARD, 5
diff --git a/constants/constants.inc b/constants/constants.inc
new file mode 100644
index 000000000..1ec25462f
--- /dev/null
+++ b/constants/constants.inc
@@ -0,0 +1,12 @@
+ .include "constants/gba_constants.inc"
+ .include "constants/misc_constants.inc"
+ .include "constants/type_constants.inc"
+ .include "constants/contest_constants.inc"
+ .include "constants/item_data_constants.inc"
+ .include "constants/battle_move_constants.inc"
+ .include "constants/trainer_constants.inc"
+ .include "constants/berry_constants.inc"
+ .include "constants/version.inc"
+ .include "constants/battle.inc"
+ .include "constants/battle_text.inc"
+ .include "constants/contest_move_effects.inc"
diff --git a/constants/contest_constants.inc b/constants/contest_constants.inc
new file mode 100644
index 000000000..e971764d6
--- /dev/null
+++ b/constants/contest_constants.inc
@@ -0,0 +1,68 @@
+ .set CONTEST_COOL, 0x00
+ .set CONTEST_BEAUTY, 0x01
+ .set CONTEST_CUTE, 0x02
+ .set CONTEST_SMART, 0x03
+ .set CONTEST_TOUGH, 0x04
+
+ .set COMBO_STARTER_RAIN_DANCE, 0x01
+ .set COMBO_STARTER_RAGE, 0x02
+ .set COMBO_STARTER_FOCUS_ENERGY, 0x03
+ .set COMBO_STARTER_HYPNOSIS, 0x04
+ .set COMBO_STARTER_ENDURE, 0x05
+ .set COMBO_STARTER_HORN_ATTACK, 0x06
+ .set COMBO_STARTER_SWORDS_DANCE, 0x07
+ .set COMBO_STARTER_STOCKPILE, 0x08
+ .set COMBO_STARTER_SUNNY_DAY, 0x09
+ .set COMBO_STARTER_REST, 0x0A
+ .set COMBO_STARTER_VICE_GRIP, 0x0B
+ .set COMBO_STARTER_DEFENSE_CURL, 0x0C
+ .set COMBO_STARTER_CHARGE, 0x0D
+ .set COMBO_STARTER_ROCK_THROW, 0x0E
+ .set COMBO_STARTER_YAWN, 0x0F
+ .set COMBO_STARTER_SCARY_FACE, 0x10
+ .set COMBO_STARTER_POWDER_SNOW, 0x11
+ .set COMBO_STARTER_LOCK_ON, 0x12
+ .set COMBO_STARTER_SOFT_BOILED, 0x13
+ .set COMBO_STARTER_MEAN_LOOK, 0x14
+ .set COMBO_STARTER_SCRATCH, 0x15
+ .set COMBO_STARTER_GROWTH, 0x16
+ .set COMBO_STARTER_HAIL, 0x17
+ .set COMBO_STARTER_SANDSTORM, 0x18
+ .set COMBO_STARTER_BELLY_DRUM, 0x19
+ .set COMBO_STARTER_MIND_READER, 0x1A
+ .set COMBO_STARTER_DRAGON_BREATH, 0x1B
+ .set COMBO_STARTER_DRAGON_RAGE, 0x1C
+ .set COMBO_STARTER_DRAGON_DANCE, 0x1D
+ .set COMBO_STARTER_SURF, 0x1E
+ .set COMBO_STARTER_DIVE, 0x1F
+ .set COMBO_STARTER_STRING_SHOT, 0x20
+ .set COMBO_STARTER_LEER, 0x21
+ .set COMBO_STARTER_TAUNT, 0x22
+ .set COMBO_STARTER_CHARM, 0x23
+ .set COMBO_STARTER_HARDEN, 0x24
+ .set COMBO_STARTER_SING, 0x25
+ .set COMBO_STARTER_EARTHQUAKE, 0x26
+ .set COMBO_STARTER_DOUBLE_TEAM, 0x27
+ .set COMBO_STARTER_CURSE, 0x28
+ .set COMBO_STARTER_SWEET_SCENT, 0x29
+ .set COMBO_STARTER_SLUDGE, 0x2A
+ .set COMBO_STARTER_SLUDGE_BOMB, 0x2B
+ .set COMBO_STARTER_THUNDER_PUNCH, 0x2C
+ .set COMBO_STARTER_FIRE_PUNCH, 0x2D
+ .set COMBO_STARTER_ICE_PUNCH, 0x2E
+ .set COMBO_STARTER_PECK, 0x2F
+ .set COMBO_STARTER_METAL_SOUND, 0x30
+ .set COMBO_STARTER_MUD_SPORT, 0x31
+ .set COMBO_STARTER_WATER_SPORT, 0x32
+ .set COMBO_STARTER_BONE_CLUB, 0x33
+ .set COMBO_STARTER_BONEMERANG, 0x34
+ .set COMBO_STARTER_BONE_RUSH, 0x35
+ .set COMBO_STARTER_SAND_ATTACK, 0x36
+ .set COMBO_STARTER_MUD_SLAP, 0x37
+ .set COMBO_STARTER_FAKE_OUT, 0x38
+ .set COMBO_STARTER_PSYCHIC, 0x39
+ .set COMBO_STARTER_KINESIS, 0x3A
+ .set COMBO_STARTER_CONFUSION, 0x3B
+ .set COMBO_STARTER_POUND, 0x3C
+ .set COMBO_STARTER_SMOG, 0x3D
+ .set COMBO_STARTER_CALM_MIND, 0x3E
diff --git a/constants/contest_move_effects.inc b/constants/contest_move_effects.inc
new file mode 100644
index 000000000..b19e05004
--- /dev/null
+++ b/constants/contest_move_effects.inc
@@ -0,0 +1,49 @@
+ enum_start
+ enum CONTEST_EFFECT_HIGHLY_APPEALING @ 0
+ enum CONTEST_EFFECT_USER_MORE_EASILY_STARTLED @ 1
+ enum CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES @ 2
+ enum CONTEST_EFFECT_REPETITION_NOT_BORING @ 3
+ enum CONTEST_EFFECT_AVOID_STARTLE_ONCE @ 4
+ enum CONTEST_EFFECT_AVOID_STARTLE @ 5
+ enum CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY @ 6
+ enum CONTEST_EFFECT_USER_LESS_EASILY_STARTLED @ 7
+ enum CONTEST_EFFECT_STARTLE_FRONT_MON @ 8
+ enum CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS @ 9
+ enum CONTEST_EFFECT_STARTLE_PREV_MON @ 10
+ enum CONTEST_EFFECT_STARTLE_PREV_MONS @ 11
+ enum CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON @ 12
+ enum CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS @ 13
+ enum CONTEST_EFFECT_STARTLE_PREV_MON_2 @ 14
+ enum CONTEST_EFFECT_STARTLE_PREV_MONS_2 @ 15
+ enum CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION @ 16
+ enum CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION @ 17
+ enum CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN @ 18
+ enum CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL @ 19
+ enum CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL @ 20
+ enum CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL @ 21
+ enum CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL @ 22
+ enum CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL @ 23
+ enum CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL @ 24
+ enum CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS @ 25
+ enum CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS @ 26
+ enum CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS @ 27
+ enum CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION @ 28
+ enum CONTEST_EFFECT_BETTER_IF_FIRST @ 29
+ enum CONTEST_EFFECT_BETTER_IF_LAST @ 30
+ enum CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES @ 31
+ enum CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE @ 32
+ enum CONTEST_EFFECT_BETTER_WHEN_LATER @ 33
+ enum CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING @ 34
+ enum CONTEST_EFFECT_BETTER_IF_SAME_TYPE @ 35
+ enum CONTEST_EFFECT_BETTER_IF_DIFF_TYPE @ 36
+ enum CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL @ 37
+ enum CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS @ 38
+ enum CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION @ 39
+ enum CONTEST_EFFECT_NEXT_APPEAL_EARLIER @ 40
+ enum CONTEST_EFFECT_NEXT_APPEAL_LATER @ 41
+ enum CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER @ 42
+ enum CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER @ 43
+ enum CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST @ 44
+ enum CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS @ 45
+ enum CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED @ 46
+ enum CONTEST_EFFECT_DONT_EXCITE_AUDIENCE @ 47
diff --git a/constants/gba_constants.inc b/constants/gba_constants.inc
new file mode 100644
index 000000000..9d59c8fcd
--- /dev/null
+++ b/constants/gba_constants.inc
@@ -0,0 +1,490 @@
+ .set PSR_USR_MODE, 0x00000010
+ .set PSR_FIQ_MODE, 0x00000011
+ .set PSR_IRQ_MODE, 0x00000012
+ .set PSR_SVC_MODE, 0x00000013
+ .set PSR_ABT_MODE, 0x00000017
+ .set PSR_UND_MODE, 0x0000001b
+ .set PSR_SYS_MODE, 0x0000001f
+ .set PSR_MODE_MASK, 0x0000001f
+ .set PSR_T_BIT, 0x00000020
+ .set PSR_F_BIT, 0x00000040
+ .set PSR_I_BIT, 0x00000080
+
+ .set EWRAM_START, 0x02000000
+ .set EWRAM_END, EWRAM_START + 0x40000
+ .set IWRAM_START, 0x03000000
+ .set IWRAM_END, IWRAM_START + 0x8000
+
+ .set PLTT, 0x5000000
+ .set BG_PLTT, PLTT
+ .set OBJ_PLTT, PLTT + 0x200
+
+ .set VRAM, 0x6000000
+ .set BG_VRAM, VRAM
+ .set OBJ_VRAM0, VRAM + 0x10000 @ text-mode BG
+ .set OBJ_VRAM1, VRAM + 0x14000 @ bitmap-mode BG
+
+ .set OAM, 0x7000000
+
+ .set SOUND_INFO_PTR, 0x3007FF0
+ .set INTR_CHECK, 0x3007FF8
+ .set INTR_VECTOR, 0x3007FFC
+
+ .set INTR_FLAG_VBLANK, 1 << 0
+ .set INTR_FLAG_HBLANK, 1 << 1
+ .set INTR_FLAG_VCOUNT, 1 << 2
+ .set INTR_FLAG_TIMER0, 1 << 3
+ .set INTR_FLAG_TIMER1, 1 << 4
+ .set INTR_FLAG_TIMER2, 1 << 5
+ .set INTR_FLAG_TIMER3, 1 << 6
+ .set INTR_FLAG_SERIAL, 1 << 7
+ .set INTR_FLAG_DMA0, 1 << 8
+ .set INTR_FLAG_DMA1, 1 << 9
+ .set INTR_FLAG_DMA2, 1 << 10
+ .set INTR_FLAG_DMA3, 1 << 11
+ .set INTR_FLAG_KEYPAD, 1 << 12
+ .set INTR_FLAG_GAMEPAK, 1 << 13
+
+ .set VCOUNT_VBLANK, 160
+ .set TOTAL_SCANLINES, 228
+
+ .set REG_BASE, 0x4000000 @ I/O register base address
+
+@ I/O register offsets
+ .set OFFSET_REG_DISPCNT, 0x0
+ .set OFFSET_REG_DISPSTAT, 0x4
+ .set OFFSET_REG_VCOUNT, 0x6
+ .set OFFSET_REG_BG0CNT, 0x8
+ .set OFFSET_REG_BG1CNT, 0xa
+ .set OFFSET_REG_BG2CNT, 0xc
+ .set OFFSET_REG_BG3CNT, 0xe
+ .set OFFSET_REG_BG0HOFS, 0x10
+ .set OFFSET_REG_BG0VOFS, 0x12
+ .set OFFSET_REG_BG1HOFS, 0x14
+ .set OFFSET_REG_BG1VOFS, 0x16
+ .set OFFSET_REG_BG2HOFS, 0x18
+ .set OFFSET_REG_BG2VOFS, 0x1a
+ .set OFFSET_REG_BG3HOFS, 0x1c
+ .set OFFSET_REG_BG3VOFS, 0x1e
+ .set OFFSET_REG_BG2PA, 0x20
+ .set OFFSET_REG_BG2PB, 0x22
+ .set OFFSET_REG_BG2PC, 0x24
+ .set OFFSET_REG_BG2PD, 0x26
+ .set OFFSET_REG_BG2X_L, 0x28
+ .set OFFSET_REG_BG2X_H, 0x2a
+ .set OFFSET_REG_BG2Y_L, 0x2c
+ .set OFFSET_REG_BG2Y_H, 0x2e
+ .set OFFSET_REG_BG3PA, 0x30
+ .set OFFSET_REG_BG3PB, 0x32
+ .set OFFSET_REG_BG3PC, 0x34
+ .set OFFSET_REG_BG3PD, 0x36
+ .set OFFSET_REG_BG3X_L, 0x38
+ .set OFFSET_REG_BG3X_H, 0x3a
+ .set OFFSET_REG_BG3Y_L, 0x3c
+ .set OFFSET_REG_BG3Y_H, 0x3e
+ .set OFFSET_REG_WIN0H, 0x40
+ .set OFFSET_REG_WIN1H, 0x42
+ .set OFFSET_REG_WIN0V, 0x44
+ .set OFFSET_REG_WIN1V, 0x46
+ .set OFFSET_REG_WININ, 0x48
+ .set OFFSET_REG_WINOUT, 0x4a
+ .set OFFSET_REG_MOSAIC, 0x4c
+ .set OFFSET_REG_BLDCNT, 0x50
+ .set OFFSET_REG_BLDALPHA, 0x52
+ .set OFFSET_REG_BLDY, 0x54
+
+ .set OFFSET_REG_SOUND1CNT, 0x60
+ .set OFFSET_REG_SOUND1CNT_L, 0x60
+ .set OFFSET_REG_NR10, 0x60
+ .set OFFSET_REG_SOUND1CNT_H, 0x62
+ .set OFFSET_REG_NR11, 0x62
+ .set OFFSET_REG_NR12, 0x63
+ .set OFFSET_REG_SOUND1CNT_X, 0x64
+ .set OFFSET_REG_NR13, 0x64
+ .set OFFSET_REG_NR14, 0x65
+ .set OFFSET_REG_SOUND2CNT, 0x68
+ .set OFFSET_REG_SOUND2CNT_L, 0x68
+ .set OFFSET_REG_NR21, 0x68
+ .set OFFSET_REG_NR22, 0x69
+ .set OFFSET_REG_SOUND2CNT_H, 0x6c
+ .set OFFSET_REG_NR23, 0x6c
+ .set OFFSET_REG_NR24, 0x6d
+ .set OFFSET_REG_SOUND3CNT, 0x70
+ .set OFFSET_REG_SOUND3CNT_L, 0x70
+ .set OFFSET_REG_NR30, 0x70
+ .set OFFSET_REG_SOUND3CNT_H, 0x72
+ .set OFFSET_REG_NR31, 0x72
+ .set OFFSET_REG_NR32, 0x73
+ .set OFFSET_REG_SOUND3CNT_X, 0x74
+ .set OFFSET_REG_NR33, 0x74
+ .set OFFSET_REG_NR34, 0x75
+ .set OFFSET_REG_SOUND4CNT, 0x78
+ .set OFFSET_REG_SOUND4CNT_L, 0x78
+ .set OFFSET_REG_NR41, 0x78
+ .set OFFSET_REG_NR42, 0x79
+ .set OFFSET_REG_SOUND4CNT_H, 0x7c
+ .set OFFSET_REG_NR43, 0x7c
+ .set OFFSET_REG_NR44, 0x7d
+ .set OFFSET_REG_SOUNDCNT, 0x80
+ .set OFFSET_REG_SOUNDCNT_L, 0x80
+ .set OFFSET_REG_NR50, 0x80
+ .set OFFSET_REG_NR51, 0x81
+ .set OFFSET_REG_SOUNDCNT_H, 0x82
+ .set OFFSET_REG_SOUNDCNT_X, 0x84
+ .set OFFSET_REG_NR52, 0x84
+ .set OFFSET_REG_SOUNDBIAS, 0x88
+ .set OFFSET_REG_WAVE_RAM, 0x90
+ .set OFFSET_REG_WAVE_RAM0, 0x90
+ .set OFFSET_REG_WAVE_RAM0_L, 0x90
+ .set OFFSET_REG_WAVE_RAM0_H, 0x92
+ .set OFFSET_REG_WAVE_RAM1, 0x94
+ .set OFFSET_REG_WAVE_RAM1_L, 0x94
+ .set OFFSET_REG_WAVE_RAM1_H, 0x96
+ .set OFFSET_REG_WAVE_RAM2, 0x98
+ .set OFFSET_REG_WAVE_RAM2_L, 0x98
+ .set OFFSET_REG_WAVE_RAM2_H, 0x9a
+ .set OFFSET_REG_WAVE_RAM3, 0x9c
+ .set OFFSET_REG_WAVE_RAM3_L, 0x9c
+ .set OFFSET_REG_WAVE_RAM3_H, 0x9e
+ .set OFFSET_REG_FIFO, 0xa0
+ .set OFFSET_REG_FIFO_A, 0xa0
+ .set OFFSET_REG_FIFO_A_L, 0xa0
+ .set OFFSET_REG_FIFO_A_H, 0xa2
+ .set OFFSET_REG_FIFO_B, 0xa4
+ .set OFFSET_REG_FIFO_B_L, 0xa4
+ .set OFFSET_REG_FIFO_B_H, 0xa6
+
+ .set OFFSET_REG_DMA0, 0xb0
+ .set OFFSET_REG_DMA0SAD, 0xb0
+ .set OFFSET_REG_DMA0SAD_L, 0xb0
+ .set OFFSET_REG_DMA0SAD_H, 0xb2
+ .set OFFSET_REG_DMA0DAD, 0xb4
+ .set OFFSET_REG_DMA0DAD_L, 0xb4
+ .set OFFSET_REG_DMA0DAD_H, 0xb6
+ .set OFFSET_REG_DMA0CNT, 0xb8
+ .set OFFSET_REG_DMA0CNT_L, 0xb8
+ .set OFFSET_REG_DMA0CNT_H, 0xba
+ .set OFFSET_REG_DMA1, 0xbc
+ .set OFFSET_REG_DMA1SAD, 0xbc
+ .set OFFSET_REG_DMA1SAD_L, 0xbc
+ .set OFFSET_REG_DMA1SAD_H, 0xbe
+ .set OFFSET_REG_DMA1DAD, 0xc0
+ .set OFFSET_REG_DMA1DAD_L, 0xc0
+ .set OFFSET_REG_DMA1DAD_H, 0xc2
+ .set OFFSET_REG_DMA1CNT, 0xc4
+ .set OFFSET_REG_DMA1CNT_L, 0xc4
+ .set OFFSET_REG_DMA1CNT_H, 0xc6
+ .set OFFSET_REG_DMA2, 0xc8
+ .set OFFSET_REG_DMA2SAD, 0xc8
+ .set OFFSET_REG_DMA2SAD_L, 0xc8
+ .set OFFSET_REG_DMA2SAD_H, 0xca
+ .set OFFSET_REG_DMA2DAD, 0xcc
+ .set OFFSET_REG_DMA2DAD_L, 0xcc
+ .set OFFSET_REG_DMA2DAD_H, 0xce
+ .set OFFSET_REG_DMA2CNT, 0xd0
+ .set OFFSET_REG_DMA2CNT_L, 0xd0
+ .set OFFSET_REG_DMA2CNT_H, 0xd2
+ .set OFFSET_REG_DMA3, 0xd4
+ .set OFFSET_REG_DMA3SAD, 0xd4
+ .set OFFSET_REG_DMA3SAD_L, 0xd4
+ .set OFFSET_REG_DMA3SAD_H, 0xd6
+ .set OFFSET_REG_DMA3DAD, 0xd8
+ .set OFFSET_REG_DMA3DAD_L, 0xd8
+ .set OFFSET_REG_DMA3DAD_H, 0xda
+ .set OFFSET_REG_DMA3CNT, 0xdc
+ .set OFFSET_REG_DMA3CNT_L, 0xdc
+ .set OFFSET_REG_DMA3CNT_H, 0xde
+
+ .set OFFSET_REG_TM0CNT, 0x100
+ .set OFFSET_REG_TM0CNT_L, 0x100
+ .set OFFSET_REG_TM0CNT_H, 0x102
+ .set OFFSET_REG_TM1CNT, 0x104
+ .set OFFSET_REG_TM1CNT_L, 0x104
+ .set OFFSET_REG_TM1CNT_H, 0x106
+ .set OFFSET_REG_TM2CNT, 0x108
+ .set OFFSET_REG_TM2CNT_L, 0x108
+ .set OFFSET_REG_TM2CNT_H, 0x10a
+ .set OFFSET_REG_TM3CNT, 0x10c
+ .set OFFSET_REG_TM3CNT_L, 0x10c
+ .set OFFSET_REG_TM3CNT_H, 0x10e
+
+ .set OFFSET_REG_SIOCNT, 0x128
+ .set OFFSET_REG_SIODATA8, 0x12a
+ .set OFFSET_REG_SIODATA32, 0x120
+ .set OFFSET_REG_SIOMLT_SEND, 0x12a
+ .set OFFSET_REG_SIOMLT_RECV, 0x120
+ .set OFFSET_REG_SIOMULTI0, 0x120
+ .set OFFSET_REG_SIOMULTI1, 0x122
+ .set OFFSET_REG_SIOMULTI2, 0x124
+ .set OFFSET_REG_SIOMULTI3, 0x126
+
+ .set OFFSET_REG_KEYINPUT, 0x130
+ .set OFFSET_REG_KEYCNT, 0x132
+
+ .set OFFSET_REG_RCNT, 0x134
+
+ .set OFFSET_REG_JOYCNT, 0x140
+ .set OFFSET_REG_JOYSTAT, 0x158
+ .set OFFSET_REG_JOY_RECV, 0x150
+ .set OFFSET_REG_JOY_RECV_L, 0x150
+ .set OFFSET_REG_JOY_RECV_H, 0x152
+ .set OFFSET_REG_JOY_TRANS, 0x154
+ .set OFFSET_REG_JOY_TRANS_L, 0x154
+ .set OFFSET_REG_JOY_TRANS_H, 0x156
+
+ .set OFFSET_REG_IME, 0x208
+ .set OFFSET_REG_IE, 0x200
+ .set OFFSET_REG_IF, 0x202
+
+ .set OFFSET_REG_WAITCNT, 0x204
+
+@ I/O register addresses
+ .set REG_DISPCNT, REG_BASE + OFFSET_REG_DISPCNT
+ .set REG_DISPSTAT, REG_BASE + OFFSET_REG_DISPSTAT
+ .set REG_VCOUNT, REG_BASE + OFFSET_REG_VCOUNT
+ .set REG_BG0CNT, REG_BASE + OFFSET_REG_BG0CNT
+ .set REG_BG1CNT, REG_BASE + OFFSET_REG_BG1CNT
+ .set REG_BG2CNT, REG_BASE + OFFSET_REG_BG2CNT
+ .set REG_BG3CNT, REG_BASE + OFFSET_REG_BG3CNT
+ .set REG_BG0HOFS, REG_BASE + OFFSET_REG_BG0HOFS
+ .set REG_BG0VOFS, REG_BASE + OFFSET_REG_BG0VOFS
+ .set REG_BG1HOFS, REG_BASE + OFFSET_REG_BG1HOFS
+ .set REG_BG1VOFS, REG_BASE + OFFSET_REG_BG1VOFS
+ .set REG_BG2HOFS, REG_BASE + OFFSET_REG_BG2HOFS
+ .set REG_BG2VOFS, REG_BASE + OFFSET_REG_BG2VOFS
+ .set REG_BG3HOFS, REG_BASE + OFFSET_REG_BG3HOFS
+ .set REG_BG3VOFS, REG_BASE + OFFSET_REG_BG3VOFS
+ .set REG_BG2PA, REG_BASE + OFFSET_REG_BG2PA
+ .set REG_BG2PB, REG_BASE + OFFSET_REG_BG2PB
+ .set REG_BG2PC, REG_BASE + OFFSET_REG_BG2PC
+ .set REG_BG2PD, REG_BASE + OFFSET_REG_BG2PD
+ .set REG_BG2X_L, REG_BASE + OFFSET_REG_BG2X_L
+ .set REG_BG2X_H, REG_BASE + OFFSET_REG_BG2X_H
+ .set REG_BG2Y_L, REG_BASE + OFFSET_REG_BG2Y_L
+ .set REG_BG2Y_H, REG_BASE + OFFSET_REG_BG2Y_H
+ .set REG_BG3PA, REG_BASE + OFFSET_REG_BG3PA
+ .set REG_BG3PB, REG_BASE + OFFSET_REG_BG3PB
+ .set REG_BG3PC, REG_BASE + OFFSET_REG_BG3PC
+ .set REG_BG3PD, REG_BASE + OFFSET_REG_BG3PD
+ .set REG_BG3X_L, REG_BASE + OFFSET_REG_BG3X_L
+ .set REG_BG3X_H, REG_BASE + OFFSET_REG_BG3X_H
+ .set REG_BG3Y_L, REG_BASE + OFFSET_REG_BG3Y_L
+ .set REG_BG3Y_H, REG_BASE + OFFSET_REG_BG3Y_H
+ .set REG_WIN0H, REG_BASE + OFFSET_REG_WIN0H
+ .set REG_WIN1H, REG_BASE + OFFSET_REG_WIN1H
+ .set REG_WIN0V, REG_BASE + OFFSET_REG_WIN0V
+ .set REG_WIN1V, REG_BASE + OFFSET_REG_WIN1V
+ .set REG_WININ, REG_BASE + OFFSET_REG_WININ
+ .set REG_WINOUT, REG_BASE + OFFSET_REG_WINOUT
+ .set REG_MOSAIC, REG_BASE + OFFSET_REG_MOSAIC
+ .set REG_BLDCNT, REG_BASE + OFFSET_REG_BLDCNT
+ .set REG_BLDALPHA, REG_BASE + OFFSET_REG_BLDALPHA
+ .set REG_BLDY, REG_BASE + OFFSET_REG_BLDY
+
+ .set REG_SOUND1CNT, REG_BASE + OFFSET_REG_SOUND1CNT
+ .set REG_SOUND1CNT_L, REG_BASE + OFFSET_REG_SOUND1CNT_L
+ .set REG_NR10, REG_BASE + OFFSET_REG_NR10
+ .set REG_SOUND1CNT_H, REG_BASE + OFFSET_REG_SOUND1CNT_H
+ .set REG_NR11, REG_BASE + OFFSET_REG_NR11
+ .set REG_NR12, REG_BASE + OFFSET_REG_NR12
+ .set REG_SOUND1CNT_X, REG_BASE + OFFSET_REG_SOUND1CNT_X
+ .set REG_NR13, REG_BASE + OFFSET_REG_NR13
+ .set REG_NR14, REG_BASE + OFFSET_REG_NR14
+ .set REG_SOUND2CNT, REG_BASE + OFFSET_REG_SOUND2CNT
+ .set REG_SOUND2CNT_L, REG_BASE + OFFSET_REG_SOUND2CNT_L
+ .set REG_NR21, REG_BASE + OFFSET_REG_NR21
+ .set REG_NR22, REG_BASE + OFFSET_REG_NR22
+ .set REG_SOUND2CNT_H, REG_BASE + OFFSET_REG_SOUND2CNT_H
+ .set REG_NR23, REG_BASE + OFFSET_REG_NR23
+ .set REG_NR24, REG_BASE + OFFSET_REG_NR24
+ .set REG_SOUND3CNT, REG_BASE + OFFSET_REG_SOUND3CNT
+ .set REG_SOUND3CNT_L, REG_BASE + OFFSET_REG_SOUND3CNT_L
+ .set REG_NR30, REG_BASE + OFFSET_REG_NR30
+ .set REG_SOUND3CNT_H, REG_BASE + OFFSET_REG_SOUND3CNT_H
+ .set REG_NR31, REG_BASE + OFFSET_REG_NR31
+ .set REG_NR32, REG_BASE + OFFSET_REG_NR32
+ .set REG_SOUND3CNT_X, REG_BASE + OFFSET_REG_SOUND3CNT_X
+ .set REG_NR33, REG_BASE + OFFSET_REG_NR33
+ .set REG_NR34, REG_BASE + OFFSET_REG_NR34
+ .set REG_SOUND4CNT, REG_BASE + OFFSET_REG_SOUND4CNT
+ .set REG_SOUND4CNT_L, REG_BASE + OFFSET_REG_SOUND4CNT_L
+ .set REG_NR41, REG_BASE + OFFSET_REG_NR41
+ .set REG_NR42, REG_BASE + OFFSET_REG_NR42
+ .set REG_SOUND4CNT_H, REG_BASE + OFFSET_REG_SOUND4CNT_H
+ .set REG_NR43, REG_BASE + OFFSET_REG_NR43
+ .set REG_NR44, REG_BASE + OFFSET_REG_NR44
+ .set REG_SOUNDCNT, REG_BASE + OFFSET_REG_SOUNDCNT
+ .set REG_SOUNDCNT_L, REG_BASE + OFFSET_REG_SOUNDCNT_L
+ .set REG_NR50, REG_BASE + OFFSET_REG_NR50
+ .set REG_NR51, REG_BASE + OFFSET_REG_NR51
+ .set REG_SOUNDCNT_H, REG_BASE + OFFSET_REG_SOUNDCNT_H
+ .set REG_SOUNDCNT_X, REG_BASE + OFFSET_REG_SOUNDCNT_X
+ .set REG_NR52, REG_BASE + OFFSET_REG_NR52
+ .set REG_SOUNDBIAS, REG_BASE + OFFSET_REG_SOUNDBIAS
+ .set REG_WAVE_RAM, REG_BASE + OFFSET_REG_WAVE_RAM
+ .set REG_WAVE_RAM0, REG_BASE + OFFSET_REG_WAVE_RAM0
+ .set REG_WAVE_RAM0_L, REG_BASE + OFFSET_REG_WAVE_RAM0_L
+ .set REG_WAVE_RAM0_H, REG_BASE + OFFSET_REG_WAVE_RAM0_H
+ .set REG_WAVE_RAM1, REG_BASE + OFFSET_REG_WAVE_RAM1
+ .set REG_WAVE_RAM1_L, REG_BASE + OFFSET_REG_WAVE_RAM1_L
+ .set REG_WAVE_RAM1_H, REG_BASE + OFFSET_REG_WAVE_RAM1_H
+ .set REG_WAVE_RAM2, REG_BASE + OFFSET_REG_WAVE_RAM2
+ .set REG_WAVE_RAM2_L, REG_BASE + OFFSET_REG_WAVE_RAM2_L
+ .set REG_WAVE_RAM2_H, REG_BASE + OFFSET_REG_WAVE_RAM2_H
+ .set REG_WAVE_RAM3, REG_BASE + OFFSET_REG_WAVE_RAM3
+ .set REG_WAVE_RAM3_L, REG_BASE + OFFSET_REG_WAVE_RAM3_L
+ .set REG_WAVE_RAM3_H, REG_BASE + OFFSET_REG_WAVE_RAM3_H
+ .set REG_FIFO, REG_BASE + OFFSET_REG_FIFO
+ .set REG_FIFO_A, REG_BASE + OFFSET_REG_FIFO_A
+ .set REG_FIFO_A_L, REG_BASE + OFFSET_REG_FIFO_A_L
+ .set REG_FIFO_A_H, REG_BASE + OFFSET_REG_FIFO_A_H
+ .set REG_FIFO_B, REG_BASE + OFFSET_REG_FIFO_B
+ .set REG_FIFO_B_L, REG_BASE + OFFSET_REG_FIFO_B_L
+ .set REG_FIFO_B_H, REG_BASE + OFFSET_REG_FIFO_B_H
+
+ .set REG_DMA0, REG_BASE + OFFSET_REG_DMA0
+ .set REG_DMA0SAD, REG_BASE + OFFSET_REG_DMA0SAD
+ .set REG_DMA0SAD_L, REG_BASE + OFFSET_REG_DMA0SAD_L
+ .set REG_DMA0SAD_H, REG_BASE + OFFSET_REG_DMA0SAD_H
+ .set REG_DMA0DAD, REG_BASE + OFFSET_REG_DMA0DAD
+ .set REG_DMA0DAD_L, REG_BASE + OFFSET_REG_DMA0DAD_L
+ .set REG_DMA0DAD_H, REG_BASE + OFFSET_REG_DMA0DAD_H
+ .set REG_DMA0CNT, REG_BASE + OFFSET_REG_DMA0CNT
+ .set REG_DMA0CNT_L, REG_BASE + OFFSET_REG_DMA0CNT_L
+ .set REG_DMA0CNT_H, REG_BASE + OFFSET_REG_DMA0CNT_H
+ .set REG_DMA1, REG_BASE + OFFSET_REG_DMA1
+ .set REG_DMA1SAD, REG_BASE + OFFSET_REG_DMA1SAD
+ .set REG_DMA1SAD_L, REG_BASE + OFFSET_REG_DMA1SAD_L
+ .set REG_DMA1SAD_H, REG_BASE + OFFSET_REG_DMA1SAD_H
+ .set REG_DMA1DAD, REG_BASE + OFFSET_REG_DMA1DAD
+ .set REG_DMA1DAD_L, REG_BASE + OFFSET_REG_DMA1DAD_L
+ .set REG_DMA1DAD_H, REG_BASE + OFFSET_REG_DMA1DAD_H
+ .set REG_DMA1CNT, REG_BASE + OFFSET_REG_DMA1CNT
+ .set REG_DMA1CNT_L, REG_BASE + OFFSET_REG_DMA1CNT_L
+ .set REG_DMA1CNT_H, REG_BASE + OFFSET_REG_DMA1CNT_H
+ .set REG_DMA2, REG_BASE + OFFSET_REG_DMA2
+ .set REG_DMA2SAD, REG_BASE + OFFSET_REG_DMA2SAD
+ .set REG_DMA2SAD_L, REG_BASE + OFFSET_REG_DMA2SAD_L
+ .set REG_DMA2SAD_H, REG_BASE + OFFSET_REG_DMA2SAD_H
+ .set REG_DMA2DAD, REG_BASE + OFFSET_REG_DMA2DAD
+ .set REG_DMA2DAD_L, REG_BASE + OFFSET_REG_DMA2DAD_L
+ .set REG_DMA2DAD_H, REG_BASE + OFFSET_REG_DMA2DAD_H
+ .set REG_DMA2CNT, REG_BASE + OFFSET_REG_DMA2CNT
+ .set REG_DMA2CNT_L, REG_BASE + OFFSET_REG_DMA2CNT_L
+ .set REG_DMA2CNT_H, REG_BASE + OFFSET_REG_DMA2CNT_H
+ .set REG_DMA3, REG_BASE + OFFSET_REG_DMA3
+ .set REG_DMA3SAD, REG_BASE + OFFSET_REG_DMA3SAD
+ .set REG_DMA3SAD_L, REG_BASE + OFFSET_REG_DMA3SAD_L
+ .set REG_DMA3SAD_H, REG_BASE + OFFSET_REG_DMA3SAD_H
+ .set REG_DMA3DAD, REG_BASE + OFFSET_REG_DMA3DAD
+ .set REG_DMA3DAD_L, REG_BASE + OFFSET_REG_DMA3DAD_L
+ .set REG_DMA3DAD_H, REG_BASE + OFFSET_REG_DMA3DAD_H
+ .set REG_DMA3CNT, REG_BASE + OFFSET_REG_DMA3CNT
+ .set REG_DMA3CNT_L, REG_BASE + OFFSET_REG_DMA3CNT_L
+ .set REG_DMA3CNT_H, REG_BASE + OFFSET_REG_DMA3CNT_H
+
+ .set REG_TM0CNT, REG_BASE + OFFSET_REG_TM0CNT
+ .set REG_TM0CNT_L, REG_BASE + OFFSET_REG_TM0CNT_L
+ .set REG_TM0CNT_H, REG_BASE + OFFSET_REG_TM0CNT_H
+ .set REG_TM1CNT, REG_BASE + OFFSET_REG_TM1CNT
+ .set REG_TM1CNT_L, REG_BASE + OFFSET_REG_TM1CNT_L
+ .set REG_TM1CNT_H, REG_BASE + OFFSET_REG_TM1CNT_H
+ .set REG_TM2CNT, REG_BASE + OFFSET_REG_TM2CNT
+ .set REG_TM2CNT_L, REG_BASE + OFFSET_REG_TM2CNT_L
+ .set REG_TM2CNT_H, REG_BASE + OFFSET_REG_TM2CNT_H
+ .set REG_TM3CNT, REG_BASE + OFFSET_REG_TM3CNT
+ .set REG_TM3CNT_L, REG_BASE + OFFSET_REG_TM3CNT_L
+ .set REG_TM3CNT_H, REG_BASE + OFFSET_REG_TM3CNT_H
+
+ .set REG_SIOCNT, REG_BASE + OFFSET_REG_SIOCNT
+ .set REG_SIODATA8, REG_BASE + OFFSET_REG_SIODATA8
+ .set REG_SIODATA32, REG_BASE + OFFSET_REG_SIODATA32
+ .set REG_SIOMLT_SEND, REG_BASE + OFFSET_REG_SIOMLT_SEND
+ .set REG_SIOMLT_RECV, REG_BASE + OFFSET_REG_SIOMLT_RECV
+ .set REG_SIOMULTI0, REG_BASE + OFFSET_REG_SIOMULTI0
+ .set REG_SIOMULTI1, REG_BASE + OFFSET_REG_SIOMULTI1
+ .set REG_SIOMULTI2, REG_BASE + OFFSET_REG_SIOMULTI2
+ .set REG_SIOMULTI3, REG_BASE + OFFSET_REG_SIOMULTI3
+
+ .set REG_KEYINPUT, REG_BASE + OFFSET_REG_KEYINPUT
+ .set REG_KEYCNT, REG_BASE + OFFSET_REG_KEYCNT
+
+ .set REG_RCNT, REG_BASE + OFFSET_REG_RCNT
+
+ .set REG_JOYCNT, REG_BASE + OFFSET_REG_JOYCNT
+ .set REG_JOYSTAT, REG_BASE + OFFSET_REG_JOYSTAT
+ .set REG_JOY_RECV, REG_BASE + OFFSET_REG_JOY_RECV
+ .set REG_JOY_RECV_L, REG_BASE + OFFSET_REG_JOY_RECV_L
+ .set REG_JOY_RECV_H, REG_BASE + OFFSET_REG_JOY_RECV_H
+ .set REG_JOY_TRANS, REG_BASE + OFFSET_REG_JOY_TRANS
+ .set REG_JOY_TRANS_L, REG_BASE + OFFSET_REG_JOY_TRANS_L
+ .set REG_JOY_TRANS_H, REG_BASE + OFFSET_REG_JOY_TRANS_H
+
+ .set REG_IME, REG_BASE + OFFSET_REG_IME
+ .set REG_IE, REG_BASE + OFFSET_REG_IE
+ .set REG_IF, REG_BASE + OFFSET_REG_IF
+
+ .set REG_WAITCNT, REG_BASE + OFFSET_REG_WAITCNT
+
+@ DMA register constants
+
+ .set DMA_DEST_INC, 0x0000
+ .set DMA_DEST_DEC, 0x0020
+ .set DMA_DEST_FIXED, 0x0040
+ .set DMA_DEST_RELOAD, 0x0060
+ .set DMA_SRC_INC, 0x0000
+ .set DMA_SRC_DEC, 0x0080
+ .set DMA_SRC_FIXED, 0x0100
+ .set DMA_REPEAT, 0x0200
+ .set DMA_16BIT, 0x0000
+ .set DMA_32BIT, 0x0400
+ .set DMA_DREQ_ON, 0x0800
+ .set DMA_START_NOW, 0x0000
+ .set DMA_START_VBLANK, 0x1000
+ .set DMA_START_HBLANK, 0x2000
+ .set DMA_START_SPECIAL, 0x3000
+ .set DMA_INTR_ENABLE, 0x4000
+ .set DMA_ENABLE, 0x8000
+
+@ OAM attribute constants
+
+ .set OAM_OBJ_NORMAL, 0x00000000
+ .set OAM_OBJ_BLEND, 0x00000400
+ .set OAM_OBJ_WINDOW, 0x00000800
+
+ .set OAM_AFFINE_NONE, 0x00000000
+ .set OAM_AFFINE_NORMAL_SIZE, 0x00000100
+ .set OAM_OBJ_DISABLED, 0x00000200
+ .set OAM_AFFINE_DOUBLE_SIZE, 0x00000300
+
+ .set OAM_MOSAIC_OFF, 0x00000000
+ .set OAM_MOSAIC_ON, 0x00001000
+
+ .set OAM_4BPP, 0x00000000
+ .set OAM_8BPP, 0x00002000
+
+ .set OAM_H_FLIP, 0x10000000
+ .set OAM_V_FLIP, 0x20000000
+
+ .set OAM_SQUARE, 0x00000000
+ .set OAM_H_RECTANGLE, 0x00004000
+ .set OAM_V_RECTANGLE, 0x00008000
+ .set OAM_SIZE_0, 0x00000000
+ .set OAM_SIZE_1, 0x40000000
+ .set OAM_SIZE_2, 0x80000000
+ .set OAM_SIZE_3, 0xc0000000
+
+ .set OAM_SIZE_8x8, OAM_SIZE_0 | OAM_SQUARE
+ .set OAM_SIZE_16x16, OAM_SIZE_1 | OAM_SQUARE
+ .set OAM_SIZE_32x32, OAM_SIZE_2 | OAM_SQUARE
+ .set OAM_SIZE_64x64, OAM_SIZE_3 | OAM_SQUARE
+
+ .set OAM_SIZE_16x8, OAM_SIZE_0 | OAM_H_RECTANGLE
+ .set OAM_SIZE_32x8, OAM_SIZE_1 | OAM_H_RECTANGLE
+ .set OAM_SIZE_32x16, OAM_SIZE_2 | OAM_H_RECTANGLE
+ .set OAM_SIZE_64x32, OAM_SIZE_3 | OAM_H_RECTANGLE
+
+ .set OAM_SIZE_8x16, OAM_SIZE_0 | OAM_V_RECTANGLE
+ .set OAM_SIZE_8x32, OAM_SIZE_1 | OAM_V_RECTANGLE
+ .set OAM_SIZE_16x32, OAM_SIZE_2 | OAM_V_RECTANGLE
+ .set OAM_SIZE_32x64, OAM_SIZE_3 | OAM_V_RECTANGLE
diff --git a/constants/item_data_constants.inc b/constants/item_data_constants.inc
new file mode 100644
index 000000000..07ceb6e3b
--- /dev/null
+++ b/constants/item_data_constants.inc
@@ -0,0 +1,5 @@
+ .set POCKET_ITEMS, 0x01
+ .set POCKET_POKE_BALLS, 0x02
+ .set POCKET_TM_HM, 0x03
+ .set POCKET_BERRIES, 0x04
+ .set POCKET_KEY_ITEMS, 0x05
diff --git a/constants/m4a_constants.inc b/constants/m4a_constants.inc
new file mode 100644
index 000000000..62ca5bb55
--- /dev/null
+++ b/constants/m4a_constants.inc
@@ -0,0 +1,199 @@
+ .equiv ID_NUMBER, 0x68736d53
+
+ .equiv PCM_DMA_BUF_SIZE, 1584
+
+ .equiv TONEDATA_TYPE_CGB, 0x07
+ .equiv TONEDATA_TYPE_FIX, 0x08
+ .equiv TONEDATA_TYPE_SPL, 0x40 @ key split
+ .equiv TONEDATA_TYPE_RHY, 0x80 @ rhythm
+
+ .macro struct_begin
+ .struct 0
+ .endm
+
+ .macro struct_field name, size
+\name:
+ .struct \name + \size
+ .endm
+
+ struct_begin
+ struct_field o_SoundInfo_ident, 4
+ struct_field o_SoundInfo_pcmDmaCounter, 1
+ struct_field o_SoundInfo_reverb, 1
+ struct_field o_SoundInfo_maxChans, 1
+ struct_field o_SoundInfo_masterVolume, 1
+ struct_field o_SoundInfo_freq, 1
+ struct_field o_SoundInfo_mode, 1
+ struct_field o_SoundInfo_c15, 1
+ struct_field o_SoundInfo_pcmDmaPeriod, 1
+ struct_field o_SoundInfo_maxLines, 1
+ struct_field o_SoundInfo_gap, 3
+ struct_field o_SoundInfo_pcmSamplesPerVBlank, 4
+ struct_field o_SoundInfo_pcmFreq, 4
+ struct_field o_SoundInfo_divFreq, 4
+ struct_field o_SoundInfo_cgbChans, 4
+ struct_field o_SoundInfo_func, 4
+ struct_field o_SoundInfo_intp, 4
+ struct_field o_SoundInfo_CgbSound, 4
+ struct_field o_SoundInfo_CgbOscOff, 4
+ struct_field o_SoundInfo_MidiKeyToCgbFreq, 4
+ struct_field o_SoundInfo_MPlayJumpTable, 4
+ struct_field o_SoundInfo_plynote, 4
+ struct_field o_SoundInfo_ExtVolPit, 4
+ struct_field o_SoundInfo_gap2, 16
+ struct_field o_SoundInfo_chans, 768
+ struct_field o_SoundInfo_pcmBuffer, PCM_DMA_BUF_SIZE * 2
+ struct_field SoundInfo_size, 0
+
+ struct_begin
+ struct_field o_SoundChannel_status, 1
+ struct_field o_SoundChannel_type, 1
+ struct_field o_SoundChannel_rightVolume, 1
+ struct_field o_SoundChannel_leftVolume, 1
+ struct_field o_SoundChannel_attack, 1
+ struct_field o_SoundChannel_decay, 1
+ struct_field o_SoundChannel_sustain, 1
+ struct_field o_SoundChannel_release, 1
+ struct_field o_SoundChannel_ky, 1
+ struct_field o_SoundChannel_ev, 1
+ struct_field o_SoundChannel_er, 1
+ struct_field o_SoundChannel_el, 1
+ struct_field o_SoundChannel_iev, 1
+ struct_field o_SoundChannel_iel, 1
+ struct_field o_SoundChannel_d1, 1
+ struct_field o_SoundChannel_d2, 1
+ struct_field o_SoundChannel_gt, 1
+ struct_field o_SoundChannel_mk, 1
+ struct_field o_SoundChannel_ve, 1
+ struct_field o_SoundChannel_pr, 1
+ struct_field o_SoundChannel_rp, 1
+ struct_field o_SoundChannel_d3, 3
+ struct_field o_SoundChannel_ct, 4
+ struct_field o_SoundChannel_fw, 4
+ struct_field o_SoundChannel_freq, 4
+ struct_field o_SoundChannel_wav, 4
+ struct_field o_SoundChannel_cp, 4
+ struct_field o_SoundChannel_track, 4
+ struct_field o_SoundChannel_pp, 4
+ struct_field o_SoundChannel_np, 4
+ struct_field o_SoundChannel_d4, 4
+ struct_field o_SoundChannel_xpi, 2
+ struct_field o_SoundChannel_xpc, 2
+ struct_field SoundChannel_size, 0
+
+ struct_begin
+ struct_field o_MusicPlayerTrack_flags, 1
+ struct_field o_MusicPlayerTrack_wait, 1
+ struct_field o_MusicPlayerTrack_patternLevel, 1
+ struct_field o_MusicPlayerTrack_repN, 1
+ struct_field o_MusicPlayerTrack_gateTime, 1
+ struct_field o_MusicPlayerTrack_key, 1
+ struct_field o_MusicPlayerTrack_velocity, 1
+ struct_field o_MusicPlayerTrack_runningStatus, 1
+ struct_field o_MusicPlayerTrack_keyM, 1
+ struct_field o_MusicPlayerTrack_pitM, 1
+ struct_field o_MusicPlayerTrack_keyShift, 1
+ struct_field o_MusicPlayerTrack_keyShiftX, 1
+ struct_field o_MusicPlayerTrack_tune, 1
+ struct_field o_MusicPlayerTrack_pitX, 1
+ struct_field o_MusicPlayerTrack_bend, 1
+ struct_field o_MusicPlayerTrack_bendRange, 1
+ struct_field o_MusicPlayerTrack_volMR, 1
+ struct_field o_MusicPlayerTrack_volML, 1
+ struct_field o_MusicPlayerTrack_vol, 1
+ struct_field o_MusicPlayerTrack_volX, 1
+ struct_field o_MusicPlayerTrack_pan, 1
+ struct_field o_MusicPlayerTrack_panX, 1
+ struct_field o_MusicPlayerTrack_modM, 1
+ struct_field o_MusicPlayerTrack_mod, 1
+ struct_field o_MusicPlayerTrack_modT, 1
+ struct_field o_MusicPlayerTrack_lfoSpeed, 1
+ struct_field o_MusicPlayerTrack_lfoSpeedC, 1
+ struct_field o_MusicPlayerTrack_lfoDelay, 1
+ struct_field o_MusicPlayerTrack_lfoDelayC, 1
+ struct_field o_MusicPlayerTrack_priority, 1
+ struct_field o_MusicPlayerTrack_echoVolume, 1
+ struct_field o_MusicPlayerTrack_echoLength, 1
+ struct_field o_MusicPlayerTrack_chan, 4
+ struct_field o_MusicPlayerTrack_ToneData_type, 1
+ struct_field o_MusicPlayerTrack_ToneData_key, 1
+ struct_field o_MusicPlayerTrack_ToneData_length, 1
+ struct_field o_MusicPlayerTrack_ToneData_pan_sweep, 1
+ struct_field o_MusicPlayerTrack_ToneData_wav, 4
+ struct_field o_MusicPlayerTrack_ToneData_attack, 1
+ struct_field o_MusicPlayerTrack_ToneData_decay, 1
+ struct_field o_MusicPlayerTrack_ToneData_sustain, 1
+ struct_field o_MusicPlayerTrack_ToneData_release, 1
+ struct_field o_MusicPlayerTrack_gap, 10
+ struct_field o_MusicPlayerTrack_unk_3A, 2
+ struct_field o_MusicPlayerTrack_unk_3C, 4
+ struct_field o_MusicPlayerTrack_cmdPtr, 4
+ struct_field o_MusicPlayerTrack_patternStack, 12
+ struct_field MusicPlayerTrack_size, 0
+
+ .equiv o_MusicPlayerTrack_ToneData_keySplitTable, o_MusicPlayerTrack_ToneData_attack
+
+ struct_begin
+ struct_field o_MusicPlayerInfo_songHeader, 4
+ struct_field o_MusicPlayerInfo_status, 4
+ struct_field o_MusicPlayerInfo_trackCount, 1
+ struct_field o_MusicPlayerInfo_priority, 1
+ struct_field o_MusicPlayerInfo_cmd, 1
+ struct_field o_MusicPlayerInfo_unk_B, 1
+ struct_field o_MusicPlayerInfo_clock, 4
+ struct_field o_MusicPlayerInfo_gap, 8
+ struct_field o_MusicPlayerInfo_memAccArea, 4
+ struct_field o_MusicPlayerInfo_tempoD, 2
+ struct_field o_MusicPlayerInfo_tempoU, 2
+ struct_field o_MusicPlayerInfo_tempoI, 2
+ struct_field o_MusicPlayerInfo_tempoC, 2
+ struct_field o_MusicPlayerInfo_fadeOI, 2
+ struct_field o_MusicPlayerInfo_fadeOC, 2
+ struct_field o_MusicPlayerInfo_fadeOV, 2
+ struct_field o_MusicPlayerInfo_padding, 2
+ struct_field o_MusicPlayerInfo_tracks, 4
+ struct_field o_MusicPlayerInfo_tone, 4
+ struct_field o_MusicPlayerInfo_ident, 4
+ struct_field o_MusicPlayerInfo_func, 4
+ struct_field o_MusicPlayerInfo_intp, 4
+ struct_field MusicPlayerInfo_size, 0
+
+ struct_begin
+ struct_field o_CgbChannel_sf, 1
+ struct_field o_CgbChannel_ty, 1
+ struct_field o_CgbChannel_rightVolume, 1
+ struct_field o_CgbChannel_leftVolume, 1
+ struct_field o_CgbChannel_at, 1
+ struct_field o_CgbChannel_de, 1
+ struct_field o_CgbChannel_su, 1
+ struct_field o_CgbChannel_re, 1
+ struct_field o_CgbChannel_ky, 1
+ struct_field o_CgbChannel_ev, 1
+ struct_field o_CgbChannel_eg, 1
+ struct_field o_CgbChannel_ec, 1
+ struct_field o_CgbChannel_echoVolume, 1
+ struct_field o_CgbChannel_echoLength, 1
+ struct_field o_CgbChannel_d1, 1
+ struct_field o_CgbChannel_d2, 1
+ struct_field o_CgbChannel_gt, 1
+ struct_field o_CgbChannel_mk, 1
+ struct_field o_CgbChannel_ve, 1
+ struct_field o_CgbChannel_pr, 1
+ struct_field o_CgbChannel_rp, 1
+ struct_field o_CgbChannel_d3, 3
+ struct_field o_CgbChannel_d5, 1
+ struct_field o_CgbChannel_sg, 1
+ struct_field o_CgbChannel_n4, 1
+ struct_field o_CgbChannel_pan, 1
+ struct_field o_CgbChannel_panMask, 1
+ struct_field o_CgbChannel_mo, 1
+ struct_field o_CgbChannel_le, 1
+ struct_field o_CgbChannel_sw, 1
+ struct_field o_CgbChannel_fr, 4
+ struct_field o_CgbChannel_wp, 4
+ struct_field o_CgbChannel_cp, 4
+ struct_field o_CgbChannel_tp, 4
+ struct_field o_CgbChannel_pp, 4
+ struct_field o_CgbChannel_np, 4
+ struct_field o_CgbChannel_d4, 8
+ struct_field CgbChannel_size, 0
diff --git a/constants/misc_constants.inc b/constants/misc_constants.inc
new file mode 100644
index 000000000..5f4330928
--- /dev/null
+++ b/constants/misc_constants.inc
@@ -0,0 +1,51 @@
+ .set TRUE, 1
+ .set FALSE, 0
+
+ .set NULL, 0
+
+ .set POKEMON_NAME_LENGTH, 11
+ .set MOVE_NAME_LENGTH, 13
+
+ .set SPRITE_SIZE_8x8, (OAM_SIZE_0 >> 28) | (OAM_SQUARE >> 14)
+ .set SPRITE_SIZE_16x16, (OAM_SIZE_1 >> 28) | (OAM_SQUARE >> 14)
+ .set SPRITE_SIZE_32x32, (OAM_SIZE_2 >> 28) | (OAM_SQUARE >> 14)
+ .set SPRITE_SIZE_64x64, (OAM_SIZE_3 >> 28) | (OAM_SQUARE >> 14)
+
+ .set SPRITE_SIZE_16x8, (OAM_SIZE_0 >> 28) | (OAM_H_RECTANGLE >> 14)
+ .set SPRITE_SIZE_32x8, (OAM_SIZE_1 >> 28) | (OAM_H_RECTANGLE >> 14)
+ .set SPRITE_SIZE_32x16, (OAM_SIZE_2 >> 28) | (OAM_H_RECTANGLE >> 14)
+ .set SPRITE_SIZE_64x32, (OAM_SIZE_3 >> 28) | (OAM_H_RECTANGLE >> 14)
+
+ .set SPRITE_SIZE_8x16, (OAM_SIZE_0 >> 28) | (OAM_V_RECTANGLE >> 14)
+ .set SPRITE_SIZE_8x32, (OAM_SIZE_1 >> 28) | (OAM_V_RECTANGLE >> 14)
+ .set SPRITE_SIZE_16x32, (OAM_SIZE_2 >> 28) | (OAM_V_RECTANGLE >> 14)
+ .set SPRITE_SIZE_32x64, (OAM_SIZE_3 >> 28) | (OAM_V_RECTANGLE >> 14)
+
+ .set OBJ_IMAGE_ANIM_H_FLIP, 1 << 6
+ .set OBJ_IMAGE_ANIM_V_FLIP, 1 << 7
+
+ .equiv DIR_SOUTH, 1
+ .equiv DIR_NORTH, 2
+ .equiv DIR_WEST, 3
+ .equiv DIR_EAST, 4
+
+ .equiv MALE, 0
+ .equiv FEMALE, 1
+
+ .ifdef ENGLISH
+ .equiv GAME_LANGUAGE, 2
+ .else
+ .ifdef GERMAN
+ .equiv GAME_LANGUAGE, 5
+ .endif
+ .endif
+
+ .equiv ENEMY_TYPE1, 0
+ .equiv ENEMY_TYPE2, 1
+ .equiv PLAYER_TYPE1, 2
+ .equiv PLAYER_TYPE2, 3
+ .equiv CURRENT_MOVE, 4
+
+ .equiv LESS_THAN, 0
+ .equiv GREATER_THAN, 1
+ .equiv EQUAL, 2
diff --git a/constants/pokemon_data_constants.inc b/constants/pokemon_data_constants.inc
new file mode 100644
index 000000000..cf5d4df41
--- /dev/null
+++ b/constants/pokemon_data_constants.inc
@@ -0,0 +1,78 @@
+ .set NATURE_HARDY, 0
+ .set NATURE_LONELY, 1
+ .set NATURE_BRAVE, 2
+ .set NATURE_ADAMANT, 3
+ .set NATURE_NAUGHTY, 4
+ .set NATURE_BOLD, 5
+ .set NATURE_DOCILE, 6
+ .set NATURE_RELAXED, 7
+ .set NATURE_IMPISH, 8
+ .set NATURE_LAX, 9
+ .set NATURE_TIMID, 10
+ .set NATURE_HASTY, 11
+ .set NATURE_SERIOUS, 12
+ .set NATURE_JOLLY, 13
+ .set NATURE_NAIVE, 14
+ .set NATURE_MODEST, 15
+ .set NATURE_MILD, 16
+ .set NATURE_QUIET, 17
+ .set NATURE_BASHFUL, 18
+ .set NATURE_RASH, 19
+ .set NATURE_CALM, 20
+ .set NATURE_GENTLE, 21
+ .set NATURE_SASSY, 22
+ .set NATURE_CAREFUL, 23
+ .set NATURE_QUIRKY, 24
+
+ .set GROWTH_MEDIUM_FAST, 0x00
+ .set GROWTH_ERRATIC, 0x01
+ .set GROWTH_FLUCTUATING, 0x02
+ .set GROWTH_MEDIUM_SLOW, 0x03
+ .set GROWTH_FAST, 0x04
+ .set GROWTH_SLOW, 0x05
+
+ .set EGG_GROUP_NONE, 0x00
+ .set EGG_GROUP_MONSTER, 0x01
+ .set EGG_GROUP_WATER_1, 0x02
+ .set EGG_GROUP_BUG, 0x03
+ .set EGG_GROUP_FLYING, 0x04
+ .set EGG_GROUP_FIELD, 0x05
+ .set EGG_GROUP_FAIRY, 0x06
+ .set EGG_GROUP_GRASS, 0x07
+ .set EGG_GROUP_HUMAN_LIKE, 0x08
+ .set EGG_GROUP_WATER_3, 0x09
+ .set EGG_GROUP_MINERAL, 0x0a
+ .set EGG_GROUP_AMORPHOUS, 0x0b
+ .set EGG_GROUP_WATER_2, 0x0c
+ .set EGG_GROUP_DITTO, 0x0d
+ .set EGG_GROUP_DRAGON, 0x0e
+ .set EGG_GROUP_UNDISCOVERED, 0x0f
+
+ .set BODY_COLOR_RED, 0x00
+ .set BODY_COLOR_BLUE, 0x01
+ .set BODY_COLOR_YELLOW, 0x02
+ .set BODY_COLOR_GREEN, 0x03
+ .set BODY_COLOR_BLACK, 0x04
+ .set BODY_COLOR_BROWN, 0x05
+ .set BODY_COLOR_PURPLE, 0x06
+ .set BODY_COLOR_GRAY, 0x07
+ .set BODY_COLOR_WHITE, 0x08
+ .set BODY_COLOR_PINK, 0x09
+
+ .set F_SUMMARY_SCREEN_FLIP_SPRITE, 0x80
+
+ .set EVO_FRIENDSHIP, 0x0001 @ Pokémon levels up with friendship ≥ 220
+ .set EVO_FRIENDSHIP_DAY, 0x0002 @ Pokémon levels up during the day with friendship ≥ 220
+ .set EVO_FRIENDSHIP_NIGHT, 0x0003 @ Pokémon levels up at night with friendship ≥ 220
+ .set EVO_LEVEL, 0x0004 @ Pokémon reaches the specified level
+ .set EVO_TRADE, 0x0005 @ Pokémon is traded
+ .set EVO_TRADE_ITEM, 0x0006 @ Pokémon is traded while it's holding the specified item
+ .set EVO_ITEM, 0x0007 @ specified item is used on Pokémon
+ .set EVO_LEVEL_ATK_GT_DEF, 0x0008 @ Pokémon reaches the specified level with attack > defense
+ .set EVO_LEVEL_ATK_EQ_DEF, 0x0009 @ Pokémon reaches the specified level with attack = defense
+ .set EVO_LEVEL_ATK_LT_DEF, 0x000a @ Pokémon reaches the specified level with attack < defense
+ .set EVO_LEVEL_SILCOON, 0x000b @ Pokémon reaches the specified level with a Silcoon personality value
+ .set EVO_LEVEL_CASCOON, 0x000c @ Pokémon reaches the specified level with a Cascoon personality value
+ .set EVO_LEVEL_NINJASK, 0x000d @ Pokémon reaches the specified level (special value for Ninjask)
+ .set EVO_LEVEL_SHEDINJA, 0x000e @ Pokémon reaches the specified level (special value for Shedinja)
+ .set EVO_BEAUTY, 0x000f @ Pokémon levels up with beauty ≥ specified value
diff --git a/constants/trainer_constants.inc b/constants/trainer_constants.inc
new file mode 100644
index 000000000..48ed3036e
--- /dev/null
+++ b/constants/trainer_constants.inc
@@ -0,0 +1,243 @@
+ .set TRAINER_CLASS_AQUA_LEADER, 0
+ .set TRAINER_CLASS_TEAM_AQUA_M, 1
+ .set TRAINER_CLASS_TEAM_AQUA_F, 2
+ .set TRAINER_CLASS_AROMA_LADY, 3
+ .set TRAINER_CLASS_RUIN_MANIAC, 4
+ .set TRAINER_CLASS_INTERVIEWER, 5
+ .set TRAINER_CLASS_TUBER_F, 6
+ .set TRAINER_CLASS_TUBER_M, 7
+ .set TRAINER_CLASS_COOL_TRAINER_M, 8
+ .set TRAINER_CLASS_COOL_TRAINER_F, 9
+ .set TRAINER_CLASS_HEX_MANIAC, 10
+ .set TRAINER_CLASS_LADY, 11
+ .set TRAINER_CLASS_BEAUTY, 12
+ .set TRAINER_CLASS_RICH_BOY, 13
+ .set TRAINER_CLASS_POKEMANIAC, 14
+ .set TRAINER_CLASS_SWIMMER_M, 15
+ .set TRAINER_CLASS_BLACK_BELT, 16
+ .set TRAINER_CLASS_GUITARIST, 17
+ .set TRAINER_CLASS_KINDLER, 18
+ .set TRAINER_CLASS_CAMPER, 19
+ .set TRAINER_CLASS_BUG_MANIAC, 20
+ .set TRAINER_CLASS_PSYCHIC_M, 21
+ .set TRAINER_CLASS_PSYCHIC_F, 22
+ .set TRAINER_CLASS_GENTLEMAN, 23
+ .set TRAINER_CLASS_ELITE_FOUR_M, 24
+ .set TRAINER_CLASS_ELITE_FOUR_F, 25
+ .set TRAINER_CLASS_LEADER_F, 26
+ .set TRAINER_CLASS_LEADER_M, 27
+ .set TRAINER_CLASS_LEADER_MF, 28
+ .set TRAINER_CLASS_SCHOOL_KID_M, 29
+ .set TRAINER_CLASS_SCHOOL_KID_F, 30
+ .set TRAINER_CLASS_SR_AND_JR, 31
+ .set TRAINER_CLASS_POKEFAN_M, 32
+ .set TRAINER_CLASS_POKEFAN_F, 33
+ .set TRAINER_CLASS_EXPERT_M, 34
+ .set TRAINER_CLASS_EXPERT_F, 35
+ .set TRAINER_CLASS_YOUNGSTER, 36
+ .set TRAINER_CLASS_CHAMPION, 37
+ .set TRAINER_CLASS_FISHERMAN, 38
+ .set TRAINER_CLASS_CYCLING_TRIATHLETE_M, 39
+ .set TRAINER_CLASS_CYCLING_TRIATHLETE_F, 40
+ .set TRAINER_CLASS_RUNNING_TRIATHLETE_M, 41
+ .set TRAINER_CLASS_RUNNING_TRIATHLETE_F, 42
+ .set TRAINER_CLASS_SWIMMING_TRIATHLETE_M, 43
+ .set TRAINER_CLASS_SWIMMING_TRIATHLETE_F, 44
+ .set TRAINER_CLASS_DRAGON_TAMER, 45
+ .set TRAINER_CLASS_BIRD_KEEPER, 46
+ .set TRAINER_CLASS_NINJA_BOY, 47
+ .set TRAINER_CLASS_BATTLE_GIRL, 48
+ .set TRAINER_CLASS_PARASOL_LADY, 49
+ .set TRAINER_CLASS_SWIMMER_F, 50
+ .set TRAINER_CLASS_PICNICKER, 51
+ .set TRAINER_CLASS_TWINS, 52
+ .set TRAINER_CLASS_SAILOR, 53
+ .set TRAINER_CLASS_BOARDER_1, 54
+ .set TRAINER_CLASS_BOARDER_2, 55
+ .set TRAINER_CLASS_COLLECTOR, 56
+ .set TRAINER_CLASS_WALLY, 57
+ .set TRAINER_CLASS_BRENDAN_1, 58
+ .set TRAINER_CLASS_BRENDAN_2, 59
+ .set TRAINER_CLASS_BRENDAN_3, 60
+ .set TRAINER_CLASS_MAY_1, 61
+ .set TRAINER_CLASS_MAY_2, 62
+ .set TRAINER_CLASS_MAY_3, 63
+ .set TRAINER_CLASS_POKEMON_BREEDER_M, 64
+ .set TRAINER_CLASS_POKEMON_BREEDER_F, 65
+ .set TRAINER_CLASS_POKEMON_RANGER_M, 66
+ .set TRAINER_CLASS_POKEMON_RANGER_F, 67
+ .set TRAINER_CLASS_MAGMA_LEADER, 68
+ .set TRAINER_CLASS_TEAM_MAGMA_M, 69
+ .set TRAINER_CLASS_TEAM_MAGMA_F, 70
+ .set TRAINER_CLASS_LASS, 71
+ .set TRAINER_CLASS_BUG_CATCHER, 72
+ .set TRAINER_CLASS_HIKER, 73
+ .set TRAINER_CLASS_YOUNG_COUPLE, 74
+ .set TRAINER_CLASS_OLD_COUPLE, 75
+ .set TRAINER_CLASS_SIS_AND_BRO, 76
+
+ .set TRAINER_PIC_BRENDAN, 0
+ .set TRAINER_PIC_MAY, 1
+ .set TRAINER_PIC_LASS, 2
+ .set TRAINER_PIC_YOUNGSTER, 3
+ .set TRAINER_PIC_HIKER, 4
+ .set TRAINER_PIC_BEAUTY, 5
+ .set TRAINER_PIC_FISHERMAN, 6
+ .set TRAINER_PIC_LADY, 7
+ .set TRAINER_PIC_CYCLING_TRIATHLETE_M, 8
+ .set TRAINER_PIC_AQUA_GRUNT_M, 9
+ .set TRAINER_PIC_TWINS, 10
+ .set TRAINER_PIC_SWIMMER_F, 11
+ .set TRAINER_PIC_BUG_CATCHER, 12
+ .set TRAINER_PIC_SCHOOL_KID_M, 13
+ .set TRAINER_PIC_RICH_BOY, 14
+ .set TRAINER_PIC_SR_AND_JR, 15
+ .set TRAINER_PIC_BLACK_BELT, 16
+ .set TRAINER_PIC_WALLY, 17
+ .set TRAINER_PIC_AQUA_GRUNT_F, 18
+ .set TRAINER_PIC_TUBER_F, 19
+ .set TRAINER_PIC_HEX_MANIAC, 20
+ .set TRAINER_PIC_POKEMON_BREEDER_F, 21
+ .set TRAINER_PIC_MAGMA_GRUNT_M, 22
+ .set TRAINER_PIC_MAGMA_GRUNT_F, 23
+ .set TRAINER_PIC_INTERVIEWER, 24
+ .set TRAINER_PIC_TUBER_M, 25
+ .set TRAINER_PIC_YOUNG_COUPLE, 26
+ .set TRAINER_PIC_GUITARIST, 27
+ .set TRAINER_PIC_GENTLEMAN, 28
+ .set TRAINER_PIC_STEVEN, 29
+ .set TRAINER_PIC_MAXIE, 30
+ .set TRAINER_PIC_RUNNING_TRIATHLETE_F, 31
+ .set TRAINER_PIC_RUNNING_TRIATHLETE_M, 32
+ .set TRAINER_PIC_BATTLE_GIRL, 33
+ .set TRAINER_PIC_CYCLING_TRIATHLETE_F, 34
+ .set TRAINER_PIC_SWIMMER_M, 35
+ .set TRAINER_PIC_POKEFAN_F, 36
+ .set TRAINER_PIC_EXPERT_M, 37
+ .set TRAINER_PIC_EXPERT_F, 38
+ .set TRAINER_PIC_SWIMMING_TRIATHLETE_M, 39
+ .set TRAINER_PIC_SWIMMING_TRIATHLETE_F, 40
+ .set TRAINER_PIC_DRAGON_TAMER, 41
+ .set TRAINER_PIC_BIRD_KEEPER, 42
+ .set TRAINER_PIC_NINJA_BOY, 43
+ .set TRAINER_PIC_PARASOL_LADY, 44
+ .set TRAINER_PIC_BUG_MANIAC, 45
+ .set TRAINER_PIC_SAILOR, 46
+ .set TRAINER_PIC_COLLECTOR, 47
+ .set TRAINER_PIC_POKEMON_BREEDER_M, 48
+ .set TRAINER_PIC_POKEMON_RANGER_M, 49
+ .set TRAINER_PIC_POKEMON_RANGER_F, 50
+ .set TRAINER_PIC_MAGMA_ADMIN_M, 51
+ .set TRAINER_PIC_MAGMA_ADMIN_F, 52
+ .set TRAINER_PIC_AROMA_LADY, 53
+ .set TRAINER_PIC_RUIN_MANIAC, 54
+ .set TRAINER_PIC_COOL_TRAINER_M, 55
+ .set TRAINER_PIC_COOL_TRAINER_F, 56
+ .set TRAINER_PIC_POKEMANIAC, 57
+ .set TRAINER_PIC_KINDLER, 58
+ .set TRAINER_PIC_CAMPER, 59
+ .set TRAINER_PIC_PICNICKER, 60
+ .set TRAINER_PIC_PSYCHIC_M, 61
+ .set TRAINER_PIC_PSYCHIC_F, 62
+ .set TRAINER_PIC_SCHOOL_KID_F, 63
+ .set TRAINER_PIC_POKEFAN_M, 64
+ .set TRAINER_PIC_SIS_AND_BRO, 65
+ .set TRAINER_PIC_OLD_COUPLE, 66
+ .set TRAINER_PIC_AQUA_ADMIN_M, 67
+ .set TRAINER_PIC_AQUA_ADMIN_F, 68
+ .set TRAINER_PIC_UNUSED_AQUA, 69
+ .set TRAINER_PIC_ARCHIE, 70
+ .set TRAINER_PIC_ROXANNE, 71
+ .set TRAINER_PIC_BRAWLY, 72
+ .set TRAINER_PIC_WATTSON, 73
+ .set TRAINER_PIC_FLANNERY, 74
+ .set TRAINER_PIC_NORMAN, 75
+ .set TRAINER_PIC_WINONA, 76
+ .set TRAINER_PIC_TATE_AND_LIZA, 77
+ .set TRAINER_PIC_WALLACE, 78
+ .set TRAINER_PIC_SIDNEY, 79
+ .set TRAINER_PIC_PHOEBE, 80
+ .set TRAINER_PIC_GLACIA, 81
+ .set TRAINER_PIC_DRAKE, 82
+
+ .set TRAINER_CLASS_NAME_POKEMON_TRAINER_1, 0
+ .set TRAINER_CLASS_NAME_POKEMON_TRAINER_2, 1
+ .set TRAINER_CLASS_NAME_AQUA_LEADER, 2
+ .set TRAINER_CLASS_NAME_TEAM_AQUA, 3
+ .set TRAINER_CLASS_NAME_AQUA_ADMIN, 4
+ .set TRAINER_CLASS_NAME_AROMA_LADY, 5
+ .set TRAINER_CLASS_NAME_RUIN_MANIAC, 6
+ .set TRAINER_CLASS_NAME_INTERVIEWER, 7
+ .set TRAINER_CLASS_NAME_TUBER_F, 8
+ .set TRAINER_CLASS_NAME_TUBER_M, 9
+ .set TRAINER_CLASS_NAME_COOL_TRAINER, 10
+ .set TRAINER_CLASS_NAME_HEX_MANIAC, 11
+ .set TRAINER_CLASS_NAME_LADY, 12
+ .set TRAINER_CLASS_NAME_BEAUTY, 13
+ .set TRAINER_CLASS_NAME_RICH_BOY, 14
+ .set TRAINER_CLASS_NAME_POKEMANIAC, 15
+ .set TRAINER_CLASS_NAME_SWIMMER_M, 16
+ .set TRAINER_CLASS_NAME_BLACK_BELT, 17
+ .set TRAINER_CLASS_NAME_GUITARIST, 18
+ .set TRAINER_CLASS_NAME_KINDLER, 19
+ .set TRAINER_CLASS_NAME_CAMPER, 20
+ .set TRAINER_CLASS_NAME_BUG_MANIAC, 21
+ .set TRAINER_CLASS_NAME_PSYCHIC, 22
+ .set TRAINER_CLASS_NAME_GENTLEMAN, 23
+ .set TRAINER_CLASS_NAME_ELITE_FOUR, 24
+ .set TRAINER_CLASS_NAME_LEADER, 25
+ .set TRAINER_CLASS_NAME_SCHOOL_KID, 26
+ .set TRAINER_CLASS_NAME_SR_AND_JR, 27
+ .set TRAINER_CLASS_NAME_WINSTRATE, 28
+ .set TRAINER_CLASS_NAME_POKEFAN, 29
+ .set TRAINER_CLASS_NAME_EXPERT, 30
+ .set TRAINER_CLASS_NAME_YOUNGSTER, 31
+ .set TRAINER_CLASS_NAME_CHAMPION, 32
+ .set TRAINER_CLASS_NAME_FISHERMAN, 33
+ .set TRAINER_CLASS_NAME_TRIATHLETE, 34
+ .set TRAINER_CLASS_NAME_DRAGON_TAMER, 35
+ .set TRAINER_CLASS_NAME_BIRD_KEEPER, 36
+ .set TRAINER_CLASS_NAME_NINJA_BOY, 37
+ .set TRAINER_CLASS_NAME_BATTLE_GIRL, 38
+ .set TRAINER_CLASS_NAME_PARASOL_LADY, 39
+ .set TRAINER_CLASS_NAME_SWIMMER_F, 40
+ .set TRAINER_CLASS_NAME_PICNICKER, 41
+ .set TRAINER_CLASS_NAME_TWINS, 42
+ .set TRAINER_CLASS_NAME_SAILOR, 43
+ .set TRAINER_CLASS_NAME_BOARDER, 44
+ .set TRAINER_CLASS_NAME_COLLECTOR, 45
+ .set TRAINER_CLASS_NAME_POKEMON_TRAINER_3, 46
+ .set TRAINER_CLASS_NAME_POKEMON_BREEDER, 47
+ .set TRAINER_CLASS_NAME_POKEMON_RANGER, 48
+ .set TRAINER_CLASS_NAME_MAGMA_LEADER, 49
+ .set TRAINER_CLASS_NAME_TEAM_MAGMA, 50
+ .set TRAINER_CLASS_NAME_MAGMA_ADMIN, 51
+ .set TRAINER_CLASS_NAME_LASS, 52
+ .set TRAINER_CLASS_NAME_BUG_CATCHER, 53
+ .set TRAINER_CLASS_NAME_HIKER, 54
+ .set TRAINER_CLASS_NAME_YOUNG_COUPLE, 55
+ .set TRAINER_CLASS_NAME_OLD_COUPLE, 56
+ .set TRAINER_CLASS_NAME_SIS_AND_BRO, 57
+
+ .set TRAINER_ENCOUNTER_MUSIC_MALE, 0 @ standard male encounter music
+ .set TRAINER_ENCOUNTER_MUSIC_FEMALE, 1 @ standard female encounter music
+ .set TRAINER_ENCOUNTER_MUSIC_GIRL, 2 @ used for male Tubers and Young Couples too
+ .set TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, 3
+ .set TRAINER_ENCOUNTER_MUSIC_INTENSE, 4
+ .set TRAINER_ENCOUNTER_MUSIC_COOL, 5
+ .set TRAINER_ENCOUNTER_MUSIC_AQUA, 6
+ .set TRAINER_ENCOUNTER_MUSIC_MAGMA, 7
+ .set TRAINER_ENCOUNTER_MUSIC_SWIMMER, 8
+ .set TRAINER_ENCOUNTER_MUSIC_TWINS, 9 @ used for other trainer classes too
+ .set TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, 10
+ .set TRAINER_ENCOUNTER_MUSIC_HIKER, 11 @ used for other trainer classes too
+ .set TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, 12
+ .set TRAINER_ENCOUNTER_MUSIC_RICH, 13 @ Rich Boys and Gentlemen
+
+ .set F_TRAINER_FEMALE, 1 << 7
+
+@ All trainer parties specify the IV, level, and species for each Pokémon in the
+@ party. Some trainer parties also specify held items and custom moves for each
+@ Pokémon.
+ .set F_TRAINER_PARTY_CUSTOM_MOVESET, 1 << 0
+ .set F_TRAINER_PARTY_HELD_ITEM, 1 << 1
diff --git a/constants/type_constants.inc b/constants/type_constants.inc
new file mode 100644
index 000000000..c6611bd8a
--- /dev/null
+++ b/constants/type_constants.inc
@@ -0,0 +1,18 @@
+ .set TYPE_NORMAL, 0x00
+ .set TYPE_FIGHTING, 0x01
+ .set TYPE_FLYING, 0x02
+ .set TYPE_POISON, 0x03
+ .set TYPE_GROUND, 0x04
+ .set TYPE_ROCK, 0x05
+ .set TYPE_BUG, 0x06
+ .set TYPE_GHOST, 0x07
+ .set TYPE_STEEL, 0x08
+ .set TYPE_MYSTERY, 0x09
+ .set TYPE_FIRE, 0x0a
+ .set TYPE_WATER, 0x0b
+ .set TYPE_GRASS, 0x0c
+ .set TYPE_ELECTRIC, 0x0d
+ .set TYPE_PSYCHIC, 0x0e
+ .set TYPE_ICE, 0x0f
+ .set TYPE_DRAGON, 0x10
+ .set TYPE_DARK, 0x11
diff --git a/constants/variables.inc b/constants/variables.inc
new file mode 100644
index 000000000..ab488a97e
--- /dev/null
+++ b/constants/variables.inc
@@ -0,0 +1,6 @@
+ .equiv FACING, 0x800C
+ .equiv RESULT, 0x800D
+ .equiv ITEM_ID, 0x800E
+ .equiv LAST_TALKED, 0x800F
+ .equiv CONTEST_RANK, 0x8010
+ .equiv CONTEST_CATEGORY, 0x8011
diff --git a/constants/version.inc b/constants/version.inc
new file mode 100644
index 000000000..c93e439f4
--- /dev/null
+++ b/constants/version.inc
@@ -0,0 +1,91 @@
+ .ifdef SAPPHIRE
+ .equiv GAME_VERSION, 1
+ .else
+ .equiv GAME_VERSION, 2
+ .endif
+
+ .ifdef SAPPHIRE
+ .set BGM_EVIL_TEAM, BGM_AQA_0
+ .set BGM_GOOD_TEAM, BGM_MGM0
+ .else
+ .set BGM_EVIL_TEAM, BGM_MGM0
+ .set BGM_GOOD_TEAM, BGM_AQA_0
+ .endc
+
+ .ifdef SAPPHIRE
+ .set ITEM_RED_OR_BLUE_ORB, ITEM_BLUE_ORB
+ .else
+ .set ITEM_RED_OR_BLUE_ORB, ITEM_RED_ORB
+ .endif
+
+ .ifdef SAPPHIRE
+ .set SPECIES_GROUDON_OR_KYOGRE, SPECIES_KYOGRE
+ .else
+ .set SPECIES_GROUDON_OR_KYOGRE, SPECIES_GROUDON
+ .endif
+
+ .ifdef SAPPHIRE
+ .set SPECIES_LATIAS_OR_LATIOS, SPECIES_LATIOS
+ .else
+ .set SPECIES_LATIAS_OR_LATIOS, SPECIES_LATIAS
+ .endif
+
+ .ifdef SAPPHIRE
+ .set OPPONENT_PETALBURG_WOODS_GRUNT, OPPONENT_GRUNT_9
+ .set OPPONENT_RUSTURF_TUNNEL_GRUNT, OPPONENT_GRUNT_15
+ .set OPPONENT_MUSEUM_2F_GRUNT_1, OPPONENT_GRUNT_19
+ .set OPPONENT_MUSEUM_2F_GRUNT_2, OPPONENT_GRUNT_20
+ .set OPPONENT_514, OPPONENT_HECTOR_1
+ .set OPPONENT_MT_CHIMNEY_GRUNT_1, OPPONENT_MATT_2
+ .set OPPONENT_MT_CHIMNEY_GRUNT_2, OPPONENT_GRUNT_13
+ .set OPPONENT_HIDEOUT_1F_GRUNT, OPPONENT_GRUNT_1
+ .set OPPONENT_HIDEOUT_B1F_GRUNT_1, OPPONENT_GRUNT_2
+ .set OPPONENT_HIDEOUT_B1F_GRUNT_2, OPPONENT_GRUNT_3
+ .set OPPONENT_HIDEOUT_B1F_GRUNT_3, OPPONENT_GRUNT_26
+ .set OPPONENT_HIDEOUT_B2F_GRUNT_1, OPPONENT_MATT_1
+ .set OPPONENT_HIDEOUT_B2F_GRUNT_2, OPPONENT_GRUNT_4
+ .set OPPONENT_HIDEOUT_B2F_GRUNT_3, OPPONENT_GRUNT_27
+ .set OPPONENT_SEAFLOOR_CAVERN_GRUNT_1, OPPONENT_GRUNT_5
+ .set OPPONENT_SEAFLOOR_CAVERN_GRUNT_2, OPPONENT_GRUNT_6
+ .set OPPONENT_SEAFLOOR_CAVERN_GRUNT_3, OPPONENT_SHELLY_2
+ .set OPPONENT_SEAFLOOR_CAVERN_GRUNT_4, OPPONENT_GRUNT_7
+ .set OPPONENT_SEAFLOOR_CAVERN_GRUNT_5, OPPONENT_ARCHIE_2
+ .set OPPONENT_MT_CHIMNEY_GRUNT_3, OPPONENT_ARCHIE_3
+ .set OPPONENT_MT_PYRE_SUMMIT_GRUNT_1, OPPONENT_GRUNT_22
+ .set OPPONENT_MT_PYRE_SUMMIT_GRUNT_2, OPPONENT_GRUNT_23
+ .set OPPONENT_MT_PYRE_SUMMIT_GRUNT_3, OPPONENT_GRUNT_24
+ .set OPPONENT_WEATHER_INSTITUTE_GRUNT_1, OPPONENT_GRUNT_16
+ .set OPPONENT_WEATHER_INSTITUTE_GRUNT_2, OPPONENT_GRUNT_25
+ .set OPPONENT_WEATHER_INSTITUTE_GRUNT_3, OPPONENT_GRUNT_17
+ .set OPPONENT_WEATHER_INSTITUTE_GRUNT_4, OPPONENT_GRUNT_18
+ .set OPPONENT_WEATHER_INSTITUTE_GRUNT_5, OPPONENT_SHELLY_1
+ .else
+ .set OPPONENT_PETALBURG_WOODS_GRUNT, OPPONENT_GRUNT_36
+ .set OPPONENT_RUSTURF_TUNNEL_GRUNT, OPPONENT_GRUNT_42
+ .set OPPONENT_MUSEUM_2F_GRUNT_1, OPPONENT_GRUNT_46
+ .set OPPONENT_MUSEUM_2F_GRUNT_2, OPPONENT_GRUNT_47
+ .set OPPONENT_514, OPPONENT_HECTOR_2
+ .set OPPONENT_MT_CHIMNEY_GRUNT_1, OPPONENT_TABITHA_2
+ .set OPPONENT_MT_CHIMNEY_GRUNT_2, OPPONENT_GRUNT_40
+ .set OPPONENT_HIDEOUT_1F_GRUNT, OPPONENT_GRUNT_28
+ .set OPPONENT_HIDEOUT_B1F_GRUNT_1, OPPONENT_GRUNT_29
+ .set OPPONENT_HIDEOUT_B1F_GRUNT_2, OPPONENT_GRUNT_30
+ .set OPPONENT_HIDEOUT_B1F_GRUNT_3, OPPONENT_GRUNT_53
+ .set OPPONENT_HIDEOUT_B2F_GRUNT_1, OPPONENT_TABITHA_1
+ .set OPPONENT_HIDEOUT_B2F_GRUNT_2, OPPONENT_GRUNT_31
+ .set OPPONENT_HIDEOUT_B2F_GRUNT_3, OPPONENT_GRUNT_54
+ .set OPPONENT_SEAFLOOR_CAVERN_GRUNT_1, OPPONENT_GRUNT_32
+ .set OPPONENT_SEAFLOOR_CAVERN_GRUNT_2, OPPONENT_GRUNT_33
+ .set OPPONENT_SEAFLOOR_CAVERN_GRUNT_3, OPPONENT_COURTNEY_2
+ .set OPPONENT_SEAFLOOR_CAVERN_GRUNT_4, OPPONENT_GRUNT_34
+ .set OPPONENT_SEAFLOOR_CAVERN_GRUNT_5, OPPONENT_MAXIE_2
+ .set OPPONENT_MT_CHIMNEY_GRUNT_3, OPPONENT_MAXIE_3
+ .set OPPONENT_MT_PYRE_SUMMIT_GRUNT_1, OPPONENT_GRUNT_49
+ .set OPPONENT_MT_PYRE_SUMMIT_GRUNT_2, OPPONENT_GRUNT_50
+ .set OPPONENT_MT_PYRE_SUMMIT_GRUNT_3, OPPONENT_GRUNT_51
+ .set OPPONENT_WEATHER_INSTITUTE_GRUNT_1, OPPONENT_GRUNT_43
+ .set OPPONENT_WEATHER_INSTITUTE_GRUNT_2, OPPONENT_GRUNT_52
+ .set OPPONENT_WEATHER_INSTITUTE_GRUNT_3, OPPONENT_GRUNT_44
+ .set OPPONENT_WEATHER_INSTITUTE_GRUNT_4, OPPONENT_GRUNT_45
+ .set OPPONENT_WEATHER_INSTITUTE_GRUNT_5, OPPONENT_COURTNEY_1
+ .endif