summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRangi <remy.oukaour+rangi@gmail.com>2018-05-29 17:20:06 -0400
committerRangi <remy.oukaour+rangi@gmail.com>2018-05-29 17:20:06 -0400
commitcd82d460b37ccab0bd0b5eea45cb87e162e94930 (patch)
treee2dd7d1549e337a163731f916b12a2233b968375
parent50e61769cb11ab17518b69335b68ecdc785c00f2 (diff)
Declare type chart
-rw-r--r--constants.asm2
-rw-r--r--constants/battle_constants.asm248
-rw-r--r--data/types/type_matchups.asm109
3 files changed, 359 insertions, 0 deletions
diff --git a/constants.asm b/constants.asm
index 691e6c6..20b71d5 100644
--- a/constants.asm
+++ b/constants.asm
@@ -12,4 +12,6 @@ INCLUDE "constants/pokedex_constants.asm"
INCLUDE "constants/pokemon_data_constants.asm"
INCLUDE "constants/move_constants.asm"
INCLUDE "constants/item_constants.asm"
+INCLUDE "constants/battle_constants.asm"
+
INCLUDE "constants/serial_constants.asm"
diff --git a/constants/battle_constants.asm b/constants/battle_constants.asm
new file mode 100644
index 0000000..ad64c58
--- /dev/null
+++ b/constants/battle_constants.asm
@@ -0,0 +1,248 @@
+; significant level values
+MAX_LEVEL EQU 100
+MIN_LEVEL EQU 2
+
+; maximum moves known per mon
+NUM_MOVES EQU 4
+
+; significant stat values
+BASE_STAT_LEVEL EQU 7
+MAX_STAT_LEVEL EQU 13
+
+; minimum damage before type effectiveness
+MIN_NEUTRAL_DAMAGE EQU 2
+
+; turns that sleep lasts
+REST_SLEEP_TURNS EQU 2
+
+; default move priority
+BASE_PRIORITY EQU 1
+
+; type effectiveness factors, scaled by 10
+SUPER_EFFECTIVE EQU 20
+MORE_EFFECTIVE EQU 15
+EFFECTIVE EQU 10
+NOT_VERY_EFFECTIVE EQU 05
+NO_EFFECT EQU 00
+
+; wPlayerStatLevels and wEnemyStatLevels indexes (see wram.asm)
+; GetStatName arguments (see data/battle/stat_names.asm)
+ const_def
+ const ATTACK
+ const DEFENSE
+ const SPEED
+ const SP_ATTACK
+ const SP_DEFENSE
+ const ACCURACY
+ const EVASION
+ const ABILITY ; used for BattleCommand_Curse
+NUM_LEVEL_STATS EQU const_value
+
+; move struct members (see data/moves/moves.asm)
+ const_def
+ const MOVE_ANIM ; 0
+ const MOVE_EFFECT ; 1
+ const MOVE_POWER ; 2
+ const MOVE_TYPE ; 3
+ const MOVE_ACC ; 4
+ const MOVE_PP ; 5
+ const MOVE_CHANCE ; 6
+MOVE_LENGTH EQU const_value
+
+; stat constants
+; indexes for:
+; - wPlayerStats and wEnemyStats (see wram.asm)
+; - party_struct and battle_struct members (see macros/wram.asm)
+ const_def 1
+ const STAT_HP
+ const STAT_ATK
+ const STAT_DEF
+ const STAT_SPD
+ const STAT_SATK
+ const STAT_SDEF
+NUM_STATS EQU const_value
+STAT_SPC EQU STAT_SATK
+
+; stat formula constants
+STAT_MIN_NORMAL EQU 5
+STAT_MIN_HP EQU 10
+
+MAX_STAT_VALUE EQU 999
+
+; shiny dvs
+ATKDEFDV_SHINY EQU $EA
+SPDSPCDV_SHINY EQU $AA
+
+; battle classes (wBattleMode values)
+ const_def 1
+ const WILD_BATTLE
+ const TRAINER_BATTLE
+
+; battle types (wBattleType values)
+ const_def
+ const BATTLETYPE_NORMAL
+ const BATTLETYPE_CANLOSE
+ const BATTLETYPE_DEBUG
+ const BATTLETYPE_TUTORIAL
+ const BATTLETYPE_FISH
+ const BATTLETYPE_ROAMING
+ const BATTLETYPE_CONTEST
+ const BATTLETYPE_SHINY
+ const BATTLETYPE_TREE
+ const BATTLETYPE_TRAP
+ const BATTLETYPE_FORCEITEM
+ const BATTLETYPE_CELEBI
+ const BATTLETYPE_SUICUNE
+
+; BattleVarPairs indexes (see home/battle.asm)
+ const_def
+ const BATTLE_VARS_SUBSTATUS1
+ const BATTLE_VARS_SUBSTATUS2
+ const BATTLE_VARS_SUBSTATUS3
+ const BATTLE_VARS_SUBSTATUS4
+ const BATTLE_VARS_SUBSTATUS5
+ const BATTLE_VARS_SUBSTATUS1_OPP
+ const BATTLE_VARS_SUBSTATUS2_OPP
+ const BATTLE_VARS_SUBSTATUS3_OPP
+ const BATTLE_VARS_SUBSTATUS4_OPP
+ const BATTLE_VARS_SUBSTATUS5_OPP
+ const BATTLE_VARS_STATUS
+ const BATTLE_VARS_STATUS_OPP
+ const BATTLE_VARS_MOVE_ANIM
+ const BATTLE_VARS_MOVE_EFFECT
+ const BATTLE_VARS_MOVE_POWER
+ const BATTLE_VARS_MOVE_TYPE
+ const BATTLE_VARS_MOVE
+ const BATTLE_VARS_LAST_COUNTER_MOVE
+ const BATTLE_VARS_LAST_COUNTER_MOVE_OPP
+ const BATTLE_VARS_LAST_MOVE
+ const BATTLE_VARS_LAST_MOVE_OPP
+
+; BattleVarLocations indexes (see home/battle.asm)
+ const_def
+ const PLAYER_SUBSTATUS_1
+ const ENEMY_SUBSTATUS_1
+ const PLAYER_SUBSTATUS_2
+ const ENEMY_SUBSTATUS_2
+ const PLAYER_SUBSTATUS_3
+ const ENEMY_SUBSTATUS_3
+ const PLAYER_SUBSTATUS_4
+ const ENEMY_SUBSTATUS_4
+ const PLAYER_SUBSTATUS_5
+ const ENEMY_SUBSTATUS_5
+ const PLAYER_STATUS
+ const ENEMY_STATUS
+ const PLAYER_MOVE_ANIMATION
+ const ENEMY_MOVE_ANIMATION
+ const PLAYER_MOVE_EFFECT
+ const ENEMY_MOVE_EFFECT
+ const PLAYER_MOVE_POWER
+ const ENEMY_MOVE_POWER
+ const PLAYER_MOVE_TYPE
+ const ENEMY_MOVE_TYPE
+ const PLAYER_CUR_MOVE
+ const ENEMY_CUR_MOVE
+ const PLAYER_COUNTER_MOVE
+ const ENEMY_COUNTER_MOVE
+ const PLAYER_LAST_MOVE
+ const ENEMY_LAST_MOVE
+
+; status condition bit flags
+SLP EQU %111 ; 0-7 turns
+ const_def 3
+ const PSN
+ const BRN
+ const FRZ
+ const PAR
+
+ALL_STATUS EQU (1 << PSN) | (1 << BRN) | (1 << FRZ) | (1 << PAR) | SLP
+
+; wPlayerSubStatus1 or wEnemySubStatus1 bit flags
+ enum_start 7, -1
+ enum SUBSTATUS_IN_LOVE
+ enum SUBSTATUS_ROLLOUT
+ enum SUBSTATUS_ENDURE
+ enum SUBSTATUS_PERISH
+ enum SUBSTATUS_IDENTIFIED
+ enum SUBSTATUS_PROTECT
+ enum SUBSTATUS_CURSE
+ enum SUBSTATUS_NIGHTMARE
+
+; wPlayerSubStatus2 or wEnemySubStatus2 bit flags
+SUBSTATUS_CURLED EQU 0
+
+; wPlayerSubStatus3 or wEnemySubStatus3 bit flags
+ enum_start 7, -1
+ enum SUBSTATUS_CONFUSED
+ enum SUBSTATUS_FLYING
+ enum SUBSTATUS_UNDERGROUND
+ enum SUBSTATUS_CHARGED
+ enum SUBSTATUS_FLINCHED
+ enum SUBSTATUS_IN_LOOP
+ enum SUBSTATUS_RAMPAGE
+ enum SUBSTATUS_BIDE
+
+; wPlayerSubStatus4 or wEnemySubStatus4 bit flags
+ enum_start 7, -1
+ enum SUBSTATUS_LEECH_SEED
+ enum SUBSTATUS_RAGE
+ enum SUBSTATUS_RECHARGE
+ enum SUBSTATUS_SUBSTITUTE
+ enum SUBSTATUS_UNKNOWN_1
+ enum SUBSTATUS_FOCUS_ENERGY
+ enum SUBSTATUS_MIST
+ enum SUBSTATUS_X_ACCURACY
+
+; wPlayerSubStatus5 or wEnemySubStatus5 bit flags
+ enum_start 7, -1
+ enum SUBSTATUS_CANT_RUN
+ enum SUBSTATUS_DESTINY_BOND
+ enum SUBSTATUS_LOCK_ON
+ enum SUBSTATUS_ENCORED
+ enum SUBSTATUS_TRANSFORMED
+ enum SUBSTATUS_UNKNOWN_2
+ enum SUBSTATUS_UNKNOWN_3
+ enum SUBSTATUS_TOXIC
+
+; wPlayerScreens or wEnemyScreens bit flags
+ enum_start 4, -1
+ enum SCREENS_REFLECT
+ enum SCREENS_LIGHT_SCREEN
+ enum SCREENS_SAFEGUARD
+ enum SCREENS_UNUSED
+ enum SCREENS_SPIKES
+
+; values in wBattleWeather
+ const_def
+ const WEATHER_NONE
+ const WEATHER_RAIN
+ const WEATHER_SUN
+ const WEATHER_SANDSTORM
+ const WEATHER_RAIN_END
+ const WEATHER_SUN_END
+ const WEATHER_SANDSTORM_END
+
+; wBattleAction
+ const_def
+ const BATTLEACTION_MOVE1
+ const BATTLEACTION_MOVE2
+ const BATTLEACTION_MOVE3
+ const BATTLEACTION_MOVE4
+ const BATTLEACTION_SWITCH1
+ const BATTLEACTION_SWITCH2
+ const BATTLEACTION_SWITCH3
+ const BATTLEACTION_SWITCH4
+ const BATTLEACTION_SWITCH5
+ const BATTLEACTION_SWITCH6
+ const BATTLEACTION_A
+ const BATTLEACTION_B
+ const BATTLEACTION_C
+ const BATTLEACTION_D
+ const BATTLEACTION_E
+ const BATTLEACTION_FORFEIT
+
+; wBattleResult
+ const_def
+ const WIN
+ const LOSE
+ const DRAW
diff --git a/data/types/type_matchups.asm b/data/types/type_matchups.asm
new file mode 100644
index 0000000..170072b
--- /dev/null
+++ b/data/types/type_matchups.asm
@@ -0,0 +1,109 @@
+TypeMatchups: ; 3506d
+ ; attacker, defender, *=
+ db TYPE_NORMAL, TYPE_ROCK, NOT_VERY_EFFECTIVE
+ db TYPE_NORMAL, TYPE_DARK, SUPER_EFFECTIVE
+ db TYPE_FIRE, TYPE_FIRE, NOT_VERY_EFFECTIVE
+ db TYPE_FIRE, TYPE_WATER, NOT_VERY_EFFECTIVE
+ db TYPE_FIRE, TYPE_GRASS, SUPER_EFFECTIVE
+ db TYPE_FIRE, TYPE_ICE, SUPER_EFFECTIVE
+ db TYPE_FIRE, TYPE_BUG, SUPER_EFFECTIVE
+ db TYPE_FIRE, TYPE_ROCK, NOT_VERY_EFFECTIVE
+ db TYPE_FIRE, TYPE_DRAGON, NOT_VERY_EFFECTIVE
+ db TYPE_WATER, TYPE_FIRE, SUPER_EFFECTIVE
+ db TYPE_WATER, TYPE_WATER, NOT_VERY_EFFECTIVE
+ db TYPE_WATER, TYPE_ELECTRIC, NOT_VERY_EFFECTIVE
+ db TYPE_WATER, TYPE_GRASS, NOT_VERY_EFFECTIVE
+ db TYPE_WATER, TYPE_GROUND, SUPER_EFFECTIVE
+ db TYPE_WATER, TYPE_ROCK, SUPER_EFFECTIVE
+ db TYPE_WATER, TYPE_DRAGON, NOT_VERY_EFFECTIVE
+ db TYPE_WATER, TYPE_STEEL, SUPER_EFFECTIVE
+ db TYPE_ELECTRIC, TYPE_WATER, SUPER_EFFECTIVE
+ db TYPE_ELECTRIC, TYPE_ELECTRIC, NOT_VERY_EFFECTIVE
+ db TYPE_ELECTRIC, TYPE_GRASS, NOT_VERY_EFFECTIVE
+ db TYPE_ELECTRIC, TYPE_GROUND, NO_EFFECT
+ db TYPE_ELECTRIC, TYPE_FLYING, SUPER_EFFECTIVE
+ db TYPE_ELECTRIC, TYPE_DRAGON, NOT_VERY_EFFECTIVE
+ db TYPE_ELECTRIC, TYPE_STEEL, SUPER_EFFECTIVE
+ db TYPE_GRASS, TYPE_FIRE, NOT_VERY_EFFECTIVE
+ db TYPE_GRASS, TYPE_WATER, SUPER_EFFECTIVE
+ db TYPE_GRASS, TYPE_GRASS, NOT_VERY_EFFECTIVE
+ db TYPE_GRASS, TYPE_POISON, NOT_VERY_EFFECTIVE
+ db TYPE_GRASS, TYPE_GROUND, SUPER_EFFECTIVE
+ db TYPE_GRASS, TYPE_FLYING, NOT_VERY_EFFECTIVE
+ db TYPE_GRASS, TYPE_BUG, NOT_VERY_EFFECTIVE
+ db TYPE_GRASS, TYPE_ROCK, SUPER_EFFECTIVE
+ db TYPE_GRASS, TYPE_DRAGON, NOT_VERY_EFFECTIVE
+ db TYPE_ICE, TYPE_FIRE, NOT_VERY_EFFECTIVE
+ db TYPE_ICE, TYPE_WATER, NOT_VERY_EFFECTIVE
+ db TYPE_ICE, TYPE_GRASS, SUPER_EFFECTIVE
+ db TYPE_ICE, TYPE_ICE, NOT_VERY_EFFECTIVE
+ db TYPE_ICE, TYPE_GROUND, SUPER_EFFECTIVE
+ db TYPE_ICE, TYPE_FLYING, SUPER_EFFECTIVE
+ db TYPE_ICE, TYPE_DRAGON, SUPER_EFFECTIVE
+ db TYPE_FIGHTING, TYPE_NORMAL, SUPER_EFFECTIVE
+ db TYPE_FIGHTING, TYPE_ICE, SUPER_EFFECTIVE
+ db TYPE_FIGHTING, TYPE_POISON, NOT_VERY_EFFECTIVE
+ db TYPE_FIGHTING, TYPE_FLYING, NOT_VERY_EFFECTIVE
+ db TYPE_FIGHTING, TYPE_PSYCHIC, NOT_VERY_EFFECTIVE
+ db TYPE_FIGHTING, TYPE_BUG, NOT_VERY_EFFECTIVE
+ db TYPE_FIGHTING, TYPE_ROCK, SUPER_EFFECTIVE
+ db TYPE_FIGHTING, TYPE_GHOST, NO_EFFECT
+ db TYPE_FIGHTING, TYPE_STEEL, NOT_VERY_EFFECTIVE
+ db TYPE_POISON, TYPE_GRASS, SUPER_EFFECTIVE
+ db TYPE_POISON, TYPE_POISON, NOT_VERY_EFFECTIVE
+ db TYPE_POISON, TYPE_GROUND, NOT_VERY_EFFECTIVE
+ db TYPE_POISON, TYPE_BUG, SUPER_EFFECTIVE
+ db TYPE_POISON, TYPE_ROCK, NOT_VERY_EFFECTIVE
+ db TYPE_POISON, TYPE_GHOST, NOT_VERY_EFFECTIVE
+ db TYPE_POISON, TYPE_STEEL, NOT_VERY_EFFECTIVE
+ db TYPE_GROUND, TYPE_FIRE, SUPER_EFFECTIVE
+ db TYPE_GROUND, TYPE_ELECTRIC, SUPER_EFFECTIVE
+ db TYPE_GROUND, TYPE_GRASS, NOT_VERY_EFFECTIVE
+ db TYPE_GROUND, TYPE_POISON, SUPER_EFFECTIVE
+ db TYPE_GROUND, TYPE_FLYING, NO_EFFECT
+ db TYPE_GROUND, TYPE_BUG, NOT_VERY_EFFECTIVE
+ db TYPE_GROUND, TYPE_ROCK, SUPER_EFFECTIVE
+ db TYPE_FLYING, TYPE_ELECTRIC, NOT_VERY_EFFECTIVE
+ db TYPE_FLYING, TYPE_GRASS, SUPER_EFFECTIVE
+ db TYPE_FLYING, TYPE_FIGHTING, SUPER_EFFECTIVE
+ db TYPE_FLYING, TYPE_BUG, SUPER_EFFECTIVE
+ db TYPE_FLYING, TYPE_ROCK, NOT_VERY_EFFECTIVE
+ db TYPE_PSYCHIC, TYPE_FIGHTING, SUPER_EFFECTIVE
+ db TYPE_PSYCHIC, TYPE_POISON, SUPER_EFFECTIVE
+ db TYPE_PSYCHIC, TYPE_PSYCHIC, NOT_VERY_EFFECTIVE
+ db TYPE_PSYCHIC, TYPE_DARK, NOT_VERY_EFFECTIVE
+ db TYPE_BUG, TYPE_FIRE, NOT_VERY_EFFECTIVE
+ db TYPE_BUG, TYPE_GRASS, SUPER_EFFECTIVE
+ db TYPE_BUG, TYPE_FIGHTING, NOT_VERY_EFFECTIVE
+ db TYPE_BUG, TYPE_POISON, SUPER_EFFECTIVE
+ db TYPE_BUG, TYPE_FLYING, NOT_VERY_EFFECTIVE
+ db TYPE_BUG, TYPE_PSYCHIC, SUPER_EFFECTIVE
+ db TYPE_BUG, TYPE_GHOST, NOT_VERY_EFFECTIVE
+ db TYPE_BUG, TYPE_DARK, SUPER_EFFECTIVE
+ db TYPE_ROCK, TYPE_FIRE, SUPER_EFFECTIVE
+ db TYPE_ROCK, TYPE_ICE, SUPER_EFFECTIVE
+ db TYPE_ROCK, TYPE_FIGHTING, NOT_VERY_EFFECTIVE
+ db TYPE_ROCK, TYPE_GROUND, NOT_VERY_EFFECTIVE
+ db TYPE_ROCK, TYPE_FLYING, SUPER_EFFECTIVE
+ db TYPE_ROCK, TYPE_BUG, SUPER_EFFECTIVE
+ db TYPE_ROCK, TYPE_STEEL, NOT_VERY_EFFECTIVE
+ db TYPE_GHOST, TYPE_NORMAL, NO_EFFECT
+ db TYPE_GHOST, TYPE_PSYCHIC, SUPER_EFFECTIVE
+ db TYPE_GHOST, TYPE_DARK, NOT_VERY_EFFECTIVE
+ db TYPE_DRAGON, TYPE_DRAGON, SUPER_EFFECTIVE
+ db TYPE_DARK, TYPE_NORMAL, NOT_VERY_EFFECTIVE
+ db TYPE_DARK, TYPE_PSYCHIC, SUPER_EFFECTIVE
+ db TYPE_DARK, TYPE_GHOST, SUPER_EFFECTIVE
+ db TYPE_DARK, TYPE_DARK, SUPER_EFFECTIVE
+ db TYPE_STEEL, TYPE_WATER, NOT_VERY_EFFECTIVE
+ db TYPE_STEEL, TYPE_ELECTRIC, NOT_VERY_EFFECTIVE
+ db TYPE_STEEL, TYPE_ROCK, SUPER_EFFECTIVE
+ db TYPE_STEEL, TYPE_STEEL, NO_EFFECT
+
+ db -2 ; end (with Foresight)
+
+; Foresight removes Ghost's immunity to Normal
+ db TYPE_NORMAL, TYPE_GHOST, NO_EFFECT
+
+ db -1 ; end
+; 3519b