Merge branch 'master' of https://github.com/pret/pokeemerald into decompile_item_menu
This commit is contained in:
commit
f2144e9932
@ -50069,7 +50069,7 @@ sub_8117E94: @ 8117E94
|
||||
ldrb r1, [r1]
|
||||
strb r1, [r2]
|
||||
ldr r2, =gBattleAnimTarget
|
||||
ldr r1, =gEffectBank
|
||||
ldr r1, =gEffectBattler
|
||||
ldrb r1, [r1]
|
||||
strb r1, [r2]
|
||||
bl DestroyAnimVisualTask
|
||||
@ -50136,7 +50136,7 @@ sub_8117F30: @ 8117F30
|
||||
ldrb r1, [r1]
|
||||
strb r1, [r2]
|
||||
ldr r2, =gBattleAnimTarget
|
||||
ldr r1, =gEffectBank
|
||||
ldr r1, =gEffectBattler
|
||||
ldrb r1, [r1]
|
||||
strb r1, [r2]
|
||||
bl DestroyAnimVisualTask
|
||||
@ -50670,7 +50670,7 @@ _081183B4:
|
||||
strh r0, [r1, 0xC]
|
||||
movs r0, 0x20
|
||||
strh r0, [r1, 0xE]
|
||||
ldr r2, =gUnknown_020243FC
|
||||
ldr r2, =gIntroSlideFlags
|
||||
ldrh r1, [r2]
|
||||
ldr r0, =0x0000fffe
|
||||
ands r0, r1
|
||||
@ -51014,7 +51014,7 @@ _08118690:
|
||||
strh r0, [r1, 0xE]
|
||||
movs r0, 0x1
|
||||
strh r0, [r1, 0x12]
|
||||
ldr r2, =gUnknown_020243FC
|
||||
ldr r2, =gIntroSlideFlags
|
||||
ldrh r1, [r2]
|
||||
ldr r0, =0x0000fffe
|
||||
ands r0, r1
|
||||
@ -51315,7 +51315,7 @@ _08118934:
|
||||
strh r0, [r1, 0xE]
|
||||
movs r0, 0x1
|
||||
strh r0, [r1, 0x12]
|
||||
ldr r2, =gUnknown_020243FC
|
||||
ldr r2, =gIntroSlideFlags
|
||||
ldrh r1, [r2]
|
||||
ldr r0, =0x0000fffe
|
||||
ands r0, r1
|
||||
@ -51675,7 +51675,7 @@ _08118C50:
|
||||
strh r0, [r1, 0xC]
|
||||
movs r0, 0x20
|
||||
strh r0, [r1, 0xE]
|
||||
ldr r2, =gUnknown_020243FC
|
||||
ldr r2, =gIntroSlideFlags
|
||||
ldrh r1, [r2]
|
||||
ldr r0, =0x0000fffe
|
||||
ands r0, r1
|
||||
@ -51924,7 +51924,7 @@ _08118E7E:
|
||||
strh r0, [r1, 0x8]
|
||||
movs r0, 0xF0
|
||||
strh r0, [r1, 0xC]
|
||||
ldr r2, =gUnknown_020243FC
|
||||
ldr r2, =gIntroSlideFlags
|
||||
ldrh r1, [r2]
|
||||
ldr r0, =0x0000fffe
|
||||
ands r0, r1
|
||||
|
||||
@ -5069,7 +5069,7 @@ sub_8172ED0: @ 8172ED0
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
ldr r2, =gBattleAnimTarget
|
||||
ldr r1, =gEffectBank
|
||||
ldr r1, =gEffectBattler
|
||||
ldrb r1, [r1]
|
||||
strb r1, [r2]
|
||||
bl DestroyAnimVisualTask
|
||||
|
||||
@ -44,7 +44,7 @@ _0817C988:
|
||||
bl GetBattlerSide
|
||||
lsls r0, 24
|
||||
lsrs r6, r0, 24
|
||||
ldr r0, =gEffectBank
|
||||
ldr r0, =gEffectBattler
|
||||
ldrb r0, [r0]
|
||||
bl GetBattlerSide
|
||||
lsls r0, 24
|
||||
@ -145,7 +145,7 @@ _0817CA9C:
|
||||
bl GetBattlerPosition
|
||||
lsls r0, 24
|
||||
lsrs r5, r0, 25
|
||||
ldr r0, =gEffectBank
|
||||
ldr r0, =gEffectBattler
|
||||
ldrb r0, [r0]
|
||||
bl GetBattlerPosition
|
||||
lsls r0, 24
|
||||
@ -1302,7 +1302,7 @@ _0817D6F2:
|
||||
bl _0817E0A6
|
||||
_0817D704:
|
||||
ldr r5, =gBattlerPartyIndexes
|
||||
ldr r6, =gEffectBank
|
||||
ldr r6, =gEffectBattler
|
||||
ldrb r0, [r6]
|
||||
lsls r0, 1
|
||||
adds r0, r5
|
||||
@ -1396,7 +1396,7 @@ _0817D7B2:
|
||||
.pool
|
||||
_0817D7D8:
|
||||
ldr r5, =gBattlerPartyIndexes
|
||||
ldr r6, =gEffectBank
|
||||
ldr r6, =gEffectBattler
|
||||
ldrb r0, [r6]
|
||||
lsls r0, 1
|
||||
adds r0, r5
|
||||
@ -1440,7 +1440,7 @@ _0817D7D8:
|
||||
.pool
|
||||
_0817D838:
|
||||
ldr r5, =gBattlerPartyIndexes
|
||||
ldr r6, =gEffectBank
|
||||
ldr r6, =gEffectBattler
|
||||
ldrb r0, [r6]
|
||||
lsls r0, 1
|
||||
adds r0, r5
|
||||
@ -1628,7 +1628,7 @@ _0817D9AE:
|
||||
b _0817E086
|
||||
_0817D9C2:
|
||||
ldr r5, =gBattlerPartyIndexes
|
||||
ldr r6, =gEffectBank
|
||||
ldr r6, =gEffectBattler
|
||||
ldrb r0, [r6]
|
||||
lsls r0, 1
|
||||
adds r0, r5
|
||||
@ -1703,7 +1703,7 @@ _0817DA48:
|
||||
.pool
|
||||
_0817DA68:
|
||||
ldr r5, =gBattlerPartyIndexes
|
||||
ldr r6, =gEffectBank
|
||||
ldr r6, =gEffectBattler
|
||||
ldrb r0, [r6]
|
||||
lsls r0, 1
|
||||
adds r0, r5
|
||||
@ -1791,7 +1791,7 @@ _0817DB10:
|
||||
.pool
|
||||
_0817DB24:
|
||||
ldr r5, =gBattlerPartyIndexes
|
||||
ldr r6, =gEffectBank
|
||||
ldr r6, =gEffectBattler
|
||||
ldrb r0, [r6]
|
||||
lsls r0, 1
|
||||
adds r0, r5
|
||||
|
||||
@ -1373,11 +1373,11 @@
|
||||
.endm
|
||||
|
||||
.macro jumpifmove move, jumpptr
|
||||
jumpifhalfword EQUAL, gCurrentMove, \move, \jumpptr
|
||||
jumpifhalfword CMP_EQUAL, gCurrentMove, \move, \jumpptr
|
||||
.endm
|
||||
|
||||
.macro jumpifnotmove move, jumpptr
|
||||
jumpifhalfword NOT_EQUAL, gCurrentMove, \move, \jumpptr
|
||||
jumpifhalfword CMP_NOT_EQUAL, gCurrentMove, \move, \jumpptr
|
||||
.endm
|
||||
|
||||
.macro jumpifstatus3 bank, status, jumpptr
|
||||
@ -1389,13 +1389,13 @@
|
||||
.endm
|
||||
|
||||
.macro jumpifmovehadnoeffect jumpptr
|
||||
jumpifbyte COMMON_BITS, gMoveResultFlags, MOVE_RESULT_NO_EFFECT, \jumpptr
|
||||
jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_NO_EFFECT, \jumpptr
|
||||
.endm
|
||||
|
||||
.macro jumpifbattletype flags, jumpptr
|
||||
jumpifword COMMON_BITS, gBattleTypeFlags, \flags, \jumpptr
|
||||
jumpifword CMP_COMMON_BITS, gBattleTypeFlags, \flags, \jumpptr
|
||||
.endm
|
||||
|
||||
.macro jumpifnotbattletype flags, jumpptr
|
||||
jumpifword NO_COMMON_BITS, gBattleTypeFlags, \flags, \jumpptr
|
||||
jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, \flags, \jumpptr
|
||||
.endm
|
||||
|
||||
@ -16302,7 +16302,7 @@ _081B8BA8:
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
ldr r1, =gBattlerPartyIndexes
|
||||
ldr r0, =gBankInMenu
|
||||
ldr r0, =gBattlerInMenuId
|
||||
ldrb r0, [r0]
|
||||
lsls r0, 1
|
||||
adds r0, r1
|
||||
@ -16334,7 +16334,7 @@ _081B8BFC:
|
||||
b _081B8C42
|
||||
.pool
|
||||
_081B8C20:
|
||||
ldr r0, =gBankInMenu
|
||||
ldr r0, =gBattlerInMenuId
|
||||
ldrb r0, [r0]
|
||||
ldr r1, =gBattlerPartyIndexes
|
||||
lsls r0, 1
|
||||
|
||||
@ -77,7 +77,7 @@ ExecuteTableBasedItemEffect: @ 806BD28
|
||||
cmp r0, 0
|
||||
beq _0806BDA8
|
||||
ldr r2, =gEnigmaBerries
|
||||
ldr r0, =gBankInMenu
|
||||
ldr r0, =gBattlerInMenuId
|
||||
ldrb r1, [r0]
|
||||
lsls r0, r1, 3
|
||||
subs r0, r1
|
||||
@ -100,8 +100,8 @@ _0806BDBC:
|
||||
lsrs r0, 24
|
||||
_0806BDC4:
|
||||
str r0, [sp, 0x34]
|
||||
ldr r1, =gStringBattler
|
||||
ldr r0, =gBankInMenu
|
||||
ldr r1, =gPotentialItemEffectBattler
|
||||
ldr r0, =gBattlerInMenuId
|
||||
ldrb r2, [r0]
|
||||
strb r2, [r1]
|
||||
ldr r0, =gMain
|
||||
|
||||
9
common_syms/battle_main.txt
Normal file
9
common_syms/battle_main.txt
Normal file
@ -0,0 +1,9 @@
|
||||
gPreBattleCallback1
|
||||
gBattleMainFunc
|
||||
gBattleResults
|
||||
gLeveledUpInBattle
|
||||
gBattlerControllerFuncs
|
||||
gHealthboxSpriteIds
|
||||
gMultiUsePlayerCursor
|
||||
gNumberOfMovesToChoose
|
||||
gUnknown_03005D7C
|
||||
@ -1,171 +0,0 @@
|
||||
@ battle types
|
||||
.set BATTLE_TYPE_DOUBLE , 0x0001
|
||||
.set BATTLE_TYPE_LINK, 0x0002
|
||||
.set BATTLE_TYPE_WILD, 0x0004
|
||||
.set BATTLE_TYPE_TRAINER, 0x0008
|
||||
.set BATTLE_TYPE_FIRST_BATTLE, 0x0010
|
||||
.set BATTLE_TYPE_20, 0x0020
|
||||
.set BATTLE_TYPE_MULTI, 0x0040
|
||||
.set BATTLE_TYPE_SAFARI, 0x0080
|
||||
.set BATTLE_TYPE_BATTLE_TOWER, 0x0100
|
||||
.set BATTLE_TYPE_WALLY_TUTORIAL, 0x0200
|
||||
.set BATTLE_TYPE_ROAMER, 0x0400
|
||||
.set BATTLE_TYPE_EREADER_TRAINER, 0x0800
|
||||
.set BATTLE_TYPE_KYOGRE_GROUDON, 0x1000
|
||||
.set BATTLE_TYPE_LEGENDARY, 0x2000
|
||||
.set BATTLE_TYPE_REGI, 0x4000
|
||||
.set BATTLE_TYPE_TWO_OPPONENTS, 0x8000
|
||||
.set BATTLE_TYPE_DOME, 0x10000
|
||||
.set BATTLE_TYPE_PALACE, 0x20000
|
||||
.set BATTLE_TYPE_ARENA, 0x40000
|
||||
.set BATTLE_TYPE_FACTORY, 0x80000
|
||||
.set BATTLE_TYPE_PIKE, 0x100000
|
||||
.set BATTLE_TYPE_PYRAMID, 0x200000
|
||||
.set BATTLE_TYPE_INGAME_PARTNER, 0x400000
|
||||
.set BATTLE_TYPE_x800000, 0x800000
|
||||
.set BATTLE_TYPE_RECORDED, 0x1000000
|
||||
.set BATTLE_TYPE_x2000000, 0x2000000
|
||||
.set BATTLE_TYPE_x4000000, 0x4000000
|
||||
.set BATTLE_TYPE_SECRET_BASE, 0x8000000
|
||||
.set BATTLE_TYPE_GROUDON, 0x10000000
|
||||
.set BATTLE_TYPE_KYOGRE, 0x20000000
|
||||
.set BATTLE_TYPE_RAYQUAZA, 0x40000000
|
||||
.set BATTLE_TYPE_x80000000, 0x80000000
|
||||
|
||||
@ battle outcomes
|
||||
.set WON, 0x1
|
||||
.set LOST, 0x2
|
||||
.set DREW, 0x3
|
||||
.set RAN, 0x4
|
||||
.set PLAYER_TELEPORTED, 0x5
|
||||
.set MON_FLED, 0x6
|
||||
.set CAUGHT, 0x7
|
||||
.set OUT_OF_BALLS, 0x8
|
||||
.set FORFEITED, 0x9
|
||||
.set OPPONENT_TELEPORTED, 0xA
|
||||
|
||||
@ identities
|
||||
.set B_POSITION_PLAYER_LEFT, 0
|
||||
.set B_POSITION_OPPONENT_LEFT, 1
|
||||
.set B_POSITION_PLAYER_RIGHT, 2
|
||||
.set B_POSITION_OPPONENT_RIGHT, 3
|
||||
|
||||
@ status 1
|
||||
.set STATUS1_SLEEP, 0x7
|
||||
.set STATUS1_POISON, 0x8
|
||||
.set STATUS1_BURN, 0x10
|
||||
.set STATUS1_FREEZE, 0x20
|
||||
.set STATUS1_PARALYSIS, 0x40
|
||||
.set STATUS1_TOXIC_POISON, 0x80
|
||||
.set STATUS1_TOXIC_COUNTER, 0xF00
|
||||
|
||||
.set STATUS1_ANY, STATUS1_SLEEP | STATUS1_POISON | STATUS1_BURN | STATUS1_FREEZE | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON
|
||||
|
||||
@ status 2
|
||||
.set STATUS2_CONFUSION, 0x00000007
|
||||
.set STATUS2_FLINCHED, 0x00000008
|
||||
.set STATUS2_UPROAR, 0x00000070
|
||||
.set STATUS2_BIDE, 0x00000300
|
||||
.set STATUS2_LOCK_CONFUSE, 0x00000C00
|
||||
.set STATUS2_MULTIPLETURNS, 0x00001000
|
||||
.set STATUS2_WRAPPED, 0x0000E000
|
||||
.set STATUS2_INFATUATION, 0x000F0000
|
||||
.set STATUS2_FOCUS_ENERGY, 0x00100000
|
||||
.set STATUS2_TRANSFORMED, 0x00200000
|
||||
.set STATUS2_RECHARGE, 0x00400000
|
||||
.set STATUS2_RAGE, 0x00800000
|
||||
.set STATUS2_SUBSTITUTE, 0x01000000
|
||||
.set STATUS2_DESTINY_BOND, 0x02000000
|
||||
.set STATUS2_ESCAPE_PREVENTION, 0x04000000
|
||||
.set STATUS2_NIGHTMARE, 0x08000000
|
||||
.set STATUS2_CURSED, 0x10000000
|
||||
.set STATUS2_FORESIGHT, 0x20000000
|
||||
.set STATUS2_DEFENSE_CURL, 0x40000000
|
||||
.set STATUS2_TORMENT, 0x80000000
|
||||
|
||||
@ status 3
|
||||
.set STATUS3_LEECHSEED_BANK, 0x3
|
||||
.set STATUS3_LEECHSEED, 0x4
|
||||
.set STATUS3_ALWAYS_HITS, 0x18
|
||||
.set STATUS3_PERISH_SONG, 0x20
|
||||
.set STATUS3_ON_AIR, 0x40
|
||||
.set STATUS3_UNDERGROUND, 0x80
|
||||
.set STATUS3_MINIMIZED, 0x100
|
||||
.set STATUS3_ROOTED, 0x400
|
||||
.set STATUS3_CHARGED_UP, 0x200
|
||||
.set STATUS3_YAWN, 0x1800
|
||||
.set STATUS3_IMPRISONED_OTHERS, 0x2000
|
||||
.set STATUS3_GRUDGE, 0x4000
|
||||
.set STATUS3_CANT_SCORE_A_CRIT, 0x8000
|
||||
.set STATUS3_MUDSPORT, 0x10000
|
||||
.set STATUS3_WATERSPORT, 0x20000
|
||||
.set STATUS3_UNDERWATER, 0x40000
|
||||
.set STATUS3_INTIMIDATE_POKES, 0x80000
|
||||
.set STATUS3_TRACE, 0x100000
|
||||
|
||||
@ side status
|
||||
.set SIDE_STATUS_REFLECT, 0x1
|
||||
.set SIDE_STATUS_LIGHTSCREEN, 0x2
|
||||
.set SIDE_STATUS_X4, 0x4
|
||||
.set SIDE_STATUS_SPIKES, 0x10
|
||||
.set SIDE_STATUS_SAFEGUARD, 0x20
|
||||
.set SIDE_STATUS_FUTUREATTACK, 0x40
|
||||
.set SIDE_STATUS_MIST, 0x100
|
||||
.set SIDE_STATUS_SPIKES_DAMAGED, 0x200
|
||||
|
||||
@ stats
|
||||
.set HP, 0x0
|
||||
.set ATK, 0x1
|
||||
.set DEF, 0x2
|
||||
.set SPEED, 0x3
|
||||
.set SPATK, 0x4
|
||||
.set SPDEF, 0x5
|
||||
.set ACC, 0x6
|
||||
.set EVASION, 0x7
|
||||
|
||||
@ weather flags
|
||||
.set WEATHER_RAIN_TEMPORARY, 0x01
|
||||
.set WEATHER_RAIN_DOWNPOUR, 0x02
|
||||
.set WEATHER_RAIN_PERMANENT, 0x04
|
||||
.set WEATHER_SANDSTORM_TEMPORARY, 0x08
|
||||
.set WEATHER_SANDSTORM_PERMANENT, 0x10
|
||||
.set WEATHER_SUN_TEMPORARY, 0x20
|
||||
.set WEATHER_SUN_PERMANENT, 0x40
|
||||
.set WEATHER_HAIL, 0x80
|
||||
|
||||
@ hitmarker
|
||||
.set HITMARKER_x10, 0x00000010
|
||||
.set HITMARKER_x20, 0x00000020
|
||||
.set HITMARKER_DESTINYBOND, 0x00000040
|
||||
.set HITMARKER_NO_ANIMATIONS, 0x00000080
|
||||
.set HITMARKER_IGNORE_SUBSTITUTE, 0x00000100
|
||||
.set HITMARKER_NO_ATTACKSTRING, 0x00000200
|
||||
.set HITMARKER_ATTACKSTRING_PRINTED, 0x00000400
|
||||
.set HITMARKER_NO_PPDEDUCT, 0x00000800
|
||||
.set HITMARKER_PURSUIT_TRAP, 0x00001000
|
||||
.set HITMARKER_IGNORE_SAFEGUARD, 0x00002000
|
||||
.set HITMARKER_SYNCHRONISE_EFFECT, 0x00004000
|
||||
.set HITMARKER_RUN, 0x00008000
|
||||
.set HITMARKER_IGNORE_ON_AIR, 0x00010000
|
||||
.set HITMARKER_IGNORE_UNDERGROUND, 0x00020000
|
||||
.set HITMARKER_IGNORE_UNDERWATER, 0x00040000
|
||||
.set HITMARKER_UNABLE_TO_USE_MOVE, 0x00080000
|
||||
.set HITMARKER_x100000, 0x00100000
|
||||
.set HITMARKER_x200000, 0x00200000
|
||||
.set HITMARKER_x400000, 0x00400000
|
||||
.set HITMARKER_x800000, 0x00800000
|
||||
.set HITMARKER_GRUDGE, 0x01000000
|
||||
.set HITMARKER_OBEYS, 0x02000000
|
||||
.set HITMARKER_x4000000, 0x04000000
|
||||
.set HITMARKER_x8000000, 0x08000000
|
||||
|
||||
@ move flags
|
||||
.set MOVE_RESULT_MISSED, 0x1
|
||||
.set MOVE_RESULT_SUPER_EFFECTIVE, 0x2
|
||||
.set MOVE_RESULT_NOT_VERY_EFFECTIVE, 0x4
|
||||
.set MOVE_RESULT_DOESNT_AFFECT_FOE, 0x8
|
||||
.set MOVE_RESULT_ONE_HIT_KO, 0x10
|
||||
.set MOVE_RESULT_FAILED, 0x20
|
||||
.set MOVE_RESULT_FOE_ENDURED, 0x40
|
||||
.set MOVE_RESULT_FOE_HUNG_ON, 0x80
|
||||
.set MOVE_RESULT_NO_EFFECT, (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED)
|
||||
@ -1,169 +0,0 @@
|
||||
@ animation ids
|
||||
.set ANIM_CASTFORM_CHANGE, 0x0
|
||||
.set ANIM_STATS_CHANGE, 0x1
|
||||
.set ANIM_SUBSTITUTE_FADE, 0x2
|
||||
.set ANIM_SUBSTITUTE_APPEAR, 0x3
|
||||
.set ANIM_x4, 0x4
|
||||
.set ANIM_ITEM_KNOCKOFF, 0x5
|
||||
.set ANIM_TURN_TRAP, 0x6
|
||||
.set ANIM_ITEM_EFFECT, 0x7
|
||||
.set ANIM_SMOKEBALL_ESCAPE, 0x8
|
||||
.set ANIM_HANGED_ON, 0x9
|
||||
.set ANIM_RAIN_CONTINUES, 0xA
|
||||
.set ANIM_SUN_CONTINUES, 0xB
|
||||
.set ANIM_SANDSTORM_CONTINUES, 0xC
|
||||
.set ANIM_HAIL_CONTINUES, 0xD
|
||||
.set ANIM_LEECH_SEED_DRAIN, 0xE
|
||||
.set ANIM_MON_HIT, 0xF
|
||||
.set ANIM_ITEM_STEAL, 0x10
|
||||
.set ANIM_SNATCH_MOVE, 0x11
|
||||
.set ANIM_FUTURE_SIGHT_HIT, 0x12
|
||||
.set ANIM_DOOM_DESIRE_HIT, 0x13
|
||||
.set ANIM_x14, 0x14
|
||||
.set ANIM_INGRAIN_HEAL, 0x15
|
||||
.set ANIM_WISH_HEAL, 0x16
|
||||
|
||||
@ atk 80
|
||||
.set ATK80_DMG_CHANGE_SIGN, 0x0
|
||||
.set ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP, 0x1
|
||||
.set ATK80_DMG_DOUBLED, 0x2
|
||||
|
||||
@ compare operands
|
||||
.set EQUAL, 0x0
|
||||
.set NOT_EQUAL, 0x1
|
||||
.set GREATER_THAN, 0x2
|
||||
.set LESS_THAN, 0x3
|
||||
.set COMMON_BITS, 0x4
|
||||
.set NO_COMMON_BITS, 0x5
|
||||
|
||||
@ move effects
|
||||
.set EFFECT_SLEEP, 0x1
|
||||
.set EFFECT_POISON, 0x2
|
||||
.set EFFECT_BURN, 0x3
|
||||
.set EFFECT_FREEZE, 0x4
|
||||
.set EFFECT_PARALYSIS, 0x5
|
||||
.set EFFECT_TOXIC, 0x6
|
||||
.set EFFECT_CONFUSION, 0x7
|
||||
.set EFFECT_FLINCH, 0x8
|
||||
.set EFFECT_TRI_ATTACK, 0x9
|
||||
.set EFFECT_UPROAR, 0xA
|
||||
.set EFFECT_PAYDAY, 0xB
|
||||
.set EFFECT_CHARGING, 0xC
|
||||
.set EFFECT_WRAP, 0xD
|
||||
.set EFFECT_RECOIL_25, 0xE
|
||||
.set EFFECT_ATK_PLUS_1, 0xF
|
||||
.set EFFECT_DEF_PLUS_1, 0x10
|
||||
.set EFFECT_SPD_PLUS_1, 0x11
|
||||
.set EFFECT_SP_ATK_PLUS_1, 0x12
|
||||
.set EFFECT_SP_DEF_PLUS_1, 0x13
|
||||
.set EFFECT_ACC_PLUS_1, 0x14
|
||||
.set EFFECT_EVS_PLUS_1, 0x15
|
||||
.set EFFECT_ATK_MINUS_1, 0x16
|
||||
.set EFFECT_DEF_MINUS_1, 0x17
|
||||
.set EFFECT_SPD_MINUS_1, 0x18
|
||||
.set EFFECT_SP_ATK_MINUS_1, 0x19
|
||||
.set EFFECT_SP_DEF_MINUS_1, 0x1A
|
||||
.set EFFECT_ACC_MINUS_1, 0x1B
|
||||
.set EFFECT_EVS_MINUS_1, 0x1C
|
||||
.set EFFECT_RECHARGE, 0x1D
|
||||
.set EFFECT_RAGE, 0x1E
|
||||
.set EFFECT_STEAL_ITEM, 0x1F
|
||||
.set EFFECT_PREVENT_ESCAPE, 0x20
|
||||
.set EFFECT_NIGHTMARE, 0x21
|
||||
.set EFFECT_ALL_STATS_UP, 0x22
|
||||
.set EFFECT_RAPIDSPIN, 0x23
|
||||
.set EFFECT_REMOVE_PARALYSIS, 0x24
|
||||
.set EFFECT_ATK_DEF_DOWN, 0x25
|
||||
.set EFFECT_RECOIL_33_PARALYSIS, 0x26
|
||||
.set EFFECT_ATK_PLUS_2, 0x27
|
||||
.set EFFECT_DEF_PLUS_2, 0x28
|
||||
.set EFFECT_SPD_PLUS_2, 0x29
|
||||
.set EFFECT_SP_ATK_PLUS_2, 0x2A
|
||||
.set EFFECT_SP_DEF_PLUS_2, 0x2B
|
||||
.set EFFECT_ACC_PLUS_2, 0x2C
|
||||
.set EFFECT_EVS_PLUS_2, 0x2D
|
||||
.set EFFECT_ATK_MINUS_2, 0x2E
|
||||
.set EFFECT_DEF_MINUS_2, 0x2F
|
||||
.set EFFECT_SPD_MINUS_2, 0x30
|
||||
.set EFFECT_SP_ATK_MINUS_2, 0x31
|
||||
.set EFFECT_SP_DEF_MINUS_2, 0x32
|
||||
.set EFFECT_ACC_MINUS_2, 0x33
|
||||
.set EFFECT_EVS_MINUS_2, 0x34
|
||||
.set EFFECT_THRASH, 0x35
|
||||
.set EFFECT_KNOCK_OFF, 0x36
|
||||
.set EFFECT_NOTHING_37, 0x37
|
||||
.set EFFECT_NOTHING_38, 0x38
|
||||
.set EFFECT_NOTHING_39, 0x39
|
||||
.set EFFECT_NOTHING_3A, 0x3A
|
||||
.set EFFECT_SP_ATK_TWO_DOWN, 0x3B
|
||||
.set EFFECT_NOTHING_3C, 0x3C
|
||||
.set EFFECT_NOTHING_3D, 0x3D
|
||||
.set EFFECT_NOTHING_3E, 0x3E
|
||||
.set EFFECT_NOTHING_3F, 0x3F
|
||||
|
||||
.set AFFECTS_USER, 0x40
|
||||
.set CERTAIN, 0x80
|
||||
|
||||
@ accuracy calc
|
||||
.set NO_ACC_CALC, 0xFFFE
|
||||
.set NO_ACC_CALC_CHECK_LOCK_ON, 0xFFFF
|
||||
.set ACC_CURR_MOVE, 0x0
|
||||
|
||||
@ bank values
|
||||
.set TARGET, 0x0
|
||||
.set ATTACKER, 0x1
|
||||
.set EFFECT_BANK, 0x2
|
||||
.set GBANK_1, 0x3
|
||||
.set ATTACKER_WITH_PARTNER, 0x4 @ only for cmd98
|
||||
.set BANK0, 0x7
|
||||
.set SCRIPTING_BANK, 0xA
|
||||
.set OPPONENT1, 0xC
|
||||
|
||||
@ various
|
||||
.set VARIOUS_CANCEL_MULTI_TURN_MOVES, 0
|
||||
.set VARIOUS_SET_MAGIC_COAT_TARGET, 1
|
||||
.set VARIOUS_IS_RUNNING_IMPOSSIBLE, 2
|
||||
.set VARIOUS_GET_MOVE_TARGET, 3
|
||||
.set VARIOUS_RESET_INTIMIDATE_TRACE_BITS, 5
|
||||
.set VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP, 6
|
||||
.set VARIOUS_EMIT_YESNOBOX, 13
|
||||
.set VARIOUS_WAIT_CRY, 18
|
||||
.set VARIOUS_RETURN_OPPONENT_MON1, 19
|
||||
.set VARIOUS_RETURN_OPPONENT_MON2, 20
|
||||
.set VARIOUS_SET_TELEPORT_OUTCOME, 25
|
||||
.set VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC, 26
|
||||
|
||||
@ jumpifcant switch flag argument
|
||||
.set ATK4F_DONT_CHECK_STATUSES, 0x80
|
||||
|
||||
@ battle scripting struct
|
||||
.equiv sPAINSPLIT_HP, gBattleScripting
|
||||
.equiv sBIDE_DMG, gBattleScripting + 4
|
||||
.equiv sMULTIHIT_STRING, gBattleScripting + 8
|
||||
.equiv sDMG_MULTIPLIER, gBattleScripting + 0xE
|
||||
.equiv sTWOTURN_STRINGID, gBattleScripting + 0xF
|
||||
.equiv sANIM_ARG1, gBattleScripting + 0x10
|
||||
.equiv sANIM_ARG2, gBattleScripting + 0x11
|
||||
.equiv sTRIPLE_KICK_POWER, gBattleScripting + 0x12
|
||||
.equiv sMOVEEND_STATE, gBattleScripting + 0x14
|
||||
.equiv sBANK_WITH_ABILITY, gBattleScripting + 0x15
|
||||
.equiv sMULTIHIT_EFFECT, gBattleScripting + 0x16
|
||||
.equiv sBANK, gBattleScripting + 0x17
|
||||
.equiv sANIM_TURN, gBattleScripting + 0x18
|
||||
.equiv sANIM_TARGETS_HIT, gBattleScripting + 0x19
|
||||
.equiv sSTATCHANGER, gBattleScripting + 0x1A
|
||||
.equiv sFIELD_1B, gBattleScripting + 0x1B
|
||||
.equiv sGIVEEXP_STATE, gBattleScripting + 0x1C
|
||||
.equiv sBATTLE_STYLE, gBattleScripting + 0x1D
|
||||
.equiv sLVLBOX_STATE, gBattleScripting + 0x1E
|
||||
.equiv sLEARNMOVE_STATE, gBattleScripting + 0x1F
|
||||
.equiv sFIELD_20, gBattleScripting + 0x20
|
||||
.equiv sRESHOW_MAIN_STATE, gBattleScripting + 0x21
|
||||
.equiv sRESHOW_HELPER_STATE, gBattleScripting + 0x22
|
||||
.equiv sFIELD_23, gBattleScripting + 0x23
|
||||
.equiv sFIELD_24, gBattleScripting + 0x24
|
||||
.equiv sMULTIPLAYER_ID, gBattleScripting + 0x25
|
||||
|
||||
@ battle communication struct
|
||||
.equiv cEFFECT_CHOOSER, gBattleCommunication + 3
|
||||
.equiv cMULTISTRING_CHOOSER, gBattleCommunication + 5
|
||||
@ -1,375 +0,0 @@
|
||||
.set STRINGID_INTROMSG, 0
|
||||
.set STRINGID_INTROSENDOUT, 1
|
||||
.set STRINGID_RETURNMON, 2
|
||||
.set STRINGID_SWITCHINMON, 3
|
||||
.set STRINGID_USEDMOVE, 4
|
||||
.set STRINGID_BATTLEEND, 5
|
||||
.set STRINGID_TRAINER1LOSETEXT, 12
|
||||
.set STRINGID_PKMNGAINEDEXP, 13
|
||||
.set STRINGID_PKMNGREWTOLV, 14
|
||||
.set STRINGID_PKMNLEARNEDMOVE, 15
|
||||
.set STRINGID_TRYTOLEARNMOVE1, 16
|
||||
.set STRINGID_TRYTOLEARNMOVE2, 17
|
||||
.set STRINGID_TRYTOLEARNMOVE3, 18
|
||||
.set STRINGID_PKMNFORGOTMOVE, 19
|
||||
.set STRINGID_STOPLEARNINGMOVE, 20
|
||||
.set STRINGID_DIDNOTLEARNMOVE, 21
|
||||
.set STRINGID_PKMNLEARNEDMOVE2, 22
|
||||
.set STRINGID_ATTACKMISSED, 23
|
||||
.set STRINGID_PKMNPROTECTEDITSELF, 24
|
||||
.set STRINGID_STATSWONTINCREASE2, 25
|
||||
.set STRINGID_AVOIDEDDAMAGE, 26
|
||||
.set STRINGID_ITDOESNTAFFECT, 27
|
||||
.set STRINGID_ATTACKERFAINTED, 28
|
||||
.set STRINGID_TARGETFAINTED, 29
|
||||
.set STRINGID_PLAYERGOTMONEY, 30
|
||||
.set STRINGID_PLAYERWHITEOUT, 31
|
||||
.set STRINGID_PLAYERWHITEOUT2, 32
|
||||
.set STRINGID_PREVENTSESCAPE, 33
|
||||
.set STRINGID_HITXTIMES, 34
|
||||
.set STRINGID_PKMNFELLASLEEP, 35
|
||||
.set STRINGID_PKMNMADESLEEP, 36
|
||||
.set STRINGID_PKMNALREADYASLEEP, 37
|
||||
.set STRINGID_PKMNALREADYASLEEP2, 38
|
||||
.set STRINGID_PKMNWASNTAFFECTED, 39
|
||||
.set STRINGID_PKMNWASPOISONED, 40
|
||||
.set STRINGID_PKMNPOISONEDBY, 41
|
||||
.set STRINGID_PKMNHURTBYPOISON, 42
|
||||
.set STRINGID_PKMNALREADYPOISONED, 43
|
||||
.set STRINGID_PKMNBADLYPOISONED, 44
|
||||
.set STRINGID_PKMNENERGYDRAINED, 45
|
||||
.set STRINGID_PKMNWASBURNED, 46
|
||||
.set STRINGID_PKMNBURNEDBY, 47
|
||||
.set STRINGID_PKMNHURTBYBURN, 48
|
||||
.set STRINGID_PKMNWASFROZEN, 49
|
||||
.set STRINGID_PKMNFROZENBY, 50
|
||||
.set STRINGID_PKMNISFROZEN, 51
|
||||
.set STRINGID_PKMNWASDEFROSTED, 52
|
||||
.set STRINGID_PKMNWASDEFROSTED2, 53
|
||||
.set STRINGID_PKMNWASDEFROSTEDBY, 54
|
||||
.set STRINGID_PKMNWASPARALYZED, 55
|
||||
.set STRINGID_PKMNWASPARALYZEDBY, 56
|
||||
.set STRINGID_PKMNISPARALYZED, 57
|
||||
.set STRINGID_PKMNISALREADYPARALYZED, 58
|
||||
.set STRINGID_PKMNHEALEDPARALYSIS, 59
|
||||
.set STRINGID_PKMNDREAMEATEN, 60
|
||||
.set STRINGID_STATSWONTINCREASE, 61
|
||||
.set STRINGID_STATSWONTDECREASE, 62
|
||||
.set STRINGID_TEAMSTOPPEDWORKING, 63
|
||||
.set STRINGID_FOESTOPPEDWORKING, 64
|
||||
.set STRINGID_PKMNISCONFUSED, 65
|
||||
.set STRINGID_PKMNHEALEDCONFUSION, 66
|
||||
.set STRINGID_PKMNWASCONFUSED, 67
|
||||
.set STRINGID_PKMNALREADYCONFUSED, 68
|
||||
.set STRINGID_PKMNFELLINLOVE, 69
|
||||
.set STRINGID_PKMNINLOVE, 70
|
||||
.set STRINGID_PKMNIMMOBILIZEDBYLOVE, 71
|
||||
.set STRINGID_PKMNBLOWNAWAY, 72
|
||||
.set STRINGID_PKMNCHANGEDTYPE, 73
|
||||
.set STRINGID_PKMNFLINCHED, 74
|
||||
.set STRINGID_PKMNREGAINEDHEALTH, 75
|
||||
.set STRINGID_PKMNHPFULL, 76
|
||||
.set STRINGID_PKMNRAISEDSPDEF, 77
|
||||
.set STRINGID_PKMNRAISEDDEF, 78
|
||||
.set STRINGID_PKMNCOVEREDBYVEIL, 79
|
||||
.set STRINGID_PKMNUSEDSAFEGUARD, 80
|
||||
.set STRINGID_PKMNSAFEGUARDEXPIRED, 81
|
||||
.set STRINGID_PKMNWENTTOSLEEP, 82
|
||||
.set STRINGID_PKMNSLEPTHEALTHY, 83
|
||||
.set STRINGID_PKMNWHIPPEDWHIRLWIND, 84
|
||||
.set STRINGID_PKMNTOOKSUNLIGHT, 85
|
||||
.set STRINGID_PKMNLOWEREDHEAD, 86
|
||||
.set STRINGID_PKMNISGLOWING, 87
|
||||
.set STRINGID_PKMNFLEWHIGH, 88
|
||||
.set STRINGID_PKMNDUGHOLE, 89
|
||||
.set STRINGID_PKMNSQUEEZEDBYBIND, 90
|
||||
.set STRINGID_PKMNTRAPPEDINVORTEX, 91
|
||||
.set STRINGID_PKMNWRAPPEDBY, 92
|
||||
.set STRINGID_PKMNCLAMPED, 93
|
||||
.set STRINGID_PKMNHURTBY, 94
|
||||
.set STRINGID_PKMNFREEDFROM, 95
|
||||
.set STRINGID_PKMNCRASHED, 96
|
||||
.set STRINGID_PKMNSHROUDEDINMIST, 97
|
||||
.set STRINGID_PKMNPROTECTEDBYMIST, 98
|
||||
.set STRINGID_PKMNGETTINGPUMPED, 99
|
||||
.set STRINGID_PKMNHITWITHRECOIL, 100
|
||||
.set STRINGID_PKMNPROTECTEDITSELF2, 101
|
||||
.set STRINGID_PKMNBUFFETEDBYSANDSTORM, 102
|
||||
.set STRINGID_PKMNPELTEDBYHAIL, 103
|
||||
.set STRINGID_PKMNSEEDED, 104
|
||||
.set STRINGID_PKMNEVADEDATTACK, 105
|
||||
.set STRINGID_PKMNSAPPEDBYLEECHSEED, 106
|
||||
.set STRINGID_PKMNFASTASLEEP, 107
|
||||
.set STRINGID_PKMNWOKEUP, 108
|
||||
.set STRINGID_PKMNUPROARKEPTAWAKE, 109
|
||||
.set STRINGID_PKMNWOKEUPINUPROAR, 110
|
||||
.set STRINGID_PKMNCAUSEDUPROAR, 111
|
||||
.set STRINGID_PKMNMAKINGUPROAR, 112
|
||||
.set STRINGID_PKMNCALMEDDOWN, 113
|
||||
.set STRINGID_PKMNCANTSLEEPINUPROAR, 114
|
||||
.set STRINGID_PKMNSTOCKPILED, 115
|
||||
.set STRINGID_PKMNCANTSTOCKPILE, 116
|
||||
.set STRINGID_PKMNCANTSLEEPINUPROAR2, 117
|
||||
.set STRINGID_UPROARKEPTPKMNAWAKE, 118
|
||||
.set STRINGID_PKMNSTAYEDAWAKEUSING, 119
|
||||
.set STRINGID_PKMNSTORINGENERGY, 120
|
||||
.set STRINGID_PKMNUNLEASHEDENERGY, 121
|
||||
.set STRINGID_PKMNFATIGUECONFUSION, 122
|
||||
.set STRINGID_PKMNPICKEDUPITEM, 123
|
||||
.set STRINGID_PKMNUNAFFECTED, 124
|
||||
.set STRINGID_PKMNTRANSFORMEDINTO, 125
|
||||
.set STRINGID_PKMNMADESUBSTITUTE, 126
|
||||
.set STRINGID_PKMNHASSUBSTITUTE, 127
|
||||
.set STRINGID_SUBSTITUTEDAMAGED, 128
|
||||
.set STRINGID_PKMNSUBSTITUTEFADED, 129
|
||||
.set STRINGID_PKMNMUSTRECHARGE, 130
|
||||
.set STRINGID_PKMNRAGEBUILDING, 131
|
||||
.set STRINGID_PKMNMOVEWASDISABLED, 132
|
||||
.set STRINGID_PKMNMOVEISDISABLED, 133
|
||||
.set STRINGID_PKMNMOVEDISABLEDNOMORE, 134
|
||||
.set STRINGID_PKMNGOTENCORE, 135
|
||||
.set STRINGID_PKMNENCOREENDED, 136
|
||||
.set STRINGID_PKMNTOOKAIM, 137
|
||||
.set STRINGID_PKMNSKETCHEDMOVE, 138
|
||||
.set STRINGID_PKMNTRYINGTOTAKEFOE, 139
|
||||
.set STRINGID_PKMNTOOKFOE, 140
|
||||
.set STRINGID_PKMNREDUCEDPP, 141
|
||||
.set STRINGID_PKMNSTOLEITEM, 142
|
||||
.set STRINGID_TARGETCANTESCAPENOW, 143
|
||||
.set STRINGID_PKMNFELLINTONIGHTMARE, 144
|
||||
.set STRINGID_PKMNLOCKEDINNIGHTMARE, 145
|
||||
.set STRINGID_PKMNLAIDCURSE, 146
|
||||
.set STRINGID_PKMNAFFLICTEDBYCURSE, 147
|
||||
.set STRINGID_SPIKESSCATTERED, 148
|
||||
.set STRINGID_PKMNHURTBYSPIKES, 149
|
||||
.set STRINGID_PKMNIDENTIFIED, 150
|
||||
.set STRINGID_PKMNPERISHCOUNTFELL, 151
|
||||
.set STRINGID_PKMNBRACEDITSELF, 152
|
||||
.set STRINGID_PKMNENDUREDHIT, 153
|
||||
.set STRINGID_MAGNITUDESTRENGTH, 154
|
||||
.set STRINGID_PKMNCUTHPMAXEDATTACK, 155
|
||||
.set STRINGID_PKMNCOPIEDSTATCHANGES, 156
|
||||
.set STRINGID_PKMNGOTFREE, 157
|
||||
.set STRINGID_PKMNSHEDLEECHSEED, 158
|
||||
.set STRINGID_PKMNBLEWAWAYSPIKES, 159
|
||||
.set STRINGID_PKMNFLEDFROMBATTLE, 160
|
||||
.set STRINGID_PKMNFORESAWATTACK, 161
|
||||
.set STRINGID_PKMNTOOKATTACK, 162
|
||||
.set STRINGID_PKMNATTACK, 163
|
||||
.set STRINGID_PKMNCENTERATTENTION, 164
|
||||
.set STRINGID_PKMNCHARGINGPOWER, 165
|
||||
.set STRINGID_NATUREPOWERTURNEDINTO, 166
|
||||
.set STRINGID_PKMNSTATUSNORMAL, 167
|
||||
.set STRINGID_PKMNHASNOMOVESLEFT, 168
|
||||
.set STRINGID_PKMNSUBJECTEDTOTORMENT, 169
|
||||
.set STRINGID_PKMNCANTUSEMOVETORMENT, 170
|
||||
.set STRINGID_PKMNTIGHTENINGFOCUS, 171
|
||||
.set STRINGID_PKMNFELLFORTAUNT, 172
|
||||
.set STRINGID_PKMNCANTUSEMOVETAUNT, 173
|
||||
.set STRINGID_PKMNREADYTOHELP, 174
|
||||
.set STRINGID_PKMNSWITCHEDITEMS, 175
|
||||
.set STRINGID_PKMNCOPIEDFOE, 176
|
||||
.set STRINGID_PKMNMADEWISH, 177
|
||||
.set STRINGID_PKMNWISHCAMETRUE, 178
|
||||
.set STRINGID_PKMNPLANTEDROOTS, 179
|
||||
.set STRINGID_PKMNABSORBEDNUTRIENTS, 180
|
||||
.set STRINGID_PKMNANCHOREDITSELF, 181
|
||||
.set STRINGID_PKMNWASMADEDROWSY, 182
|
||||
.set STRINGID_PKMNKNOCKEDOFF, 183
|
||||
.set STRINGID_PKMNSWAPPEDABILITIES, 184
|
||||
.set STRINGID_PKMNSEALEDOPPONENTMOVE, 185
|
||||
.set STRINGID_PKMNCANTUSEMOVESEALED, 186
|
||||
.set STRINGID_PKMNWANTSGRUDGE, 187
|
||||
.set STRINGID_PKMNLOSTPPGRUDGE, 188
|
||||
.set STRINGID_PKMNSHROUDEDITSELF, 189
|
||||
.set STRINGID_PKMNMOVEBOUNCED, 190
|
||||
.set STRINGID_PKMNWAITSFORTARGET, 191
|
||||
.set STRINGID_PKMNSNATCHEDMOVE, 192
|
||||
.set STRINGID_PKMNMADEITRAIN, 193
|
||||
.set STRINGID_PKMNRAISEDSPEED, 194
|
||||
.set STRINGID_PKMNPROTECTEDBY, 195
|
||||
.set STRINGID_PKMNPREVENTSUSAGE, 196
|
||||
.set STRINGID_PKMNRESTOREDHPUSING, 197
|
||||
.set STRINGID_PKMNCHANGEDTYPEWITH, 198
|
||||
.set STRINGID_PKMNPREVENTSPARALYSISWITH, 199
|
||||
.set STRINGID_PKMNPREVENTSROMANCEWITH, 200
|
||||
.set STRINGID_PKMNPREVENTSPOISONINGWITH, 201
|
||||
.set STRINGID_PKMNPREVENTSCONFUSIONWITH, 202
|
||||
.set STRINGID_PKMNRAISEDFIREPOWERWITH, 203
|
||||
.set STRINGID_PKMNANCHORSITSELFWITH, 204
|
||||
.set STRINGID_PKMNCUTSATTACKWITH, 205
|
||||
.set STRINGID_PKMNPREVENTSSTATLOSSWITH, 206
|
||||
.set STRINGID_PKMNHURTSWITH, 207
|
||||
.set STRINGID_PKMNTRACED, 208
|
||||
.set STRINGID_STATSHARPLY, 209
|
||||
.set STRINGID_STATROSE, 210
|
||||
.set STRINGID_STATHARSHLY, 211
|
||||
.set STRINGID_STATFELL, 212
|
||||
.set STRINGID_PKMNSSTATCHANGED, 213
|
||||
.set STRINGID_PKMNSSTATCHANGED2, 214
|
||||
.set STRINGID_PKMNSSTATCHANGED3, 215
|
||||
.set STRINGID_PKMNSSTATCHANGED4, 216
|
||||
.set STRINGID_CRITICALHIT, 217
|
||||
.set STRINGID_ONEHITKO, 218
|
||||
.set STRINGID_123POOF, 219
|
||||
.set STRINGID_ANDELLIPSIS, 220
|
||||
.set STRINGID_NOTVERYEFFECTIVE, 221
|
||||
.set STRINGID_SUPEREFFECTIVE, 222
|
||||
.set STRINGID_GOTAWAYSAFELY, 223
|
||||
.set STRINGID_WILDPKMNFLED, 224
|
||||
.set STRINGID_NORUNNINGFROMTRAINERS, 225
|
||||
.set STRINGID_CANTESCAPE, 226
|
||||
.set STRINGID_DONTLEAVEBIRCH, 227
|
||||
.set STRINGID_BUTNOTHINGHAPPENED, 228
|
||||
.set STRINGID_BUTITFAILED, 229
|
||||
.set STRINGID_ITHURTCONFUSION, 230
|
||||
.set STRINGID_MIRRORMOVEFAILED, 231
|
||||
.set STRINGID_STARTEDTORAIN, 232
|
||||
.set STRINGID_DOWNPOURSTARTED, 233
|
||||
.set STRINGID_RAINCONTINUES, 234
|
||||
.set STRINGID_DOWNPOURCONTINUES, 235
|
||||
.set STRINGID_RAINSTOPPED, 236
|
||||
.set STRINGID_SANDSTORMBREWED, 237
|
||||
.set STRINGID_SANDSTORMRAGES, 238
|
||||
.set STRINGID_SANDSTORMSUBSIDED, 239
|
||||
.set STRINGID_SUNLIGHTGOTBRIGHT, 240
|
||||
.set STRINGID_SUNLIGHTSTRONG, 241
|
||||
.set STRINGID_SUNLIGHTFADED, 242
|
||||
.set STRINGID_STARTEDHAIL, 243
|
||||
.set STRINGID_HAILCONTINUES, 244
|
||||
.set STRINGID_HAILSTOPPED, 245
|
||||
.set STRINGID_FAILEDTOSPITUP, 246
|
||||
.set STRINGID_FAILEDTOSWALLOW, 247
|
||||
.set STRINGID_WINDBECAMEHEATWAVE, 248
|
||||
.set STRINGID_STATCHANGESGONE, 249
|
||||
.set STRINGID_COINSSCATTERED, 250
|
||||
.set STRINGID_TOOWEAKFORSUBSTITUTE, 251
|
||||
.set STRINGID_SHAREDPAIN, 252
|
||||
.set STRINGID_BELLCHIMED, 253
|
||||
.set STRINGID_FAINTINTHREE, 254
|
||||
.set STRINGID_NOPPLEFT, 255
|
||||
.set STRINGID_BUTNOPPLEFT, 256
|
||||
.set STRINGID_PLAYERUSEDITEM, 257
|
||||
.set STRINGID_WALLYUSEDITEM, 258
|
||||
.set STRINGID_TRAINERBLOCKEDBALL, 259
|
||||
.set STRINGID_DONTBEATHIEF, 260
|
||||
.set STRINGID_ITDODGEDBALL, 261
|
||||
.set STRINGID_YOUMISSEDPKMN, 262
|
||||
.set STRINGID_PKMNBROKEFREE, 263
|
||||
.set STRINGID_ITAPPEAREDCAUGHT, 264
|
||||
.set STRINGID_AARGHALMOSTHADIT, 265
|
||||
.set STRINGID_SHOOTSOCLOSE, 266
|
||||
.set STRINGID_GOTCHAPKMNCAUGHT, 267
|
||||
.set STRINGID_GOTCHAPKMNCAUGHT2, 268
|
||||
.set STRINGID_GIVENICKNAMECAPTURED, 269
|
||||
.set STRINGID_PKMNSENTTOPC, 270
|
||||
.set STRINGID_PKMNDATAADDEDTODEX, 271
|
||||
.set STRINGID_ITISRAINING, 272
|
||||
.set STRINGID_SANDSTORMISRAGING, 273
|
||||
.set STRINGID_CANTESCAPE2, 274
|
||||
.set STRINGID_PKMNIGNORESASLEEP, 275
|
||||
.set STRINGID_PKMNIGNOREDORDERS, 276
|
||||
.set STRINGID_PKMNBEGANTONAP, 277
|
||||
.set STRINGID_PKMNLOAFING, 278
|
||||
.set STRINGID_PKMNWONTOBEY, 279
|
||||
.set STRINGID_PKMNTURNEDAWAY, 280
|
||||
.set STRINGID_PKMNPRETENDNOTNOTICE, 281
|
||||
.set STRINGID_ENEMYABOUTTOSWITCHPKMN, 282
|
||||
.set STRINGID_CREPTCLOSER, 283
|
||||
.set STRINGID_CANTGETCLOSER, 284
|
||||
.set STRINGID_PKMNWATCHINGCAREFULLY, 285
|
||||
.set STRINGID_PKMNCURIOUSABOUTX, 286
|
||||
.set STRINGID_PKMNENTHRALLEDBYX, 287
|
||||
.set STRINGID_PKMNIGNOREDX, 288
|
||||
.set STRINGID_THREWPOKEBLOCKATPKMN, 289
|
||||
.set STRINGID_OUTOFSAFARIBALLS, 290
|
||||
.set STRINGID_PKMNSITEMCUREDPARALYSIS, 291
|
||||
.set STRINGID_PKMNSITEMCUREDPOISON, 292
|
||||
.set STRINGID_PKMNSITEMHEALEDBURN, 293
|
||||
.set STRINGID_PKMNSITEMDEFROSTEDIT, 294
|
||||
.set STRINGID_PKMNSITEMWOKEIT, 295
|
||||
.set STRINGID_PKMNSITEMSNAPPEDOUT, 296
|
||||
.set STRINGID_PKMNSITEMCUREDPROBLEM, 297
|
||||
.set STRINGID_PKMNSITEMRESTOREDHEALTH, 298
|
||||
.set STRINGID_PKMNSITEMRESTOREDPP, 299
|
||||
.set STRINGID_PKMNSITEMRESTOREDSTATUS, 300
|
||||
.set STRINGID_PKMNSITEMRESTOREDHPALITTLE, 301
|
||||
.set STRINGID_ITEMALLOWSONLYYMOVE, 302
|
||||
.set STRINGID_PKMNHUNGONWITHX, 303
|
||||
.set STRINGID_EMPTYSTRING3, 304
|
||||
.set STRINGID_PKMNSXPREVENTSBURNS, 305
|
||||
.set STRINGID_PKMNSXBLOCKSY, 306
|
||||
.set STRINGID_PKMNSXRESTOREDHPALITTLE2, 307
|
||||
.set STRINGID_PKMNSXWHIPPEDUPSANDSTORM, 308
|
||||
.set STRINGID_PKMNSXPREVENTSYLOSS, 309
|
||||
.set STRINGID_PKMNSXINFATUATEDY, 310
|
||||
.set STRINGID_PKMNSXMADEYINEFFECTIVE, 311
|
||||
.set STRINGID_PKMNSXCUREDYPROBLEM, 312
|
||||
.set STRINGID_ITSUCKEDLIQUIDOOZE, 313
|
||||
.set STRINGID_PKMNTRANSFORMED, 314
|
||||
.set STRINGID_ELECTRICITYWEAKENED, 315
|
||||
.set STRINGID_FIREWEAKENED, 316
|
||||
.set STRINGID_PKMNHIDUNDERWATER, 317
|
||||
.set STRINGID_PKMNSPRANGUP, 318
|
||||
.set STRINGID_HMMOVESCANTBEFORGOTTEN, 319
|
||||
.set STRINGID_XFOUNDONEY, 320
|
||||
.set STRINGID_PLAYERDEFEATEDTRAINER1, 321
|
||||
.set STRINGID_SOOTHINGAROMA, 322
|
||||
.set STRINGID_ITEMSCANTBEUSEDNOW, 323
|
||||
.set STRINGID_FORXCOMMAYZ, 324
|
||||
.set STRINGID_USINGXTHEYOFZN, 325
|
||||
.set STRINGID_PKMNUSEDXTOGETPUMPED, 326
|
||||
.set STRINGID_PKMNSXMADEYUSELESS, 327
|
||||
.set STRINGID_PKMNTRAPPEDBYSANDTOMB, 328
|
||||
.set STRINGID_EMPTYSTRING4, 329
|
||||
.set STRINGID_ABOOSTED, 330
|
||||
.set STRINGID_PKMNSXINTENSIFIEDSUN, 331
|
||||
.set STRINGID_PKMNMAKESGROUNDMISS, 332
|
||||
.set STRINGID_YOUTHROWABALLNOWRIGHT, 333
|
||||
.set STRINGID_PKMNSXTOOKATTACK, 334
|
||||
.set STRINGID_PKMNCHOSEXASDESTINY, 335
|
||||
.set STRINGID_PKMNLOSTFOCUS, 336
|
||||
.set STRINGID_USENEXTPKMN, 337
|
||||
.set STRINGID_PKMNFLEDUSINGITS, 338
|
||||
.set STRINGID_PKMNFLEDUSING, 339
|
||||
.set STRINGID_PKMNWASDRAGGEDOUT, 340
|
||||
.set STRINGID_PREVENTEDFROMWORKING, 341
|
||||
.set STRINGID_PKMNSITEMNORMALIZEDSTATUS, 342
|
||||
.set STRINGID_TRAINER1USEDITEM, 343
|
||||
.set STRINGID_BOXISFULL, 344
|
||||
.set STRINGID_PKMNAVOIDEDATTACK, 345
|
||||
.set STRINGID_PKMNSXMADEITINEFFECTIVE, 346
|
||||
.set STRINGID_PKMNSXPREVENTSFLINCHING, 347
|
||||
.set STRINGID_PKMNALREADYHASBURN, 348
|
||||
.set STRINGID_STATSWONTDECREASE2, 349
|
||||
.set STRINGID_PKMNSXBLOCKSY2, 350
|
||||
.set STRINGID_PKMNSXWOREOFF, 351
|
||||
.set STRINGID_PKMNRAISEDDEFALITTLE, 352
|
||||
.set STRINGID_PKMNRAISEDSPDEFALITTLE, 353
|
||||
.set STRINGID_THEWALLSHATTERED, 354
|
||||
.set STRINGID_PKMNSXPREVENTSYSZ, 355
|
||||
.set STRINGID_PKMNSXCUREDITSYPROBLEM, 356
|
||||
.set STRINGID_ATTACKERCANTESCAPE, 357
|
||||
.set STRINGID_PKMNOBTAINEDX, 358
|
||||
.set STRINGID_PKMNOBTAINEDX2, 359
|
||||
.set STRINGID_PKMNOBTAINEDXYOBTAINEDZ, 360
|
||||
.set STRINGID_BUTNOEFFECT, 361
|
||||
.set STRINGID_PKMNSXHADNOEFFECTONY, 362
|
||||
.set STRINGID_TWOENEMIESDEFEATED, 363
|
||||
.set STRINGID_TRAINER2LOSETEXT, 364
|
||||
.set STRINGID_PKMNINCAPABLEOFPOWER, 365
|
||||
.set STRINGID_GLINTAPPEARSINEYE, 366
|
||||
.set STRINGID_PKMNGETTINGINTOPOSITION, 367
|
||||
.set STRINGID_PKMNBEGANGROWLINGDEEPLY, 368
|
||||
.set STRINGID_PKMNEAGERFORMORE, 369
|
||||
.set STRINGID_DEFEATEDOPPONENTBYREFEREE, 370
|
||||
.set STRINGID_LOSTTOOPPONENTBYREFEREE, 371
|
||||
.set STRINGID_TIEDOPPONENTBYREFEREE, 372
|
||||
.set STRINGID_QUESTIONFORFEITMATCH, 373
|
||||
.set STRINGID_FORFEITEDMATCH, 374
|
||||
.set STRINGID_PKMNTRANSFERREDSOMEONESPC, 375
|
||||
.set STRINGID_PKMNTRANSFERREDLANETTESPC, 376
|
||||
.set STRINGID_PKMNBOXSOMEONESPCFULL, 377
|
||||
.set STRINGID_PKMNBOXLANETTESPCFULL, 378
|
||||
.set STRINGID_TRAINER1WINTEXT, 379
|
||||
.set STRINGID_TRAINER2WINTEXT, 380
|
||||
@ -1,6 +1,5 @@
|
||||
.include "constants/gba_constants.inc"
|
||||
.include "constants/misc_constants.inc"
|
||||
.include "constants/type_constants.inc"
|
||||
.include "constants/contest_constants.inc"
|
||||
.include "constants/pokemon_data_constants.inc"
|
||||
.include "constants/item_data_constants.inc"
|
||||
|
||||
@ -1,29 +1,3 @@
|
||||
.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
|
||||
@ -31,23 +5,6 @@
|
||||
.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
|
||||
|
||||
@ -1,18 +0,0 @@
|
||||
.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_UNKNOWN, 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
|
||||
@ -1,11 +1,11 @@
|
||||
.include "include/constants/battle_ai.h"
|
||||
.include "include/constants/abilities.h"
|
||||
.include "include/constants/items.h"
|
||||
.include "include/constants/moves.h"
|
||||
.include "include/constants/battle_move_effects.h"
|
||||
.include "include/constants/hold_effects.h"
|
||||
.include "constants/battle_constants.inc"
|
||||
.include "constants/type_constants.inc"
|
||||
#include "constants/battle.h"
|
||||
#include "constants/battle_ai.h"
|
||||
#include "constants/abilities.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/battle_move_effects.h"
|
||||
#include "constants/hold_effects.h"
|
||||
#include "constants/pokemon.h"
|
||||
.include "asm/macros/battle_ai_script.inc"
|
||||
|
||||
.section script_data, "aw", %progbits
|
||||
@ -249,64 +249,64 @@ BattleAIScript_82DC341:
|
||||
if_hp_less_than AI_USER, 51, Score_Minus10
|
||||
|
||||
BattleAIScript_82DC348:
|
||||
if_stat_level_equal AI_USER, ATK, 12, Score_Minus10
|
||||
if_stat_level_equal AI_USER, STAT_ATK, 12, Score_Minus10
|
||||
end
|
||||
|
||||
BattleAIScript_82DC351:
|
||||
if_stat_level_equal AI_USER, DEF, 12, Score_Minus10
|
||||
if_stat_level_equal AI_USER, STAT_DEF, 12, Score_Minus10
|
||||
end
|
||||
|
||||
BattleAIScript_82DC35A:
|
||||
if_stat_level_equal AI_USER, SPEED, 12, Score_Minus10
|
||||
if_stat_level_equal AI_USER, STAT_SPEED, 12, Score_Minus10
|
||||
end
|
||||
|
||||
BattleAIScript_82DC363:
|
||||
if_stat_level_equal AI_USER, SPATK, 12, Score_Minus10
|
||||
if_stat_level_equal AI_USER, STAT_SPATK, 12, Score_Minus10
|
||||
end
|
||||
|
||||
BattleAIScript_82DC36C:
|
||||
if_stat_level_equal AI_USER, SPDEF, 12, Score_Minus10
|
||||
if_stat_level_equal AI_USER, STAT_SPDEF, 12, Score_Minus10
|
||||
end
|
||||
|
||||
BattleAIScript_82DC375:
|
||||
if_stat_level_equal AI_USER, ACC, 12, Score_Minus10
|
||||
if_stat_level_equal AI_USER, STAT_ACC, 12, Score_Minus10
|
||||
end
|
||||
|
||||
BattleAIScript_82DC37E:
|
||||
if_stat_level_equal AI_USER, EVASION, 12, Score_Minus10
|
||||
if_stat_level_equal AI_USER, STAT_EVASION, 12, Score_Minus10
|
||||
end
|
||||
|
||||
BattleAIScript_82DC387:
|
||||
if_stat_level_equal AI_TARGET, ATK, 0, Score_Minus10
|
||||
if_stat_level_equal AI_TARGET, STAT_ATK, 0, Score_Minus10
|
||||
get_ability AI_TARGET
|
||||
if_equal ABILITY_HYPER_CUTTER, Score_Minus10
|
||||
goto BattleAIScript_82DC3F6
|
||||
|
||||
BattleAIScript_82DC39C:
|
||||
if_stat_level_equal AI_TARGET, DEF, 0, Score_Minus10
|
||||
if_stat_level_equal AI_TARGET, STAT_DEF, 0, Score_Minus10
|
||||
goto BattleAIScript_82DC3F6
|
||||
|
||||
BattleAIScript_82DC3A9:
|
||||
if_stat_level_equal AI_TARGET, SPEED, 0, Score_Minus10
|
||||
if_stat_level_equal AI_TARGET, STAT_SPEED, 0, Score_Minus10
|
||||
if_ability AI_TARGET, ABILITY_SPEED_BOOST, Score_Minus10
|
||||
goto BattleAIScript_82DC3F6
|
||||
|
||||
BattleAIScript_82DC3BF:
|
||||
if_stat_level_equal AI_TARGET, SPATK, 0, Score_Minus10
|
||||
if_stat_level_equal AI_TARGET, STAT_SPATK, 0, Score_Minus10
|
||||
goto BattleAIScript_82DC3F6
|
||||
|
||||
BattleAIScript_82DC3CC:
|
||||
if_stat_level_equal AI_TARGET, SPDEF, 0, Score_Minus10
|
||||
if_stat_level_equal AI_TARGET, STAT_SPDEF, 0, Score_Minus10
|
||||
goto BattleAIScript_82DC3F6
|
||||
|
||||
BattleAIScript_82DC3D9:
|
||||
if_stat_level_equal AI_TARGET, ACC, 0, Score_Minus10
|
||||
if_stat_level_equal AI_TARGET, STAT_ACC, 0, Score_Minus10
|
||||
get_ability AI_TARGET
|
||||
if_equal ABILITY_KEEN_EYE, Score_Minus10
|
||||
goto BattleAIScript_82DC3F6
|
||||
|
||||
BattleAIScript_82DC3EE:
|
||||
if_stat_level_equal AI_TARGET, EVASION, 0, Score_Minus10
|
||||
if_stat_level_equal AI_TARGET, STAT_EVASION, 0, Score_Minus10
|
||||
|
||||
BattleAIScript_82DC3F6:
|
||||
get_ability AI_TARGET
|
||||
@ -315,20 +315,20 @@ BattleAIScript_82DC3F6:
|
||||
end
|
||||
|
||||
BattleAIScript_82DC405:
|
||||
if_stat_level_less_than AI_USER, ATK, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_less_than AI_USER, DEF, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_less_than AI_USER, SPEED, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_less_than AI_USER, SPATK, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_less_than AI_USER, SPDEF, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_less_than AI_USER, ACC, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_less_than AI_USER, EVASION, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_more_than AI_TARGET, ATK, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_more_than AI_TARGET, DEF, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_more_than AI_TARGET, SPEED, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_more_than AI_TARGET, SPATK, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_more_than AI_TARGET, SPDEF, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_more_than AI_TARGET, ACC, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_more_than AI_TARGET, EVASION, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_less_than AI_USER, STAT_ATK, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_less_than AI_USER, STAT_DEF, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_less_than AI_USER, STAT_SPEED, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_less_than AI_USER, STAT_SPATK, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_less_than AI_USER, STAT_SPDEF, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_less_than AI_USER, STAT_ACC, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_less_than AI_USER, STAT_EVASION, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_more_than AI_TARGET, STAT_ATK, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_more_than AI_TARGET, STAT_DEF, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_more_than AI_TARGET, STAT_SPEED, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_more_than AI_TARGET, STAT_SPATK, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_more_than AI_TARGET, STAT_SPDEF, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_more_than AI_TARGET, STAT_ACC, 6, BattleAIScript_82DC47A
|
||||
if_stat_level_more_than AI_TARGET, STAT_EVASION, 6, BattleAIScript_82DC47A
|
||||
goto Score_Minus10
|
||||
|
||||
BattleAIScript_82DC47A:
|
||||
@ -436,8 +436,8 @@ BattleAIScript_82DC5B0:
|
||||
end
|
||||
|
||||
BattleAIScript_82DC5BB:
|
||||
if_stat_level_equal AI_USER, ATK, 12, Score_Minus10
|
||||
if_stat_level_equal AI_USER, DEF, 12, Score_Minus8
|
||||
if_stat_level_equal AI_USER, STAT_ATK, 12, Score_Minus10
|
||||
if_stat_level_equal AI_USER, STAT_DEF, 12, Score_Minus8
|
||||
end
|
||||
|
||||
BattleAIScript_82DC5CC:
|
||||
@ -484,8 +484,8 @@ BattleAIScript_82DC635:
|
||||
end
|
||||
|
||||
BattleAIScript_82DC640:
|
||||
if_stat_level_equal AI_TARGET, ATK, 0, Score_Minus10
|
||||
if_stat_level_equal AI_TARGET, SPATK, 0, Score_Minus8
|
||||
if_stat_level_equal AI_TARGET, STAT_ATK, 0, Score_Minus10
|
||||
if_stat_level_equal AI_TARGET, STAT_SPATK, 0, Score_Minus8
|
||||
|
||||
BattleAIScript_82DC650:
|
||||
count_usable_party_mons AI_USER
|
||||
@ -574,18 +574,18 @@ BattleAIScript_82DC71E:
|
||||
end
|
||||
|
||||
BattleAIScript_82DC729:
|
||||
if_stat_level_equal AI_TARGET, ATK, 0, Score_Minus10
|
||||
if_stat_level_equal AI_TARGET, DEF, 0, Score_Minus8
|
||||
if_stat_level_equal AI_TARGET, STAT_ATK, 0, Score_Minus10
|
||||
if_stat_level_equal AI_TARGET, STAT_DEF, 0, Score_Minus8
|
||||
end
|
||||
|
||||
BattleAIScript_82DC73A:
|
||||
if_stat_level_equal AI_USER, DEF, 12, Score_Minus10
|
||||
if_stat_level_equal AI_USER, SPDEF, 12, Score_Minus8
|
||||
if_stat_level_equal AI_USER, STAT_DEF, 12, Score_Minus10
|
||||
if_stat_level_equal AI_USER, STAT_SPDEF, 12, Score_Minus8
|
||||
end
|
||||
|
||||
BattleAIScript_82DC74B:
|
||||
if_stat_level_equal AI_USER, ATK, 12, Score_Minus10
|
||||
if_stat_level_equal AI_USER, DEF, 12, Score_Minus8
|
||||
if_stat_level_equal AI_USER, STAT_ATK, 12, Score_Minus10
|
||||
if_stat_level_equal AI_USER, STAT_DEF, 12, Score_Minus8
|
||||
end
|
||||
|
||||
BattleAIScript_82DC75C:
|
||||
@ -593,13 +593,13 @@ BattleAIScript_82DC75C:
|
||||
end
|
||||
|
||||
BattleAIScript_82DC767:
|
||||
if_stat_level_equal AI_USER, SPATK, 12, Score_Minus10
|
||||
if_stat_level_equal AI_USER, SPDEF, 12, Score_Minus8
|
||||
if_stat_level_equal AI_USER, STAT_SPATK, 12, Score_Minus10
|
||||
if_stat_level_equal AI_USER, STAT_SPDEF, 12, Score_Minus8
|
||||
end
|
||||
|
||||
BattleAIScript_82DC778:
|
||||
if_stat_level_equal AI_USER, ATK, 12, Score_Minus10
|
||||
if_stat_level_equal AI_USER, SPEED, 12, Score_Minus8
|
||||
if_stat_level_equal AI_USER, STAT_ATK, 12, Score_Minus10
|
||||
if_stat_level_equal AI_USER, STAT_SPEED, 12, Score_Minus8
|
||||
end
|
||||
|
||||
Score_Minus1:
|
||||
@ -805,9 +805,9 @@ BattleAIScript_82DCAC7:
|
||||
end
|
||||
|
||||
BattleAIScript_82DCAC8:
|
||||
if_stat_level_less_than AI_TARGET, EVASION, 7, BattleAIScript_82DCAE2
|
||||
if_stat_level_less_than AI_TARGET, STAT_EVASION, 7, BattleAIScript_82DCAE2
|
||||
score -1
|
||||
if_stat_level_less_than AI_TARGET, EVASION, 10, BattleAIScript_82DCAE2
|
||||
if_stat_level_less_than AI_TARGET, STAT_EVASION, 10, BattleAIScript_82DCAE2
|
||||
if_random_less_than 128, BattleAIScript_82DCAE2
|
||||
score -1
|
||||
|
||||
@ -906,7 +906,7 @@ sMovesTable_82DCB6C:
|
||||
.2byte -1
|
||||
|
||||
BattleAIScript_82DCBBC:
|
||||
if_stat_level_less_than AI_USER, ATK, 9, BattleAIScript_82DCBD1
|
||||
if_stat_level_less_than AI_USER, STAT_ATK, 9, BattleAIScript_82DCBD1
|
||||
if_random_less_than 100, BattleAIScript_82DCBE0
|
||||
score -1
|
||||
goto BattleAIScript_82DCBE0
|
||||
@ -928,7 +928,7 @@ BattleAIScript_82DCBF6:
|
||||
end
|
||||
|
||||
BattleAIScript_82DCBF7:
|
||||
if_stat_level_less_than AI_USER, DEF, 9, BattleAIScript_82DCC0C
|
||||
if_stat_level_less_than AI_USER, STAT_DEF, 9, BattleAIScript_82DCC0C
|
||||
if_random_less_than 100, BattleAIScript_82DCC1B
|
||||
score -1
|
||||
goto BattleAIScript_82DCC1B
|
||||
@ -986,7 +986,7 @@ BattleAIScript_82DCC72:
|
||||
end
|
||||
|
||||
BattleAIScript_82DCC73:
|
||||
if_stat_level_less_than AI_USER, SPATK, 9, BattleAIScript_82DCC88
|
||||
if_stat_level_less_than AI_USER, STAT_SPATK, 9, BattleAIScript_82DCC88
|
||||
if_random_less_than 100, BattleAIScript_82DCC97
|
||||
score -1
|
||||
goto BattleAIScript_82DCC97
|
||||
@ -1008,7 +1008,7 @@ BattleAIScript_82DCCAD:
|
||||
end
|
||||
|
||||
BattleAIScript_82DCCAE:
|
||||
if_stat_level_less_than AI_USER, SPDEF, 9, BattleAIScript_82DCCC3
|
||||
if_stat_level_less_than AI_USER, STAT_SPDEF, 9, BattleAIScript_82DCCC3
|
||||
if_random_less_than 100, BattleAIScript_82DCCD2
|
||||
score -1
|
||||
goto BattleAIScript_82DCCD2
|
||||
@ -1054,7 +1054,7 @@ sTypesTable_82DCD0A:
|
||||
.byte -1
|
||||
|
||||
BattleAIScript_82DCD14:
|
||||
if_stat_level_less_than AI_USER, ACC, 9, BattleAIScript_82DCD24
|
||||
if_stat_level_less_than AI_USER, STAT_ACC, 9, BattleAIScript_82DCD24
|
||||
if_random_less_than 50, BattleAIScript_82DCD24
|
||||
score -2
|
||||
|
||||
@ -1071,7 +1071,7 @@ BattleAIScript_82DCD2E:
|
||||
score +3
|
||||
|
||||
BattleAIScript_82DCD3D:
|
||||
if_stat_level_less_than AI_USER, EVASION, 9, BattleAIScript_82DCD4D
|
||||
if_stat_level_less_than AI_USER, STAT_EVASION, 9, BattleAIScript_82DCD4D
|
||||
if_random_less_than 128, BattleAIScript_82DCD4D
|
||||
score -1
|
||||
|
||||
@ -1101,7 +1101,7 @@ BattleAIScript_82DCD90:
|
||||
|
||||
BattleAIScript_82DCDA2:
|
||||
if_hp_more_than AI_USER, 70, BattleAIScript_82DCDC7
|
||||
if_stat_level_equal AI_USER, EVASION, 6, BattleAIScript_82DCDC7
|
||||
if_stat_level_equal AI_USER, STAT_EVASION, 6, BattleAIScript_82DCDC7
|
||||
if_hp_less_than AI_USER, 40, BattleAIScript_82DCDC5
|
||||
if_hp_less_than AI_TARGET, 40, BattleAIScript_82DCDC5
|
||||
if_random_less_than 70, BattleAIScript_82DCDC7
|
||||
@ -1113,10 +1113,10 @@ BattleAIScript_82DCDC7:
|
||||
end
|
||||
|
||||
BattleAIScript_82DCDC8:
|
||||
if_stat_level_more_than AI_TARGET, EVASION, 10, BattleAIScript_82DCDED
|
||||
if_stat_level_less_than AI_USER, ACC, 2, BattleAIScript_82DCDED
|
||||
if_stat_level_more_than AI_TARGET, EVASION, 8, BattleAIScript_82DCDEF
|
||||
if_stat_level_less_than AI_USER, ACC, 4, BattleAIScript_82DCDEF
|
||||
if_stat_level_more_than AI_TARGET, STAT_EVASION, 10, BattleAIScript_82DCDED
|
||||
if_stat_level_less_than AI_USER, STAT_ACC, 2, BattleAIScript_82DCDED
|
||||
if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, BattleAIScript_82DCDEF
|
||||
if_stat_level_less_than AI_USER, STAT_ACC, 4, BattleAIScript_82DCDEF
|
||||
goto BattleAIScript_82DCDF7
|
||||
|
||||
BattleAIScript_82DCDED:
|
||||
@ -1130,13 +1130,13 @@ BattleAIScript_82DCDF7:
|
||||
end
|
||||
|
||||
BattleAIScript_82DCDF8:
|
||||
if_stat_level_equal AI_TARGET, ATK, 6, BattleAIScript_82DCE1B
|
||||
if_stat_level_equal AI_TARGET, STAT_ATK, 6, BattleAIScript_82DCE1B
|
||||
score -1
|
||||
if_hp_more_than AI_USER, 90, BattleAIScript_82DCE0B
|
||||
score -1
|
||||
|
||||
BattleAIScript_82DCE0B:
|
||||
if_stat_level_more_than AI_TARGET, ATK, 3, BattleAIScript_82DCE1B
|
||||
if_stat_level_more_than AI_TARGET, STAT_ATK, 3, BattleAIScript_82DCE1B
|
||||
if_random_less_than 50, BattleAIScript_82DCE1B
|
||||
score -2
|
||||
|
||||
@ -1166,7 +1166,7 @@ sTypesTable_82DCE43:
|
||||
|
||||
BattleAIScript_82DCE4A:
|
||||
if_hp_less_than AI_USER, 70, BattleAIScript_82DCE59
|
||||
if_stat_level_more_than AI_TARGET, DEF, 3, BattleAIScript_82DCE61
|
||||
if_stat_level_more_than AI_TARGET, STAT_DEF, 3, BattleAIScript_82DCE61
|
||||
|
||||
BattleAIScript_82DCE59:
|
||||
if_random_less_than 50, BattleAIScript_82DCE61
|
||||
@ -1198,13 +1198,13 @@ BattleAIScript_82DCE96:
|
||||
end
|
||||
|
||||
BattleAIScript_82DCE97:
|
||||
if_stat_level_equal AI_TARGET, ATK, 6, BattleAIScript_82DCEBA
|
||||
if_stat_level_equal AI_TARGET, STAT_ATK, 6, BattleAIScript_82DCEBA
|
||||
score -1
|
||||
if_hp_more_than AI_USER, 90, BattleAIScript_82DCEAA
|
||||
score -1
|
||||
|
||||
BattleAIScript_82DCEAA:
|
||||
if_stat_level_more_than AI_TARGET, SPATK, 3, BattleAIScript_82DCEBA
|
||||
if_stat_level_more_than AI_TARGET, STAT_SPATK, 3, BattleAIScript_82DCEBA
|
||||
if_random_less_than 50, BattleAIScript_82DCEBA
|
||||
score -2
|
||||
|
||||
@ -1236,7 +1236,7 @@ sTypesTable_82DCEE2:
|
||||
|
||||
BattleAIScript_82DCEEB:
|
||||
if_hp_less_than AI_USER, 70, BattleAIScript_82DCEFA
|
||||
if_stat_level_more_than AI_TARGET, SPDEF, 3, BattleAIScript_82DCF02
|
||||
if_stat_level_more_than AI_TARGET, STAT_SPDEF, 3, BattleAIScript_82DCF02
|
||||
|
||||
BattleAIScript_82DCEFA:
|
||||
if_random_less_than 50, BattleAIScript_82DCF02
|
||||
@ -1258,7 +1258,7 @@ BattleAIScript_82DCF1A:
|
||||
score -1
|
||||
|
||||
BattleAIScript_82DCF22:
|
||||
if_stat_level_more_than AI_USER, ACC, 4, BattleAIScript_82DCF32
|
||||
if_stat_level_more_than AI_USER, STAT_ACC, 4, BattleAIScript_82DCF32
|
||||
if_random_less_than 80, BattleAIScript_82DCF32
|
||||
score -2
|
||||
|
||||
@ -1284,7 +1284,7 @@ BattleAIScript_82DCF68:
|
||||
|
||||
BattleAIScript_82DCF7A:
|
||||
if_hp_more_than AI_USER, 70, BattleAIScript_82DCF9F
|
||||
if_stat_level_equal AI_TARGET, ACC, 6, BattleAIScript_82DCF9F
|
||||
if_stat_level_equal AI_TARGET, STAT_ACC, 6, BattleAIScript_82DCF9F
|
||||
if_hp_less_than AI_USER, 40, BattleAIScript_82DCF9D
|
||||
if_hp_less_than AI_TARGET, 40, BattleAIScript_82DCF9D
|
||||
if_random_less_than 70, BattleAIScript_82DCF9F
|
||||
@ -1297,7 +1297,7 @@ BattleAIScript_82DCF9F:
|
||||
|
||||
BattleAIScript_82DCFA0:
|
||||
if_hp_less_than AI_USER, 70, BattleAIScript_82DCFAF
|
||||
if_stat_level_more_than AI_TARGET, EVASION, 3, BattleAIScript_82DCFB7
|
||||
if_stat_level_more_than AI_TARGET, STAT_EVASION, 3, BattleAIScript_82DCFB7
|
||||
|
||||
BattleAIScript_82DCFAF:
|
||||
if_random_less_than 50, BattleAIScript_82DCFB7
|
||||
@ -1311,16 +1311,16 @@ BattleAIScript_82DCFC0:
|
||||
end
|
||||
|
||||
BattleAIScript_82DCFC1:
|
||||
if_stat_level_more_than AI_USER, ATK, 8, BattleAIScript_82DD016
|
||||
if_stat_level_more_than AI_USER, DEF, 8, BattleAIScript_82DD016
|
||||
if_stat_level_more_than AI_USER, SPATK, 8, BattleAIScript_82DD016
|
||||
if_stat_level_more_than AI_USER, SPDEF, 8, BattleAIScript_82DD016
|
||||
if_stat_level_more_than AI_USER, EVASION, 8, BattleAIScript_82DD016
|
||||
if_stat_level_less_than AI_TARGET, ATK, 4, BattleAIScript_82DD016
|
||||
if_stat_level_less_than AI_TARGET, DEF, 4, BattleAIScript_82DD016
|
||||
if_stat_level_less_than AI_TARGET, SPATK, 4, BattleAIScript_82DD016
|
||||
if_stat_level_less_than AI_TARGET, SPDEF, 4, BattleAIScript_82DD016
|
||||
if_stat_level_less_than AI_TARGET, ACC, 4, BattleAIScript_82DD016
|
||||
if_stat_level_more_than AI_USER, STAT_ATK, 8, BattleAIScript_82DD016
|
||||
if_stat_level_more_than AI_USER, STAT_DEF, 8, BattleAIScript_82DD016
|
||||
if_stat_level_more_than AI_USER, STAT_SPATK, 8, BattleAIScript_82DD016
|
||||
if_stat_level_more_than AI_USER, STAT_SPDEF, 8, BattleAIScript_82DD016
|
||||
if_stat_level_more_than AI_USER, STAT_EVASION, 8, BattleAIScript_82DD016
|
||||
if_stat_level_less_than AI_TARGET, STAT_ATK, 4, BattleAIScript_82DD016
|
||||
if_stat_level_less_than AI_TARGET, STAT_DEF, 4, BattleAIScript_82DD016
|
||||
if_stat_level_less_than AI_TARGET, STAT_SPATK, 4, BattleAIScript_82DD016
|
||||
if_stat_level_less_than AI_TARGET, STAT_SPDEF, 4, BattleAIScript_82DD016
|
||||
if_stat_level_less_than AI_TARGET, STAT_ACC, 4, BattleAIScript_82DD016
|
||||
goto BattleAIScript_82DD01E
|
||||
|
||||
BattleAIScript_82DD016:
|
||||
@ -1328,16 +1328,16 @@ BattleAIScript_82DD016:
|
||||
score -3
|
||||
|
||||
BattleAIScript_82DD01E:
|
||||
if_stat_level_more_than AI_TARGET, ATK, 8, BattleAIScript_82DD07B
|
||||
if_stat_level_more_than AI_TARGET, DEF, 8, BattleAIScript_82DD07B
|
||||
if_stat_level_more_than AI_TARGET, SPATK, 8, BattleAIScript_82DD07B
|
||||
if_stat_level_more_than AI_TARGET, SPDEF, 8, BattleAIScript_82DD07B
|
||||
if_stat_level_more_than AI_TARGET, EVASION, 8, BattleAIScript_82DD07B
|
||||
if_stat_level_less_than AI_USER, ATK, 4, BattleAIScript_82DD07B
|
||||
if_stat_level_less_than AI_USER, DEF, 4, BattleAIScript_82DD07B
|
||||
if_stat_level_less_than AI_USER, SPATK, 4, BattleAIScript_82DD07B
|
||||
if_stat_level_less_than AI_USER, SPDEF, 4, BattleAIScript_82DD07B
|
||||
if_stat_level_less_than AI_USER, ACC, 4, BattleAIScript_82DD07B
|
||||
if_stat_level_more_than AI_TARGET, STAT_ATK, 8, BattleAIScript_82DD07B
|
||||
if_stat_level_more_than AI_TARGET, STAT_DEF, 8, BattleAIScript_82DD07B
|
||||
if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, BattleAIScript_82DD07B
|
||||
if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, BattleAIScript_82DD07B
|
||||
if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, BattleAIScript_82DD07B
|
||||
if_stat_level_less_than AI_USER, STAT_ATK, 4, BattleAIScript_82DD07B
|
||||
if_stat_level_less_than AI_USER, STAT_DEF, 4, BattleAIScript_82DD07B
|
||||
if_stat_level_less_than AI_USER, STAT_SPATK, 4, BattleAIScript_82DD07B
|
||||
if_stat_level_less_than AI_USER, STAT_SPDEF, 4, BattleAIScript_82DD07B
|
||||
if_stat_level_less_than AI_USER, STAT_ACC, 4, BattleAIScript_82DD07B
|
||||
if_random_less_than 50, BattleAIScript_82DD083
|
||||
score -1
|
||||
goto BattleAIScript_82DD083
|
||||
@ -1357,11 +1357,11 @@ BattleAIScript_82DD08D:
|
||||
end
|
||||
|
||||
BattleAIScript_82DD08E:
|
||||
if_stat_level_more_than AI_TARGET, ATK, 8, BattleAIScript_82DD0BD
|
||||
if_stat_level_more_than AI_TARGET, DEF, 8, BattleAIScript_82DD0BD
|
||||
if_stat_level_more_than AI_TARGET, SPATK, 8, BattleAIScript_82DD0BD
|
||||
if_stat_level_more_than AI_TARGET, SPDEF, 8, BattleAIScript_82DD0BD
|
||||
if_stat_level_more_than AI_TARGET, EVASION, 8, BattleAIScript_82DD0BD
|
||||
if_stat_level_more_than AI_TARGET, STAT_ATK, 8, BattleAIScript_82DD0BD
|
||||
if_stat_level_more_than AI_TARGET, STAT_DEF, 8, BattleAIScript_82DD0BD
|
||||
if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, BattleAIScript_82DD0BD
|
||||
if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, BattleAIScript_82DD0BD
|
||||
if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, BattleAIScript_82DD0BD
|
||||
score -3
|
||||
goto BattleAIScript_82DD0C5
|
||||
|
||||
@ -1569,7 +1569,7 @@ BattleAIScript_82DD2B7:
|
||||
end
|
||||
|
||||
BattleAIScript_82DD2B8:
|
||||
if_stat_level_more_than AI_TARGET, ATK, 3, BattleAIScript_82DD2D0
|
||||
if_stat_level_more_than AI_TARGET, STAT_ATK, 3, BattleAIScript_82DD2D0
|
||||
score +3
|
||||
get_turn_count
|
||||
if_not_equal 0, BattleAIScript_82DD2D2
|
||||
@ -1987,17 +1987,17 @@ BattleAIScript_82DD645:
|
||||
if_equal TYPE_GHOST, BattleAIScript_82DD68A
|
||||
get_user_type2
|
||||
if_equal TYPE_GHOST, BattleAIScript_82DD68A
|
||||
if_stat_level_more_than AI_USER, DEF, 9, BattleAIScript_82DD693
|
||||
if_stat_level_more_than AI_USER, STAT_DEF, 9, BattleAIScript_82DD693
|
||||
if_random_less_than 128, BattleAIScript_82DD665
|
||||
score +1
|
||||
|
||||
BattleAIScript_82DD665:
|
||||
if_stat_level_more_than AI_USER, DEF, 7, BattleAIScript_82DD693
|
||||
if_stat_level_more_than AI_USER, STAT_DEF, 7, BattleAIScript_82DD693
|
||||
if_random_less_than 128, BattleAIScript_82DD675
|
||||
score +1
|
||||
|
||||
BattleAIScript_82DD675:
|
||||
if_stat_level_more_than AI_USER, DEF, 6, BattleAIScript_82DD693
|
||||
if_stat_level_more_than AI_USER, STAT_DEF, 6, BattleAIScript_82DD693
|
||||
if_random_less_than 128, BattleAIScript_82DD693
|
||||
score +1
|
||||
goto BattleAIScript_82DD693
|
||||
@ -2062,7 +2062,7 @@ BattleAIScript_82DD75D:
|
||||
if_equal TYPE_GHOST, BattleAIScript_82DD77C
|
||||
get_user_type2
|
||||
if_equal TYPE_GHOST, BattleAIScript_82DD77C
|
||||
if_stat_level_more_than AI_USER, EVASION, 8, BattleAIScript_82DD782
|
||||
if_stat_level_more_than AI_USER, STAT_EVASION, 8, BattleAIScript_82DD782
|
||||
score -2
|
||||
goto BattleAIScript_82DD78A
|
||||
|
||||
@ -2092,11 +2092,11 @@ BattleAIScript_82DD7A8:
|
||||
end
|
||||
|
||||
BattleAIScript_82DD7A9:
|
||||
if_stat_level_more_than AI_USER, ATK, 8, BattleAIScript_82DD7D6
|
||||
if_stat_level_more_than AI_USER, DEF, 8, BattleAIScript_82DD7D6
|
||||
if_stat_level_more_than AI_USER, SPATK, 8, BattleAIScript_82DD7D6
|
||||
if_stat_level_more_than AI_USER, SPDEF, 8, BattleAIScript_82DD7D6
|
||||
if_stat_level_more_than AI_USER, EVASION, 8, BattleAIScript_82DD7D6
|
||||
if_stat_level_more_than AI_USER, STAT_ATK, 8, BattleAIScript_82DD7D6
|
||||
if_stat_level_more_than AI_USER, STAT_DEF, 8, BattleAIScript_82DD7D6
|
||||
if_stat_level_more_than AI_USER, STAT_SPATK, 8, BattleAIScript_82DD7D6
|
||||
if_stat_level_more_than AI_USER, STAT_SPDEF, 8, BattleAIScript_82DD7D6
|
||||
if_stat_level_more_than AI_USER, STAT_EVASION, 8, BattleAIScript_82DD7D6
|
||||
goto BattleAIScript_82DD7FC
|
||||
|
||||
BattleAIScript_82DD7D6:
|
||||
@ -2113,11 +2113,11 @@ BattleAIScript_82DD7EF:
|
||||
goto BattleAIScript_82DD844
|
||||
|
||||
BattleAIScript_82DD7FC:
|
||||
if_stat_level_more_than AI_USER, ATK, 7, BattleAIScript_82DD829
|
||||
if_stat_level_more_than AI_USER, DEF, 7, BattleAIScript_82DD829
|
||||
if_stat_level_more_than AI_USER, SPATK, 7, BattleAIScript_82DD829
|
||||
if_stat_level_more_than AI_USER, SPDEF, 7, BattleAIScript_82DD829
|
||||
if_stat_level_more_than AI_USER, EVASION, 7, BattleAIScript_82DD829
|
||||
if_stat_level_more_than AI_USER, STAT_ATK, 7, BattleAIScript_82DD829
|
||||
if_stat_level_more_than AI_USER, STAT_DEF, 7, BattleAIScript_82DD829
|
||||
if_stat_level_more_than AI_USER, STAT_SPATK, 7, BattleAIScript_82DD829
|
||||
if_stat_level_more_than AI_USER, STAT_SPDEF, 7, BattleAIScript_82DD829
|
||||
if_stat_level_more_than AI_USER, STAT_EVASION, 7, BattleAIScript_82DD829
|
||||
goto BattleAIScript_82DD842
|
||||
|
||||
BattleAIScript_82DD829:
|
||||
@ -2208,19 +2208,19 @@ BattleAIScript_82DD8F1:
|
||||
end
|
||||
|
||||
BattleAIScript_82DD8F2:
|
||||
if_stat_level_more_than AI_TARGET, ATK, 8, BattleAIScript_82DD91F
|
||||
if_stat_level_more_than AI_TARGET, DEF, 8, BattleAIScript_82DD91F
|
||||
if_stat_level_more_than AI_TARGET, SPATK, 8, BattleAIScript_82DD91F
|
||||
if_stat_level_more_than AI_TARGET, SPDEF, 8, BattleAIScript_82DD91F
|
||||
if_stat_level_more_than AI_TARGET, EVASION, 8, BattleAIScript_82DD91F
|
||||
if_stat_level_more_than AI_TARGET, STAT_ATK, 8, BattleAIScript_82DD91F
|
||||
if_stat_level_more_than AI_TARGET, STAT_DEF, 8, BattleAIScript_82DD91F
|
||||
if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, BattleAIScript_82DD91F
|
||||
if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, BattleAIScript_82DD91F
|
||||
if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, BattleAIScript_82DD91F
|
||||
goto BattleAIScript_82DD957
|
||||
|
||||
BattleAIScript_82DD91F:
|
||||
if_stat_level_less_than AI_USER, ATK, 7, BattleAIScript_82DD954
|
||||
if_stat_level_less_than AI_USER, DEF, 7, BattleAIScript_82DD954
|
||||
if_stat_level_less_than AI_USER, SPATK, 7, BattleAIScript_82DD954
|
||||
if_stat_level_less_than AI_USER, SPDEF, 7, BattleAIScript_82DD954
|
||||
if_stat_level_less_than AI_USER, EVASION, 7, BattleAIScript_82DD952
|
||||
if_stat_level_less_than AI_USER, STAT_ATK, 7, BattleAIScript_82DD954
|
||||
if_stat_level_less_than AI_USER, STAT_DEF, 7, BattleAIScript_82DD954
|
||||
if_stat_level_less_than AI_USER, STAT_SPATK, 7, BattleAIScript_82DD954
|
||||
if_stat_level_less_than AI_USER, STAT_SPDEF, 7, BattleAIScript_82DD954
|
||||
if_stat_level_less_than AI_USER, STAT_EVASION, 7, BattleAIScript_82DD952
|
||||
if_random_less_than 50, BattleAIScript_82DD959
|
||||
goto BattleAIScript_82DD957
|
||||
|
||||
@ -2515,7 +2515,7 @@ sAbilitiesTable_82DDBDF:
|
||||
BattleAIScript_82DDBF0:
|
||||
if_type_effectiveness AI_EFFECTIVENESS_x0_25, BattleAIScript_82DDC1D
|
||||
if_type_effectiveness AI_EFFECTIVENESS_x0_5, BattleAIScript_82DDC1D
|
||||
if_stat_level_less_than AI_USER, ATK, 6, BattleAIScript_82DDC1D
|
||||
if_stat_level_less_than AI_USER, STAT_ATK, 6, BattleAIScript_82DDC1D
|
||||
if_target_faster BattleAIScript_82DDC16
|
||||
if_hp_more_than AI_USER, 40, BattleAIScript_82DDC1D
|
||||
goto BattleAIScript_82DDC1F
|
||||
@ -2930,12 +2930,12 @@ sMovesTable_82DDF75:
|
||||
BattleAIScript_82DDF7B:
|
||||
get_turn_count
|
||||
if_equal 0, Score_Minus2
|
||||
if_stat_level_more_than AI_USER, ATK, 8, Score_Plus3
|
||||
if_stat_level_more_than AI_USER, ATK, 7, Score_Plus2
|
||||
if_stat_level_more_than AI_USER, ATK, 6, Score_Plus1
|
||||
if_stat_level_more_than AI_USER, SPATK, 8, Score_Plus3
|
||||
if_stat_level_more_than AI_USER, SPATK, 7, Score_Plus2
|
||||
if_stat_level_more_than AI_USER, SPATK, 6, Score_Plus1
|
||||
if_stat_level_more_than AI_USER, STAT_ATK, 8, Score_Plus3
|
||||
if_stat_level_more_than AI_USER, STAT_ATK, 7, Score_Plus2
|
||||
if_stat_level_more_than AI_USER, STAT_ATK, 6, Score_Plus1
|
||||
if_stat_level_more_than AI_USER, STAT_SPATK, 8, Score_Plus3
|
||||
if_stat_level_more_than AI_USER, STAT_SPATK, 7, Score_Plus2
|
||||
if_stat_level_more_than AI_USER, STAT_SPATK, 6, Score_Plus1
|
||||
end
|
||||
|
||||
BattleAIScript_82DDFB3:
|
||||
@ -3073,7 +3073,7 @@ BattleAIScript_82DE178:
|
||||
goto Score_Minus30_
|
||||
|
||||
BattleAIScript_82DE185:
|
||||
if_stat_level_more_than AI_TARGET, ATK, 7, BattleAIScript_82DE18F
|
||||
if_stat_level_more_than AI_TARGET, STAT_ATK, 7, BattleAIScript_82DE18F
|
||||
score +3
|
||||
|
||||
BattleAIScript_82DE18F:
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#include "constants/battle_anim.h"
|
||||
#include "constants/rgb.h"
|
||||
#include "constants/songs.h"
|
||||
.include "asm/macros/battle_anim_script.inc"
|
||||
.include "include/constants/battle_anim.h"
|
||||
|
||||
.section script_data, "aw", %progbits
|
||||
|
||||
|
||||
@ -1917,7 +1917,7 @@ gBattleMoves:: @ 831C898
|
||||
@ Curse
|
||||
.byte 0x6d @ effect
|
||||
.byte 0 @ power
|
||||
.byte TYPE_UNKNOWN
|
||||
.byte TYPE_MYSTERY
|
||||
.byte 0 @ accuracy
|
||||
.byte 10 @ PP
|
||||
.byte 0 @ side effect chance
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,11 +1,12 @@
|
||||
#include "constants/battle.h"
|
||||
#include "constants/battle_script_commands.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "constants/battle_string_ids.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/songs.h"
|
||||
.include "asm/macros.inc"
|
||||
.include "asm/macros/battle_script.inc"
|
||||
.include "constants/constants.inc"
|
||||
.include "constants/battle_constants.inc"
|
||||
.include "constants/battle_script_constants.inc"
|
||||
.include "constants/battle_text.inc"
|
||||
|
||||
.section script_data, "aw", %progbits
|
||||
|
||||
@ -46,7 +47,7 @@ gBattlescriptsForSafariActions:: @ 82DBD58
|
||||
.4byte BattleScript_82DBEE3
|
||||
|
||||
BattleScript_BallThrow::
|
||||
jumpifword COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_WALLY_TUTORIAL, BattleScript_BallThrowByWally
|
||||
jumpifword CMP_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_WALLY_TUTORIAL, BattleScript_BallThrowByWally
|
||||
printstring STRINGID_PLAYERUSEDITEM
|
||||
handleballthrow
|
||||
|
||||
@ -56,11 +57,11 @@ BattleScript_BallThrowByWally::
|
||||
|
||||
BattleScript_SafariBallThrow::
|
||||
printstring STRINGID_PLAYERUSEDITEM
|
||||
updatestatusicon ATTACKER
|
||||
updatestatusicon BS_ATTACKER
|
||||
handleballthrow
|
||||
|
||||
BattleScript_SuccessBallThrow::
|
||||
jumpifhalfword EQUAL, gLastUsedItem, ITEM_SAFARI_BALL, BattleScript_PrintCaughtMonInfo
|
||||
jumpifhalfword CMP_EQUAL, gLastUsedItem, ITEM_SAFARI_BALL, BattleScript_PrintCaughtMonInfo
|
||||
incrementgamestat 0xB
|
||||
BattleScript_PrintCaughtMonInfo::
|
||||
printstring STRINGID_GOTCHAPKMNCAUGHT
|
||||
@ -81,22 +82,22 @@ BattleScript_TryNicknameCaughtMon::
|
||||
BattleScript_GiveCaughtMonEnd::
|
||||
givecaughtmon
|
||||
BattleScript_SuccessBallThrowEnd::
|
||||
setbyte gBattleOutcome, CAUGHT
|
||||
setbyte gBattleOutcome, B_OUTCOME_CAUGHT
|
||||
finishturn
|
||||
|
||||
BattleScript_WallyBallThrow::
|
||||
printstring STRINGID_GOTCHAPKMNCAUGHT2
|
||||
setbyte gBattleOutcome, CAUGHT
|
||||
setbyte gBattleOutcome, B_OUTCOME_CAUGHT
|
||||
finishturn
|
||||
|
||||
BattleScript_ShakeBallThrow::
|
||||
printfromtable gBallEscapeStringIds
|
||||
waitmessage 0x40
|
||||
jumpifword NO_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_SAFARI, BattleScript_ShakeBallThrowEnd
|
||||
jumpifbyte NOT_EQUAL, gNumSafariBalls, 0x0, BattleScript_ShakeBallThrowEnd
|
||||
jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_SAFARI, BattleScript_ShakeBallThrowEnd
|
||||
jumpifbyte CMP_NOT_EQUAL, gNumSafariBalls, 0x0, BattleScript_ShakeBallThrowEnd
|
||||
printstring STRINGID_OUTOFSAFARIBALLS
|
||||
waitmessage 0x40
|
||||
setbyte gBattleOutcome, OUT_OF_BALLS
|
||||
setbyte gBattleOutcome, B_OUTCOME_NO_SAFARI_BALLS
|
||||
BattleScript_ShakeBallThrowEnd::
|
||||
finishaction
|
||||
|
||||
@ -121,11 +122,11 @@ BattleScript_OpponentUsesHealItem::
|
||||
waitmessage 0x40
|
||||
useitemonopponent
|
||||
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
|
||||
healthbarupdate ATTACKER
|
||||
datahpupdate ATTACKER
|
||||
healthbarupdate BS_ATTACKER
|
||||
datahpupdate BS_ATTACKER
|
||||
printstring STRINGID_PKMNSITEMRESTOREDHEALTH
|
||||
waitmessage 0x40
|
||||
updatestatusicon ATTACKER
|
||||
updatestatusicon BS_ATTACKER
|
||||
setbyte sMOVEEND_STATE, 0xF
|
||||
moveend 0x1, 0x0
|
||||
finishaction
|
||||
@ -139,7 +140,7 @@ BattleScript_OpponentUsesStatusCureItem::
|
||||
useitemonopponent
|
||||
printfromtable gTrainerItemCuredStatusStringIds
|
||||
waitmessage 0x40
|
||||
updatestatusicon ATTACKER
|
||||
updatestatusicon BS_ATTACKER
|
||||
setbyte sMOVEEND_STATE, 0xF
|
||||
moveend 0x1, 0x0
|
||||
finishaction
|
||||
@ -172,7 +173,7 @@ BattleScript_OpponentUsesGuardSpecs::
|
||||
|
||||
BattleScript_RunByUsingItem::
|
||||
playse SE_NIGERU
|
||||
setbyte gBattleOutcome, RAN
|
||||
setbyte gBattleOutcome, B_OUTCOME_RAN
|
||||
finishturn
|
||||
|
||||
BattleScript_ActionWatchesCarefully::
|
||||
@ -188,7 +189,7 @@ BattleScript_ActionGetNear::
|
||||
BattleScript_ActionThrowPokeblock::
|
||||
printstring STRINGID_THREWPOKEBLOCKATPKMN
|
||||
waitmessage 0x40
|
||||
playanimation ATTACKER, ANIM_x4, NULL
|
||||
playanimation BS_ATTACKER, B_ANIM_x4, NULL
|
||||
printfromtable gSafariPokeblockResultStringIds
|
||||
waitmessage 0x40
|
||||
end2
|
||||
@ -198,7 +199,7 @@ BattleScript_82DBEE3::
|
||||
waitmessage 0x40
|
||||
returnatktoball
|
||||
waitstate
|
||||
trainerslidein TARGET
|
||||
trainerslidein BS_TARGET
|
||||
waitstate
|
||||
printstring STRINGID_YOUTHROWABALLNOWRIGHT
|
||||
waitmessage 0x40
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
#include "constants/moves.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/trainers.h"
|
||||
#include "constants/pokemon.h"
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
#include "constants/moves.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/trainers.h"
|
||||
#include "constants/pokemon.h"
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
#include "constants/items.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/pokemon.h"
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
|
||||
497
include/battle.h
497
include/battle.h
@ -2,6 +2,7 @@
|
||||
#define GUARD_BATTLE_H
|
||||
|
||||
// should they be included here or included individually by every file?
|
||||
#include "constants/battle.h"
|
||||
#include "battle_util.h"
|
||||
#include "battle_script_commands.h"
|
||||
#include "battle_main.h"
|
||||
@ -10,215 +11,16 @@
|
||||
#include "battle_util2.h"
|
||||
#include "battle_bg.h"
|
||||
|
||||
/*
|
||||
* A battler may be in one of four positions on the field. The first bit determines
|
||||
* what side the battler is on, either the player's side or the opponent's side.
|
||||
* The second bit determines what flank the battler is on, either the left or right.
|
||||
* Note that the opponent's flanks are drawn corresponding to their perspective, so
|
||||
* their right mon appears on the left, and their left mon appears on the right.
|
||||
* The battler ID is usually the same as the position, except in the case of link battles.
|
||||
*
|
||||
* + ------------------------- +
|
||||
* | Opponent's side |
|
||||
* | Right Left |
|
||||
* | 3 1 |
|
||||
* | |
|
||||
* | Player's side |
|
||||
* | Left Right |
|
||||
* | 0 2 |
|
||||
* ----------------------------+
|
||||
* | |
|
||||
* | |
|
||||
* +---------------------------+
|
||||
*/
|
||||
|
||||
#define MAX_BATTLERS_COUNT 4
|
||||
|
||||
#define B_POSITION_PLAYER_LEFT 0
|
||||
#define B_POSITION_OPPONENT_LEFT 1
|
||||
#define B_POSITION_PLAYER_RIGHT 2
|
||||
#define B_POSITION_OPPONENT_RIGHT 3
|
||||
|
||||
// These macros can be used with either battler ID or positions to get the partner or the opposite mon
|
||||
#define BATTLE_OPPOSITE(id) ((id) ^ 1)
|
||||
#define BATTLE_PARTNER(id) ((id) ^ 2)
|
||||
|
||||
#define B_SIDE_PLAYER 0
|
||||
#define B_SIDE_OPPONENT 1
|
||||
|
||||
#define B_FLANK_LEFT 0
|
||||
#define B_FLANK_RIGHT 1
|
||||
|
||||
#define BIT_SIDE 1
|
||||
#define BIT_FLANK 2
|
||||
|
||||
#define GET_BATTLER_POSITION(battler) (gBattlerPositions[battler])
|
||||
#define GET_BATTLER_SIDE(battler) (GetBattlerPosition(battler) & BIT_SIDE)
|
||||
#define GET_BATTLER_SIDE2(battler) (GET_BATTLER_POSITION(battler) & BIT_SIDE)
|
||||
|
||||
// Battle Type Flags
|
||||
|
||||
#define BATTLE_TYPE_DOUBLE 0x0001
|
||||
#define BATTLE_TYPE_LINK 0x0002
|
||||
#define BATTLE_TYPE_WILD 0x0004
|
||||
#define BATTLE_TYPE_TRAINER 0x0008
|
||||
#define BATTLE_TYPE_FIRST_BATTLE 0x0010
|
||||
#define BATTLE_TYPE_20 0x0020
|
||||
#define BATTLE_TYPE_MULTI 0x0040
|
||||
#define BATTLE_TYPE_SAFARI 0x0080
|
||||
#define BATTLE_TYPE_BATTLE_TOWER 0x0100
|
||||
#define BATTLE_TYPE_WALLY_TUTORIAL 0x0200
|
||||
#define BATTLE_TYPE_ROAMER 0x0400
|
||||
#define BATTLE_TYPE_EREADER_TRAINER 0x0800
|
||||
#define BATTLE_TYPE_KYOGRE_GROUDON 0x1000
|
||||
#define BATTLE_TYPE_LEGENDARY 0x2000
|
||||
#define BATTLE_TYPE_REGI 0x4000
|
||||
#define BATTLE_TYPE_TWO_OPPONENTS 0x8000
|
||||
#define BATTLE_TYPE_DOME 0x10000
|
||||
#define BATTLE_TYPE_PALACE 0x20000
|
||||
#define BATTLE_TYPE_ARENA 0x40000
|
||||
#define BATTLE_TYPE_FACTORY 0x80000
|
||||
#define BATTLE_TYPE_PIKE 0x100000
|
||||
#define BATTLE_TYPE_PYRAMID 0x200000
|
||||
#define BATTLE_TYPE_INGAME_PARTNER 0x400000
|
||||
#define BATTLE_TYPE_x800000 0x800000
|
||||
#define BATTLE_TYPE_RECORDED 0x1000000
|
||||
#define BATTLE_TYPE_x2000000 0x2000000
|
||||
#define BATTLE_TYPE_x4000000 0x4000000
|
||||
#define BATTLE_TYPE_SECRET_BASE 0x8000000
|
||||
#define BATTLE_TYPE_GROUDON 0x10000000
|
||||
#define BATTLE_TYPE_KYOGRE 0x20000000
|
||||
#define BATTLE_TYPE_RAYQUAZA 0x40000000
|
||||
#define BATTLE_TYPE_x80000000 0x80000000
|
||||
#define BATTLE_TYPE_FRONTIER (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID)
|
||||
#define BATTLE_TYPE_FRONTIER_NO_PYRAMID (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE)
|
||||
|
||||
extern u32 gBattleTypeFlags;
|
||||
|
||||
#define TRAINER_OPPONENT_3FE 0x3FE
|
||||
#define TRAINER_OPPONENT_C00 0xC00
|
||||
#define TRAINER_OPPONENT_800 0x800
|
||||
#define STEVEN_PARTNER_ID 0xC03
|
||||
#define SECRET_BASE_OPPONENT 0x400
|
||||
|
||||
#define B_OUTCOME_WON 0x1
|
||||
#define B_OUTCOME_LOST 0x2
|
||||
#define B_OUTCOME_DREW 0x3
|
||||
#define B_OUTCOME_RAN 0x4
|
||||
#define B_OUTCOME_PLAYER_TELEPORTED 0x5
|
||||
#define B_OUTCOME_POKE_FLED 0x6
|
||||
#define B_OUTCOME_CAUGHT_POKE 0x7
|
||||
#define B_OUTCOME_NO_SAFARI_BALLS 0x8
|
||||
#define B_OUTCOME_FORFEITED 0x9
|
||||
#define B_OUTCOME_POKE_TELEPORTED 0xA
|
||||
#define B_OUTCOME_LINK_BATTLE_RAN 0x80
|
||||
|
||||
extern u8 gBattleOutcome;
|
||||
|
||||
// Non-volatile status conditions
|
||||
// These persist remain outside of battle and after switching out
|
||||
#define STATUS1_NONE 0x0
|
||||
#define STATUS1_SLEEP 0x7
|
||||
#define STATUS1_POISON 0x8
|
||||
#define STATUS1_BURN 0x10
|
||||
#define STATUS1_FREEZE 0x20
|
||||
#define STATUS1_PARALYSIS 0x40
|
||||
#define STATUS1_TOXIC_POISON 0x80
|
||||
#define STATUS1_TOXIC_COUNTER 0xF00
|
||||
#define STATUS1_PSN_ANY (STATUS1_POISON | STATUS1_TOXIC_POISON)
|
||||
#define STATUS1_ANY (STATUS1_SLEEP | STATUS1_POISON | STATUS1_BURN | STATUS1_FREEZE | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON)
|
||||
|
||||
// Volatile status ailments
|
||||
// These are removed after exiting the battle or switching out
|
||||
#define STATUS2_CONFUSION 0x00000007
|
||||
#define STATUS2_FLINCHED 0x00000008
|
||||
#define STATUS2_UPROAR 0x00000070
|
||||
#define STATUS2_BIDE 0x00000300 // two bits 0x100, 0x200
|
||||
#define STATUS2_LOCK_CONFUSE 0x00000C00
|
||||
#define STATUS2_MULTIPLETURNS 0x00001000
|
||||
#define STATUS2_WRAPPED 0x0000E000
|
||||
#define STATUS2_INFATUATION 0x000F0000 // 4 bits, one for every battler
|
||||
#define STATUS2_INFATUATED_WITH(battler) (gBitTable[battler] << 16)
|
||||
#define STATUS2_FOCUS_ENERGY 0x00100000
|
||||
#define STATUS2_TRANSFORMED 0x00200000
|
||||
#define STATUS2_RECHARGE 0x00400000
|
||||
#define STATUS2_RAGE 0x00800000
|
||||
#define STATUS2_SUBSTITUTE 0x01000000
|
||||
#define STATUS2_DESTINY_BOND 0x02000000
|
||||
#define STATUS2_ESCAPE_PREVENTION 0x04000000
|
||||
#define STATUS2_NIGHTMARE 0x08000000
|
||||
#define STATUS2_CURSED 0x10000000
|
||||
#define STATUS2_FORESIGHT 0x20000000
|
||||
#define STATUS2_DEFENSE_CURL 0x40000000
|
||||
#define STATUS2_TORMENT 0x80000000
|
||||
|
||||
// Seems like per-battler statuses. Not quite sure how to categorize these
|
||||
#define STATUS3_LEECHSEED_BANK 0x3
|
||||
#define STATUS3_LEECHSEED 0x4
|
||||
#define STATUS3_ALWAYS_HITS 0x18 // two bits
|
||||
#define STATUS3_PERISH_SONG 0x20
|
||||
#define STATUS3_ON_AIR 0x40
|
||||
#define STATUS3_UNDERGROUND 0x80
|
||||
#define STATUS3_MINIMIZED 0x100
|
||||
#define STATUS3_ROOTED 0x400
|
||||
#define STATUS3_CHARGED_UP 0x200
|
||||
#define STATUS3_YAWN 0x1800 // two bits
|
||||
#define STATUS3_IMPRISONED_OTHERS 0x2000
|
||||
#define STATUS3_GRUDGE 0x4000
|
||||
#define STATUS3_CANT_SCORE_A_CRIT 0x8000
|
||||
#define STATUS3_MUDSPORT 0x10000
|
||||
#define STATUS3_WATERSPORT 0x20000
|
||||
#define STATUS3_UNDERWATER 0x40000
|
||||
#define STATUS3_INTIMIDATE_POKES 0x80000
|
||||
#define STATUS3_TRACE 0x100000
|
||||
#define STATUS3_SEMI_INVULNERABLE (STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER)
|
||||
|
||||
extern u32 gStatuses3[MAX_BATTLERS_COUNT];
|
||||
|
||||
// Not really sure what a "hitmarker" is.
|
||||
|
||||
#define HITMARKER_x10 0x00000010
|
||||
#define HITMARKER_x20 0x00000020
|
||||
#define HITMARKER_DESTINYBOND 0x00000040
|
||||
#define HITMARKER_NO_ANIMATIONS 0x00000080
|
||||
#define HITMARKER_IGNORE_SUBSTITUTE 0x00000100
|
||||
#define HITMARKER_NO_ATTACKSTRING 0x00000200
|
||||
#define HITMARKER_ATTACKSTRING_PRINTED 0x00000400
|
||||
#define HITMARKER_NO_PPDEDUCT 0x00000800
|
||||
#define HITMARKER_PURSUIT_TRAP 0x00001000
|
||||
#define HITMARKER_IGNORE_SAFEGUARD 0x00002000
|
||||
#define HITMARKER_SYNCHRONISE_EFFECT 0x00004000
|
||||
#define HITMARKER_RUN 0x00008000
|
||||
#define HITMARKER_IGNORE_ON_AIR 0x00010000
|
||||
#define HITMARKER_IGNORE_UNDERGROUND 0x00020000
|
||||
#define HITMARKER_IGNORE_UNDERWATER 0x00040000
|
||||
#define HITMARKER_UNABLE_TO_USE_MOVE 0x00080000
|
||||
#define HITMARKER_x100000 0x00100000
|
||||
#define HITMARKER_x200000 0x00200000
|
||||
#define HITMARKER_x400000 0x00400000
|
||||
#define HITMARKER_x800000 0x00800000
|
||||
#define HITMARKER_GRUDGE 0x01000000
|
||||
#define HITMARKER_OBEYS 0x02000000
|
||||
#define HITMARKER_x4000000 0x04000000
|
||||
#define HITMARKER_x8000000 0x08000000
|
||||
#define HITMARKER_FAINTED(battler) (gBitTable[battler] << 0x1C)
|
||||
#define HITMARKER_UNK(battler) (0x10000000 << battler)
|
||||
|
||||
extern u32 gHitMarker;
|
||||
|
||||
// Per-side statuses that affect an entire party
|
||||
|
||||
#define SIDE_STATUS_REFLECT (1 << 0)
|
||||
#define SIDE_STATUS_LIGHTSCREEN (1 << 1)
|
||||
#define SIDE_STATUS_X4 (1 << 2)
|
||||
#define SIDE_STATUS_SPIKES (1 << 4)
|
||||
#define SIDE_STATUS_SAFEGUARD (1 << 5)
|
||||
#define SIDE_STATUS_FUTUREATTACK (1 << 6)
|
||||
#define SIDE_STATUS_MIST (1 << 8)
|
||||
#define SIDE_STATUS_SPIKES_DAMAGED (1 << 9)
|
||||
|
||||
extern u16 gSideStatuses[2];
|
||||
|
||||
// Battle Actions
|
||||
// These determine what each battler will do in a turn
|
||||
#define B_ACTION_USE_MOVE 0
|
||||
@ -238,37 +40,9 @@ extern u16 gSideStatuses[2];
|
||||
#define B_ACTION_NOTHING_FAINTED 13 // when choosing an action
|
||||
#define B_ACTION_NONE 0xFF
|
||||
|
||||
#define MOVE_RESULT_MISSED (1 << 0)
|
||||
#define MOVE_RESULT_SUPER_EFFECTIVE (1 << 1)
|
||||
#define MOVE_RESULT_NOT_VERY_EFFECTIVE (1 << 2)
|
||||
#define MOVE_RESULT_DOESNT_AFFECT_FOE (1 << 3)
|
||||
#define MOVE_RESULT_ONE_HIT_KO (1 << 4)
|
||||
#define MOVE_RESULT_FAILED (1 << 5)
|
||||
#define MOVE_RESULT_FOE_ENDURED (1 << 6)
|
||||
#define MOVE_RESULT_FOE_HUNG_ON (1 << 7)
|
||||
#define MOVE_RESULT_NO_EFFECT (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED)
|
||||
|
||||
#define MAX_TRAINER_ITEMS 4
|
||||
#define MAX_MON_MOVES 4
|
||||
|
||||
// Battle Weather flags
|
||||
|
||||
#define WEATHER_RAIN_TEMPORARY (1 << 0)
|
||||
#define WEATHER_RAIN_DOWNPOUR (1 << 1) // unused
|
||||
#define WEATHER_RAIN_PERMANENT (1 << 2)
|
||||
#define WEATHER_RAIN_ANY (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_DOWNPOUR | WEATHER_RAIN_PERMANENT)
|
||||
#define WEATHER_SANDSTORM_TEMPORARY (1 << 3)
|
||||
#define WEATHER_SANDSTORM_PERMANENT (1 << 4)
|
||||
#define WEATHER_SANDSTORM_ANY (WEATHER_SANDSTORM_TEMPORARY | WEATHER_SANDSTORM_PERMANENT)
|
||||
#define WEATHER_SUN_TEMPORARY (1 << 5)
|
||||
#define WEATHER_SUN_PERMANENT (1 << 6)
|
||||
#define WEATHER_SUN_ANY (WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT)
|
||||
#define WEATHER_HAIL (1 << 7)
|
||||
#define WEATHER_HAIL_ANY (WEATHER_HAIL)
|
||||
#define WEATHER_ANY (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY)
|
||||
|
||||
extern u16 gBattleWeather;
|
||||
|
||||
#define BATTLE_TERRAIN_GRASS 0
|
||||
#define BATTLE_TERRAIN_LONG_GRASS 1
|
||||
#define BATTLE_TERRAIN_SAND 2
|
||||
@ -280,8 +54,6 @@ extern u16 gBattleWeather;
|
||||
#define BATTLE_TERRAIN_BUILDING 8
|
||||
#define BATTLE_TERRAIN_PLAIN 9
|
||||
|
||||
extern u8 gBattleTerrain;
|
||||
|
||||
// array entries for battle communication
|
||||
#define MULTIUSE_STATE 0x0
|
||||
#define CURSOR_POSITION 0x1
|
||||
@ -318,26 +90,7 @@ extern u8 gBattleTerrain;
|
||||
#define TYPE_FORESIGHT 0xFE
|
||||
#define TYPE_ENDTABLE 0xFF
|
||||
|
||||
#define BS_GET_TARGET 0
|
||||
#define BS_GET_ATTACKER 1
|
||||
#define BS_GET_EFFECT_BANK 2
|
||||
#define BS_GET_gBank1 3
|
||||
#define BS_GET_BANK_0 7
|
||||
#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update
|
||||
#define BS_GET_ATTACKER_SIDE 8 // for atk1E_jumpifability
|
||||
#define BS_GET_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
|
||||
#define BS_GET_SCRIPTING_BANK 10
|
||||
#define BS_GET_OPPONENT1 12
|
||||
#define BS_GET_PLAYER2 13
|
||||
#define BS_GET_OPPONENT2 14
|
||||
|
||||
// for battle script commands
|
||||
#define CMP_EQUAL 0x0
|
||||
#define CMP_NOT_EQUAL 0x1
|
||||
#define CMP_GREATER_THAN 0x2
|
||||
#define CMP_LESS_THAN 0x3
|
||||
#define CMP_COMMON_BITS 0x4
|
||||
#define CMP_NO_COMMON_BITS 0x5
|
||||
#define BATTLE_BUFFER_LINK_SIZE 0x1000
|
||||
|
||||
struct TrainerMonNoItemDefaultMoves
|
||||
{
|
||||
@ -346,8 +99,6 @@ struct TrainerMonNoItemDefaultMoves
|
||||
u16 species;
|
||||
};
|
||||
|
||||
u8 GetBattlerSide(u8 battler);
|
||||
|
||||
struct TrainerMonItemDefaultMoves
|
||||
{
|
||||
u16 iv;
|
||||
@ -441,8 +192,6 @@ struct DisableStruct
|
||||
/*0x1A*/ u8 unk1A[2];
|
||||
};
|
||||
|
||||
extern struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT];
|
||||
|
||||
struct ProtectStruct
|
||||
{
|
||||
/* field_0 */
|
||||
@ -476,13 +225,11 @@ struct ProtectStruct
|
||||
|
||||
/* field_4 */ u32 physicalDmg;
|
||||
/* field_8 */ u32 specialDmg;
|
||||
/* field_C */ u8 physicalBank;
|
||||
/* field_D */ u8 specialBank;
|
||||
/* field_C */ u8 physicalBattlerId;
|
||||
/* field_D */ u8 specialBattlerId;
|
||||
/* field_E */ u16 fieldE;
|
||||
};
|
||||
|
||||
extern struct ProtectStruct gProtectStructs[MAX_BATTLERS_COUNT];
|
||||
|
||||
struct SpecialStatus
|
||||
{
|
||||
u8 statLowered : 1; // 0x1
|
||||
@ -494,35 +241,31 @@ struct SpecialStatus
|
||||
u8 flag40 : 1;
|
||||
u8 focusBanded : 1;
|
||||
u8 field1[3];
|
||||
s32 moveturnLostHP;
|
||||
s32 moveturnLostHP_physical;
|
||||
s32 moveturnLostHP_special;
|
||||
u8 moveturnPhysicalBank;
|
||||
u8 moveturnSpecialBank;
|
||||
s32 dmg;
|
||||
s32 physicalDmg;
|
||||
s32 specialDmg;
|
||||
u8 physicalBattlerId;
|
||||
u8 specialBattlerId;
|
||||
u8 field12;
|
||||
u8 field13;
|
||||
};
|
||||
|
||||
extern struct SpecialStatus gSpecialStatuses[MAX_BATTLERS_COUNT];
|
||||
|
||||
struct SideTimer
|
||||
{
|
||||
/*0x00*/ u8 reflectTimer;
|
||||
/*0x01*/ u8 reflectBank;
|
||||
/*0x01*/ u8 reflectBattlerId;
|
||||
/*0x02*/ u8 lightscreenTimer;
|
||||
/*0x03*/ u8 lightscreenBank;
|
||||
/*0x03*/ u8 lightscreenBattlerId;
|
||||
/*0x04*/ u8 mistTimer;
|
||||
/*0x05*/ u8 mistBank;
|
||||
/*0x05*/ u8 mistBattlerId;
|
||||
/*0x06*/ u8 safeguardTimer;
|
||||
/*0x07*/ u8 safeguardBank;
|
||||
/*0x07*/ u8 safeguardBattlerId;
|
||||
/*0x08*/ u8 followmeTimer;
|
||||
/*0x09*/ u8 followmeTarget;
|
||||
/*0x0A*/ u8 spikesAmount;
|
||||
/*0x0B*/ u8 fieldB;
|
||||
};
|
||||
|
||||
extern struct SideTimer gSideTimers[];
|
||||
|
||||
struct WishFutureKnock
|
||||
{
|
||||
u8 futureSightCounter[MAX_BATTLERS_COUNT];
|
||||
@ -530,13 +273,11 @@ struct WishFutureKnock
|
||||
s32 futureSightDmg[MAX_BATTLERS_COUNT];
|
||||
u16 futureSightMove[MAX_BATTLERS_COUNT];
|
||||
u8 wishCounter[MAX_BATTLERS_COUNT];
|
||||
u8 wishUserID[MAX_BATTLERS_COUNT];
|
||||
u8 wishMonId[MAX_BATTLERS_COUNT];
|
||||
u8 weatherDuration;
|
||||
u8 knockedOffPokes[2];
|
||||
};
|
||||
|
||||
extern struct WishFutureKnock gWishFutureKnock;
|
||||
|
||||
struct AI_ThinkingStruct
|
||||
{
|
||||
u8 aiState;
|
||||
@ -600,8 +341,6 @@ struct BattleResources
|
||||
struct BattleScriptsStack *AI_ScriptsStack;
|
||||
};
|
||||
|
||||
extern struct BattleResources* gBattleResources;
|
||||
|
||||
struct BattleResults
|
||||
{
|
||||
u8 playerFaintCounter; // 0x0
|
||||
@ -625,21 +364,19 @@ struct BattleResults
|
||||
u16 playerMon2Species; // 0x26
|
||||
u16 caughtMonSpecies; // 0x28
|
||||
u8 caughtMonNick[10]; // 0x2A
|
||||
u8 filler34[2];
|
||||
u8 filler34[2]; // 0x34
|
||||
u8 catchAttempts[11]; // 0x36
|
||||
};
|
||||
|
||||
extern struct BattleResults gBattleResults;
|
||||
|
||||
struct BattleStruct
|
||||
{
|
||||
u8 turnEffectsTracker;
|
||||
u8 turnEffectsBank;
|
||||
u8 turnEffectsBattlerId;
|
||||
u8 filler2;
|
||||
u8 turncountersTracker;
|
||||
u8 turnCountersTracker;
|
||||
u8 wrappedMove[8]; // ask gamefreak why they declared it that way
|
||||
u8 moveTarget[4];
|
||||
u8 expGetterId;
|
||||
u8 expGetterMonId;
|
||||
u8 field_11;
|
||||
u8 wildVictorySong;
|
||||
u8 dynamicMoveType;
|
||||
@ -653,13 +390,13 @@ struct BattleStruct
|
||||
u8 field_45;
|
||||
u8 field_46;
|
||||
u8 field_47;
|
||||
u8 focusPunchBank;
|
||||
u8 focusPunchBattlerId;
|
||||
u8 field_49;
|
||||
u8 moneyMultiplier;
|
||||
u8 savedTurnActionNumber;
|
||||
u8 switchInAbilitiesCounter;
|
||||
u8 faintedActionsState;
|
||||
u8 faintedActionsBank;
|
||||
u8 faintedActionsBattlerId;
|
||||
u8 field_4F;
|
||||
u16 expValue;
|
||||
u8 field_52;
|
||||
@ -687,7 +424,7 @@ struct BattleStruct
|
||||
u8 field_8C;
|
||||
u8 field_8D;
|
||||
u8 stringMoveType;
|
||||
u8 expGetterBank;
|
||||
u8 expGetterBattlerId;
|
||||
u8 field_90;
|
||||
u8 field_91;
|
||||
u8 field_92;
|
||||
@ -732,7 +469,7 @@ struct BattleStruct
|
||||
u8 field_183;
|
||||
struct BattleEnigmaBerry battleEnigmaBerry;
|
||||
u8 wishPerishSongState;
|
||||
u8 wishPerishSongBank;
|
||||
u8 wishPerishSongBattlerId;
|
||||
bool8 overworldWeatherDone;
|
||||
u8 atkCancellerTracker;
|
||||
u8 field_1A4[96];
|
||||
@ -745,8 +482,6 @@ struct BattleStruct
|
||||
u8 field_2A2;
|
||||
};
|
||||
|
||||
extern struct BattleStruct* gBattleStruct;
|
||||
|
||||
#define GET_MOVE_TYPE(move, typeArg) \
|
||||
{ \
|
||||
if (gBattleStruct->dynamicMoveType) \
|
||||
@ -755,71 +490,8 @@ extern struct BattleStruct* gBattleStruct;
|
||||
typeArg = gBattleMoves[move].type; \
|
||||
}
|
||||
|
||||
#define MOVE_EFFECT_SLEEP 0x1
|
||||
#define MOVE_EFFECT_POISON 0x2
|
||||
#define MOVE_EFFECT_BURN 0x3
|
||||
#define MOVE_EFFECT_FREEZE 0x4
|
||||
#define MOVE_EFFECT_PARALYSIS 0x5
|
||||
#define MOVE_EFFECT_TOXIC 0x6
|
||||
#define MOVE_EFFECT_CONFUSION 0x7
|
||||
#define MOVE_EFFECT_FLINCH 0x8
|
||||
#define MOVE_EFFECT_TRI_ATTACK 0x9
|
||||
#define MOVE_EFFECT_UPROAR 0xA
|
||||
#define MOVE_EFFECT_PAYDAY 0xB
|
||||
#define MOVE_EFFECT_CHARGING 0xC
|
||||
#define MOVE_EFFECT_WRAP 0xD
|
||||
#define MOVE_EFFECT_RECOIL_25 0xE
|
||||
#define MOVE_EFFECT_ATK_PLUS_1 0xF
|
||||
#define MOVE_EFFECT_DEF_PLUS_1 0x10
|
||||
#define MOVE_EFFECT_SPD_PLUS_1 0x11
|
||||
#define MOVE_EFFECT_SP_ATK_PLUS_1 0x12
|
||||
#define MOVE_EFFECT_SP_DEF_PLUS_1 0x13
|
||||
#define MOVE_EFFECT_ACC_PLUS_1 0x14
|
||||
#define MOVE_EFFECT_EVS_PLUS_1 0x15
|
||||
#define MOVE_EFFECT_ATK_MINUS_1 0x16
|
||||
#define MOVE_EFFECT_DEF_MINUS_1 0x17
|
||||
#define MOVE_EFFECT_SPD_MINUS_1 0x18
|
||||
#define MOVE_EFFECT_SP_ATK_MINUS_1 0x19
|
||||
#define MOVE_EFFECT_SP_DEF_MINUS_1 0x1A
|
||||
#define MOVE_EFFECT_ACC_MINUS_1 0x1B
|
||||
#define MOVE_EFFECT_EVS_MINUS_1 0x1C
|
||||
#define MOVE_EFFECT_RECHARGE 0x1D
|
||||
#define MOVE_EFFECT_RAGE 0x1E
|
||||
#define MOVE_EFFECT_STEAL_ITEM 0x1F
|
||||
#define MOVE_EFFECT_PREVENT_ESCAPE 0x20
|
||||
#define MOVE_EFFECT_NIGHTMARE 0x21
|
||||
#define MOVE_EFFECT_ALL_STATS_UP 0x22
|
||||
#define MOVE_EFFECT_RAPIDSPIN 0x23
|
||||
#define MOVE_EFFECT_REMOVE_PARALYSIS 0x24
|
||||
#define MOVE_EFFECT_ATK_DEF_DOWN 0x25
|
||||
#define MOVE_EFFECT_RECOIL_33_PARALYSIS 0x26
|
||||
#define MOVE_EFFECT_ATK_PLUS_2 0x27
|
||||
#define MOVE_EFFECT_DEF_PLUS_2 0x28
|
||||
#define MOVE_EFFECT_SPD_PLUS_2 0x29
|
||||
#define MOVE_EFFECT_SP_ATK_PLUS_2 0x2A
|
||||
#define MOVE_EFFECT_SP_DEF_PLUS_2 0x2B
|
||||
#define MOVE_EFFECT_ACC_PLUS_2 0x2C
|
||||
#define MOVE_EFFECT_EVS_PLUS_2 0x2D
|
||||
#define MOVE_EFFECT_ATK_MINUS_2 0x2E
|
||||
#define MOVE_EFFECT_DEF_MINUS_2 0x2F
|
||||
#define MOVE_EFFECT_SPD_MINUS_2 0x30
|
||||
#define MOVE_EFFECT_SP_ATK_MINUS_2 0x31
|
||||
#define MOVE_EFFECT_SP_DEF_MINUS_2 0x32
|
||||
#define MOVE_EFFECT_ACC_MINUS_2 0x33
|
||||
#define MOVE_EFFECT_EVS_MINUS_2 0x34
|
||||
#define MOVE_EFFECT_THRASH 0x35
|
||||
#define MOVE_EFFECT_KNOCK_OFF 0x36
|
||||
#define MOVE_EFFECT_NOTHING_37 0x37
|
||||
#define MOVE_EFFECT_NOTHING_38 0x38
|
||||
#define MOVE_EFFECT_NOTHING_39 0x39
|
||||
#define MOVE_EFFECT_NOTHING_3A 0x3A
|
||||
#define MOVE_EFFECT_SP_ATK_TWO_DOWN 0x3B
|
||||
#define MOVE_EFFECT_NOTHING_3C 0x3C
|
||||
#define MOVE_EFFECT_NOTHING_3D 0x3D
|
||||
#define MOVE_EFFECT_NOTHING_3E 0x3E
|
||||
#define MOVE_EFFECT_NOTHING_3F 0x3F
|
||||
#define MOVE_EFFECT_AFFECTS_USER 0x40
|
||||
#define MOVE_EFFECT_CERTAIN 0x80
|
||||
#define IS_MOVE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY)
|
||||
#define IS_MOVE_SPECIAL(moveType)(moveType > TYPE_MYSTERY)
|
||||
|
||||
#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8
|
||||
#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40
|
||||
@ -859,8 +531,6 @@ struct BattleScripting
|
||||
u8 multiplayerId;
|
||||
};
|
||||
|
||||
extern struct BattleScripting gBattleScripting;
|
||||
|
||||
enum
|
||||
{
|
||||
BACK_PIC_BRENDAN,
|
||||
@ -874,7 +544,7 @@ enum
|
||||
};
|
||||
|
||||
// rom_80A5C6C
|
||||
u8 GetBattlerSide(u8 bank);
|
||||
u8 GetBattlerSide(u8 battler);
|
||||
u8 GetBattlerPosition(u8 bank);
|
||||
u8 GetBattlerAtPosition(u8 bank);
|
||||
|
||||
@ -956,18 +626,6 @@ struct BattleSpriteData
|
||||
struct BattleBarInfo *battleBars;
|
||||
};
|
||||
|
||||
extern struct BattleSpriteData *gBattleSpritesDataPtr;
|
||||
|
||||
#define BATTLE_BUFFER_LINK_SIZE 0x1000
|
||||
|
||||
extern u8 *gLinkBattleSendBuffer;
|
||||
extern u8 *gLinkBattleRecvBuffer;
|
||||
|
||||
extern u8 *gUnknown_0202305C;
|
||||
extern u8 *gUnknown_02023060;
|
||||
|
||||
// Move this somewhere else
|
||||
|
||||
#include "sprite.h"
|
||||
|
||||
struct MonSpritesGfx
|
||||
@ -982,11 +640,106 @@ struct MonSpritesGfx
|
||||
void *field_17C;
|
||||
};
|
||||
|
||||
extern struct BattleSpritesGfx* gMonSpritesGfx;
|
||||
extern u8 gBattleOutcome;
|
||||
extern u16 gLastUsedItem;
|
||||
// all battle variables are declared in battle_main.c
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern struct MonSpritesGfx* gMonSpritesGfxPtr;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u8 gBattleTerrain;
|
||||
extern u32 gUnknown_02022FF4;
|
||||
extern u8 *gUnknown_0202305C;
|
||||
extern u8 *gUnknown_02023060;
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gActiveBattler;
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gBattlersCount;
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlerPositions[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleTurnOrder[MAX_BATTLERS_COUNT];
|
||||
extern u8 gCurrentTurnActionNumber;
|
||||
extern u8 gCurrentActionFuncId;
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gCurrMovePos;
|
||||
extern u8 gChosenMovePos;
|
||||
extern u16 gCurrentMove;
|
||||
extern u16 gChosenMove;
|
||||
extern u16 gRandomMove;
|
||||
extern s32 gBattleMoveDamage;
|
||||
extern s32 gHpDealt;
|
||||
extern s32 gTakenDmg[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastUsedItem;
|
||||
extern u8 gLastUsedAbility;
|
||||
extern u8 gBattlerAttacker;
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gBattlerFainted;
|
||||
extern u8 gEffectBattler;
|
||||
extern u8 gPotentialItemEffectBattler;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u8 gCritMultiplier;
|
||||
extern u8 gMultiHitCounter;
|
||||
extern const u8 *gBattlescriptCurrInstr;
|
||||
extern u32 gUnusedBattleMainVar;
|
||||
extern u8 gChosenActionByBattler[MAX_BATTLERS_COUNT];
|
||||
extern const u8 *gSelectionBattleScripts[MAX_BATTLERS_COUNT];
|
||||
extern const u8 *gPalaceSelectionBattleScripts[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastMoves[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastLandedMoves[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastHitByType[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastResultingMoves[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLockedMoves[MAX_BATTLERS_COUNT];
|
||||
extern u8 gLastHitBy[MAX_BATTLERS_COUNT];
|
||||
extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT];
|
||||
extern u8 gMoveResultFlags;
|
||||
extern u32 gHitMarker;
|
||||
extern u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT];
|
||||
extern u8 gUnknown_0202428C;
|
||||
extern u16 gSideStatuses[2];
|
||||
extern struct SideTimer gSideTimers[2];
|
||||
extern u32 gStatuses3[MAX_BATTLERS_COUNT];
|
||||
extern struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT];
|
||||
extern u16 gPauseCounterBattle;
|
||||
extern u16 gPaydayMoney;
|
||||
extern u16 gRandomTurnNumber;
|
||||
extern u8 gBattleCommunication[BATTLE_COMMUNICATION_ENTRIES_COUNT];
|
||||
extern u8 gBattleOutcome;
|
||||
extern struct ProtectStruct gProtectStructs[MAX_BATTLERS_COUNT];
|
||||
extern struct SpecialStatus gSpecialStatuses[MAX_BATTLERS_COUNT];
|
||||
extern u16 gBattleWeather;
|
||||
extern struct WishFutureKnock gWishFutureKnock;
|
||||
extern u16 gIntroSlideFlags;
|
||||
extern u8 gSentPokesToOpponent[2];
|
||||
extern u16 gDynamicBasePower;
|
||||
extern u16 gExpShareExp;
|
||||
extern struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT];
|
||||
extern struct BattleScripting gBattleScripting;
|
||||
extern struct BattleStruct *gBattleStruct;
|
||||
extern u8 *gLinkBattleSendBuffer;
|
||||
extern u8 *gLinkBattleRecvBuffer;
|
||||
extern struct BattleResources *gBattleResources;
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlerStatusSummaryTaskId[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlerInMenuId;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern u8 gPlayerDpadHoldFrames;
|
||||
extern struct BattleSpriteData *gBattleSpritesDataPtr;
|
||||
extern struct MonSpritesGfx *gMonSpritesGfxPtr;
|
||||
extern struct BattleHealthboxInfo *gUnknown_020244D8;
|
||||
extern struct BattleHealthboxInfo *gUnknown_020244DC;
|
||||
extern u16 gBattleMovePower;
|
||||
extern u16 gMoveToLearn;
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern void (*gBattleMainFunc)(void);
|
||||
extern struct BattleResults gBattleResults;
|
||||
extern u8 gLeveledUpInBattle;
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gMultiUsePlayerCursor;
|
||||
extern u8 gNumberOfMovesToChoose;
|
||||
extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
|
||||
|
||||
#endif // GUARD_BATTLE_H
|
||||
|
||||
@ -56,8 +56,8 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo
|
||||
void DestroyAnimSprite(struct Sprite *sprite);
|
||||
void DestroyAnimVisualTask(u8 taskId);
|
||||
void DestroyAnimSoundTask(u8 taskId);
|
||||
bool8 IsBattlerSpriteVisible(u8 bank);
|
||||
void sub_80A438C(u8 bank, bool8 toBG_2, bool8 setSpriteInvisible);
|
||||
bool8 IsBattlerSpriteVisible(u8 battlerId);
|
||||
void sub_80A438C(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible);
|
||||
bool8 IsContest(void);
|
||||
s8 BattleAnimAdjustPanning(s8 pan);
|
||||
s8 BattleAnimAdjustPanning2(s8 pan);
|
||||
@ -76,7 +76,7 @@ void sub_80A6F3C(struct Sprite *sprite);
|
||||
void sub_80A8278(void);
|
||||
void sub_80A6B30(struct UnknownAnimStruct2*);
|
||||
void sub_80A6B90(struct UnknownAnimStruct2*, u32 arg1);
|
||||
u8 sub_80A82E4(u8 bank);
|
||||
u8 sub_80A82E4(u8 battlerId);
|
||||
bool8 AnimateBallThrow(struct Sprite *sprite);
|
||||
|
||||
enum
|
||||
@ -85,26 +85,26 @@ enum
|
||||
BANK_Y_POS,
|
||||
};
|
||||
|
||||
u8 GetBattlerSpriteCoord(u8 bank, u8 attributeId);
|
||||
u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId);
|
||||
|
||||
bool8 IsBattlerSpritePresent(u8 bank);
|
||||
bool8 IsBattlerSpritePresent(u8 battlerId);
|
||||
void sub_80A6C68(u8 arg0);
|
||||
u8 GetAnimBattlerSpriteId(u8 wantedBank);
|
||||
u8 GetAnimBattlerSpriteId(u8 wantedBattler);
|
||||
bool8 IsDoubleBattle(void);
|
||||
u8 sub_80A6D94(void);
|
||||
u8 sub_80A8364(u8);
|
||||
void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite*));
|
||||
void oamt_add_pos2_onto_pos1(struct Sprite *sprite);
|
||||
u8 GetBattlerSpriteDefault_Y(u8 bank);
|
||||
u8 sub_80A82E4(u8 bank);
|
||||
u8 GetSubstituteSpriteDefault_Y(u8 bank);
|
||||
u8 GetBattlerSpriteDefault_Y(u8 battlerId);
|
||||
u8 sub_80A82E4(u8 battlerId);
|
||||
u8 GetSubstituteSpriteDefault_Y(u8 battlerId);
|
||||
|
||||
// battle_anim_80A9C70.s
|
||||
void LaunchStatusAnimation(u8 bank, u8 statusAnimId);
|
||||
void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId);
|
||||
|
||||
// battle_anim_8170478.s
|
||||
u8 ItemIdToBallId(u16 itemId);
|
||||
u8 LaunchBallStarsTask(u8 x, u8 y, u8 kindOfStars, u8 arg3, u8 ballId);
|
||||
u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 bank, u32 arg2, u8 ballId);
|
||||
u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 arg2, u8 ballId);
|
||||
|
||||
#endif // GUARD_BATTLE_ANIM_H
|
||||
|
||||
@ -8,41 +8,41 @@ void sub_805D714(struct Sprite *sprite);
|
||||
void sub_805D770(struct Sprite *sprite, bool8 arg1);
|
||||
void sub_805D7AC(struct Sprite *sprite);
|
||||
void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status);
|
||||
bool8 TryHandleLaunchBattleTableAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tableId, u16 argument);
|
||||
void InitAndLaunchSpecialAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tableId);
|
||||
bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattlerId, u8 attacker, u8 target, u8 tableId, u16 argument);
|
||||
void InitAndLaunchSpecialAnimation(u8 activeBattlerId, u8 attacker, u8 target, u8 tableId);
|
||||
bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn);
|
||||
bool8 mplay_80342A4(u8 bank);
|
||||
void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 bank);
|
||||
void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 bank);
|
||||
bool8 mplay_80342A4(u8 battlerId);
|
||||
void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId);
|
||||
void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId);
|
||||
void nullsub_23(void);
|
||||
void nullsub_24(u16 species);
|
||||
void DecompressTrainerFrontPic(u16 frontPicId, u8 bank);
|
||||
void DecompressTrainerBackPic(u16 backPicId, u8 bank);
|
||||
void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId);
|
||||
void DecompressTrainerBackPic(u16 backPicId, u8 battlerId);
|
||||
void nullsub_25(u8 arg0);
|
||||
void FreeTrainerFrontPicPalette(u16 frontPicId);
|
||||
void sub_805DFFC(void);
|
||||
bool8 BattleLoadAllHealthBoxesGfx(u8 state);
|
||||
void LoadBattleBarGfx(u8 arg0);
|
||||
bool8 BattleInitAllSprites(u8 *state1, u8 *bank);
|
||||
bool8 BattleInitAllSprites(u8 *state1, u8 *battlerId);
|
||||
void ClearSpritesHealthboxAnimData(void);
|
||||
void CopyAllBattleSpritesInvisibilities(void);
|
||||
void CopyBattleSpriteInvisibility(u8 bank);
|
||||
void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform);
|
||||
void BattleLoadSubstituteOrMonSpriteGfx(u8 bank, bool8 loadMonSprite);
|
||||
void LoadBattleMonGfxAndAnimate(u8 bank, bool8 loadMonSprite, u8 spriteId);
|
||||
void TrySetBehindSubstituteSpriteBit(u8 bank, u16 move);
|
||||
void ClearBehindSubstituteBit(u8 bank);
|
||||
void HandleLowHpMusicChange(struct Pokemon *mon, u8 bank);
|
||||
void CopyBattleSpriteInvisibility(u8 battlerId);
|
||||
void HandleSpeciesGfxDataChange(u8 attacker, u8 target, bool8 notTransform);
|
||||
void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite);
|
||||
void LoadBattleMonGfxAndAnimate(u8 battlerId, bool8 loadMonSprite, u8 spriteId);
|
||||
void TrySetBehindSubstituteSpriteBit(u8 battlerId, u16 move);
|
||||
void ClearBehindSubstituteBit(u8 battlerId);
|
||||
void HandleLowHpMusicChange(struct Pokemon *mon, u8 battlerId);
|
||||
void BattleStopLowHpSound(void);
|
||||
u8 GetMonHPBarLevel(struct Pokemon *mon);
|
||||
void sub_805EAE8(void);
|
||||
void sub_805EB9C(u8 affineMode);
|
||||
void LoadAndCreateEnemyShadowSprites(void);
|
||||
void SpriteCB_SetInvisible(struct Sprite *sprite);
|
||||
void SetBattlerShadowSpriteCallback(u8 bank, u16 species);
|
||||
void HideBattlerShadowSprite(u8 bank);
|
||||
void SetBattlerShadowSpriteCallback(u8 battlerId, u16 species);
|
||||
void HideBattlerShadowSprite(u8 battlerId);
|
||||
void sub_805EF14(void);
|
||||
void ClearTemporarySpeciesSpriteData(u8 bank, bool8 dontClearSubstitute);
|
||||
void ClearTemporarySpeciesSpriteData(u8 battlerId, bool8 dontClearSubstitute);
|
||||
void AllocateMonSpritesGfx(void);
|
||||
void FreeMonSpritesGfx(void);
|
||||
bool32 ShouldPlayNormalPokeCry(struct Pokemon *mon);
|
||||
|
||||
@ -21,8 +21,8 @@ void sub_8039B58(struct Sprite *sprite);
|
||||
void sub_8039BB4(struct Sprite *sprite);
|
||||
void sub_80105DC(struct Sprite *sprite);
|
||||
void sub_8039C00(struct Sprite *sprite);
|
||||
void dp11b_obj_instanciate(u8 bank, u8 b, s8 c, s8 d);
|
||||
void dp11b_obj_free(u8 bank, bool8 b);
|
||||
void dp11b_obj_instanciate(u8 battlerId, u8 b, s8 c, s8 d);
|
||||
void dp11b_obj_free(u8 battlerId, bool8 b);
|
||||
void sub_8039E44(struct Sprite *sprite);
|
||||
void sub_8039E60(struct Sprite *sprite);
|
||||
void sub_8039E84(struct Sprite *sprite);
|
||||
@ -35,12 +35,12 @@ void sub_803B3AC(void); // unused
|
||||
void sub_803B598(void); // unused
|
||||
void BattleTurnPassed(void);
|
||||
u8 IsRunningFromBattleImpossible(void);
|
||||
void sub_803BDA0(u8 bank);
|
||||
void sub_803BDA0(u8 battlerId);
|
||||
void SwapTurnOrder(u8 id1, u8 id2);
|
||||
u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreChosenMoves);
|
||||
u8 GetWhoStrikesFirst(u8 battlerId1, u8 battlerId2, bool8 ignoreChosenMoves);
|
||||
void RunBattleScriptCommands_PopCallbacksStack(void);
|
||||
void RunBattleScriptCommands(void);
|
||||
bool8 TryRunFromBattle(u8 bank);
|
||||
bool8 TryRunFromBattle(u8 battlerId);
|
||||
|
||||
extern const u8 gStatusConditionString_PoisonJpn[8];
|
||||
extern const u8 gStatusConditionString_SleepJpn[8];
|
||||
|
||||
@ -1,51 +1,6 @@
|
||||
#ifndef GUARD_BATTLE_SCRIPT_COMMANDS_H
|
||||
#define GUARD_BATTLE_SCRIPT_COMMANDS_H
|
||||
|
||||
#define NO_ACC_CALC 0xFFFE
|
||||
#define NO_ACC_CALC_CHECK_LOCK_ON 0xFFFF
|
||||
#define ACC_CURR_MOVE 0
|
||||
|
||||
#define CMP_EQUAL 0x0
|
||||
#define CMP_NOT_EQUAL 0x1
|
||||
#define CMP_GREATER_THAN 0x2
|
||||
#define CMP_LESS_THAN 0x3
|
||||
#define CMP_COMMON_BITS 0x4
|
||||
#define CMP_NO_COMMON_BITS 0x5
|
||||
|
||||
#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update
|
||||
#define BS_GET_ATTACKER_SIDE 8 // for atk1E_jumpifability
|
||||
#define BS_GET_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
|
||||
|
||||
#define ATK48_STAT_NEGATIVE 0x1
|
||||
#define ATK48_STAT_BY_TWO 0x2
|
||||
#define ATK48_BIT_x4 0x4
|
||||
#define ATK48_LOWER_FAIL_CHECK 0x8
|
||||
|
||||
#define ATK4F_DONT_CHECK_STATUSES 0x80
|
||||
|
||||
#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0
|
||||
#define VARIOUS_SET_MAGIC_COAT_TARGET 1
|
||||
#define VARIOUS_IS_RUNNING_IMPOSSIBLE 2
|
||||
#define VARIOUS_GET_MOVE_TARGET 3
|
||||
#define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5
|
||||
#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6
|
||||
#define VARIOUS_EMIT_YESNOBOX 13
|
||||
#define VARIOUS_WAIT_CRY 18
|
||||
#define VARIOUS_RETURN_OPPONENT_MON1 19
|
||||
#define VARIOUS_RETURN_OPPONENT_MON2 20
|
||||
#define VARIOUS_SET_TELEPORT_OUTCOME 25
|
||||
#define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 26
|
||||
|
||||
#define ATK80_DMG_CHANGE_SIGN 0
|
||||
#define ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP 1
|
||||
#define ATK80_DMG_DOUBLED 2
|
||||
|
||||
#define STAT_CHANGE_BS_PTR 0x1
|
||||
#define STAT_CHANGE_NOT_PROTECT_AFFECTED 0x20
|
||||
|
||||
#define STAT_CHANGE_WORKED 0
|
||||
#define STAT_CHANGE_DIDNT_WORK 1
|
||||
|
||||
#define WINDOW_CLEAR 0x1
|
||||
#define WINDOW_x80 0x80
|
||||
|
||||
|
||||
@ -82,7 +82,7 @@ extern const u8 BattleScript_SpikesOnAttacker[];
|
||||
extern const u8 BattleScript_82DAE7A[];
|
||||
extern const u8 BattleScript_SpikesOnTarget[];
|
||||
extern const u8 BattleScript_82DAEB1[];
|
||||
extern const u8 BattleScript_SpikesOngBank1[];
|
||||
extern const u8 BattleScript_SpikesOnFaintedBattler[];
|
||||
extern const u8 BattleScript_82DAEE8[];
|
||||
extern const u8 BattleScript_82DAEFE[];
|
||||
extern const u8 BattleScript_PerishSongTakesLife[];
|
||||
|
||||
@ -44,7 +44,7 @@
|
||||
#define BS_GET_PLAYER2 13
|
||||
#define BS_GET_OPPONENT2 14
|
||||
|
||||
u8 GetBattleBank(u8 caseId);
|
||||
u8 GetBattlerForBattleScript(u8 caseId);
|
||||
void PressurePPLose(u8 bankDef, u8 bankAtk, u16 move);
|
||||
void PressurePPLoseOnUsingPerishSong(u8 bankAtk);
|
||||
void PressurePPLoseOnUsingImprision(u8 bankAtk);
|
||||
|
||||
284
include/constants/battle.h
Normal file
284
include/constants/battle.h
Normal file
@ -0,0 +1,284 @@
|
||||
#ifndef GUARD_CONSTANTS_BATTLE_H
|
||||
#define GUARD_CONSTANTS_BATTLE_H
|
||||
|
||||
/*
|
||||
* A battler may be in one of four positions on the field. The first bit determines
|
||||
* what side the battler is on, either the player's side or the opponent's side.
|
||||
* The second bit determines what flank the battler is on, either the left or right.
|
||||
* Note that the opponent's flanks are drawn corresponding to their perspective, so
|
||||
* their right mon appears on the left, and their left mon appears on the right.
|
||||
* The battler ID is usually the same as the position, except in the case of link battles.
|
||||
*
|
||||
* + ------------------------- +
|
||||
* | Opponent's side |
|
||||
* | Right Left |
|
||||
* | 3 1 |
|
||||
* | |
|
||||
* | Player's side |
|
||||
* | Left Right |
|
||||
* | 0 2 |
|
||||
* ----------------------------+
|
||||
* | |
|
||||
* | |
|
||||
* +---------------------------+
|
||||
*/
|
||||
|
||||
#define MAX_BATTLERS_COUNT 4
|
||||
|
||||
#define B_POSITION_PLAYER_LEFT 0
|
||||
#define B_POSITION_OPPONENT_LEFT 1
|
||||
#define B_POSITION_PLAYER_RIGHT 2
|
||||
#define B_POSITION_OPPONENT_RIGHT 3
|
||||
|
||||
// These macros can be used with either battler ID or positions to get the partner or the opposite mon
|
||||
#define BATTLE_OPPOSITE(id) ((id) ^ 1)
|
||||
#define BATTLE_PARTNER(id) ((id) ^ 2)
|
||||
|
||||
#define B_SIDE_PLAYER 0
|
||||
#define B_SIDE_OPPONENT 1
|
||||
|
||||
#define B_FLANK_LEFT 0
|
||||
#define B_FLANK_RIGHT 1
|
||||
|
||||
#define BIT_SIDE 1
|
||||
#define BIT_FLANK 2
|
||||
|
||||
// Battle Type Flags
|
||||
#define BATTLE_TYPE_DOUBLE 0x0001
|
||||
#define BATTLE_TYPE_LINK 0x0002
|
||||
#define BATTLE_TYPE_WILD 0x0004
|
||||
#define BATTLE_TYPE_TRAINER 0x0008
|
||||
#define BATTLE_TYPE_FIRST_BATTLE 0x0010
|
||||
#define BATTLE_TYPE_20 0x0020
|
||||
#define BATTLE_TYPE_MULTI 0x0040
|
||||
#define BATTLE_TYPE_SAFARI 0x0080
|
||||
#define BATTLE_TYPE_BATTLE_TOWER 0x0100
|
||||
#define BATTLE_TYPE_WALLY_TUTORIAL 0x0200
|
||||
#define BATTLE_TYPE_ROAMER 0x0400
|
||||
#define BATTLE_TYPE_EREADER_TRAINER 0x0800
|
||||
#define BATTLE_TYPE_KYOGRE_GROUDON 0x1000
|
||||
#define BATTLE_TYPE_LEGENDARY 0x2000
|
||||
#define BATTLE_TYPE_REGI 0x4000
|
||||
#define BATTLE_TYPE_TWO_OPPONENTS 0x8000
|
||||
#define BATTLE_TYPE_DOME 0x10000
|
||||
#define BATTLE_TYPE_PALACE 0x20000
|
||||
#define BATTLE_TYPE_ARENA 0x40000
|
||||
#define BATTLE_TYPE_FACTORY 0x80000
|
||||
#define BATTLE_TYPE_PIKE 0x100000
|
||||
#define BATTLE_TYPE_PYRAMID 0x200000
|
||||
#define BATTLE_TYPE_INGAME_PARTNER 0x400000
|
||||
#define BATTLE_TYPE_x800000 0x800000
|
||||
#define BATTLE_TYPE_RECORDED 0x1000000
|
||||
#define BATTLE_TYPE_x2000000 0x2000000
|
||||
#define BATTLE_TYPE_x4000000 0x4000000
|
||||
#define BATTLE_TYPE_SECRET_BASE 0x8000000
|
||||
#define BATTLE_TYPE_GROUDON 0x10000000
|
||||
#define BATTLE_TYPE_KYOGRE 0x20000000
|
||||
#define BATTLE_TYPE_RAYQUAZA 0x40000000
|
||||
#define BATTLE_TYPE_x80000000 0x80000000
|
||||
#define BATTLE_TYPE_FRONTIER (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID)
|
||||
#define BATTLE_TYPE_FRONTIER_NO_PYRAMID (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE)
|
||||
|
||||
// Battle Outcome defines
|
||||
#define B_OUTCOME_WON 0x1
|
||||
#define B_OUTCOME_LOST 0x2
|
||||
#define B_OUTCOME_DREW 0x3
|
||||
#define B_OUTCOME_RAN 0x4
|
||||
#define B_OUTCOME_PLAYER_TELEPORTED 0x5
|
||||
#define B_OUTCOME_MON_FLED 0x6
|
||||
#define B_OUTCOME_CAUGHT 0x7
|
||||
#define B_OUTCOME_NO_SAFARI_BALLS 0x8
|
||||
#define B_OUTCOME_FORFEITED 0x9
|
||||
#define B_OUTCOME_MON_TELEPORTED 0xA
|
||||
#define B_OUTCOME_LINK_BATTLE_RAN 0x80
|
||||
|
||||
// Non-volatile status conditions
|
||||
// These persist remain outside of battle and after switching out
|
||||
#define STATUS1_NONE 0x0
|
||||
#define STATUS1_SLEEP 0x7
|
||||
#define STATUS1_POISON 0x8
|
||||
#define STATUS1_BURN 0x10
|
||||
#define STATUS1_FREEZE 0x20
|
||||
#define STATUS1_PARALYSIS 0x40
|
||||
#define STATUS1_TOXIC_POISON 0x80
|
||||
#define STATUS1_TOXIC_COUNTER 0xF00
|
||||
#define STATUS1_PSN_ANY (STATUS1_POISON | STATUS1_TOXIC_POISON)
|
||||
#define STATUS1_ANY (STATUS1_SLEEP | STATUS1_POISON | STATUS1_BURN | STATUS1_FREEZE | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON)
|
||||
|
||||
// Volatile status ailments
|
||||
// These are removed after exiting the battle or switching out
|
||||
#define STATUS2_CONFUSION 0x00000007
|
||||
#define STATUS2_FLINCHED 0x00000008
|
||||
#define STATUS2_UPROAR 0x00000070
|
||||
#define STATUS2_BIDE 0x00000300 // two bits 0x100, 0x200
|
||||
#define STATUS2_LOCK_CONFUSE 0x00000C00
|
||||
#define STATUS2_MULTIPLETURNS 0x00001000
|
||||
#define STATUS2_WRAPPED 0x0000E000
|
||||
#define STATUS2_INFATUATION 0x000F0000 // 4 bits, one for every battler
|
||||
#define STATUS2_INFATUATED_WITH(battler) (gBitTable[battler] << 16)
|
||||
#define STATUS2_FOCUS_ENERGY 0x00100000
|
||||
#define STATUS2_TRANSFORMED 0x00200000
|
||||
#define STATUS2_RECHARGE 0x00400000
|
||||
#define STATUS2_RAGE 0x00800000
|
||||
#define STATUS2_SUBSTITUTE 0x01000000
|
||||
#define STATUS2_DESTINY_BOND 0x02000000
|
||||
#define STATUS2_ESCAPE_PREVENTION 0x04000000
|
||||
#define STATUS2_NIGHTMARE 0x08000000
|
||||
#define STATUS2_CURSED 0x10000000
|
||||
#define STATUS2_FORESIGHT 0x20000000
|
||||
#define STATUS2_DEFENSE_CURL 0x40000000
|
||||
#define STATUS2_TORMENT 0x80000000
|
||||
|
||||
// Seems like per-battler statuses. Not quite sure how to categorize these
|
||||
#define STATUS3_LEECHSEED_BANK 0x3
|
||||
#define STATUS3_LEECHSEED 0x4
|
||||
#define STATUS3_ALWAYS_HITS 0x18 // two bits
|
||||
#define STATUS3_PERISH_SONG 0x20
|
||||
#define STATUS3_ON_AIR 0x40
|
||||
#define STATUS3_UNDERGROUND 0x80
|
||||
#define STATUS3_MINIMIZED 0x100
|
||||
#define STATUS3_ROOTED 0x400
|
||||
#define STATUS3_CHARGED_UP 0x200
|
||||
#define STATUS3_YAWN 0x1800 // two bits
|
||||
#define STATUS3_IMPRISONED_OTHERS 0x2000
|
||||
#define STATUS3_GRUDGE 0x4000
|
||||
#define STATUS3_CANT_SCORE_A_CRIT 0x8000
|
||||
#define STATUS3_MUDSPORT 0x10000
|
||||
#define STATUS3_WATERSPORT 0x20000
|
||||
#define STATUS3_UNDERWATER 0x40000
|
||||
#define STATUS3_INTIMIDATE_POKES 0x80000
|
||||
#define STATUS3_TRACE 0x100000
|
||||
#define STATUS3_SEMI_INVULNERABLE (STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER)
|
||||
|
||||
// Not really sure what a "hitmarker" is.
|
||||
#define HITMARKER_x10 0x00000010
|
||||
#define HITMARKER_x20 0x00000020
|
||||
#define HITMARKER_DESTINYBOND 0x00000040
|
||||
#define HITMARKER_NO_ANIMATIONS 0x00000080
|
||||
#define HITMARKER_IGNORE_SUBSTITUTE 0x00000100
|
||||
#define HITMARKER_NO_ATTACKSTRING 0x00000200
|
||||
#define HITMARKER_ATTACKSTRING_PRINTED 0x00000400
|
||||
#define HITMARKER_NO_PPDEDUCT 0x00000800
|
||||
#define HITMARKER_PURSUIT_TRAP 0x00001000
|
||||
#define HITMARKER_IGNORE_SAFEGUARD 0x00002000
|
||||
#define HITMARKER_SYNCHRONISE_EFFECT 0x00004000
|
||||
#define HITMARKER_RUN 0x00008000
|
||||
#define HITMARKER_IGNORE_ON_AIR 0x00010000
|
||||
#define HITMARKER_IGNORE_UNDERGROUND 0x00020000
|
||||
#define HITMARKER_IGNORE_UNDERWATER 0x00040000
|
||||
#define HITMARKER_UNABLE_TO_USE_MOVE 0x00080000
|
||||
#define HITMARKER_x100000 0x00100000
|
||||
#define HITMARKER_x200000 0x00200000
|
||||
#define HITMARKER_x400000 0x00400000
|
||||
#define HITMARKER_x800000 0x00800000
|
||||
#define HITMARKER_GRUDGE 0x01000000
|
||||
#define HITMARKER_OBEYS 0x02000000
|
||||
#define HITMARKER_x4000000 0x04000000
|
||||
#define HITMARKER_x8000000 0x08000000
|
||||
#define HITMARKER_FAINTED(battler) (gBitTable[battler] << 0x1C)
|
||||
#define HITMARKER_UNK(battler) (0x10000000 << battler)
|
||||
|
||||
// Per-side statuses that affect an entire party
|
||||
#define SIDE_STATUS_REFLECT (1 << 0)
|
||||
#define SIDE_STATUS_LIGHTSCREEN (1 << 1)
|
||||
#define SIDE_STATUS_X4 (1 << 2)
|
||||
#define SIDE_STATUS_SPIKES (1 << 4)
|
||||
#define SIDE_STATUS_SAFEGUARD (1 << 5)
|
||||
#define SIDE_STATUS_FUTUREATTACK (1 << 6)
|
||||
#define SIDE_STATUS_MIST (1 << 8)
|
||||
#define SIDE_STATUS_SPIKES_DAMAGED (1 << 9)
|
||||
|
||||
// Flags describing move's result
|
||||
#define MOVE_RESULT_MISSED (1 << 0)
|
||||
#define MOVE_RESULT_SUPER_EFFECTIVE (1 << 1)
|
||||
#define MOVE_RESULT_NOT_VERY_EFFECTIVE (1 << 2)
|
||||
#define MOVE_RESULT_DOESNT_AFFECT_FOE (1 << 3)
|
||||
#define MOVE_RESULT_ONE_HIT_KO (1 << 4)
|
||||
#define MOVE_RESULT_FAILED (1 << 5)
|
||||
#define MOVE_RESULT_FOE_ENDURED (1 << 6)
|
||||
#define MOVE_RESULT_FOE_HUNG_ON (1 << 7)
|
||||
#define MOVE_RESULT_NO_EFFECT (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED)
|
||||
|
||||
// Battle Weather flags
|
||||
#define WEATHER_RAIN_TEMPORARY (1 << 0)
|
||||
#define WEATHER_RAIN_DOWNPOUR (1 << 1) // unused
|
||||
#define WEATHER_RAIN_PERMANENT (1 << 2)
|
||||
#define WEATHER_RAIN_ANY (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_DOWNPOUR | WEATHER_RAIN_PERMANENT)
|
||||
#define WEATHER_SANDSTORM_TEMPORARY (1 << 3)
|
||||
#define WEATHER_SANDSTORM_PERMANENT (1 << 4)
|
||||
#define WEATHER_SANDSTORM_ANY (WEATHER_SANDSTORM_TEMPORARY | WEATHER_SANDSTORM_PERMANENT)
|
||||
#define WEATHER_SUN_TEMPORARY (1 << 5)
|
||||
#define WEATHER_SUN_PERMANENT (1 << 6)
|
||||
#define WEATHER_SUN_ANY (WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT)
|
||||
#define WEATHER_HAIL (1 << 7)
|
||||
#define WEATHER_HAIL_ANY (WEATHER_HAIL)
|
||||
#define WEATHER_ANY (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY)
|
||||
|
||||
// Move Effects
|
||||
#define MOVE_EFFECT_SLEEP 0x1
|
||||
#define MOVE_EFFECT_POISON 0x2
|
||||
#define MOVE_EFFECT_BURN 0x3
|
||||
#define MOVE_EFFECT_FREEZE 0x4
|
||||
#define MOVE_EFFECT_PARALYSIS 0x5
|
||||
#define MOVE_EFFECT_TOXIC 0x6
|
||||
#define MOVE_EFFECT_CONFUSION 0x7
|
||||
#define MOVE_EFFECT_FLINCH 0x8
|
||||
#define MOVE_EFFECT_TRI_ATTACK 0x9
|
||||
#define MOVE_EFFECT_UPROAR 0xA
|
||||
#define MOVE_EFFECT_PAYDAY 0xB
|
||||
#define MOVE_EFFECT_CHARGING 0xC
|
||||
#define MOVE_EFFECT_WRAP 0xD
|
||||
#define MOVE_EFFECT_RECOIL_25 0xE
|
||||
#define MOVE_EFFECT_ATK_PLUS_1 0xF
|
||||
#define MOVE_EFFECT_DEF_PLUS_1 0x10
|
||||
#define MOVE_EFFECT_SPD_PLUS_1 0x11
|
||||
#define MOVE_EFFECT_SP_ATK_PLUS_1 0x12
|
||||
#define MOVE_EFFECT_SP_DEF_PLUS_1 0x13
|
||||
#define MOVE_EFFECT_ACC_PLUS_1 0x14
|
||||
#define MOVE_EFFECT_EVS_PLUS_1 0x15
|
||||
#define MOVE_EFFECT_ATK_MINUS_1 0x16
|
||||
#define MOVE_EFFECT_DEF_MINUS_1 0x17
|
||||
#define MOVE_EFFECT_SPD_MINUS_1 0x18
|
||||
#define MOVE_EFFECT_SP_ATK_MINUS_1 0x19
|
||||
#define MOVE_EFFECT_SP_DEF_MINUS_1 0x1A
|
||||
#define MOVE_EFFECT_ACC_MINUS_1 0x1B
|
||||
#define MOVE_EFFECT_EVS_MINUS_1 0x1C
|
||||
#define MOVE_EFFECT_RECHARGE 0x1D
|
||||
#define MOVE_EFFECT_RAGE 0x1E
|
||||
#define MOVE_EFFECT_STEAL_ITEM 0x1F
|
||||
#define MOVE_EFFECT_PREVENT_ESCAPE 0x20
|
||||
#define MOVE_EFFECT_NIGHTMARE 0x21
|
||||
#define MOVE_EFFECT_ALL_STATS_UP 0x22
|
||||
#define MOVE_EFFECT_RAPIDSPIN 0x23
|
||||
#define MOVE_EFFECT_REMOVE_PARALYSIS 0x24
|
||||
#define MOVE_EFFECT_ATK_DEF_DOWN 0x25
|
||||
#define MOVE_EFFECT_RECOIL_33_PARALYSIS 0x26
|
||||
#define MOVE_EFFECT_ATK_PLUS_2 0x27
|
||||
#define MOVE_EFFECT_DEF_PLUS_2 0x28
|
||||
#define MOVE_EFFECT_SPD_PLUS_2 0x29
|
||||
#define MOVE_EFFECT_SP_ATK_PLUS_2 0x2A
|
||||
#define MOVE_EFFECT_SP_DEF_PLUS_2 0x2B
|
||||
#define MOVE_EFFECT_ACC_PLUS_2 0x2C
|
||||
#define MOVE_EFFECT_EVS_PLUS_2 0x2D
|
||||
#define MOVE_EFFECT_ATK_MINUS_2 0x2E
|
||||
#define MOVE_EFFECT_DEF_MINUS_2 0x2F
|
||||
#define MOVE_EFFECT_SPD_MINUS_2 0x30
|
||||
#define MOVE_EFFECT_SP_ATK_MINUS_2 0x31
|
||||
#define MOVE_EFFECT_SP_DEF_MINUS_2 0x32
|
||||
#define MOVE_EFFECT_ACC_MINUS_2 0x33
|
||||
#define MOVE_EFFECT_EVS_MINUS_2 0x34
|
||||
#define MOVE_EFFECT_THRASH 0x35
|
||||
#define MOVE_EFFECT_KNOCK_OFF 0x36
|
||||
#define MOVE_EFFECT_NOTHING_37 0x37
|
||||
#define MOVE_EFFECT_NOTHING_38 0x38
|
||||
#define MOVE_EFFECT_NOTHING_39 0x39
|
||||
#define MOVE_EFFECT_NOTHING_3A 0x3A
|
||||
#define MOVE_EFFECT_SP_ATK_TWO_DOWN 0x3B
|
||||
#define MOVE_EFFECT_NOTHING_3C 0x3C
|
||||
#define MOVE_EFFECT_NOTHING_3D 0x3D
|
||||
#define MOVE_EFFECT_NOTHING_3E 0x3E
|
||||
#define MOVE_EFFECT_NOTHING_3F 0x3F
|
||||
#define MOVE_EFFECT_AFFECTS_USER 0x40
|
||||
#define MOVE_EFFECT_CERTAIN 0x80
|
||||
|
||||
#endif // GUARD_CONSTANTS_BATTLE_H
|
||||
@ -1,7 +1,7 @@
|
||||
#ifndef GUARD_BATTLE_AI_H
|
||||
#define GUARD_BATTLE_AI_H
|
||||
#ifndef GUARD_CONSTANTS_BATTLE_AI_H
|
||||
#define GUARD_CONSTANTS_BATTLE_AI_H
|
||||
|
||||
// banks enum
|
||||
// battlers
|
||||
#define AI_TARGET 0
|
||||
#define AI_USER 1
|
||||
#define AI_TARGET_PARTNER 2
|
||||
@ -22,7 +22,7 @@
|
||||
#define AI_EFFECTIVENESS_x0_25 10
|
||||
#define AI_EFFECTIVENESS_x0 0
|
||||
|
||||
// ai weather enum
|
||||
// ai weather
|
||||
#define AI_WEATHER_SUN 0
|
||||
#define AI_WEATHER_RAIN 1
|
||||
#define AI_WEATHER_SANDSTORM 2
|
||||
@ -49,4 +49,4 @@
|
||||
#define AI_SCRIPT_SAFARI (1 << 30)
|
||||
#define AI_SCRIPT_FIRST_BATTLE (1 << 31)
|
||||
|
||||
#endif // GUARD_BATTLE_AI_H
|
||||
#endif // GUARD_CONSTANTS_BATTLE_AI_H
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#ifndef GUARD_CONSTANTS_BATTLE_ANIM_H
|
||||
#define GUARD_CONSTANTS_BATTLE_ANIM_H
|
||||
|
||||
// banks enum used in scripts
|
||||
// battlers
|
||||
#define ANIM_ATTACKER 0
|
||||
#define ANIM_TARGET 1
|
||||
#define ANIM_ATK_PARTNER 2
|
||||
|
||||
97
include/constants/battle_script_commands.h
Normal file
97
include/constants/battle_script_commands.h
Normal file
@ -0,0 +1,97 @@
|
||||
#ifndef GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H
|
||||
#define GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H
|
||||
|
||||
// Battle Scripting and BattleCommunication addresses
|
||||
#define sPAINSPLIT_HP gBattleScripting
|
||||
#define sBIDE_DMG gBattleScripting + 4
|
||||
#define sMULTIHIT_STRING gBattleScripting + 8
|
||||
#define sDMG_MULTIPLIER gBattleScripting + 0xE
|
||||
#define sTWOTURN_STRINGID gBattleScripting + 0xF
|
||||
#define sB_ANIM_ARG1 gBattleScripting + 0x10
|
||||
#define sB_ANIM_ARG2 gBattleScripting + 0x11
|
||||
#define sTRIPLE_KICK_POWER gBattleScripting + 0x12
|
||||
#define sMOVEEND_STATE gBattleScripting + 0x14
|
||||
#define sBANK_WITH_ABILITY gBattleScripting + 0x15
|
||||
#define sMULTIHIT_EFFECT gBattleScripting + 0x16
|
||||
#define sBANK gBattleScripting + 0x17
|
||||
#define sB_ANIM_TURN gBattleScripting + 0x18
|
||||
#define sB_ANIM_TARGETS_HIT gBattleScripting + 0x19
|
||||
#define sSTATCHANGER gBattleScripting + 0x1A
|
||||
#define sFIELD_1B gBattleScripting + 0x1B
|
||||
#define sGIVEEXP_STATE gBattleScripting + 0x1C
|
||||
#define sBATTLE_STYLE gBattleScripting + 0x1D
|
||||
#define sLVLBOX_STATE gBattleScripting + 0x1E
|
||||
#define sLEARNMOVE_STATE gBattleScripting + 0x1F
|
||||
#define sFIELD_20 gBattleScripting + 0x20
|
||||
#define sRESHOW_MAIN_STATE gBattleScripting + 0x21
|
||||
#define sRESHOW_HELPER_STATE gBattleScripting + 0x22
|
||||
#define sFIELD_23 gBattleScripting + 0x23
|
||||
#define sFIELD_24 gBattleScripting + 0x24
|
||||
#define sMULTIPLAYER_ID gBattleScripting + 0x25
|
||||
|
||||
#define cEFFECT_CHOOSER gBattleCommunication + 3
|
||||
#define cMULTISTRING_CHOOSER gBattleCommunication + 5
|
||||
|
||||
// Battle Script defines for getting the wanted battler
|
||||
#define BS_TARGET 0
|
||||
#define BS_ATTACKER 1
|
||||
#define BS_EFFECT_BATTLER 2
|
||||
#define BS_FAINTED 3
|
||||
#define BS_BANK_0 7
|
||||
#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update
|
||||
#define BS_ATTACKER_SIDE 8 // for atk1E_jumpifability
|
||||
#define BS_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
|
||||
#define BS_SCRIPTING 10
|
||||
#define BS_PLAYER1 11
|
||||
#define BS_OPPONENT1 12
|
||||
#define BS_PLAYER2 13
|
||||
#define BS_OPPONENT2 14
|
||||
|
||||
// atk 01, accuracy calc
|
||||
#define NO_ACC_CALC 0xFFFE
|
||||
#define NO_ACC_CALC_CHECK_LOCK_ON 0xFFFF
|
||||
#define ACC_CURR_MOVE 0
|
||||
|
||||
// compare operands
|
||||
#define CMP_EQUAL 0x0
|
||||
#define CMP_NOT_EQUAL 0x1
|
||||
#define CMP_GREATER_THAN 0x2
|
||||
#define CMP_LESS_THAN 0x3
|
||||
#define CMP_COMMON_BITS 0x4
|
||||
#define CMP_NO_COMMON_BITS 0x5
|
||||
|
||||
// atk76, various
|
||||
#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0
|
||||
#define VARIOUS_SET_MAGIC_COAT_TARGET 1
|
||||
#define VARIOUS_IS_RUNNING_IMPOSSIBLE 2
|
||||
#define VARIOUS_GET_MOVE_TARGET 3
|
||||
#define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5
|
||||
#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6
|
||||
#define VARIOUS_EMIT_YESNOBOX 13
|
||||
#define VARIOUS_WAIT_CRY 18
|
||||
#define VARIOUS_RETURN_OPPONENT_MON1 19
|
||||
#define VARIOUS_RETURN_OPPONENT_MON2 20
|
||||
#define VARIOUS_SET_TELEPORT_OUTCOME 25
|
||||
#define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 26
|
||||
|
||||
// atk80, dmg manipulation
|
||||
#define ATK80_DMG_CHANGE_SIGN 0
|
||||
#define ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP 1
|
||||
#define ATK80_DMG_DOUBLED 2
|
||||
|
||||
// atk4F, a flag used for the jumpifcantswitch command
|
||||
#define ATK4F_DONT_CHECK_STATUSES 0x80
|
||||
|
||||
// statchange defines
|
||||
#define STAT_CHANGE_BS_PTR 0x1
|
||||
#define STAT_CHANGE_NOT_PROTECT_AFFECTED 0x20
|
||||
#define STAT_CHANGE_WORKED 0
|
||||
#define STAT_CHANGE_DIDNT_WORK 1
|
||||
|
||||
// atk48
|
||||
#define ATK48_STAT_NEGATIVE 0x1
|
||||
#define ATK48_STAT_BY_TWO 0x2
|
||||
#define ATK48_BIT_x4 0x4
|
||||
#define ATK48_LOWER_FAIL_CHECK 0x8
|
||||
|
||||
#endif // GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H
|
||||
@ -1,5 +1,5 @@
|
||||
#ifndef GUARD_BATTLE_STRING_IDS_H
|
||||
#define GUARD_BATTLE_STRING_IDS_H
|
||||
#ifndef GUARD_CONSTANTS_BATTLE_STRING_IDS_H
|
||||
#define GUARD_CONSTANTS_BATTLE_STRING_IDS_H
|
||||
|
||||
#define BATTLESTRINGS_COUNT 369
|
||||
|
||||
@ -12,7 +12,6 @@
|
||||
#define STRINGID_USEDMOVE 4
|
||||
#define STRINGID_BATTLEEND 5
|
||||
|
||||
|
||||
// todo: make some of those names less vague: attacker/target vs pkmn, etc.
|
||||
#define STRINGID_TRAINER1LOSETEXT 12
|
||||
#define STRINGID_PKMNGAINEDEXP 13
|
||||
@ -384,4 +383,4 @@
|
||||
#define STRINGID_TRAINER1WINTEXT 379
|
||||
#define STRINGID_TRAINER2WINTEXT 380
|
||||
|
||||
#endif // GUARD_BATTLE_STRING_IDS_H
|
||||
#endif // GUARD_CONSTANTS_BATTLE_STRING_IDS_H
|
||||
80
include/constants/pokemon.h
Normal file
80
include/constants/pokemon.h
Normal file
@ -0,0 +1,80 @@
|
||||
#ifndef GUARD_CONSTANTS_POKEMON_H
|
||||
#define GUARD_CONSTANTS_POKEMON_H
|
||||
|
||||
// Pokemon types
|
||||
#define TYPE_NORMAL 0x00
|
||||
#define TYPE_FIGHTING 0x01
|
||||
#define TYPE_FLYING 0x02
|
||||
#define TYPE_POISON 0x03
|
||||
#define TYPE_GROUND 0x04
|
||||
#define TYPE_ROCK 0x05
|
||||
#define TYPE_BUG 0x06
|
||||
#define TYPE_GHOST 0x07
|
||||
#define TYPE_STEEL 0x08
|
||||
#define TYPE_MYSTERY 0x09
|
||||
#define TYPE_FIRE 0x0a
|
||||
#define TYPE_WATER 0x0b
|
||||
#define TYPE_GRASS 0x0c
|
||||
#define TYPE_ELECTRIC 0x0d
|
||||
#define TYPE_PSYCHIC 0x0e
|
||||
#define TYPE_ICE 0x0f
|
||||
#define TYPE_DRAGON 0x10
|
||||
#define TYPE_DARK 0x11
|
||||
#define NUMBER_OF_MON_TYPES 0x12
|
||||
|
||||
// Pokemon egg groups
|
||||
#define EGG_GROUP_NONE 0
|
||||
#define EGG_GROUP_MONSTER 1
|
||||
#define EGG_GROUP_WATER_1 2
|
||||
#define EGG_GROUP_BUG 3
|
||||
#define EGG_GROUP_FLYING 4
|
||||
#define EGG_GROUP_FIELD 5
|
||||
#define EGG_GROUP_FAIRY 6
|
||||
#define EGG_GROUP_GRASS 7
|
||||
#define EGG_GROUP_HUMAN_LIKE 8
|
||||
#define EGG_GROUP_WATER_3 9
|
||||
#define EGG_GROUP_MINERAL 10
|
||||
#define EGG_GROUP_AMORPHOUS 11
|
||||
#define EGG_GROUP_WATER_2 12
|
||||
#define EGG_GROUP_DITTO 13
|
||||
#define EGG_GROUP_DRAGON 14
|
||||
#define EGG_GROUP_UNDISCOVERED 15
|
||||
|
||||
// Pokemon natures
|
||||
#define NATURE_HARDY 0
|
||||
#define NATURE_LONELY 1
|
||||
#define NATURE_BRAVE 2
|
||||
#define NATURE_ADAMANT 3
|
||||
#define NATURE_NAUGHTY 4
|
||||
#define NATURE_BOLD 5
|
||||
#define NATURE_DOCILE 6
|
||||
#define NATURE_RELAXED 7
|
||||
#define NATURE_IMPISH 8
|
||||
#define NATURE_LAX 9
|
||||
#define NATURE_TIMID 10
|
||||
#define NATURE_HASTY 11
|
||||
#define NATURE_SERIOUS 12
|
||||
#define NATURE_JOLLY 13
|
||||
#define NATURE_NAIVE 14
|
||||
#define NATURE_MODEST 15
|
||||
#define NATURE_MILD 16
|
||||
#define NATURE_QUIET 17
|
||||
#define NATURE_BASHFUL 18
|
||||
#define NATURE_RASH 19
|
||||
#define NATURE_CALM 20
|
||||
#define NATURE_GENTLE 21
|
||||
#define NATURE_SASSY 22
|
||||
#define NATURE_CAREFUL 23
|
||||
#define NATURE_QUIRKY 24
|
||||
|
||||
// Pokemon Stats
|
||||
#define STAT_HP 0
|
||||
#define STAT_ATK 1
|
||||
#define STAT_DEF 2
|
||||
#define STAT_SPEED 3
|
||||
#define STAT_SPATK 4
|
||||
#define STAT_SPDEF 5
|
||||
#define STAT_ACC 6 // only in battles
|
||||
#define STAT_EVASION 7 // only in battles
|
||||
|
||||
#endif // GUARD_CONSTANTS_POKEMON_H
|
||||
@ -1,6 +1,8 @@
|
||||
#ifndef GUARD_POKEMON_H
|
||||
#define GUARD_POKEMON_H
|
||||
|
||||
#include "constants/pokemon.h"
|
||||
|
||||
#define MON_DATA_PERSONALITY 0
|
||||
#define MON_DATA_OT_ID 1
|
||||
#define MON_DATA_NICKNAME 2
|
||||
@ -107,81 +109,11 @@
|
||||
#define MON_FEMALE 0xFE
|
||||
#define MON_GENDERLESS 0xFF
|
||||
|
||||
#define TYPE_NORMAL 0x00
|
||||
#define TYPE_FIGHTING 0x01
|
||||
#define TYPE_FLYING 0x02
|
||||
#define TYPE_POISON 0x03
|
||||
#define TYPE_GROUND 0x04
|
||||
#define TYPE_ROCK 0x05
|
||||
#define TYPE_BUG 0x06
|
||||
#define TYPE_GHOST 0x07
|
||||
#define TYPE_STEEL 0x08
|
||||
#define TYPE_MYSTERY 0x09
|
||||
#define TYPE_FIRE 0x0a
|
||||
#define TYPE_WATER 0x0b
|
||||
#define TYPE_GRASS 0x0c
|
||||
#define TYPE_ELECTRIC 0x0d
|
||||
#define TYPE_PSYCHIC 0x0e
|
||||
#define TYPE_ICE 0x0f
|
||||
#define TYPE_DRAGON 0x10
|
||||
#define TYPE_DARK 0x11
|
||||
|
||||
#define NUMBER_OF_MON_TYPES 0x12
|
||||
|
||||
#define MAX_TOTAL_EVS 510
|
||||
#define NUM_STATS 6
|
||||
#define UNOWN_FORM_COUNT 28
|
||||
#define MAX_MON_LEVEL 100
|
||||
|
||||
enum
|
||||
{
|
||||
EGG_GROUP_NONE,
|
||||
EGG_GROUP_MONSTER,
|
||||
EGG_GROUP_WATER_1,
|
||||
EGG_GROUP_BUG,
|
||||
EGG_GROUP_FLYING,
|
||||
EGG_GROUP_FIELD,
|
||||
EGG_GROUP_FAIRY,
|
||||
EGG_GROUP_GRASS,
|
||||
EGG_GROUP_HUMAN_LIKE,
|
||||
EGG_GROUP_WATER_3,
|
||||
EGG_GROUP_MINERAL,
|
||||
EGG_GROUP_AMORPHOUS,
|
||||
EGG_GROUP_WATER_2,
|
||||
EGG_GROUP_DITTO,
|
||||
EGG_GROUP_DRAGON,
|
||||
EGG_GROUP_UNDISCOVERED
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
NATURE_HARDY,
|
||||
NATURE_LONELY,
|
||||
NATURE_BRAVE,
|
||||
NATURE_ADAMANT,
|
||||
NATURE_NAUGHTY,
|
||||
NATURE_BOLD,
|
||||
NATURE_DOCILE,
|
||||
NATURE_RELAXED,
|
||||
NATURE_IMPISH,
|
||||
NATURE_LAX,
|
||||
NATURE_TIMID,
|
||||
NATURE_HASTY,
|
||||
NATURE_SERIOUS,
|
||||
NATURE_JOLLY,
|
||||
NATURE_NAIVE,
|
||||
NATURE_MODEST,
|
||||
NATURE_MILD,
|
||||
NATURE_QUIET,
|
||||
NATURE_BASHFUL,
|
||||
NATURE_RASH,
|
||||
NATURE_CALM,
|
||||
NATURE_GENTLE,
|
||||
NATURE_SASSY,
|
||||
NATURE_CAREFUL,
|
||||
NATURE_QUIRKY,
|
||||
};
|
||||
|
||||
struct PokemonSubstruct0
|
||||
{
|
||||
u16 species;
|
||||
@ -374,28 +306,6 @@ struct BattlePokemon
|
||||
/*0x54*/ u32 otId;
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
STAT_STAGE_HP, // 0
|
||||
STAT_STAGE_ATK, // 1
|
||||
STAT_STAGE_DEF, // 2
|
||||
STAT_STAGE_SPEED, // 3
|
||||
STAT_STAGE_SPATK, // 4
|
||||
STAT_STAGE_SPDEF, // 5
|
||||
STAT_STAGE_ACC, // 6
|
||||
STAT_STAGE_EVASION, // 7
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
STAT_HP, // 0
|
||||
STAT_ATK, // 1
|
||||
STAT_DEF, // 2
|
||||
STAT_SPD, // 3
|
||||
STAT_SPATK, // 4
|
||||
STAT_SPDEF, // 5
|
||||
};
|
||||
|
||||
struct BaseStats
|
||||
{
|
||||
/* 0x00 */ u8 baseHP;
|
||||
|
||||
@ -7,9 +7,9 @@ extern u8 gUnknown_0203C7B4;
|
||||
|
||||
void sub_8184DA4(u8 arg0);
|
||||
void sub_8184E58(void);
|
||||
void RecordedBattle_SetBattlerAction(u8 bank, u8 action);
|
||||
void RecordedBattle_ClearBattlerAction(u8 bank, u8 bytesToClear);
|
||||
u8 RecordedBattle_GetBattlerAction(u8 bank);
|
||||
void RecordedBattle_SetBattlerAction(u8 battlerId, u8 action);
|
||||
void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear);
|
||||
u8 RecordedBattle_GetBattlerAction(u8 battlerId);
|
||||
u8 sub_81850D0(void);
|
||||
u8 sub_81850DC(u8 *arg0);
|
||||
void sub_81851A8(u8 *arg0);
|
||||
@ -19,13 +19,13 @@ void PlayRecordedBattle(void (*CB2_After)(void));
|
||||
u8 sub_8185EA0(void);
|
||||
u8 sub_8185EAC(void);
|
||||
void RecordedBattle_SaveParties(void);
|
||||
u8 GetActiveBankLinkPlayerGender(void);
|
||||
u8 GetActiveBattlerLinkPlayerGender(void);
|
||||
void sub_8185F84(void);
|
||||
void sub_8185F90(u16 arg0);
|
||||
u8 sub_8185FAC(void);
|
||||
u8 GetBattleStyleInRecordedBattle(void);
|
||||
u8 GetTextSpeedInRecordedBattle(void);
|
||||
void RecordedBattle_CopyBankMoves(void);
|
||||
void RecordedBattle_CopyBattlerMoves(void);
|
||||
void sub_818603C(u8 arg0);
|
||||
u32 GetAiScriptsInRecordedBattle(void);
|
||||
void sub_8186444(void);
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "pokemon.h"
|
||||
#include "battle.h"
|
||||
#include "battle_setup.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/abilities.h"
|
||||
#include "random.h"
|
||||
@ -44,26 +45,7 @@ in order to read the next command correctly. refer to battle_ai_scripts.s for th
|
||||
AI scripts.
|
||||
*/
|
||||
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern u8 gActiveBattler;
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern u16 gCurrentMove;
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u16 gLastMoves[MAX_BATTLERS_COUNT];
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u16 gTrainerBattleOpponent_B;
|
||||
extern u32 gStatuses3[MAX_BATTLERS_COUNT];
|
||||
extern u16 gSideStatuses[2];
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u16 gDynamicBasePower;
|
||||
extern u8 gMoveResultFlags;
|
||||
extern s32 gBattleMoveDamage;
|
||||
extern u8 gCritMultiplier;
|
||||
extern u16 gBattleWeather;
|
||||
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
extern const struct BaseStats gBaseStats[];
|
||||
extern const u8 * const gBattleAI_ScriptsTable[];
|
||||
|
||||
extern u32 GetAiScriptsInRecordedBattle();
|
||||
|
||||
@ -10,21 +10,7 @@
|
||||
#include "constants/items.h"
|
||||
#include "pokemon_item_effects.h"
|
||||
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern u32 gStatuses3[MAX_BATTLERS_COUNT];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastLandedMoves[MAX_BATTLERS_COUNT];
|
||||
extern u8 gLastHitBy[MAX_BATTLERS_COUNT];
|
||||
extern u16 gDynamicBasePower;
|
||||
extern u8 gMoveResultFlags;
|
||||
extern u8 gCritMultiplier;
|
||||
extern s32 gBattleMoveDamage;
|
||||
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
extern const struct BaseStats gBaseStats[];
|
||||
extern const u8 gTypeEffectiveness[];
|
||||
extern const u8 * const gItemEffectTable[]; // todo: fix once struct is declared
|
||||
|
||||
|
||||
@ -25,8 +25,6 @@
|
||||
|
||||
#define ANIM_SPRITE_INDEX_COUNT 8
|
||||
|
||||
extern u8 gBattlerAttacker;
|
||||
extern u8 gBattlerTarget;
|
||||
extern u16 gBattle_WIN0H;
|
||||
extern u16 gBattle_WIN0V;
|
||||
extern u16 gBattle_WIN1H;
|
||||
@ -35,12 +33,9 @@ extern u16 gBattle_BG1_X;
|
||||
extern u16 gBattle_BG1_Y;
|
||||
extern u16 gBattle_BG2_X;
|
||||
extern u16 gBattle_BG2_Y;
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE1;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE2;
|
||||
extern u8 gDecompressionBuffer[];
|
||||
|
||||
extern const u16 gUnknown_082C8D64[];
|
||||
extern const u8 * const gBattleAnims_Moves[];
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
#include "window.h"
|
||||
#include "text_window.h"
|
||||
#include "menu.h"
|
||||
#include "battle_setup.h"
|
||||
|
||||
struct BattleBackground
|
||||
{
|
||||
@ -35,13 +36,10 @@ extern const struct BgTemplate gUnknown_0831AA08[4];
|
||||
extern const struct WindowTemplate *gUnknown_0831ABA0[];
|
||||
extern const struct BattleBackground gBattleTerrainTable[];
|
||||
|
||||
extern u8 gBattleTerrain;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u16 gBattle_BG1_X;
|
||||
extern u16 gBattle_BG1_Y;
|
||||
extern u16 gBattle_BG2_X;
|
||||
extern u16 gBattle_BG2_Y;
|
||||
extern u16 gPartnerTrainerId;
|
||||
|
||||
extern u8 GetCurrentMapBattleScene(void);
|
||||
|
||||
|
||||
@ -24,38 +24,13 @@
|
||||
#include "reshow_battle_screen.h"
|
||||
#include "pokeball.h"
|
||||
#include "data2.h"
|
||||
#include "battle_setup.h"
|
||||
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlersCount;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern u16 gSpecialVar_ItemId;
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleOutcome;
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u8 gUnknown_020244B4[];
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u16 gTrainerBattleOpponent_B;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
@ -65,6 +40,7 @@ extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
|
||||
extern void sub_806A068(u16, u8);
|
||||
extern void sub_81851A8(u8 *);
|
||||
extern u16 sub_8068B48(void);
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
|
||||
|
||||
// this file's functions
|
||||
static void LinkOpponentHandleGetMonData(void);
|
||||
@ -1722,7 +1698,7 @@ static void LinkOpponentHandleFaintingCry(void)
|
||||
static void LinkOpponentHandleIntroSlide(void)
|
||||
{
|
||||
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
|
||||
gUnknown_020243FC |= 1;
|
||||
gIntroSlideFlags |= 1;
|
||||
LinkOpponentBufferExecCompleted();
|
||||
}
|
||||
|
||||
@ -1744,7 +1720,7 @@ static void LinkOpponentHandleIntroTrainerBallThrow(void)
|
||||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
|
||||
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
|
||||
gBattlerControllerFuncs[gActiveBattler] = nullsub_28;
|
||||
@ -1804,7 +1780,7 @@ static void LinkOpponentHandleDrawPartyStatusSummary(void)
|
||||
}
|
||||
}
|
||||
|
||||
gUnknown_020244B4[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
|
||||
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
|
||||
|
||||
if (gBattleBufferA[gActiveBattler][2] != 0)
|
||||
@ -1826,7 +1802,7 @@ static void sub_806782C(void)
|
||||
static void LinkOpponentHandleCmd49(void)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
LinkOpponentBufferExecCompleted();
|
||||
}
|
||||
|
||||
|
||||
@ -23,34 +23,11 @@
|
||||
#include "reshow_battle_screen.h"
|
||||
#include "pokeball.h"
|
||||
#include "data2.h"
|
||||
#include "battle_setup.h"
|
||||
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlersCount;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern u16 gSpecialVar_ItemId;
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleOutcome;
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u8 gUnknown_020244B4[];
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
@ -60,6 +37,7 @@ extern const struct BattleMove gBattleMoves[];
|
||||
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
|
||||
extern void sub_806A068(u16, u8);
|
||||
extern void sub_81851A8(u8 *);
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
|
||||
|
||||
// this file's functions
|
||||
static void LinkPartnerHandleGetMonData(void);
|
||||
@ -1543,7 +1521,7 @@ static void LinkPartnerHandleFaintingCry(void)
|
||||
static void LinkPartnerHandleIntroSlide(void)
|
||||
{
|
||||
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
|
||||
gUnknown_020243FC |= 1;
|
||||
gIntroSlideFlags |= 1;
|
||||
LinkPartnerBufferExecCompleted();
|
||||
}
|
||||
|
||||
@ -1589,7 +1567,7 @@ static void LinkPartnerHandleIntroTrainerBallThrow(void)
|
||||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
|
||||
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
|
||||
gBattlerControllerFuncs[gActiveBattler] = nullsub_112;
|
||||
@ -1636,7 +1614,7 @@ static void LinkPartnerHandleDrawPartyStatusSummary(void)
|
||||
else
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
|
||||
gUnknown_020244B4[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
|
||||
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
|
||||
|
||||
if (gBattleBufferA[gActiveBattler][2] != 0)
|
||||
@ -1658,7 +1636,7 @@ static void sub_814DE9C(void)
|
||||
static void LinkPartnerHandleCmd49(void)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
LinkPartnerBufferExecCompleted();
|
||||
}
|
||||
|
||||
|
||||
@ -27,33 +27,13 @@
|
||||
#include "random.h"
|
||||
#include "pokeball.h"
|
||||
#include "data2.h"
|
||||
#include "battle_setup.h"
|
||||
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern void *gUnknown_020244D8;
|
||||
extern void *gUnknown_020244DC;
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u16 gTrainerBattleOpponent_B;
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern u8 gUnknown_020244B4[];
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
@ -1866,7 +1846,7 @@ static void OpponentHandleFaintingCry(void)
|
||||
static void OpponentHandleIntroSlide(void)
|
||||
{
|
||||
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
|
||||
gUnknown_020243FC |= 1;
|
||||
gIntroSlideFlags |= 1;
|
||||
OpponentBufferExecCompleted();
|
||||
}
|
||||
|
||||
@ -1888,7 +1868,7 @@ static void OpponentHandleIntroTrainerBallThrow(void)
|
||||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
|
||||
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
|
||||
gBattlerControllerFuncs[gActiveBattler] = nullsub_26;
|
||||
@ -1953,7 +1933,7 @@ static void OpponentHandleDrawPartyStatusSummary(void)
|
||||
}
|
||||
}
|
||||
|
||||
gUnknown_020244B4[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
|
||||
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
|
||||
|
||||
if (gBattleBufferA[gActiveBattler][2] != 0)
|
||||
@ -1975,7 +1955,7 @@ static void sub_8062A2C(void)
|
||||
static void OpponentHandleCmd49(void)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
OpponentBufferExecCompleted();
|
||||
}
|
||||
|
||||
|
||||
@ -26,44 +26,19 @@
|
||||
#include "random.h"
|
||||
#include "pokeball.h"
|
||||
#include "data2.h"
|
||||
#include "battle_setup.h"
|
||||
#include "item_use.h"
|
||||
#include "recorded_battle.h"
|
||||
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u8 gBattlersCount;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern u8 gPlayerDpadHoldFrames;
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gMultiUsePlayerCursor;
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern u16 gSpecialVar_ItemId;
|
||||
extern u8 gUnknown_0203CEE8;
|
||||
extern u8 gUnknown_0203CEE9;
|
||||
extern u8 gUnknown_0203CF00[];
|
||||
extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleOutcome;
|
||||
extern u8 gNumberOfMovesToChoose;
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern s32 gUnknown_0203CD70;
|
||||
extern u8 gBankInMenu;
|
||||
extern u32 gBattlePalaceMoveSelectionRngValue;
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern u8 gUnknown_020244B4[];
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
|
||||
@ -2677,7 +2652,7 @@ static void PlayerHandleChooseItem(void)
|
||||
|
||||
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
|
||||
gBattlerControllerFuncs[gActiveBattler] = OpenBagAndChooseItem;
|
||||
gBankInMenu = gActiveBattler;
|
||||
gBattlerInMenuId = gActiveBattler;
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
gUnknown_0203CF00[i] = gBattleBufferA[gActiveBattler][1 + i];
|
||||
@ -2704,7 +2679,7 @@ static void PlayerHandleChoosePokemon(void)
|
||||
*(&gBattleStruct->field_B0) = gBattleBufferA[gActiveBattler][3];
|
||||
BeginNormalPaletteFade(-1, 0, 0, 16, 0);
|
||||
gBattlerControllerFuncs[gActiveBattler] = sub_80597CC;
|
||||
gBankInMenu = gActiveBattler;
|
||||
gBattlerInMenuId = gActiveBattler;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2953,7 +2928,7 @@ static void PlayerHandleFaintingCry(void)
|
||||
static void PlayerHandleIntroSlide(void)
|
||||
{
|
||||
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
|
||||
gUnknown_020243FC |= 1;
|
||||
gIntroSlideFlags |= 1;
|
||||
PlayerBufferExecCompleted();
|
||||
}
|
||||
|
||||
@ -2981,7 +2956,7 @@ static void PlayerHandleIntroTrainerBallThrow(void)
|
||||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
|
||||
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
|
||||
gBattlerControllerFuncs[gActiveBattler] = nullsub_21;
|
||||
@ -3039,7 +3014,7 @@ static void PlayerHandleDrawPartyStatusSummary(void)
|
||||
else
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
|
||||
gUnknown_020244B4[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
|
||||
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
|
||||
|
||||
if (gBattleBufferA[gActiveBattler][2] != 0)
|
||||
@ -3061,7 +3036,7 @@ static void sub_805CE38(void)
|
||||
static void PlayerHandleCmd49(void)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
PlayerBufferExecCompleted();
|
||||
}
|
||||
|
||||
|
||||
@ -22,35 +22,12 @@
|
||||
#include "reshow_battle_screen.h"
|
||||
#include "pokeball.h"
|
||||
#include "data2.h"
|
||||
#include "battle_setup.h"
|
||||
#include "item_use.h"
|
||||
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlersCount;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern u16 gSpecialVar_ItemId;
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleOutcome;
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern u8 gBankInMenu;
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u8 gUnknown_020244B4[];
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
@ -60,6 +37,7 @@ extern const struct BattleMove gBattleMoves[];
|
||||
extern void sub_81358F4(void);
|
||||
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
|
||||
extern void sub_806A068(u16, u8);
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
|
||||
|
||||
// this file's functions
|
||||
static void PlayerPartnerHandleGetMonData(void);
|
||||
@ -1796,7 +1774,7 @@ static void PlayerPartnerHandleFaintingCry(void)
|
||||
static void PlayerPartnerHandleIntroSlide(void)
|
||||
{
|
||||
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
|
||||
gUnknown_020243FC |= 1;
|
||||
gIntroSlideFlags |= 1;
|
||||
PlayerPartnerBufferExecCompleted();
|
||||
}
|
||||
|
||||
@ -1835,7 +1813,7 @@ static void PlayerPartnerHandleIntroTrainerBallThrow(void)
|
||||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
|
||||
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
|
||||
gBattlerControllerFuncs[gActiveBattler] = nullsub_77;
|
||||
@ -1882,7 +1860,7 @@ static void PlayerPartnerHandleDrawPartyStatusSummary(void)
|
||||
else
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
|
||||
gUnknown_020244B4[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
|
||||
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
|
||||
|
||||
if (gBattleBufferA[gActiveBattler][2] != 0)
|
||||
@ -1904,7 +1882,7 @@ static void sub_81BE498(void)
|
||||
static void PlayerPartnerHandleCmd49(void)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
PlayerPartnerBufferExecCompleted();
|
||||
}
|
||||
|
||||
|
||||
@ -24,38 +24,14 @@
|
||||
#include "reshow_battle_screen.h"
|
||||
#include "pokeball.h"
|
||||
#include "data2.h"
|
||||
#include "item_use.h"
|
||||
#include "battle_setup.h"
|
||||
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlersCount;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern u16 gSpecialVar_ItemId;
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleOutcome;
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u8 gUnknown_020244B4[];
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u16 gTrainerBattleOpponent_B;
|
||||
extern u8 gUnknown_0203C7B4;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
@ -63,6 +39,7 @@ extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
|
||||
extern void sub_806A068(u16, u8);
|
||||
extern u16 sub_8068B48(void);
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
|
||||
|
||||
// this file's functions
|
||||
static void RecordedOpponentHandleGetMonData(void);
|
||||
@ -1258,7 +1235,7 @@ static void RecordedOpponentHandleDrawTrainerPic(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
trainerPicId = PlayerGenderToFrontTrainerPicId(GetActiveBankLinkPlayerGender());
|
||||
trainerPicId = PlayerGenderToFrontTrainerPicId(GetActiveBattlerLinkPlayerGender());
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1661,7 +1638,7 @@ static void RecordedOpponentHandleFaintingCry(void)
|
||||
static void RecordedOpponentHandleIntroSlide(void)
|
||||
{
|
||||
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
|
||||
gUnknown_020243FC |= 1;
|
||||
gIntroSlideFlags |= 1;
|
||||
RecordedOpponentBufferExecCompleted();
|
||||
}
|
||||
|
||||
@ -1683,7 +1660,7 @@ static void RecordedOpponentHandleIntroTrainerBallThrow(void)
|
||||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
|
||||
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
|
||||
gBattlerControllerFuncs[gActiveBattler] = nullsub_70;
|
||||
@ -1743,7 +1720,7 @@ static void RecordedOpponentHandleDrawPartyStatusSummary(void)
|
||||
}
|
||||
}
|
||||
|
||||
gUnknown_020244B4[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
|
||||
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
|
||||
|
||||
if (gBattleBufferA[gActiveBattler][2] != 0)
|
||||
@ -1765,7 +1742,7 @@ static void sub_818975C(void)
|
||||
static void RecordedOpponentHandleCmd49(void)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
RecordedOpponentBufferExecCompleted();
|
||||
}
|
||||
|
||||
|
||||
@ -23,36 +23,12 @@
|
||||
#include "reshow_battle_screen.h"
|
||||
#include "pokeball.h"
|
||||
#include "data2.h"
|
||||
#include "item_use.h"
|
||||
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlersCount;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern u16 gSpecialVar_ItemId;
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleOutcome;
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern u8 gBankInMenu;
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u8 gUnknown_020244B4[];
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleCommunication[];
|
||||
extern u8 gUnknown_0203C7B4;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
@ -63,6 +39,7 @@ extern const struct BattleMove gBattleMoves[];
|
||||
|
||||
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
|
||||
extern void sub_806A068(u16, u8);
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
|
||||
|
||||
// this file's functions
|
||||
static void RecordedPlayerHandleGetMonData(void);
|
||||
@ -1230,7 +1207,7 @@ static void RecordedPlayerHandleDrawTrainerPic(void)
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_x2000000)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
|
||||
trainerPicId = GetActiveBankLinkPlayerGender();
|
||||
trainerPicId = GetActiveBattlerLinkPlayerGender();
|
||||
else
|
||||
trainerPicId = gLinkPlayers[gUnknown_0203C7B4].gender;
|
||||
}
|
||||
@ -1684,7 +1661,7 @@ static void RecordedPlayerHandleFaintingCry(void)
|
||||
static void RecordedPlayerHandleIntroSlide(void)
|
||||
{
|
||||
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
|
||||
gUnknown_020243FC |= 1;
|
||||
gIntroSlideFlags |= 1;
|
||||
RecordedPlayerBufferExecCompleted();
|
||||
}
|
||||
|
||||
@ -1719,7 +1696,7 @@ static void RecordedPlayerHandleIntroTrainerBallThrow(void)
|
||||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
|
||||
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
|
||||
gBattlerControllerFuncs[gActiveBattler] = nullsub_120;
|
||||
@ -1766,7 +1743,7 @@ static void RecordedPlayerHandleDrawPartyStatusSummary(void)
|
||||
else
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
|
||||
gUnknown_020244B4[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
|
||||
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
|
||||
|
||||
if (gBattleBufferA[gActiveBattler][2] != 0)
|
||||
@ -1788,7 +1765,7 @@ static void sub_818CDF4(void)
|
||||
static void RecordedPlayerHandleCmd49(void)
|
||||
{
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
RecordedPlayerBufferExecCompleted();
|
||||
}
|
||||
|
||||
|
||||
@ -21,27 +21,12 @@
|
||||
#include "pokeball.h"
|
||||
#include "data2.h"
|
||||
#include "pokeblock.h"
|
||||
#include "item_use.h"
|
||||
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlersCount;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern u16 gSpecialVar_ItemId;
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleOutcome;
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern u8 gBankInMenu;
|
||||
extern u16 gUnknown_020243FC;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
|
||||
|
||||
@ -500,7 +485,7 @@ static void SafariHandleChooseItem(void)
|
||||
|
||||
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
|
||||
gBattlerControllerFuncs[gActiveBattler] = SafariOpenPokeblockCase;
|
||||
gBankInMenu = gActiveBattler;
|
||||
gBattlerInMenuId = gActiveBattler;
|
||||
}
|
||||
|
||||
static void SafariHandleChoosePokemon(void)
|
||||
@ -648,7 +633,7 @@ static void SafariHandleFaintingCry(void)
|
||||
static void SafariHandleIntroSlide(void)
|
||||
{
|
||||
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
|
||||
gUnknown_020243FC |= 1;
|
||||
gIntroSlideFlags |= 1;
|
||||
SafariBufferExecCompleted();
|
||||
}
|
||||
|
||||
|
||||
@ -27,38 +27,14 @@
|
||||
#include "pokeball.h"
|
||||
#include "data2.h"
|
||||
#include "party_menu.h"
|
||||
#include "battle_setup.h"
|
||||
#include "item_use.h"
|
||||
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u8 gBattlersCount;
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gMultiUsePlayerCursor;
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern u16 gSpecialVar_ItemId;
|
||||
extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleOutcome;
|
||||
extern u8 gNumberOfMovesToChoose;
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern s32 gUnknown_0203CD70;
|
||||
extern u8 gBankInMenu;
|
||||
extern u32 gBattlePalaceMoveSelectionRngValue;
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern u8 gUnknown_020244B4[];
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
|
||||
@ -1282,7 +1258,7 @@ static void WallyHandleChooseItem(void)
|
||||
{
|
||||
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
|
||||
gBattlerControllerFuncs[gActiveBattler] = OpenBagAfterPaletteFade;
|
||||
gBankInMenu = gActiveBattler;
|
||||
gBattlerInMenuId = gActiveBattler;
|
||||
}
|
||||
|
||||
static void WallyHandleChoosePokemon(void)
|
||||
@ -1452,7 +1428,7 @@ static void WallyHandleFaintingCry(void)
|
||||
static void WallyHandleIntroSlide(void)
|
||||
{
|
||||
HandleIntroSlide(gBattleBufferA[gActiveBattler][1]);
|
||||
gUnknown_020243FC |= 1;
|
||||
gIntroSlideFlags |= 1;
|
||||
WallyBufferExecCompleted();
|
||||
}
|
||||
|
||||
@ -1480,7 +1456,7 @@ static void WallyHandleIntroTrainerBallThrow(void)
|
||||
gTasks[taskId].data[0] = gActiveBattler;
|
||||
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
|
||||
gTasks[gUnknown_020244B4[gActiveBattler]].func = sub_8073C30;
|
||||
gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
|
||||
|
||||
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
|
||||
gBattlerControllerFuncs[gActiveBattler] = nullsub_21;
|
||||
@ -1541,7 +1517,7 @@ static void WallyHandleDrawPartyStatusSummary(void)
|
||||
else
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
|
||||
gUnknown_020244B4[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
|
||||
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
|
||||
WallyBufferExecCompleted();
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,37 +12,13 @@
|
||||
#include "constants/abilities.h"
|
||||
#include "battle_message.h"
|
||||
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern void (*gBattleMainFunc)(void);
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern u8 gBattlerPositions[MAX_BATTLERS_COUNT];
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlersCount;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattleBuffersTransferData[0x100];
|
||||
extern u8 gUnknown_0202428C;
|
||||
extern u32 gUnknown_02022FF4;
|
||||
extern u8 gUnknown_0203C7B4;
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBuffersTransferData[0x100];
|
||||
extern u8 gUnknown_02022D08;
|
||||
extern u8 gUnknown_02022D09;
|
||||
extern u8 gUnknown_02022D0A;
|
||||
extern u8 gBattlerAttacker;
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u8 gEffectBank;
|
||||
extern u16 gBattleWeather;
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern u16 gCurrentMove;
|
||||
extern u16 gChosenMove;
|
||||
extern u16 gLastUsedItem;
|
||||
extern u8 gBattleOutcome;
|
||||
extern u8 gLastUsedAbility;
|
||||
extern u8 gStringBattler;
|
||||
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
|
||||
@ -757,7 +733,7 @@ void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data)
|
||||
gLinkBattleSendBuffer[gTasks[gUnknown_02022D08].data[14] + LINK_BUFF_SIZE_LO] = alignedSize;
|
||||
gLinkBattleSendBuffer[gTasks[gUnknown_02022D08].data[14] + LINK_BUFF_SIZE_HI] = (alignedSize & 0x0000FF00) >> 8;
|
||||
gLinkBattleSendBuffer[gTasks[gUnknown_02022D08].data[14] + LINK_BUFF_ABSENT_BANK_FLAGS] = gAbsentBattlerFlags;
|
||||
gLinkBattleSendBuffer[gTasks[gUnknown_02022D08].data[14] + LINK_BUFF_EFFECT_BANK] = gEffectBank;
|
||||
gLinkBattleSendBuffer[gTasks[gUnknown_02022D08].data[14] + LINK_BUFF_EFFECT_BANK] = gEffectBattler;
|
||||
|
||||
for (i = 0; i < size; i++)
|
||||
gLinkBattleSendBuffer[gTasks[gUnknown_02022D08].data[14] + LINK_BUFF_DATA + i] = data[i];
|
||||
@ -923,7 +899,7 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
|
||||
gBattlerAttacker = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 2];
|
||||
gBattlerTarget = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 3];
|
||||
gAbsentBattlerFlags = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 6];
|
||||
gEffectBank = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 7];
|
||||
gEffectBattler = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 7];
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
@ -1126,7 +1102,7 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
|
||||
stringInfo->scrActive = gBattleScripting.battler;
|
||||
stringInfo->unk1605E = gBattleStruct->field_52;
|
||||
stringInfo->hpScale = gBattleStruct->hpScale;
|
||||
stringInfo->StringBank = gStringBattler;
|
||||
stringInfo->StringBank = gPotentialItemEffectBattler;
|
||||
stringInfo->moveType = gBattleMoves[gCurrentMove].type;
|
||||
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
|
||||
@ -22,18 +22,8 @@
|
||||
#include "blend_palette.h"
|
||||
#include "contest.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/rgb.h"
|
||||
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlersCount;
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlerPositions[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE1;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE2;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
@ -68,7 +58,7 @@ extern const u8 gBlankGfxCompressed[];
|
||||
extern const u16 gBattleInterface_BallStatusBarPal[];
|
||||
extern const u16 gBattleInterface_BallDisplayPal[];
|
||||
|
||||
extern u8 sub_80688F8(u8, u8 bank);
|
||||
extern u8 sub_80688F8(u8, u8 battlerId);
|
||||
extern u8 pokemon_order_func(u8); // party menu
|
||||
extern void sub_81B8C68(void);
|
||||
|
||||
@ -366,7 +356,7 @@ void sub_805D770(struct Sprite *sprite, bool8 arg1)
|
||||
|
||||
void sub_805D7AC(struct Sprite *sprite)
|
||||
{
|
||||
if (!(gUnknown_020243FC & 1))
|
||||
if (!(gIntroSlideFlags & 1))
|
||||
{
|
||||
sprite->pos2.x += sprite->data[0];
|
||||
if (sprite->pos2.x == 0)
|
||||
@ -421,7 +411,7 @@ void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status)
|
||||
}
|
||||
}
|
||||
|
||||
#define tBank data[0]
|
||||
#define tBattlerId data[0]
|
||||
|
||||
bool8 TryHandleLaunchBattleTableAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tableId, u16 argument)
|
||||
{
|
||||
@ -451,8 +441,8 @@ bool8 TryHandleLaunchBattleTableAnimation(u8 activeBank, u8 atkBank, u8 defBank,
|
||||
gBattleSpritesDataPtr->animationData->animArg = argument;
|
||||
LaunchBattleAnimation(gBattleAnims_VariousTable, tableId, FALSE);
|
||||
taskId = CreateTask(Task_ClearBitWhenBattleTableAnimDone, 10);
|
||||
gTasks[taskId].tBank = activeBank;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBank].animFromTableActive = 1;
|
||||
gTasks[taskId].tBattlerId = activeBank;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].animFromTableActive = 1;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
@ -462,12 +452,12 @@ static void Task_ClearBitWhenBattleTableAnimDone(u8 taskId)
|
||||
gAnimScriptCallback();
|
||||
if (!gAnimScriptActive)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBank].animFromTableActive = 0;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].animFromTableActive = 0;
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
#undef tBank
|
||||
#undef tBattlerId
|
||||
|
||||
static bool8 ShouldAnimBeDoneRegardlessOfSubsitute(u8 animId)
|
||||
{
|
||||
@ -485,7 +475,7 @@ static bool8 ShouldAnimBeDoneRegardlessOfSubsitute(u8 animId)
|
||||
}
|
||||
}
|
||||
|
||||
#define tBank data[0]
|
||||
#define tBattlerId data[0]
|
||||
|
||||
void InitAndLaunchSpecialAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tableId)
|
||||
{
|
||||
@ -495,8 +485,8 @@ void InitAndLaunchSpecialAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tab
|
||||
gBattleAnimTarget = defBank;
|
||||
LaunchBattleAnimation(gBattleAnims_Special, tableId, FALSE);
|
||||
taskId = CreateTask(Task_ClearBitWhenSpecialAnimDone, 10);
|
||||
gTasks[taskId].tBank = activeBank;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBank].specialAnimActive = 1;
|
||||
gTasks[taskId].tBattlerId = activeBank;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].specialAnimActive = 1;
|
||||
}
|
||||
|
||||
static void Task_ClearBitWhenSpecialAnimDone(u8 taskId)
|
||||
@ -504,12 +494,12 @@ static void Task_ClearBitWhenSpecialAnimDone(u8 taskId)
|
||||
gAnimScriptCallback();
|
||||
if (!gAnimScriptActive)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBank].specialAnimActive = 0;
|
||||
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].specialAnimActive = 0;
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
#undef tBank
|
||||
#undef tBattlerId
|
||||
|
||||
// great function to include newly added moves that don't have animation yet
|
||||
bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn)
|
||||
@ -517,13 +507,13 @@ bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 mplay_80342A4(u8 bank)
|
||||
bool8 mplay_80342A4(u8 battlerId)
|
||||
{
|
||||
u8 zero = 0;
|
||||
|
||||
if (IsSEPlaying())
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[bank].field_8++;
|
||||
gBattleSpritesDataPtr->healthBoxesData[battlerId].field_8++;
|
||||
if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_8 < 30)
|
||||
return TRUE;
|
||||
|
||||
@ -532,14 +522,14 @@ bool8 mplay_80342A4(u8 bank)
|
||||
}
|
||||
if (zero == 0)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[bank].field_8 = 0;
|
||||
gBattleSpritesDataPtr->healthBoxesData[battlerId].field_8 = 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 bank)
|
||||
void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
|
||||
{
|
||||
u32 monsPersonality, currentPersonality, otId;
|
||||
u16 species;
|
||||
@ -549,50 +539,50 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 bank)
|
||||
|
||||
monsPersonality = GetMonData(mon, MON_DATA_PERSONALITY);
|
||||
|
||||
if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies == SPECIES_NONE)
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
|
||||
{
|
||||
species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
currentPersonality = monsPersonality;
|
||||
}
|
||||
else
|
||||
{
|
||||
species = gBattleSpritesDataPtr->battlerData[bank].transformSpecies;
|
||||
currentPersonality = gTransformedPersonalities[bank];
|
||||
species = gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies;
|
||||
currentPersonality = gTransformedPersonalities[battlerId];
|
||||
}
|
||||
|
||||
otId = GetMonData(mon, MON_DATA_OT_ID);
|
||||
position = GetBattlerPosition(bank);
|
||||
position = GetBattlerPosition(battlerId);
|
||||
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species],
|
||||
gMonSpritesGfxPtr->sprites[position],
|
||||
species, currentPersonality);
|
||||
|
||||
paletteOffset = 0x100 + bank * 16;
|
||||
paletteOffset = 0x100 + battlerId * 16;
|
||||
|
||||
if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies == SPECIES_NONE)
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
|
||||
lzPaletteData = GetMonFrontSpritePal(mon);
|
||||
else
|
||||
lzPaletteData = GetFrontSpritePalFromSpeciesAndPersonality(species, otId, monsPersonality);
|
||||
|
||||
LZDecompressWram(lzPaletteData, gDecompressionBuffer);
|
||||
LoadPalette(gDecompressionBuffer, paletteOffset, 0x20);
|
||||
LoadPalette(gDecompressionBuffer, 0x80 + bank * 16, 0x20);
|
||||
LoadPalette(gDecompressionBuffer, 0x80 + battlerId * 16, 0x20);
|
||||
|
||||
if (species == SPECIES_CASTFORM)
|
||||
{
|
||||
paletteOffset = 0x100 + bank * 16;
|
||||
paletteOffset = 0x100 + battlerId * 16;
|
||||
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[0]);
|
||||
LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[bank]], paletteOffset, 0x20);
|
||||
LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerId]], paletteOffset, 0x20);
|
||||
}
|
||||
|
||||
// transform's pink color
|
||||
if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies != SPECIES_NONE)
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
|
||||
{
|
||||
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
|
||||
BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
|
||||
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
|
||||
}
|
||||
}
|
||||
|
||||
void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 bank)
|
||||
void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
|
||||
{
|
||||
u32 monsPersonality, currentPersonality, otId;
|
||||
u16 species;
|
||||
@ -602,21 +592,21 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 bank)
|
||||
|
||||
monsPersonality = GetMonData(mon, MON_DATA_PERSONALITY);
|
||||
|
||||
if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies == SPECIES_NONE)
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
|
||||
{
|
||||
species = GetMonData(mon, MON_DATA_SPECIES);
|
||||
currentPersonality = monsPersonality;
|
||||
}
|
||||
else
|
||||
{
|
||||
species = gBattleSpritesDataPtr->battlerData[bank].transformSpecies;
|
||||
currentPersonality = gTransformedPersonalities[bank];
|
||||
species = gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies;
|
||||
currentPersonality = gTransformedPersonalities[battlerId];
|
||||
}
|
||||
|
||||
otId = GetMonData(mon, MON_DATA_OT_ID);
|
||||
position = GetBattlerPosition(bank);
|
||||
position = GetBattlerPosition(battlerId);
|
||||
|
||||
if (sub_80688F8(1, bank) == 1 || gBattleSpritesDataPtr->battlerData[bank].transformSpecies != SPECIES_NONE)
|
||||
if (sub_80688F8(1, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
|
||||
{
|
||||
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species],
|
||||
gMonSpritesGfxPtr->sprites[position],
|
||||
@ -629,28 +619,28 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 bank)
|
||||
species, currentPersonality);
|
||||
}
|
||||
|
||||
paletteOffset = 0x100 + bank * 16;
|
||||
paletteOffset = 0x100 + battlerId * 16;
|
||||
|
||||
if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies == SPECIES_NONE)
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
|
||||
lzPaletteData = GetMonFrontSpritePal(mon);
|
||||
else
|
||||
lzPaletteData = GetFrontSpritePalFromSpeciesAndPersonality(species, otId, monsPersonality);
|
||||
|
||||
LZDecompressWram(lzPaletteData, gDecompressionBuffer);
|
||||
LoadPalette(gDecompressionBuffer, paletteOffset, 0x20);
|
||||
LoadPalette(gDecompressionBuffer, 0x80 + bank * 16, 0x20);
|
||||
LoadPalette(gDecompressionBuffer, 0x80 + battlerId * 16, 0x20);
|
||||
|
||||
if (species == SPECIES_CASTFORM)
|
||||
{
|
||||
paletteOffset = 0x100 + bank * 16;
|
||||
paletteOffset = 0x100 + battlerId * 16;
|
||||
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[0]);
|
||||
LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[bank]], paletteOffset, 0x20);
|
||||
LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerId]], paletteOffset, 0x20);
|
||||
}
|
||||
|
||||
// transform's pink color
|
||||
if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies != SPECIES_NONE)
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
|
||||
{
|
||||
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
|
||||
BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
|
||||
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
|
||||
}
|
||||
}
|
||||
@ -663,23 +653,23 @@ void nullsub_24(u16 species)
|
||||
{
|
||||
}
|
||||
|
||||
void DecompressTrainerFrontPic(u16 frontPicId, u8 bank)
|
||||
void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId)
|
||||
{
|
||||
u8 position = GetBattlerPosition(bank);
|
||||
u8 position = GetBattlerPosition(battlerId);
|
||||
DecompressPicFromTable_2(&gTrainerFrontPicTable[frontPicId],
|
||||
gMonSpritesGfxPtr->sprites[position],
|
||||
SPECIES_NONE);
|
||||
LoadCompressedObjectPalette(&gTrainerFrontPicPaletteTable[frontPicId]);
|
||||
}
|
||||
|
||||
void DecompressTrainerBackPic(u16 backPicId, u8 bank)
|
||||
void DecompressTrainerBackPic(u16 backPicId, u8 battlerId)
|
||||
{
|
||||
u8 position = GetBattlerPosition(bank);
|
||||
u8 position = GetBattlerPosition(battlerId);
|
||||
DecompressPicFromTable_2(&gTrainerBackPicTable[backPicId],
|
||||
gMonSpritesGfxPtr->sprites[position],
|
||||
SPECIES_NONE);
|
||||
LoadCompressedPalette(gTrainerBackPicPaletteTable[backPicId].data,
|
||||
0x100 + 16 * bank, 0x20);
|
||||
0x100 + 16 * battlerId, 0x20);
|
||||
}
|
||||
|
||||
void nullsub_25(u8 arg0)
|
||||
@ -776,7 +766,7 @@ void LoadBattleBarGfx(u8 arg0)
|
||||
LZDecompressWram(gUnknown_08C093F0, gMonSpritesGfxPtr->barFontGfx);
|
||||
}
|
||||
|
||||
bool8 BattleInitAllSprites(u8 *state1, u8 *bank)
|
||||
bool8 BattleInitAllSprites(u8 *state1, u8 *battlerId)
|
||||
{
|
||||
bool8 retVal = FALSE;
|
||||
|
||||
@ -787,13 +777,13 @@ bool8 BattleInitAllSprites(u8 *state1, u8 *bank)
|
||||
(*state1)++;
|
||||
break;
|
||||
case 1:
|
||||
if (!BattleLoadAllHealthBoxesGfx(*bank))
|
||||
if (!BattleLoadAllHealthBoxesGfx(*battlerId))
|
||||
{
|
||||
(*bank)++;
|
||||
(*battlerId)++;
|
||||
}
|
||||
else
|
||||
{
|
||||
*bank = 0;
|
||||
*battlerId = 0;
|
||||
(*state1)++;
|
||||
}
|
||||
break;
|
||||
@ -801,47 +791,47 @@ bool8 BattleInitAllSprites(u8 *state1, u8 *bank)
|
||||
(*state1)++;
|
||||
break;
|
||||
case 3:
|
||||
if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) && *bank == 0)
|
||||
gHealthboxSpriteIds[*bank] = CreateSafariPlayerHealthboxSprites();
|
||||
if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) && *battlerId == 0)
|
||||
gHealthboxSpriteIds[*battlerId] = CreateSafariPlayerHealthboxSprites();
|
||||
else
|
||||
gHealthboxSpriteIds[*bank] = CreateBattlerHealthboxSprites(*bank);
|
||||
gHealthboxSpriteIds[*battlerId] = CreateBattlerHealthboxSprites(*battlerId);
|
||||
|
||||
(*bank)++;
|
||||
if (*bank == gBattlersCount)
|
||||
(*battlerId)++;
|
||||
if (*battlerId == gBattlersCount)
|
||||
{
|
||||
*bank = 0;
|
||||
*battlerId = 0;
|
||||
(*state1)++;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
InitBattlerHealthboxCoords(*bank);
|
||||
if (gBattlerPositions[*bank] <= 1)
|
||||
DummyBattleInterfaceFunc(gHealthboxSpriteIds[*bank], FALSE);
|
||||
InitBattlerHealthboxCoords(*battlerId);
|
||||
if (gBattlerPositions[*battlerId] <= 1)
|
||||
DummyBattleInterfaceFunc(gHealthboxSpriteIds[*battlerId], FALSE);
|
||||
else
|
||||
DummyBattleInterfaceFunc(gHealthboxSpriteIds[*bank], TRUE);
|
||||
DummyBattleInterfaceFunc(gHealthboxSpriteIds[*battlerId], TRUE);
|
||||
|
||||
(*bank)++;
|
||||
if (*bank == gBattlersCount)
|
||||
(*battlerId)++;
|
||||
if (*battlerId == gBattlersCount)
|
||||
{
|
||||
*bank = 0;
|
||||
*battlerId = 0;
|
||||
(*state1)++;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (GetBattlerSide(*bank) == B_SIDE_PLAYER)
|
||||
if (GetBattlerSide(*battlerId) == B_SIDE_PLAYER)
|
||||
{
|
||||
if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI))
|
||||
UpdateHealthboxAttribute(gHealthboxSpriteIds[*bank], &gPlayerParty[gBattlerPartyIndexes[*bank]], HEALTHBOX_ALL);
|
||||
UpdateHealthboxAttribute(gHealthboxSpriteIds[*battlerId], &gPlayerParty[gBattlerPartyIndexes[*battlerId]], HEALTHBOX_ALL);
|
||||
}
|
||||
else
|
||||
{
|
||||
UpdateHealthboxAttribute(gHealthboxSpriteIds[*bank], &gEnemyParty[gBattlerPartyIndexes[*bank]], HEALTHBOX_ALL);
|
||||
UpdateHealthboxAttribute(gHealthboxSpriteIds[*battlerId], &gEnemyParty[gBattlerPartyIndexes[*battlerId]], HEALTHBOX_ALL);
|
||||
}
|
||||
SetHealthboxSpriteInvisible(gHealthboxSpriteIds[*bank]);
|
||||
(*bank)++;
|
||||
if (*bank == gBattlersCount)
|
||||
SetHealthboxSpriteInvisible(gHealthboxSpriteIds[*battlerId]);
|
||||
(*battlerId)++;
|
||||
if (*battlerId == gBattlersCount)
|
||||
{
|
||||
*bank = 0;
|
||||
*battlerId = 0;
|
||||
(*state1)++;
|
||||
}
|
||||
break;
|
||||
@ -875,9 +865,9 @@ void CopyAllBattleSpritesInvisibilities(void)
|
||||
gBattleSpritesDataPtr->battlerData[i].invisible = gSprites[gBattlerSpriteIds[i]].invisible;
|
||||
}
|
||||
|
||||
void CopyBattleSpriteInvisibility(u8 bank)
|
||||
void CopyBattleSpriteInvisibility(u8 battlerId)
|
||||
{
|
||||
gBattleSpritesDataPtr->battlerData[bank].invisible = gSprites[gBattlerSpriteIds[bank]].invisible;
|
||||
gBattleSpritesDataPtr->battlerData[battlerId].invisible = gSprites[gBattlerSpriteIds[battlerId]].invisible;
|
||||
}
|
||||
|
||||
void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform)
|
||||
@ -896,7 +886,7 @@ void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform)
|
||||
gBattleMonForms[bankAtk] = gBattleSpritesDataPtr->animationData->animArg;
|
||||
if (gBattleSpritesDataPtr->battlerData[bankAtk].transformSpecies != SPECIES_NONE)
|
||||
{
|
||||
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
|
||||
BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
|
||||
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
|
||||
}
|
||||
gSprites[gBattlerSpriteIds[bankAtk]].pos1.y = GetBattlerSpriteDefault_Y(bankAtk);
|
||||
@ -965,7 +955,7 @@ void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform)
|
||||
LoadPalette(gBattleStruct->castformPalette[0] + gBattleMonForms[bankDef] * 16, paletteOffset, 32);
|
||||
}
|
||||
|
||||
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
|
||||
BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
|
||||
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
|
||||
|
||||
if (!IsContest())
|
||||
@ -979,7 +969,7 @@ void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform)
|
||||
}
|
||||
}
|
||||
|
||||
void BattleLoadSubstituteOrMonSpriteGfx(u8 bank, bool8 loadMonSprite)
|
||||
void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite)
|
||||
{
|
||||
u8 position;
|
||||
s32 i;
|
||||
@ -991,17 +981,17 @@ void BattleLoadSubstituteOrMonSpriteGfx(u8 bank, bool8 loadMonSprite)
|
||||
if (IsContest())
|
||||
position = 0;
|
||||
else
|
||||
position = GetBattlerPosition(bank);
|
||||
position = GetBattlerPosition(battlerId);
|
||||
|
||||
if (IsContest())
|
||||
LZDecompressVram(gSubstituteDollTilemap, gMonSpritesGfxPtr->sprites[position]);
|
||||
else if (GetBattlerSide(bank) != B_SIDE_PLAYER)
|
||||
else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
|
||||
LZDecompressVram(gSubstituteDollGfx, gMonSpritesGfxPtr->sprites[position]);
|
||||
else
|
||||
LZDecompressVram(gSubstituteDollTilemap, gMonSpritesGfxPtr->sprites[position]);
|
||||
|
||||
i = 1;
|
||||
var = bank * 16;
|
||||
var = battlerId * 16;
|
||||
substitutePal = gSubstituteDollPal;
|
||||
for (; i < 4; i++)
|
||||
{
|
||||
@ -1018,59 +1008,59 @@ void BattleLoadSubstituteOrMonSpriteGfx(u8 bank, bool8 loadMonSprite)
|
||||
{
|
||||
if (!IsContest())
|
||||
{
|
||||
if (GetBattlerSide(bank) != B_SIDE_PLAYER)
|
||||
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[bank]], bank);
|
||||
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
|
||||
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
|
||||
else
|
||||
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[bank]], bank);
|
||||
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LoadBattleMonGfxAndAnimate(u8 bank, bool8 loadMonSprite, u8 spriteId)
|
||||
void LoadBattleMonGfxAndAnimate(u8 battlerId, bool8 loadMonSprite, u8 spriteId)
|
||||
{
|
||||
BattleLoadSubstituteOrMonSpriteGfx(bank, loadMonSprite);
|
||||
StartSpriteAnim(&gSprites[spriteId], gBattleMonForms[bank]);
|
||||
BattleLoadSubstituteOrMonSpriteGfx(battlerId, loadMonSprite);
|
||||
StartSpriteAnim(&gSprites[spriteId], gBattleMonForms[battlerId]);
|
||||
|
||||
if (!loadMonSprite)
|
||||
gSprites[spriteId].pos1.y = GetSubstituteSpriteDefault_Y(bank);
|
||||
gSprites[spriteId].pos1.y = GetSubstituteSpriteDefault_Y(battlerId);
|
||||
else
|
||||
gSprites[spriteId].pos1.y = GetBattlerSpriteDefault_Y(bank);
|
||||
gSprites[spriteId].pos1.y = GetBattlerSpriteDefault_Y(battlerId);
|
||||
}
|
||||
|
||||
void TrySetBehindSubstituteSpriteBit(u8 bank, u16 move)
|
||||
void TrySetBehindSubstituteSpriteBit(u8 battlerId, u16 move)
|
||||
{
|
||||
if (move == MOVE_SUBSTITUTE)
|
||||
gBattleSpritesDataPtr->battlerData[bank].behindSubstitute = 1;
|
||||
gBattleSpritesDataPtr->battlerData[battlerId].behindSubstitute = 1;
|
||||
}
|
||||
|
||||
void ClearBehindSubstituteBit(u8 bank)
|
||||
void ClearBehindSubstituteBit(u8 battlerId)
|
||||
{
|
||||
gBattleSpritesDataPtr->battlerData[bank].behindSubstitute = 0;
|
||||
gBattleSpritesDataPtr->battlerData[battlerId].behindSubstitute = 0;
|
||||
}
|
||||
|
||||
void HandleLowHpMusicChange(struct Pokemon *mon, u8 bank)
|
||||
void HandleLowHpMusicChange(struct Pokemon *mon, u8 battlerId)
|
||||
{
|
||||
u16 hp = GetMonData(mon, MON_DATA_HP);
|
||||
u16 maxHP = GetMonData(mon, MON_DATA_MAX_HP);
|
||||
|
||||
if (GetHPBarLevel(hp, maxHP) == HP_BAR_RED)
|
||||
{
|
||||
if (!gBattleSpritesDataPtr->battlerData[bank].lowHpSong)
|
||||
if (!gBattleSpritesDataPtr->battlerData[battlerId].lowHpSong)
|
||||
{
|
||||
if (!gBattleSpritesDataPtr->battlerData[bank ^ BIT_FLANK].lowHpSong)
|
||||
if (!gBattleSpritesDataPtr->battlerData[battlerId ^ BIT_FLANK].lowHpSong)
|
||||
PlaySE(SE_HINSI);
|
||||
gBattleSpritesDataPtr->battlerData[bank].lowHpSong = 1;
|
||||
gBattleSpritesDataPtr->battlerData[battlerId].lowHpSong = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleSpritesDataPtr->battlerData[bank].lowHpSong = 0;
|
||||
gBattleSpritesDataPtr->battlerData[battlerId].lowHpSong = 0;
|
||||
if (!IsDoubleBattle())
|
||||
{
|
||||
m4aSongNumStop(SE_HINSI);
|
||||
return;
|
||||
}
|
||||
if (IsDoubleBattle() && !gBattleSpritesDataPtr->battlerData[bank ^ BIT_FLANK].lowHpSong)
|
||||
if (IsDoubleBattle() && !gBattleSpritesDataPtr->battlerData[battlerId ^ BIT_FLANK].lowHpSong)
|
||||
{
|
||||
m4aSongNumStop(SE_HINSI);
|
||||
return;
|
||||
@ -1135,44 +1125,44 @@ void sub_805EB9C(u8 affineMode)
|
||||
}
|
||||
}
|
||||
|
||||
#define tBank data[0]
|
||||
#define tBattlerId data[0]
|
||||
|
||||
void LoadAndCreateEnemyShadowSprites(void)
|
||||
{
|
||||
u8 bank;
|
||||
u8 battlerId;
|
||||
|
||||
LoadCompressedObjectPic(&gSpriteSheet_EnemyShadow);
|
||||
|
||||
bank = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
|
||||
gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(bank, 0), GetBattlerSpriteCoord(bank, 1) + 29, 0xC8);
|
||||
gSprites[gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId].data[0] = bank;
|
||||
battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
|
||||
gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, 0), GetBattlerSpriteCoord(battlerId, 1) + 29, 0xC8);
|
||||
gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].data[0] = battlerId;
|
||||
|
||||
if (IsDoubleBattle())
|
||||
{
|
||||
bank = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
|
||||
gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(bank, 0), GetBattlerSpriteCoord(bank, 1) + 29, 0xC8);
|
||||
gSprites[gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId].data[0] = bank;
|
||||
battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
|
||||
gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battlerId, 0), GetBattlerSpriteCoord(battlerId, 1) + 29, 0xC8);
|
||||
gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].data[0] = battlerId;
|
||||
}
|
||||
}
|
||||
|
||||
void SpriteCB_EnemyShadow(struct Sprite *shadowSprite)
|
||||
{
|
||||
bool8 invisible = FALSE;
|
||||
u8 bank = shadowSprite->tBank;
|
||||
struct Sprite *bankSprite = &gSprites[gBattlerSpriteIds[bank]];
|
||||
u8 battlerId = shadowSprite->tBattlerId;
|
||||
struct Sprite *bankSprite = &gSprites[gBattlerSpriteIds[battlerId]];
|
||||
|
||||
if (!bankSprite->inUse || !IsBattlerSpritePresent(bank))
|
||||
if (!bankSprite->inUse || !IsBattlerSpritePresent(battlerId))
|
||||
{
|
||||
shadowSprite->callback = SpriteCB_SetInvisible;
|
||||
return;
|
||||
}
|
||||
if (gAnimScriptActive || bankSprite->invisible)
|
||||
invisible = TRUE;
|
||||
else if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies != SPECIES_NONE
|
||||
&& gEnemyMonElevation[gBattleSpritesDataPtr->battlerData[bank].transformSpecies] == 0)
|
||||
else if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE
|
||||
&& gEnemyMonElevation[gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies] == 0)
|
||||
invisible = TRUE;
|
||||
|
||||
if (gBattleSpritesDataPtr->battlerData[bank].behindSubstitute)
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].behindSubstitute)
|
||||
invisible = TRUE;
|
||||
|
||||
shadowSprite->pos1.x = bankSprite->pos1.x;
|
||||
@ -1180,31 +1170,31 @@ void SpriteCB_EnemyShadow(struct Sprite *shadowSprite)
|
||||
shadowSprite->invisible = invisible;
|
||||
}
|
||||
|
||||
#undef tBank
|
||||
#undef tBattlerId
|
||||
|
||||
void SpriteCB_SetInvisible(struct Sprite *sprite)
|
||||
{
|
||||
sprite->invisible = 1;
|
||||
}
|
||||
|
||||
void SetBattlerShadowSpriteCallback(u8 bank, u16 species)
|
||||
void SetBattlerShadowSpriteCallback(u8 battlerId, u16 species)
|
||||
{
|
||||
// The player's shadow is never seen
|
||||
if (GetBattlerSide(bank) == B_SIDE_PLAYER)
|
||||
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
|
||||
return;
|
||||
|
||||
if (gBattleSpritesDataPtr->battlerData[bank].transformSpecies != SPECIES_NONE)
|
||||
species = gBattleSpritesDataPtr->battlerData[bank].transformSpecies;
|
||||
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
|
||||
species = gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies;
|
||||
|
||||
if (gEnemyMonElevation[species] != 0)
|
||||
gSprites[gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId].callback = SpriteCB_EnemyShadow;
|
||||
gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].callback = SpriteCB_EnemyShadow;
|
||||
else
|
||||
gSprites[gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId].callback = SpriteCB_SetInvisible;
|
||||
gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].callback = SpriteCB_SetInvisible;
|
||||
}
|
||||
|
||||
void HideBattlerShadowSprite(u8 bank)
|
||||
void HideBattlerShadowSprite(u8 battlerId)
|
||||
{
|
||||
gSprites[gBattleSpritesDataPtr->healthBoxesData[bank].shadowSpriteId].callback = SpriteCB_SetInvisible;
|
||||
gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].callback = SpriteCB_SetInvisible;
|
||||
}
|
||||
|
||||
void sub_805EF14(void)
|
||||
@ -1230,12 +1220,12 @@ void sub_805EF14(void)
|
||||
}
|
||||
}
|
||||
|
||||
void ClearTemporarySpeciesSpriteData(u8 bank, bool8 dontClearSubstitute)
|
||||
void ClearTemporarySpeciesSpriteData(u8 battlerId, bool8 dontClearSubstitute)
|
||||
{
|
||||
gBattleSpritesDataPtr->battlerData[bank].transformSpecies = SPECIES_NONE;
|
||||
gBattleMonForms[bank] = 0;
|
||||
gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies = SPECIES_NONE;
|
||||
gBattleMonForms[battlerId] = 0;
|
||||
if (!dontClearSubstitute)
|
||||
ClearBehindSubstituteBit(bank);
|
||||
ClearBehindSubstituteBit(battlerId);
|
||||
}
|
||||
|
||||
void AllocateMonSpritesGfx(void)
|
||||
|
||||
@ -153,11 +153,6 @@ enum
|
||||
HEALTHBOX_GFX_117,
|
||||
};
|
||||
|
||||
extern u8 gBattlerPositions[MAX_BATTLERS_COUNT];
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlersCount;
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
|
||||
extern const u8 * const gNatureNamePointers[];
|
||||
extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1];
|
||||
|
||||
@ -177,9 +172,6 @@ extern const u16 gBattleInterface_BallStatusBarPal[];
|
||||
extern const u16 gBattleInterface_BallDisplayPal[];
|
||||
extern const u8 gHealthboxElementsGfxTable[][32];
|
||||
|
||||
// functions
|
||||
extern void LoadBattleBarGfx(u8 arg0);
|
||||
|
||||
// this file's functions
|
||||
|
||||
static const u8 *GetHealthboxElementGfxPtr(u8 elementId);
|
||||
@ -1536,7 +1528,7 @@ u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 ar
|
||||
gSprites[barSpriteId].pos1.x += 96;
|
||||
}
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
ballIconSpritesIds[i] = CreateSpriteAtEnd(&sStatusSummaryBallsSpriteTemplates[isOpponent], bar_X, bar_Y - 4, 9);
|
||||
|
||||
|
||||
@ -7,6 +7,7 @@
|
||||
#include "scanline_effect.h"
|
||||
#include "battle_setup.h"
|
||||
#include "battle_scripts.h"
|
||||
#include "battle_interface.h"
|
||||
#include "pokemon.h"
|
||||
#include "palette.h"
|
||||
#include "task.h"
|
||||
@ -43,8 +44,11 @@
|
||||
#include "roamer.h"
|
||||
#include "tv.h"
|
||||
#include "safari_zone.h"
|
||||
#include "battle_string_ids.h"
|
||||
#include "constants/battle_string_ids.h"
|
||||
#include "data2.h"
|
||||
#include "decompress.h"
|
||||
#include "international_string_util.h"
|
||||
#include "pokeball.h"
|
||||
|
||||
struct UnknownPokemonStruct2
|
||||
{
|
||||
@ -60,8 +64,6 @@ struct UnknownPokemonStruct2
|
||||
/*0x1D*/ u8 language;
|
||||
};
|
||||
|
||||
extern u8 gBattleCommunication[];
|
||||
extern u8 gBattleTerrain;
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
extern u16 gBattle_BG1_X;
|
||||
@ -70,77 +72,13 @@ extern u16 gBattle_BG2_X;
|
||||
extern u16 gBattle_BG2_Y;
|
||||
extern u16 gBattle_BG3_X;
|
||||
extern u16 gBattle_BG3_Y;
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern u16 gBattle_WIN0H;
|
||||
extern u16 gBattle_WIN0V;
|
||||
extern u16 gBattle_WIN1H;
|
||||
extern u16 gBattle_WIN1V;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u16 gTrainerBattleOpponent_B;
|
||||
extern struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT];
|
||||
extern void (*gPreBattleCallback1)(void);
|
||||
extern void (*gBattleMainFunc)(void);
|
||||
extern void (*gCB2_AfterEvolution)(void);
|
||||
extern struct UnknownPokemonStruct2 gUnknown_02022FF8[3]; // what is it used for?
|
||||
extern struct UnknownPokemonStruct2* gUnknown_02023058; // what is it used for?
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE1;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE2;
|
||||
extern u8 gDecompressionBuffer[];
|
||||
extern u16 gUnknown_020243FC;
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gStringBattler;
|
||||
extern u32 gUnknown_02022F88;
|
||||
extern u32 gHitMarker;
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u16 gPaydayMoney;
|
||||
extern u16 gBattleWeather;
|
||||
extern u16 gPauseCounterBattle;
|
||||
extern u16 gRandomTurnNumber;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlersCount;
|
||||
extern u8 gBattlerAttacker;
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gLeveledUpInBattle;
|
||||
extern u8 gAbsentBattlerFlags;
|
||||
extern u32 gBattleControllerExecFlags;
|
||||
extern u8 gMultiHitCounter;
|
||||
extern u8 gMoveResultFlags;
|
||||
extern s32 gBattleMoveDamage;
|
||||
extern const u8* gPalaceSelectionBattleScripts[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastMoves[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastLandedMoves[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastHitByType[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLastResultingMoves[MAX_BATTLERS_COUNT];
|
||||
extern u16 gLockedMoves[MAX_BATTLERS_COUNT];
|
||||
extern u8 gLastHitBy[MAX_BATTLERS_COUNT];
|
||||
extern u8 gUnknown_02024284[MAX_BATTLERS_COUNT];
|
||||
extern u32 gStatuses3[MAX_BATTLERS_COUNT];
|
||||
extern u16 gSideStatuses[2];
|
||||
extern u16 gCurrentMove;
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleTurnOrder[MAX_BATTLERS_COUNT];
|
||||
extern u8 gChosenActionByBattler[MAX_BATTLERS_COUNT];
|
||||
extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT];
|
||||
extern u8 gCurrentActionFuncId;
|
||||
extern u8 gLastUsedAbility;
|
||||
extern u8 gUnknown_0203CF00[];
|
||||
extern const u8* gSelectionBattleScripts[MAX_BATTLERS_COUNT];
|
||||
extern const u8* gBattlescriptCurrInstr;
|
||||
extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT];
|
||||
extern u8 gCurrentTurnActionNumber;
|
||||
extern u16 gDynamicBasePower;
|
||||
extern u8 gCritMultiplier;
|
||||
extern u8 gCurrMovePos;
|
||||
extern u8 gUnknown_020241E9;
|
||||
extern u16 gChosenMove;
|
||||
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
extern const u16 gBattleTextboxPalette[]; // battle textbox palette
|
||||
@ -172,20 +110,14 @@ extern const u8 gText_Confusion[];
|
||||
extern const u8 gText_Love[];
|
||||
|
||||
// functions
|
||||
extern void ScanlineEffect_Clear(void);
|
||||
extern void sub_80356D0(void);
|
||||
extern void GetFrontierTrainerName(u8* dst, u16 trainerId); // battle tower
|
||||
extern void sub_8166188(void); // battle tower, sets link battle mons level but why?
|
||||
extern void sub_8165B88(u8* dst, u16 trainerId); // battle tower, gets language
|
||||
extern void PadNameString(u8* dst, u8 arg2); //
|
||||
extern void sub_81B9150(void);
|
||||
extern void sub_800AC34(void);
|
||||
extern void sub_80B3AF8(u8 taskId); // cable club
|
||||
extern void sub_8076918(u8 bank);
|
||||
extern void SetHealthboxSpriteVisible(u8 healthoxSpriteId);
|
||||
extern void sub_81A56B4(void); // battle frontier 2
|
||||
extern u8 sub_81A9E28(void); // battle frontier 2
|
||||
extern void sub_81A56E8(u8 bank); // battle frontier 2
|
||||
extern void sub_81A56E8(u8 battlerId); // battle frontier 2
|
||||
extern void sub_81B8FB0(u8, u8); // party menu
|
||||
extern u8 pokemon_order_func(u8); // party menu
|
||||
extern bool8 InBattlePyramid(void);
|
||||
@ -233,7 +165,7 @@ static void BattleIntroPlayer1SendsOutMonAnimation(void);
|
||||
static void TryDoEventsBeforeFirstTurn(void);
|
||||
static void HandleTurnActionSelectionState(void);
|
||||
static void RunTurnActionsFunctions(void);
|
||||
static void SetActionsAndBanksTurnOrder(void);
|
||||
static void SetActionsAndBattlersTurnOrder(void);
|
||||
static void sub_803CDF8(void);
|
||||
static bool8 sub_803CDB8(void);
|
||||
static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void);
|
||||
@ -261,6 +193,113 @@ static void HandleAction_Action11(void);
|
||||
static void HandleAction_NothingIsFainted(void);
|
||||
static void HandleAction_ActionFinished(void);
|
||||
|
||||
// EWRAM vars
|
||||
EWRAM_DATA static u32 sUnusedUnknownArray[25] = {0};
|
||||
EWRAM_DATA u32 gBattleTypeFlags = 0;
|
||||
EWRAM_DATA u8 gBattleTerrain = 0;
|
||||
EWRAM_DATA u32 gUnknown_02022FF4 = 0;
|
||||
EWRAM_DATA struct UnknownPokemonStruct2 gUnknown_02022FF8[3] = {0}; // what is it used for?
|
||||
EWRAM_DATA struct UnknownPokemonStruct2* gUnknown_02023058 = NULL; // what is it used for?
|
||||
EWRAM_DATA u8 *gUnknown_0202305C = NULL;
|
||||
EWRAM_DATA u8 *gUnknown_02023060 = NULL;
|
||||
EWRAM_DATA u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200] = {0};
|
||||
EWRAM_DATA u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200] = {0};
|
||||
EWRAM_DATA u8 gActiveBattler = 0;
|
||||
EWRAM_DATA u32 gBattleControllerExecFlags = 0;
|
||||
EWRAM_DATA u8 gBattlersCount = 0;
|
||||
EWRAM_DATA u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gBattlerPositions[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gBattleTurnOrder[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gCurrentTurnActionNumber = 0;
|
||||
EWRAM_DATA u8 gCurrentActionFuncId = 0;
|
||||
EWRAM_DATA struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gCurrMovePos = 0;
|
||||
EWRAM_DATA u8 gChosenMovePos = 0;
|
||||
EWRAM_DATA u16 gCurrentMove = 0;
|
||||
EWRAM_DATA u16 gChosenMove = 0;
|
||||
EWRAM_DATA u16 gRandomMove = 0;
|
||||
EWRAM_DATA s32 gBattleMoveDamage = 0;
|
||||
EWRAM_DATA s32 gHpDealt = 0;
|
||||
EWRAM_DATA s32 gTakenDmg[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u16 gLastUsedItem = 0;
|
||||
EWRAM_DATA u8 gLastUsedAbility = 0;
|
||||
EWRAM_DATA u8 gBattlerAttacker = 0;
|
||||
EWRAM_DATA u8 gBattlerTarget = 0;
|
||||
EWRAM_DATA u8 gBattlerFainted = 0;
|
||||
EWRAM_DATA u8 gEffectBattler = 0;
|
||||
EWRAM_DATA u8 gPotentialItemEffectBattler = 0;
|
||||
EWRAM_DATA u8 gAbsentBattlerFlags = 0;
|
||||
EWRAM_DATA u8 gCritMultiplier = 0;
|
||||
EWRAM_DATA u8 gMultiHitCounter = 0;
|
||||
EWRAM_DATA const u8 *gBattlescriptCurrInstr = NULL;
|
||||
EWRAM_DATA u32 gUnusedBattleMainVar = 0;
|
||||
EWRAM_DATA u8 gChosenActionByBattler[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA const u8 *gSelectionBattleScripts[MAX_BATTLERS_COUNT] = {NULL};
|
||||
EWRAM_DATA const u8 *gPalaceSelectionBattleScripts[MAX_BATTLERS_COUNT] = {NULL};
|
||||
EWRAM_DATA u16 gLastPrintedMoves[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u16 gLastMoves[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u16 gLastLandedMoves[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u16 gLastHitByType[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u16 gLastResultingMoves[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u16 gLockedMoves[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gLastHitBy[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gMoveResultFlags = 0;
|
||||
EWRAM_DATA u32 gHitMarker = 0;
|
||||
EWRAM_DATA static u8 sUnusedBattlersArray[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gUnknown_0202428C = 0;
|
||||
EWRAM_DATA u16 gSideStatuses[2] = {0};
|
||||
EWRAM_DATA struct SideTimer gSideTimers[2] = {0};
|
||||
EWRAM_DATA u32 gStatuses3[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u16 gPauseCounterBattle = 0;
|
||||
EWRAM_DATA u16 gPaydayMoney = 0;
|
||||
EWRAM_DATA u16 gRandomTurnNumber = 0;
|
||||
EWRAM_DATA u8 gBattleCommunication[BATTLE_COMMUNICATION_ENTRIES_COUNT] = {0};
|
||||
EWRAM_DATA u8 gBattleOutcome = 0;
|
||||
EWRAM_DATA struct ProtectStruct gProtectStructs[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA struct SpecialStatus gSpecialStatuses[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u16 gBattleWeather = 0;
|
||||
EWRAM_DATA struct WishFutureKnock gWishFutureKnock = {0};
|
||||
EWRAM_DATA u16 gIntroSlideFlags = 0;
|
||||
EWRAM_DATA u8 gSentPokesToOpponent[2] = {0};
|
||||
EWRAM_DATA u16 gDynamicBasePower = 0;
|
||||
EWRAM_DATA u16 gExpShareExp = 0;
|
||||
EWRAM_DATA struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA struct BattleScripting gBattleScripting = {0};
|
||||
EWRAM_DATA struct BattleStruct *gBattleStruct = NULL;
|
||||
EWRAM_DATA u8 *gLinkBattleSendBuffer = NULL;
|
||||
EWRAM_DATA u8 *gLinkBattleRecvBuffer = NULL;
|
||||
EWRAM_DATA struct BattleResources *gBattleResources = NULL;
|
||||
EWRAM_DATA u8 gActionSelectionCursor[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gBattlerStatusSummaryTaskId[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gBattlerInMenuId = 0;
|
||||
EWRAM_DATA bool8 gDoingBattleAnim = FALSE;
|
||||
EWRAM_DATA u32 gTransformedPersonalities[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA u8 gPlayerDpadHoldFrames = 0;
|
||||
EWRAM_DATA struct BattleSpriteData *gBattleSpritesDataPtr = NULL;
|
||||
EWRAM_DATA struct MonSpritesGfx *gMonSpritesGfxPtr = NULL;
|
||||
EWRAM_DATA struct BattleHealthboxInfo *gUnknown_020244D8 = NULL;
|
||||
EWRAM_DATA struct BattleHealthboxInfo *gUnknown_020244DC = NULL;
|
||||
EWRAM_DATA u16 gBattleMovePower = 0;
|
||||
EWRAM_DATA u16 gMoveToLearn = 0;
|
||||
EWRAM_DATA u8 gBattleMonForms[MAX_BATTLERS_COUNT] = {0};
|
||||
|
||||
// IWRAM common vars
|
||||
void (*gPreBattleCallback1)(void);
|
||||
void (*gBattleMainFunc)(void);
|
||||
struct BattleResults gBattleResults;
|
||||
u8 gLeveledUpInBattle;
|
||||
void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
|
||||
u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
u8 gMultiUsePlayerCursor;
|
||||
u8 gNumberOfMovesToChoose;
|
||||
u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
|
||||
|
||||
// rom const data
|
||||
static void (* const sTurnActionsFuncsTable[])(void) =
|
||||
{
|
||||
@ -288,11 +327,11 @@ static void (* const sEndTurnFuncsTable[])(void) =
|
||||
HandleEndTurn_BattleLost, // B_OUTCOME_DREW
|
||||
HandleEndTurn_RanFromBattle, // B_OUTCOME_RAN
|
||||
HandleEndTurn_FinishBattle, // B_OUTCOME_PLAYER_TELEPORTED
|
||||
HandleEndTurn_MonFled, // B_OUTCOME_POKE_FLED
|
||||
HandleEndTurn_FinishBattle, // B_OUTCOME_CAUGHT_POKE
|
||||
HandleEndTurn_MonFled, // B_OUTCOME_MON_FLED
|
||||
HandleEndTurn_FinishBattle, // B_OUTCOME_CAUGHT
|
||||
HandleEndTurn_FinishBattle, // battle outcome 8
|
||||
HandleEndTurn_FinishBattle, // B_OUTCOME_FORFEITED
|
||||
HandleEndTurn_FinishBattle, // B_OUTCOME_POKE_TELEPORTED
|
||||
HandleEndTurn_FinishBattle, // B_OUTCOME_MON_TELEPORTED
|
||||
};
|
||||
|
||||
const u8 gStatusConditionString_PoisonJpn[8] = _("どく$$$$$");
|
||||
@ -1698,7 +1737,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir
|
||||
else
|
||||
personalityValue = 0x88;
|
||||
|
||||
for (j = 0; gTrainers[trainerNum].trainerName[j] != 0xFF; j++)
|
||||
for (j = 0; gTrainers[trainerNum].trainerName[j] != EOS; j++)
|
||||
nameHash += gTrainers[trainerNum].trainerName[j];
|
||||
|
||||
switch (gTrainers[trainerNum].partyFlags)
|
||||
@ -2383,7 +2422,7 @@ void oac_poke_opponent(struct Sprite *sprite)
|
||||
|
||||
static void sub_803980C(struct Sprite *sprite)
|
||||
{
|
||||
if ((gUnknown_020243FC & 1) == 0)
|
||||
if ((gIntroSlideFlags & 1) == 0)
|
||||
{
|
||||
sprite->pos2.x += 2;
|
||||
if (sprite->pos2.x == 0)
|
||||
@ -2437,7 +2476,7 @@ static void sub_80398D0(struct Sprite *sprite)
|
||||
{
|
||||
sprite->invisible = FALSE;
|
||||
sprite->callback = SpriteCallbackDummy_2;
|
||||
gUnknown_02022F88 = 0;
|
||||
sUnusedUnknownArray[0] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2560,7 +2599,7 @@ void sub_8039BB4(struct Sprite *sprite)
|
||||
|
||||
static void oac_poke_ally_(struct Sprite *sprite)
|
||||
{
|
||||
if ((gUnknown_020243FC & 1) == 0)
|
||||
if ((gIntroSlideFlags & 1) == 0)
|
||||
{
|
||||
sprite->pos2.x -= 2;
|
||||
if (sprite->pos2.x == 0)
|
||||
@ -2582,7 +2621,7 @@ static void SpriteCallbackDummy_3(struct Sprite *sprite)
|
||||
|
||||
void sub_8039C00(struct Sprite *sprite)
|
||||
{
|
||||
if (!(gUnknown_020243FC & 1))
|
||||
if (!(gIntroSlideFlags & 1))
|
||||
{
|
||||
sprite->pos2.x += sprite->data[1];
|
||||
sprite->pos2.y += sprite->data[2];
|
||||
@ -2731,7 +2770,7 @@ static void BattleStartClearSetData(void)
|
||||
dataPtr[j] = 0;
|
||||
|
||||
gDisableStructs[i].isFirstTurn = 2;
|
||||
gUnknown_02024284[i] = 0;
|
||||
sUnusedBattlersArray[i] = 0;
|
||||
gLastMoves[i] = 0;
|
||||
gLastLandedMoves[i] = 0;
|
||||
gLastHitByType[i] = 0;
|
||||
@ -2784,7 +2823,7 @@ static void BattleStartClearSetData(void)
|
||||
|
||||
gPauseCounterBattle = 0;
|
||||
gBattleMoveDamage = 0;
|
||||
gUnknown_020243FC = 0;
|
||||
gIntroSlideFlags = 0;
|
||||
gBattleScripting.animTurn = 0;
|
||||
gBattleScripting.animTargetsHit = 0;
|
||||
gLeveledUpInBattle = 0;
|
||||
@ -3656,12 +3695,12 @@ static void TryDoEventsBeforeFirstTurn(void)
|
||||
gBattleMons[i].status2 &= ~(STATUS2_FLINCHED);
|
||||
|
||||
*(&gBattleStruct->turnEffectsTracker) = 0;
|
||||
*(&gBattleStruct->turnEffectsBank) = 0;
|
||||
*(&gBattleStruct->turnEffectsBattlerId) = 0;
|
||||
*(&gBattleStruct->wishPerishSongState) = 0;
|
||||
*(&gBattleStruct->wishPerishSongBank) = 0;
|
||||
*(&gBattleStruct->wishPerishSongBattlerId) = 0;
|
||||
gBattleScripting.atk49_state = 0;
|
||||
gBattleStruct->faintedActionsState = 0;
|
||||
gBattleStruct->turncountersTracker = 0;
|
||||
gBattleStruct->turnCountersTracker = 0;
|
||||
gMoveResultFlags = 0;
|
||||
|
||||
gRandomTurnNumber = Random();
|
||||
@ -3689,10 +3728,10 @@ static void HandleEndTurn_ContinueBattle(void)
|
||||
CancelMultiTurnMoves(i);
|
||||
}
|
||||
gBattleStruct->turnEffectsTracker = 0;
|
||||
gBattleStruct->turnEffectsBank = 0;
|
||||
gBattleStruct->turnEffectsBattlerId = 0;
|
||||
gBattleStruct->wishPerishSongState = 0;
|
||||
gBattleStruct->wishPerishSongBank = 0;
|
||||
gBattleStruct->turncountersTracker = 0;
|
||||
gBattleStruct->wishPerishSongBattlerId = 0;
|
||||
gBattleStruct->turnCountersTracker = 0;
|
||||
gMoveResultFlags = 0;
|
||||
}
|
||||
}
|
||||
@ -3773,7 +3812,7 @@ u8 IsRunningFromBattleImpossible(void)
|
||||
else
|
||||
holdEffect = ItemId_GetHoldEffect(gBattleMons[gActiveBattler].item);
|
||||
|
||||
gStringBattler = gActiveBattler;
|
||||
gPotentialItemEffectBattler = gActiveBattler;
|
||||
|
||||
if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN)
|
||||
return 0;
|
||||
@ -3884,7 +3923,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
switch (gBattleCommunication[gActiveBattler])
|
||||
{
|
||||
case STATE_TURN_START_RECORD: // recorded battle related on start of every turn
|
||||
RecordedBattle_CopyBankMoves();
|
||||
RecordedBattle_CopyBattlerMoves();
|
||||
gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
|
||||
break;
|
||||
case STATE_BEFORE_ACTION_CHOSEN: // choose an action
|
||||
@ -4288,7 +4327,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
if (gBattleCommunication[ACTIONS_CONFIRMED_COUNT] == gBattlersCount)
|
||||
{
|
||||
sub_818603C(1);
|
||||
gBattleMainFunc = SetActionsAndBanksTurnOrder;
|
||||
gBattleMainFunc = SetActionsAndBattlersTurnOrder;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
|
||||
{
|
||||
@ -4345,162 +4384,162 @@ void SwapTurnOrder(u8 id1, u8 id2)
|
||||
gBattleTurnOrder[id2] = temp;
|
||||
}
|
||||
|
||||
u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreChosenMoves)
|
||||
u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves)
|
||||
{
|
||||
u8 strikesFirst = 0;
|
||||
u8 speedMultiplierBank1 = 0, speedMultiplierBank2 = 0;
|
||||
u32 speedBank1 = 0, speedBank2 = 0;
|
||||
u8 speedMultiplierBattler1 = 0, speedMultiplierBattler2 = 0;
|
||||
u32 speedBattler1 = 0, speedBattler2 = 0;
|
||||
u8 holdEffect = 0;
|
||||
u8 holdEffectParam = 0;
|
||||
u16 moveBank1 = 0, moveBank2 = 0;
|
||||
u16 moveBattler1 = 0, moveBattler2 = 0;
|
||||
|
||||
if (WEATHER_HAS_EFFECT)
|
||||
{
|
||||
if ((gBattleMons[bank1].ability == ABILITY_SWIFT_SWIM && gBattleWeather & WEATHER_RAIN_ANY)
|
||||
|| (gBattleMons[bank1].ability == ABILITY_CHLOROPHYLL && gBattleWeather & WEATHER_SUN_ANY))
|
||||
speedMultiplierBank1 = 2;
|
||||
if ((gBattleMons[battler1].ability == ABILITY_SWIFT_SWIM && gBattleWeather & WEATHER_RAIN_ANY)
|
||||
|| (gBattleMons[battler1].ability == ABILITY_CHLOROPHYLL && gBattleWeather & WEATHER_SUN_ANY))
|
||||
speedMultiplierBattler1 = 2;
|
||||
else
|
||||
speedMultiplierBank1 = 1;
|
||||
speedMultiplierBattler1 = 1;
|
||||
|
||||
if ((gBattleMons[bank2].ability == ABILITY_SWIFT_SWIM && gBattleWeather & WEATHER_RAIN_ANY)
|
||||
|| (gBattleMons[bank2].ability == ABILITY_CHLOROPHYLL && gBattleWeather & WEATHER_SUN_ANY))
|
||||
speedMultiplierBank2 = 2;
|
||||
if ((gBattleMons[battler2].ability == ABILITY_SWIFT_SWIM && gBattleWeather & WEATHER_RAIN_ANY)
|
||||
|| (gBattleMons[battler2].ability == ABILITY_CHLOROPHYLL && gBattleWeather & WEATHER_SUN_ANY))
|
||||
speedMultiplierBattler2 = 2;
|
||||
else
|
||||
speedMultiplierBank2 = 1;
|
||||
speedMultiplierBattler2 = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
speedMultiplierBank1 = 1;
|
||||
speedMultiplierBank2 = 1;
|
||||
speedMultiplierBattler1 = 1;
|
||||
speedMultiplierBattler2 = 1;
|
||||
}
|
||||
|
||||
speedBank1 = (gBattleMons[bank1].speed * speedMultiplierBank1)
|
||||
* (gStatStageRatios[gBattleMons[bank1].statStages[STAT_STAGE_SPEED]][0])
|
||||
/ (gStatStageRatios[gBattleMons[bank1].statStages[STAT_STAGE_SPEED]][1]);
|
||||
speedBattler1 = (gBattleMons[battler1].speed * speedMultiplierBattler1)
|
||||
* (gStatStageRatios[gBattleMons[battler1].statStages[STAT_SPEED]][0])
|
||||
/ (gStatStageRatios[gBattleMons[battler1].statStages[STAT_SPEED]][1]);
|
||||
|
||||
if (gBattleMons[bank1].item == ITEM_ENIGMA_BERRY)
|
||||
if (gBattleMons[battler1].item == ITEM_ENIGMA_BERRY)
|
||||
{
|
||||
holdEffect = gEnigmaBerries[bank1].holdEffect;
|
||||
holdEffectParam = gEnigmaBerries[bank1].holdEffectParam;
|
||||
holdEffect = gEnigmaBerries[battler1].holdEffect;
|
||||
holdEffectParam = gEnigmaBerries[battler1].holdEffectParam;
|
||||
}
|
||||
else
|
||||
{
|
||||
holdEffect = ItemId_GetHoldEffect(gBattleMons[bank1].item);
|
||||
holdEffectParam = ItemId_GetHoldEffectParam(gBattleMons[bank1].item);
|
||||
holdEffect = ItemId_GetHoldEffect(gBattleMons[battler1].item);
|
||||
holdEffectParam = ItemId_GetHoldEffectParam(gBattleMons[battler1].item);
|
||||
}
|
||||
|
||||
// badge boost
|
||||
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 | BATTLE_TYPE_FRONTIER))
|
||||
&& FlagGet(FLAG_BADGE03_GET)
|
||||
&& GetBattlerSide(bank1) == B_SIDE_PLAYER)
|
||||
&& GetBattlerSide(battler1) == B_SIDE_PLAYER)
|
||||
{
|
||||
speedBank1 = (speedBank1 * 110) / 100;
|
||||
speedBattler1 = (speedBattler1 * 110) / 100;
|
||||
}
|
||||
|
||||
if (holdEffect == HOLD_EFFECT_MACHO_BRACE)
|
||||
speedBank1 /= 2;
|
||||
speedBattler1 /= 2;
|
||||
|
||||
if (gBattleMons[bank1].status1 & STATUS1_PARALYSIS)
|
||||
speedBank1 /= 4;
|
||||
if (gBattleMons[battler1].status1 & STATUS1_PARALYSIS)
|
||||
speedBattler1 /= 4;
|
||||
|
||||
if (holdEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * holdEffectParam) / 100)
|
||||
speedBank1 = UINT_MAX;
|
||||
speedBattler1 = UINT_MAX;
|
||||
|
||||
// check second bank's speed
|
||||
// check second battlerId's speed
|
||||
|
||||
speedBank2 = (gBattleMons[bank2].speed * speedMultiplierBank2)
|
||||
* (gStatStageRatios[gBattleMons[bank2].statStages[STAT_STAGE_SPEED]][0])
|
||||
/ (gStatStageRatios[gBattleMons[bank2].statStages[STAT_STAGE_SPEED]][1]);
|
||||
speedBattler2 = (gBattleMons[battler2].speed * speedMultiplierBattler2)
|
||||
* (gStatStageRatios[gBattleMons[battler2].statStages[STAT_SPEED]][0])
|
||||
/ (gStatStageRatios[gBattleMons[battler2].statStages[STAT_SPEED]][1]);
|
||||
|
||||
if (gBattleMons[bank2].item == ITEM_ENIGMA_BERRY)
|
||||
if (gBattleMons[battler2].item == ITEM_ENIGMA_BERRY)
|
||||
{
|
||||
holdEffect = gEnigmaBerries[bank2].holdEffect;
|
||||
holdEffectParam = gEnigmaBerries[bank2].holdEffectParam;
|
||||
holdEffect = gEnigmaBerries[battler2].holdEffect;
|
||||
holdEffectParam = gEnigmaBerries[battler2].holdEffectParam;
|
||||
}
|
||||
else
|
||||
{
|
||||
holdEffect = ItemId_GetHoldEffect(gBattleMons[bank2].item);
|
||||
holdEffectParam = ItemId_GetHoldEffectParam(gBattleMons[bank2].item);
|
||||
holdEffect = ItemId_GetHoldEffect(gBattleMons[battler2].item);
|
||||
holdEffectParam = ItemId_GetHoldEffectParam(gBattleMons[battler2].item);
|
||||
}
|
||||
|
||||
// badge boost
|
||||
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 | BATTLE_TYPE_FRONTIER))
|
||||
&& FlagGet(FLAG_BADGE03_GET)
|
||||
&& GetBattlerSide(bank2) == B_SIDE_PLAYER)
|
||||
&& GetBattlerSide(battler2) == B_SIDE_PLAYER)
|
||||
{
|
||||
speedBank2 = (speedBank2 * 110) / 100;
|
||||
speedBattler2 = (speedBattler2 * 110) / 100;
|
||||
}
|
||||
|
||||
if (holdEffect == HOLD_EFFECT_MACHO_BRACE)
|
||||
speedBank2 /= 2;
|
||||
speedBattler2 /= 2;
|
||||
|
||||
if (gBattleMons[bank2].status1 & STATUS1_PARALYSIS)
|
||||
speedBank2 /= 4;
|
||||
if (gBattleMons[battler2].status1 & STATUS1_PARALYSIS)
|
||||
speedBattler2 /= 4;
|
||||
|
||||
if (holdEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (0xFFFF * holdEffectParam) / 100)
|
||||
speedBank2 = UINT_MAX;
|
||||
speedBattler2 = UINT_MAX;
|
||||
|
||||
if (ignoreChosenMoves)
|
||||
{
|
||||
moveBank1 = MOVE_NONE;
|
||||
moveBank2 = MOVE_NONE;
|
||||
moveBattler1 = MOVE_NONE;
|
||||
moveBattler2 = MOVE_NONE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gChosenActionByBattler[bank1] == B_ACTION_USE_MOVE)
|
||||
if (gChosenActionByBattler[battler1] == B_ACTION_USE_MOVE)
|
||||
{
|
||||
if (gProtectStructs[bank1].onlyStruggle)
|
||||
moveBank1 = MOVE_STRUGGLE;
|
||||
if (gProtectStructs[battler1].onlyStruggle)
|
||||
moveBattler1 = MOVE_STRUGGLE;
|
||||
else
|
||||
moveBank1 = gBattleMons[bank1].moves[*(gBattleStruct->chosenMovePositions + bank1)];
|
||||
moveBattler1 = gBattleMons[battler1].moves[*(gBattleStruct->chosenMovePositions + battler1)];
|
||||
}
|
||||
else
|
||||
moveBank1 = MOVE_NONE;
|
||||
moveBattler1 = MOVE_NONE;
|
||||
|
||||
if (gChosenActionByBattler[bank2] == B_ACTION_USE_MOVE)
|
||||
if (gChosenActionByBattler[battler2] == B_ACTION_USE_MOVE)
|
||||
{
|
||||
if (gProtectStructs[bank2].onlyStruggle)
|
||||
moveBank2 = MOVE_STRUGGLE;
|
||||
if (gProtectStructs[battler2].onlyStruggle)
|
||||
moveBattler2 = MOVE_STRUGGLE;
|
||||
else
|
||||
moveBank2 = gBattleMons[bank2].moves[*(gBattleStruct->chosenMovePositions + bank2)];
|
||||
moveBattler2 = gBattleMons[battler2].moves[*(gBattleStruct->chosenMovePositions + battler2)];
|
||||
}
|
||||
else
|
||||
moveBank2 = MOVE_NONE;
|
||||
moveBattler2 = MOVE_NONE;
|
||||
}
|
||||
|
||||
// both move priorities are different than 0
|
||||
if (gBattleMoves[moveBank1].priority != 0 || gBattleMoves[moveBank2].priority != 0)
|
||||
if (gBattleMoves[moveBattler1].priority != 0 || gBattleMoves[moveBattler2].priority != 0)
|
||||
{
|
||||
// both priorities are the same
|
||||
if (gBattleMoves[moveBank1].priority == gBattleMoves[moveBank2].priority)
|
||||
if (gBattleMoves[moveBattler1].priority == gBattleMoves[moveBattler2].priority)
|
||||
{
|
||||
if (speedBank1 == speedBank2 && Random() & 1)
|
||||
if (speedBattler1 == speedBattler2 && Random() & 1)
|
||||
strikesFirst = 2; // same speeds, same priorities
|
||||
else if (speedBank1 < speedBank2)
|
||||
strikesFirst = 1; // bank2 has more speed
|
||||
else if (speedBattler1 < speedBattler2)
|
||||
strikesFirst = 1; // battler2 has more speed
|
||||
|
||||
// else bank1 has more speed
|
||||
// else battler1 has more speed
|
||||
}
|
||||
else if (gBattleMoves[moveBank1].priority < gBattleMoves[moveBank2].priority)
|
||||
strikesFirst = 1; // bank2's move has greater priority
|
||||
else if (gBattleMoves[moveBattler1].priority < gBattleMoves[moveBattler2].priority)
|
||||
strikesFirst = 1; // battler2's move has greater priority
|
||||
|
||||
// else bank1's move has greater priority
|
||||
// else battler1's move has greater priority
|
||||
}
|
||||
// both priorities are equal to 0
|
||||
else
|
||||
{
|
||||
if (speedBank1 == speedBank2 && Random() & 1)
|
||||
if (speedBattler1 == speedBattler2 && Random() & 1)
|
||||
strikesFirst = 2; // same speeds, same priorities
|
||||
else if (speedBank1 < speedBank2)
|
||||
strikesFirst = 1; // bank2 has more speed
|
||||
else if (speedBattler1 < speedBattler2)
|
||||
strikesFirst = 1; // battler2 has more speed
|
||||
|
||||
// else bank1 has more speed
|
||||
// else battler1 has more speed
|
||||
}
|
||||
|
||||
return strikesFirst;
|
||||
}
|
||||
|
||||
static void SetActionsAndBanksTurnOrder(void)
|
||||
static void SetActionsAndBattlersTurnOrder(void)
|
||||
{
|
||||
s32 var = 0;
|
||||
s32 i, j;
|
||||
@ -4556,7 +4595,7 @@ static void SetActionsAndBanksTurnOrder(void)
|
||||
}
|
||||
}
|
||||
gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts;
|
||||
gBattleStruct->focusPunchBank = 0;
|
||||
gBattleStruct->focusPunchBattlerId = 0;
|
||||
return;
|
||||
}
|
||||
else
|
||||
@ -4583,14 +4622,14 @@ static void SetActionsAndBanksTurnOrder(void)
|
||||
{
|
||||
for (j = i + 1; j < gBattlersCount; j++)
|
||||
{
|
||||
u8 bank1 = gBattleTurnOrder[i];
|
||||
u8 bank2 = gBattleTurnOrder[j];
|
||||
u8 battler1 = gBattleTurnOrder[i];
|
||||
u8 battler2 = gBattleTurnOrder[j];
|
||||
if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM
|
||||
&& gActionsByTurnOrder[j] != B_ACTION_USE_ITEM
|
||||
&& gActionsByTurnOrder[i] != B_ACTION_SWITCH
|
||||
&& gActionsByTurnOrder[j] != B_ACTION_SWITCH)
|
||||
{
|
||||
if (GetWhoStrikesFirst(bank1, bank2, FALSE))
|
||||
if (GetWhoStrikesFirst(battler1, battler2, FALSE))
|
||||
SwapTurnOrder(i, j);
|
||||
}
|
||||
}
|
||||
@ -4598,7 +4637,7 @@ static void SetActionsAndBanksTurnOrder(void)
|
||||
}
|
||||
}
|
||||
gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts;
|
||||
gBattleStruct->focusPunchBank = 0;
|
||||
gBattleStruct->focusPunchBattlerId = 0;
|
||||
}
|
||||
|
||||
static void TurnValuesCleanUp(bool8 var0)
|
||||
@ -4654,10 +4693,10 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void)
|
||||
{
|
||||
if (!(gHitMarker & HITMARKER_RUN))
|
||||
{
|
||||
while (gBattleStruct->focusPunchBank < gBattlersCount)
|
||||
while (gBattleStruct->focusPunchBattlerId < gBattlersCount)
|
||||
{
|
||||
gActiveBattler = gBattlerAttacker = gBattleStruct->focusPunchBank;
|
||||
gBattleStruct->focusPunchBank++;
|
||||
gActiveBattler = gBattlerAttacker = gBattleStruct->focusPunchBattlerId;
|
||||
gBattleStruct->focusPunchBattlerId++;
|
||||
if (gChosenMoveByBattler[gActiveBattler] == MOVE_FOCUS_PUNCH
|
||||
&& !(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP)
|
||||
&& !(gDisableStructs[gBattlerAttacker].truantCounter)
|
||||
@ -4700,7 +4739,7 @@ static void RunTurnActionsFunctions(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another bank
|
||||
if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another battlerId
|
||||
{
|
||||
gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING);
|
||||
gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE);
|
||||
@ -4934,7 +4973,7 @@ static void TryEvolvePokemon(void)
|
||||
|
||||
while (gLeveledUpInBattle != 0)
|
||||
{
|
||||
for (i = 0; i < 6; i++)
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
if (gLeveledUpInBattle & gBitTable[i])
|
||||
{
|
||||
@ -4983,7 +5022,7 @@ static void ReturnFromBattleToOverworld(void)
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_ROAMER)
|
||||
{
|
||||
UpdateRoamerHPStatus(&gEnemyParty[0]);
|
||||
if ((gBattleOutcome & B_OUTCOME_WON) || gBattleOutcome == B_OUTCOME_CAUGHT_POKE)
|
||||
if ((gBattleOutcome & B_OUTCOME_WON) || gBattleOutcome == B_OUTCOME_CAUGHT)
|
||||
SetRoamerInactive();
|
||||
}
|
||||
|
||||
@ -5031,7 +5070,7 @@ static void HandleAction_UseMove(void)
|
||||
gMoveResultFlags = 0;
|
||||
gMultiHitCounter = 0;
|
||||
gBattleCommunication[6] = 0;
|
||||
gCurrMovePos = gUnknown_020241E9 = *(gBattleStruct->chosenMovePositions + gBattlerAttacker);
|
||||
gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerAttacker);
|
||||
|
||||
// choose move
|
||||
if (gProtectStructs[gBattlerAttacker].onlyStruggle)
|
||||
@ -5050,14 +5089,14 @@ static void HandleAction_UseMove(void)
|
||||
&& gDisableStructs[gBattlerAttacker].encoredMove == gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos])
|
||||
{
|
||||
gCurrentMove = gChosenMove = gDisableStructs[gBattlerAttacker].encoredMove;
|
||||
gCurrMovePos = gUnknown_020241E9 = gDisableStructs[gBattlerAttacker].encoredMovePos;
|
||||
gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos;
|
||||
*(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, 0);
|
||||
}
|
||||
// check if the encored move wasn't overwritten
|
||||
else if (gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE
|
||||
&& gDisableStructs[gBattlerAttacker].encoredMove != gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos])
|
||||
{
|
||||
gCurrMovePos = gUnknown_020241E9 = gDisableStructs[gBattlerAttacker].encoredMovePos;
|
||||
gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos;
|
||||
gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos];
|
||||
gDisableStructs[gBattlerAttacker].encoredMove = MOVE_NONE;
|
||||
gDisableStructs[gBattlerAttacker].encoredMovePos = 0;
|
||||
@ -5338,7 +5377,7 @@ bool8 TryRunFromBattle(u8 battler)
|
||||
else
|
||||
holdEffect = ItemId_GetHoldEffect(gBattleMons[battler].item);
|
||||
|
||||
gStringBattler = battler;
|
||||
gPotentialItemEffectBattler = battler;
|
||||
|
||||
if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN)
|
||||
{
|
||||
@ -5454,7 +5493,7 @@ static void HandleAction_Run(void)
|
||||
else
|
||||
{
|
||||
gCurrentTurnActionNumber = gBattlersCount;
|
||||
gBattleOutcome = B_OUTCOME_POKE_FLED;
|
||||
gBattleOutcome = B_OUTCOME_MON_FLED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_message.h"
|
||||
#include "battle_string_ids.h"
|
||||
#include "constants/battle_string_ids.h"
|
||||
#include "constants/moves.h"
|
||||
#include "text.h"
|
||||
#include "string_util.h"
|
||||
@ -13,23 +13,11 @@
|
||||
#include "palette.h"
|
||||
#include "battle_controllers.h"
|
||||
#include "battle_setup.h"
|
||||
#include "menu.h"
|
||||
#include "recorded_battle.h"
|
||||
#include "international_string_util.h"
|
||||
|
||||
extern u16 gLastUsedItem;
|
||||
extern u8 gLastUsedAbility;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerAttacker;
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gStringBattler;
|
||||
extern u8 gEffectBank;
|
||||
extern u8 gBattlerAbilities[MAX_BATTLERS_COUNT];
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u16 gTrainerBattleOpponent_B;
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
|
||||
extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gUnknown_0203C7B4;
|
||||
extern struct StringInfoBattle *gStringInfo;
|
||||
|
||||
@ -56,9 +44,6 @@ extern void GetEreaderTrainerName(u8 *txtPtr);
|
||||
extern void sub_81A36D0(u8 arg0, u16 trainerId); // battle_frontier_2
|
||||
extern void sub_81D572C(u8 arg0, u16 trainerId); // pokenav
|
||||
extern void GetFrontierTrainerName(u8 *dst, u16 trainerId);
|
||||
extern s32 GetStringCenterAlignXOffsetWithLetterSpacing(u8 fontId, const u8 *str, s32 totalWidth, s16 letterSpacing);
|
||||
extern u8 GetTextSpeedInRecordedBattle(void);
|
||||
extern u8 GetPlayerTextSpeed(void);
|
||||
|
||||
// this file's functions
|
||||
static void sub_814F8F8(u8 *textPtr);
|
||||
@ -1436,7 +1421,7 @@ void BufferStringBattle(u16 stringID)
|
||||
gBattleScripting.battler = gStringInfo->scrActive;
|
||||
*(&gBattleStruct->field_52) = gStringInfo->unk1605E;
|
||||
*(&gBattleStruct->hpScale) = gStringInfo->hpScale;
|
||||
gStringBattler = gStringInfo->StringBank;
|
||||
gPotentialItemEffectBattler = gStringInfo->StringBank;
|
||||
*(&gBattleStruct->stringMoveType) = gStringInfo->moveType;
|
||||
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
@ -1903,7 +1888,7 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
|
||||
HANDLE_NICKNAME_STRING_CASE(gBattlerTarget, gBattlerPartyIndexes[gBattlerTarget])
|
||||
break;
|
||||
case B_TXT_EFF_NAME_WITH_PREFIX: // effect bank name with prefix
|
||||
HANDLE_NICKNAME_STRING_CASE(gEffectBank, gBattlerPartyIndexes[gEffectBank])
|
||||
HANDLE_NICKNAME_STRING_CASE(gEffectBattler, gBattlerPartyIndexes[gEffectBattler])
|
||||
break;
|
||||
case B_TXT_ACTIVE_NAME_WITH_PREFIX: // active bank name with prefix
|
||||
HANDLE_NICKNAME_STRING_CASE(gActiveBattler, gBattlerPartyIndexes[gActiveBattler])
|
||||
@ -1930,10 +1915,10 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
|
||||
{
|
||||
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
|
||||
{
|
||||
if ((gBattleScripting.multiplayerId != 0 && (gStringBattler & BIT_SIDE))
|
||||
|| (gBattleScripting.multiplayerId == 0 && !(gStringBattler & BIT_SIDE)))
|
||||
if ((gBattleScripting.multiplayerId != 0 && (gPotentialItemEffectBattler & BIT_SIDE))
|
||||
|| (gBattleScripting.multiplayerId == 0 && !(gPotentialItemEffectBattler & BIT_SIDE)))
|
||||
{
|
||||
StringCopy(text, gEnigmaBerries[gStringBattler].name);
|
||||
StringCopy(text, gEnigmaBerries[gPotentialItemEffectBattler].name);
|
||||
StringAppend(text, gText_BerrySuffix);
|
||||
toCpy = text;
|
||||
}
|
||||
@ -1944,9 +1929,9 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gStringBattler)
|
||||
if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gPotentialItemEffectBattler)
|
||||
{
|
||||
StringCopy(text, gEnigmaBerries[gStringBattler].name);
|
||||
StringCopy(text, gEnigmaBerries[gPotentialItemEffectBattler].name);
|
||||
StringAppend(text, gText_BerrySuffix);
|
||||
toCpy = text;
|
||||
}
|
||||
@ -1979,7 +1964,7 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
|
||||
toCpy = gAbilityNames[gBattlerAbilities[gBattleScripting.battler]];
|
||||
break;
|
||||
case B_TXT_EFF_ABILITY: // effect bank ability
|
||||
toCpy = gAbilityNames[gBattlerAbilities[gEffectBank]];
|
||||
toCpy = gAbilityNames[gBattlerAbilities[gEffectBattler]];
|
||||
break;
|
||||
case B_TXT_TRAINER1_CLASS: // trainer class name
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE)
|
||||
@ -2313,9 +2298,9 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
|
||||
{
|
||||
if (hword == ITEM_ENIGMA_BERRY)
|
||||
{
|
||||
if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gStringBattler)
|
||||
if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gPotentialItemEffectBattler)
|
||||
{
|
||||
StringCopy(dst, gEnigmaBerries[gStringBattler].name);
|
||||
StringCopy(dst, gEnigmaBerries[gPotentialItemEffectBattler].name);
|
||||
StringAppend(dst, gText_BerrySuffix);
|
||||
}
|
||||
else
|
||||
@ -2360,20 +2345,20 @@ static void sub_814F8F8(u8* textBuff)
|
||||
|
||||
// Appends "!" to the text buffer `dst`. In the original Japanese this looked
|
||||
// into the table of moves at sUnknownMoveTable and varied the line accordingly.
|
||||
//
|
||||
//
|
||||
// gText_ExclamationMark was a plain "!", used for any attack not on the list.
|
||||
// It resulted in the translation "<NAME>'s <ATTACK>!".
|
||||
//
|
||||
//
|
||||
// gText_ExclamationMark2 was "を つかった!". This resulted in the translation
|
||||
// "<NAME> used <ATTACK>!", which was used for all attacks in English.
|
||||
//
|
||||
//
|
||||
// gText_ExclamationMark3 was "した!". This was used for those moves whose
|
||||
// names were verbs, such as Recover, and resulted in translations like "<NAME>
|
||||
// recovered itself!".
|
||||
//
|
||||
//
|
||||
// gText_ExclamationMark4 was "を した!" This resulted in a translation of
|
||||
// "<NAME> did an <ATTACK>!".
|
||||
//
|
||||
//
|
||||
// gText_ExclamationMark5 was " こうげき!" This resulted in a translation of
|
||||
// "<NAME>'s <ATTACK> attack!".
|
||||
static void sub_814F950(u8* dst)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -30,6 +30,8 @@
|
||||
#include "strings.h"
|
||||
#include "secret_base.h"
|
||||
#include "string_util.h"
|
||||
#include "overworld.h"
|
||||
#include "field_weather.h"
|
||||
|
||||
enum
|
||||
{
|
||||
@ -59,14 +61,11 @@ extern void sub_81BE72C(void);
|
||||
extern void FreezeMapObjects(void);
|
||||
extern void sub_808BCF4(void);
|
||||
extern void sub_80EECC8(void);
|
||||
extern void c2_exit_to_overworld_1_continue_scripts_restart_music(void);
|
||||
extern void c2_exit_to_overworld_2_switch(void);
|
||||
extern void Overworld_ClearSavedMusic(void);
|
||||
extern void CB2_WhiteOut(void);
|
||||
extern void sub_80AF6F0(void);
|
||||
extern void PlayBattleBGM(void);
|
||||
extern void sub_81DA57C(void);
|
||||
extern u8 GetSav1Weather(void);
|
||||
extern u8 Overworld_GetFlashLevel(void);
|
||||
extern u16 sub_81A9AA8(u8 localId);
|
||||
extern u16 sub_81D6180(u8 localId);
|
||||
@ -82,12 +81,6 @@ extern void sub_81D61E8(void);
|
||||
extern void sub_80982B8(void);
|
||||
extern void sub_81A9EDC(u16 a0);
|
||||
extern void sub_81D572C(u8 a0, u16 arg1);
|
||||
extern void IncrementGameStat(u8 statId);
|
||||
extern u32 GetGameStat(u8 statId);
|
||||
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern u8 gBattleOutcome;
|
||||
extern void (*gFieldCallback)(void);
|
||||
|
||||
// this file's functions
|
||||
static void DoBattlePikeWildBattle(void);
|
||||
@ -996,8 +989,8 @@ static bool32 IsPlayerDefeated(u32 battleOutcome)
|
||||
case B_OUTCOME_WON:
|
||||
case B_OUTCOME_RAN:
|
||||
case B_OUTCOME_PLAYER_TELEPORTED:
|
||||
case B_OUTCOME_POKE_FLED:
|
||||
case B_OUTCOME_CAUGHT_POKE:
|
||||
case B_OUTCOME_MON_FLED:
|
||||
case B_OUTCOME_CAUGHT:
|
||||
return FALSE;
|
||||
default:
|
||||
return FALSE;
|
||||
|
||||
@ -61,9 +61,7 @@ extern u16 gBattle_BG0_Y;
|
||||
|
||||
extern const struct OamData gFieldObjectBaseOam_32x32;
|
||||
|
||||
extern void c2_exit_to_overworld_2_switch(void);
|
||||
extern void sub_80AC3D0(void);
|
||||
extern void ScanlineEffect_Clear(void);
|
||||
|
||||
// this file's functions
|
||||
static void LaunchBattleTransitionTask(u8 transitionId);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -8,12 +8,7 @@
|
||||
#include "random.h"
|
||||
#include "battle_scripts.h"
|
||||
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gUnknown_0203CF00[];
|
||||
extern const u8 *gBattlescriptCurrInstr;
|
||||
extern u8 gBattleCommunication[];
|
||||
extern u8 gActiveBattler;
|
||||
|
||||
extern void sub_81D55D0(void);
|
||||
extern void sub_81D5694(void);
|
||||
@ -79,7 +74,7 @@ void FreeBattleResources(void)
|
||||
}
|
||||
}
|
||||
|
||||
void AdjustFriendshipOnBattleFaint(u8 bank)
|
||||
void AdjustFriendshipOnBattleFaint(u8 battlerId)
|
||||
{
|
||||
u8 opposingBank;
|
||||
|
||||
@ -98,22 +93,22 @@ void AdjustFriendshipOnBattleFaint(u8 bank)
|
||||
opposingBank = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
|
||||
}
|
||||
|
||||
if (gBattleMons[opposingBank].level > gBattleMons[bank].level)
|
||||
if (gBattleMons[opposingBank].level > gBattleMons[battlerId].level)
|
||||
{
|
||||
if (gBattleMons[opposingBank].level - gBattleMons[bank].level > 29)
|
||||
AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[bank]], 8);
|
||||
if (gBattleMons[opposingBank].level - gBattleMons[battlerId].level > 29)
|
||||
AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 8);
|
||||
else
|
||||
AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[bank]], 6);
|
||||
AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 6);
|
||||
}
|
||||
else
|
||||
{
|
||||
AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[bank]], 6);
|
||||
AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 6);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80571DC(u8 bank, u8 arg1)
|
||||
void sub_80571DC(u8 battlerId, u8 arg1)
|
||||
{
|
||||
if (GetBattlerSide(bank) != B_SIDE_OPPONENT)
|
||||
if (GetBattlerSide(battlerId) != B_SIDE_OPPONENT)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
@ -122,14 +117,14 @@ void sub_80571DC(u8 bank, u8 arg1)
|
||||
for (i = 0; i < 3; i++)
|
||||
gUnknown_0203CF00[i] = *(0 * 3 + i + (u8*)(gBattleStruct->field_60));
|
||||
|
||||
sub_81B8FB0(pokemon_order_func(gBattlerPartyIndexes[bank]), pokemon_order_func(arg1));
|
||||
sub_81B8FB0(pokemon_order_func(gBattlerPartyIndexes[battlerId]), pokemon_order_func(arg1));
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
*(0 * 3 + i + (u8*)(gBattleStruct->field_60)) = gUnknown_0203CF00[i];
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_805725C(u8 bank)
|
||||
u32 sub_805725C(u8 battlerId)
|
||||
{
|
||||
u32 effect = 0;
|
||||
|
||||
@ -138,12 +133,12 @@ u32 sub_805725C(u8 bank)
|
||||
switch (gBattleCommunication[MULTIUSE_STATE])
|
||||
{
|
||||
case 0:
|
||||
if (gBattleMons[bank].status1 & STATUS1_SLEEP)
|
||||
if (gBattleMons[battlerId].status1 & STATUS1_SLEEP)
|
||||
{
|
||||
if (UproarWakeUpCheck(bank))
|
||||
if (UproarWakeUpCheck(battlerId))
|
||||
{
|
||||
gBattleMons[bank].status1 &= ~(STATUS1_SLEEP);
|
||||
gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
|
||||
gBattleMons[battlerId].status1 &= ~(STATUS1_SLEEP);
|
||||
gBattleMons[battlerId].status2 &= ~(STATUS2_NIGHTMARE);
|
||||
BattleScriptPushCursor();
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
|
||||
gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp;
|
||||
@ -153,24 +148,24 @@ u32 sub_805725C(u8 bank)
|
||||
{
|
||||
u32 toSub;
|
||||
|
||||
if (gBattleMons[bank].ability == ABILITY_EARLY_BIRD)
|
||||
if (gBattleMons[battlerId].ability == ABILITY_EARLY_BIRD)
|
||||
toSub = 2;
|
||||
else
|
||||
toSub = 1;
|
||||
|
||||
if ((gBattleMons[bank].status1 & STATUS1_SLEEP) < toSub)
|
||||
gBattleMons[bank].status1 &= ~(STATUS1_SLEEP);
|
||||
if ((gBattleMons[battlerId].status1 & STATUS1_SLEEP) < toSub)
|
||||
gBattleMons[battlerId].status1 &= ~(STATUS1_SLEEP);
|
||||
else
|
||||
gBattleMons[bank].status1 -= toSub;
|
||||
gBattleMons[battlerId].status1 -= toSub;
|
||||
|
||||
if (gBattleMons[bank].status1 & STATUS1_SLEEP)
|
||||
if (gBattleMons[battlerId].status1 & STATUS1_SLEEP)
|
||||
{
|
||||
gBattlescriptCurrInstr = BattleScript_MoveUsedIsAsleep;
|
||||
effect = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE);
|
||||
gBattleMons[battlerId].status2 &= ~(STATUS2_NIGHTMARE);
|
||||
BattleScriptPushCursor();
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
|
||||
gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp;
|
||||
@ -181,7 +176,7 @@ u32 sub_805725C(u8 bank)
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
break;
|
||||
case 1:
|
||||
if (gBattleMons[bank].status1 & STATUS1_FREEZE)
|
||||
if (gBattleMons[battlerId].status1 & STATUS1_FREEZE)
|
||||
{
|
||||
if (Random() % 5 != 0)
|
||||
{
|
||||
@ -189,7 +184,7 @@ u32 sub_805725C(u8 bank)
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleMons[bank].status1 &= ~(STATUS1_FREEZE);
|
||||
gBattleMons[battlerId].status1 &= ~(STATUS1_FREEZE);
|
||||
BattleScriptPushCursor();
|
||||
gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
|
||||
@ -206,7 +201,7 @@ u32 sub_805725C(u8 bank)
|
||||
|
||||
if (effect == 2)
|
||||
{
|
||||
gActiveBattler = bank;
|
||||
gActiveBattler = battlerId;
|
||||
BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
|
||||
MarkBattlerForControllerExec(gActiveBattler);
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
#include "global.h"
|
||||
#include "constants/abilities.h"
|
||||
#include "battle.h"
|
||||
#include "battle_setup.h"
|
||||
#include "constants/hold_effects.h"
|
||||
#include "event_data.h"
|
||||
#include "item.h"
|
||||
@ -10,15 +11,6 @@
|
||||
#include "constants/moves.h"
|
||||
#include "constants/battle_move_effects.h"
|
||||
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern struct BattlePokemon gBattleMons[4];
|
||||
extern u16 gCurrentMove;
|
||||
extern u8 gCritMultiplier;
|
||||
extern u16 gBattleWeather;
|
||||
extern struct BattleEnigmaBerry gEnigmaBerries[];
|
||||
extern u16 gBattleMovePower;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
|
||||
bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 bank);
|
||||
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
@ -149,30 +141,30 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
|
||||
if (gBattleMoves[gCurrentMove].effect == EFFECT_EXPLOSION)
|
||||
defense /= 2;
|
||||
|
||||
if (type < TYPE_MYSTERY) // is physical
|
||||
if (IS_MOVE_PHYSICAL(type))
|
||||
{
|
||||
if (gCritMultiplier == 2)
|
||||
{
|
||||
if (attacker->statStages[STAT_STAGE_ATK] > 6)
|
||||
APPLY_STAT_MOD(damage, attacker, attack, STAT_STAGE_ATK)
|
||||
if (attacker->statStages[STAT_ATK] > 6)
|
||||
APPLY_STAT_MOD(damage, attacker, attack, STAT_ATK)
|
||||
else
|
||||
damage = attack;
|
||||
}
|
||||
else
|
||||
APPLY_STAT_MOD(damage, attacker, attack, STAT_STAGE_ATK)
|
||||
APPLY_STAT_MOD(damage, attacker, attack, STAT_ATK)
|
||||
|
||||
damage = damage * gBattleMovePower;
|
||||
damage *= (2 * attacker->level / 5 + 2);
|
||||
|
||||
if (gCritMultiplier == 2)
|
||||
{
|
||||
if (defender->statStages[STAT_STAGE_DEF] < 6)
|
||||
APPLY_STAT_MOD(damageHelper, defender, defense, STAT_STAGE_DEF)
|
||||
if (defender->statStages[STAT_DEF] < 6)
|
||||
APPLY_STAT_MOD(damageHelper, defender, defense, STAT_DEF)
|
||||
else
|
||||
damageHelper = defense;
|
||||
}
|
||||
else
|
||||
APPLY_STAT_MOD(damageHelper, defender, defense, STAT_STAGE_DEF)
|
||||
APPLY_STAT_MOD(damageHelper, defender, defense, STAT_DEF)
|
||||
|
||||
damage = damage / damageHelper;
|
||||
damage /= 50;
|
||||
@ -199,30 +191,30 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
|
||||
if (type == TYPE_MYSTERY)
|
||||
damage = 0; // is ??? type. does 0 damage.
|
||||
|
||||
if (type > TYPE_MYSTERY) // is special?
|
||||
if (IS_MOVE_SPECIAL(type))
|
||||
{
|
||||
if (gCritMultiplier == 2)
|
||||
{
|
||||
if (attacker->statStages[STAT_STAGE_SPATK] > 6)
|
||||
APPLY_STAT_MOD(damage, attacker, spAttack, STAT_STAGE_SPATK)
|
||||
if (attacker->statStages[STAT_SPATK] > 6)
|
||||
APPLY_STAT_MOD(damage, attacker, spAttack, STAT_SPATK)
|
||||
else
|
||||
damage = spAttack;
|
||||
}
|
||||
else
|
||||
APPLY_STAT_MOD(damage, attacker, spAttack, STAT_STAGE_SPATK)
|
||||
APPLY_STAT_MOD(damage, attacker, spAttack, STAT_SPATK)
|
||||
|
||||
damage = damage * gBattleMovePower;
|
||||
damage *= (2 * attacker->level / 5 + 2);
|
||||
|
||||
if (gCritMultiplier == 2)
|
||||
{
|
||||
if (defender->statStages[STAT_STAGE_SPDEF] < 6)
|
||||
APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_STAGE_SPDEF)
|
||||
if (defender->statStages[STAT_SPDEF] < 6)
|
||||
APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_SPDEF)
|
||||
else
|
||||
damageHelper = spDefense;
|
||||
}
|
||||
else
|
||||
APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_STAGE_SPDEF)
|
||||
APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_SPDEF)
|
||||
|
||||
damage = (damage / damageHelper);
|
||||
damage /= 50;
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
#include "constants/songs.h"
|
||||
#include "overworld.h"
|
||||
#include "battle_message.h"
|
||||
#include "battle_string_ids.h"
|
||||
#include "constants/battle_string_ids.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "bg.h"
|
||||
#include "link.h"
|
||||
@ -48,13 +48,11 @@ extern u16 gBattle_BG2_X;
|
||||
extern u16 gBattle_BG2_Y;
|
||||
extern u16 gBattle_BG3_X;
|
||||
extern u16 gBattle_BG3_Y;
|
||||
extern u8 gBattleTerrain;
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
extern bool8 gAffineAnimsDisabled;
|
||||
extern u16 gMoveToLearn;
|
||||
extern const u8 gSpeciesNames[][11];
|
||||
|
||||
extern u8 gBattleCommunication[];
|
||||
#define sEvoCursorPos gBattleCommunication[1] // when learning a new move
|
||||
#define sEvoGraphicsTaskID gBattleCommunication[2]
|
||||
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
#include "global.h"
|
||||
#include "item_use.h"
|
||||
#include "battle.h"
|
||||
#include "berry.h"
|
||||
#include "bike.h"
|
||||
@ -28,7 +29,6 @@
|
||||
#include "task.h"
|
||||
#include "text.h"
|
||||
|
||||
extern u16 gSpecialVar_ItemId;
|
||||
extern void(**gUnknown_0203CE54)(void);
|
||||
extern void(**gUnknown_0203CF2C)(void);
|
||||
extern void(*gUnknown_0203A0F4)(u8 taskId);
|
||||
@ -88,14 +88,12 @@ extern void sub_80B7CC8(void);
|
||||
extern void flagmods_08054D70(void);
|
||||
extern u8* sub_806CF78(u16);
|
||||
extern bool8 ExecuteTableBasedItemEffect_(struct Pokemon*, u16, u8, u8);
|
||||
extern u8 gBankInMenu;
|
||||
extern u16 gBattlerPartyIndexes[];
|
||||
extern void sub_81B89F0(void);
|
||||
extern u8 GetItemEffectType(u16);
|
||||
extern struct MapConnection *sub_8088A8C(s16, s16);
|
||||
|
||||
void MapPostLoadHook_UseItem(void);
|
||||
extern void sub_80AF6D4(void);
|
||||
void sub_80AF6D4(void);
|
||||
void Task_CallItemUseOnFieldCallback(u8 taskId);
|
||||
void bag_menu_inits_lists_menu(u8 taskId);
|
||||
void ItemUseOnFieldCB_Bike(u8 taskId);
|
||||
@ -984,7 +982,7 @@ void sub_80FE440(u8 taskId)
|
||||
|
||||
void ItemUseInBattle_StatIncrease(u8 taskId)
|
||||
{
|
||||
u16 partyId = gBattlerPartyIndexes[gBankInMenu];
|
||||
u16 partyId = gBattlerPartyIndexes[gBattlerInMenuId];
|
||||
|
||||
if (ExecuteTableBasedItemEffect_(&gPlayerParty[partyId], gSpecialVar_ItemId, partyId, 0) != FALSE)
|
||||
{
|
||||
|
||||
@ -15,12 +15,6 @@
|
||||
#include "util.h"
|
||||
#include "graphics.h"
|
||||
|
||||
extern bool8 gDoingBattleAnim;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlerTarget;
|
||||
extern u16 gBattlerPartyIndexes[];
|
||||
extern u8 gBattlerSpriteIds[];
|
||||
extern u8 gHealthboxSpriteIds[];
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
|
||||
// this file's functions
|
||||
|
||||
@ -332,7 +332,7 @@ u32 GetMonData(struct Pokemon *mon, s32 field, u8* data)
|
||||
ret = mon->defense;
|
||||
break;
|
||||
case MON_DATA_SPEED:
|
||||
ret = GetDeoxysStat(mon, STAT_SPD);
|
||||
ret = GetDeoxysStat(mon, STAT_SPEED);
|
||||
if (!ret)
|
||||
ret = mon->speed;
|
||||
break;
|
||||
|
||||
@ -26,10 +26,10 @@
|
||||
extern struct BattlePokemon gBattleMons[4];
|
||||
extern struct BattleEnigmaBerry gEnigmaBerries[4];
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBankInMenu;
|
||||
extern u8 gBattlerInMenuId;
|
||||
extern u8 gBattlerTarget;
|
||||
extern u8 gBattlerAttacker;
|
||||
extern u8 gStringBattler;
|
||||
extern u8 gPotentialItemEffectBattler;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern u8 gBattleMonForms[4];
|
||||
@ -210,7 +210,7 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit)
|
||||
|
||||
void sub_806CF24(s32 stat)
|
||||
{
|
||||
gBattlerTarget = gBankInMenu;
|
||||
gBattlerTarget = gBattlerInMenuId;
|
||||
StringCopy(gBattleTextBuff1, gStatNamesTable[gUnknown_08329EC8[stat]]);
|
||||
StringCopy(gBattleTextBuff2, gText_StatRose);
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gText_PkmnsStatChanged2);
|
||||
@ -224,7 +224,7 @@ u8 *sub_806CF78(u16 itemId)
|
||||
if (itemId == ITEM_ENIGMA_BERRY)
|
||||
{
|
||||
if (gMain.inBattle)
|
||||
itemEffect = gEnigmaBerries[gBankInMenu].itemEffect;
|
||||
itemEffect = gEnigmaBerries[gBattlerInMenuId].itemEffect;
|
||||
else
|
||||
itemEffect = gSaveBlock1Ptr->enigmaBerry.itemEffect;
|
||||
}
|
||||
@ -233,7 +233,7 @@ u8 *sub_806CF78(u16 itemId)
|
||||
itemEffect = gItemEffectTable[itemId - 13];
|
||||
}
|
||||
|
||||
gStringBattler = gBankInMenu;
|
||||
gPotentialItemEffectBattler = gBattlerInMenuId;
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
@ -247,7 +247,7 @@ u8 *sub_806CF78(u16 itemId)
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerAttacker = gBankInMenu;
|
||||
gBattlerAttacker = gBattlerInMenuId;
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gText_PkmnGettingPumped);
|
||||
}
|
||||
}
|
||||
@ -255,7 +255,7 @@ u8 *sub_806CF78(u16 itemId)
|
||||
|
||||
if (itemEffect[3] & 0x80)
|
||||
{
|
||||
gBattlerAttacker = gBankInMenu;
|
||||
gBattlerAttacker = gBattlerInMenuId;
|
||||
BattleStringExpandPlaceholdersToDisplayedString(gText_PkmnShroudedInMist);
|
||||
}
|
||||
|
||||
@ -1371,7 +1371,7 @@ void sub_806E994(void)
|
||||
else
|
||||
gBattleTextBuff1[3] = gBattlerPartyIndexes[gBattleStruct->field_49];
|
||||
|
||||
PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff2, gBankInMenu, pokemon_order_func(gBattlerPartyIndexes[gBankInMenu]))
|
||||
PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff2, gBattlerInMenuId, pokemon_order_func(gBattlerPartyIndexes[gBattlerInMenuId]))
|
||||
|
||||
BattleStringExpandPlaceholders(gText_PkmnsXPreventsSwitching, gStringVar4);
|
||||
}
|
||||
|
||||
@ -20,6 +20,7 @@
|
||||
#include "task.h"
|
||||
#include "text.h"
|
||||
#include "window.h"
|
||||
#include "event_data.h"
|
||||
|
||||
struct ContestMove
|
||||
{
|
||||
@ -36,8 +37,6 @@ struct ContestEffect
|
||||
u8 jam;
|
||||
};
|
||||
|
||||
|
||||
|
||||
extern struct UnkSummaryStruct* gUnknown_0203CF1C;
|
||||
extern struct BgTemplate gUnknown_0861CBB4;
|
||||
extern u8 gUnknown_0203CF20;
|
||||
@ -45,7 +44,6 @@ extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern s8 gUnknown_0861CC1C[];
|
||||
extern u8 gUnknown_08329D22[];
|
||||
extern u8 gUnknown_0203CF21;
|
||||
extern u16 gSpecialVar_0x8005;
|
||||
extern struct UnkStruct_61CC04 gUnknown_0861CC04;
|
||||
extern struct UnkStruct_61CC04 gUnknown_0861CC10;
|
||||
extern struct UnkStruct_61CC04 gUnknown_0861CBEC;
|
||||
|
||||
@ -13,23 +13,15 @@
|
||||
#include "util.h"
|
||||
#include "task.h"
|
||||
#include "text.h"
|
||||
#include "battle_setup.h"
|
||||
|
||||
#define BANK_RECORD_SIZE 664
|
||||
#define BATTLER_RECORD_SIZE 664
|
||||
#define ILLEGAL_BATTLE_TYPES ((BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_FIRST_BATTLE \
|
||||
| BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_ROAMER | BATTLE_TYPE_EREADER_TRAINER \
|
||||
| BATTLE_TYPE_KYOGRE_GROUDON | BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI \
|
||||
| BATTLE_TYPE_RECORDED | BATTLE_TYPE_x4000000 | BATTLE_TYPE_SECRET_BASE \
|
||||
| BATTLE_TYPE_GROUDON | BATTLE_TYPE_KYOGRE | BATTLE_TYPE_RAYQUAZA))
|
||||
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern u16 gTrainerBattleOpponent_A;
|
||||
extern u16 gTrainerBattleOpponent_B;
|
||||
extern u16 gPartnerTrainerId;
|
||||
extern u8 gActiveBattler;
|
||||
extern u8 gBattlersCount;
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
|
||||
extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT];
|
||||
extern u8 gUnknown_03001278;
|
||||
extern u8 gUnknown_03001279;
|
||||
|
||||
@ -38,7 +30,7 @@ struct PlayerInfo
|
||||
u32 trainerId;
|
||||
u8 name[PLAYER_NAME_LENGTH];
|
||||
u8 gender;
|
||||
u16 bank;
|
||||
u16 battlerId;
|
||||
u16 language;
|
||||
};
|
||||
|
||||
@ -58,7 +50,7 @@ struct RecordedBattleSave
|
||||
u8 playersLanguage[MAX_BATTLERS_COUNT];
|
||||
u32 rngSeed;
|
||||
u32 battleFlags;
|
||||
u8 playersBank[MAX_BATTLERS_COUNT];
|
||||
u8 playersBattlers[MAX_BATTLERS_COUNT];
|
||||
u16 opponentA;
|
||||
u16 opponentB;
|
||||
u16 partnerId;
|
||||
@ -75,13 +67,13 @@ struct RecordedBattleSave
|
||||
u16 field_50E[6];
|
||||
u8 field_51A;
|
||||
u8 field_51B;
|
||||
u8 battleRecord[MAX_BATTLERS_COUNT][BANK_RECORD_SIZE];
|
||||
u8 battleRecord[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE];
|
||||
u32 checksum;
|
||||
};
|
||||
|
||||
EWRAM_DATA u32 gRecordedBattleRngSeed = 0;
|
||||
EWRAM_DATA u32 gBattlePalaceMoveSelectionRngValue = 0;
|
||||
EWRAM_DATA static u8 sBattleRecords[MAX_BATTLERS_COUNT][BANK_RECORD_SIZE] = {0};
|
||||
EWRAM_DATA static u8 sBattleRecords[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE] = {0};
|
||||
EWRAM_DATA static u16 sRecordedBytesNo[MAX_BATTLERS_COUNT] = {0};
|
||||
EWRAM_DATA static u16 sUnknown_0203C79C[4] = {0};
|
||||
EWRAM_DATA static u16 sUnknown_0203C7A4[4] = {0};
|
||||
@ -131,7 +123,7 @@ void sub_8184DA4(u8 arg0)
|
||||
|
||||
if (arg0 == 1)
|
||||
{
|
||||
for (j = 0; j < BANK_RECORD_SIZE; j++)
|
||||
for (j = 0; j < BATTLER_RECORD_SIZE; j++)
|
||||
{
|
||||
sBattleRecords[i][j] |= 0xFF;
|
||||
}
|
||||
@ -168,7 +160,7 @@ void sub_8184E58(void)
|
||||
{
|
||||
sRecordedBattle_Players[i].trainerId = gLinkPlayers[i].trainerId;
|
||||
sRecordedBattle_Players[i].gender = gLinkPlayers[i].gender;
|
||||
sRecordedBattle_Players[i].bank = gLinkPlayers[i].lp_field_18;
|
||||
sRecordedBattle_Players[i].battlerId = gLinkPlayers[i].lp_field_18;
|
||||
sRecordedBattle_Players[i].language = gLinkPlayers[i].language;
|
||||
|
||||
if (i < linkPlayersCount)
|
||||
@ -192,7 +184,7 @@ void sub_8184E58(void)
|
||||
| (gSaveBlock2Ptr->playerTrainerId[3] << 24);
|
||||
|
||||
sRecordedBattle_Players[0].gender = gSaveBlock2Ptr->playerGender;
|
||||
sRecordedBattle_Players[0].bank = 0;
|
||||
sRecordedBattle_Players[0].battlerId = 0;
|
||||
sRecordedBattle_Players[0].language = gGameLanguage;
|
||||
|
||||
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
|
||||
@ -200,31 +192,31 @@ void sub_8184E58(void)
|
||||
}
|
||||
}
|
||||
|
||||
void RecordedBattle_SetBattlerAction(u8 bank, u8 action)
|
||||
void RecordedBattle_SetBattlerAction(u8 battlerId, u8 action)
|
||||
{
|
||||
if (sRecordedBytesNo[bank] < BANK_RECORD_SIZE && sUnknown_0203C7AC != 2)
|
||||
if (sRecordedBytesNo[battlerId] < BATTLER_RECORD_SIZE && sUnknown_0203C7AC != 2)
|
||||
{
|
||||
sBattleRecords[bank][sRecordedBytesNo[bank]++] = action;
|
||||
sBattleRecords[battlerId][sRecordedBytesNo[battlerId]++] = action;
|
||||
}
|
||||
}
|
||||
|
||||
void RecordedBattle_ClearBattlerAction(u8 bank, u8 bytesToClear)
|
||||
void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < bytesToClear; i++)
|
||||
{
|
||||
sRecordedBytesNo[bank]--;
|
||||
sBattleRecords[bank][sRecordedBytesNo[bank]] |= 0xFF;
|
||||
if (sRecordedBytesNo[bank] == 0)
|
||||
sRecordedBytesNo[battlerId]--;
|
||||
sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] |= 0xFF;
|
||||
if (sRecordedBytesNo[battlerId] == 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
u8 RecordedBattle_GetBattlerAction(u8 bank)
|
||||
u8 RecordedBattle_GetBattlerAction(u8 battlerId)
|
||||
{
|
||||
// trying to read past array or invalid action byte, battle is over
|
||||
if (sRecordedBytesNo[bank] >= BANK_RECORD_SIZE || sBattleRecords[bank][sRecordedBytesNo[bank]] == 0xFF)
|
||||
if (sRecordedBytesNo[battlerId] >= BATTLER_RECORD_SIZE || sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] == 0xFF)
|
||||
{
|
||||
gSpecialVar_Result = gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED; // hah
|
||||
ResetPaletteFadeControl();
|
||||
@ -234,7 +226,7 @@ u8 RecordedBattle_GetBattlerAction(u8 bank)
|
||||
}
|
||||
else
|
||||
{
|
||||
return sBattleRecords[bank][sRecordedBytesNo[bank]++];
|
||||
return sBattleRecords[battlerId][sRecordedBytesNo[battlerId]++];
|
||||
}
|
||||
}
|
||||
|
||||
@ -358,7 +350,7 @@ u32 MoveRecordedBattleToSaveData(void)
|
||||
}
|
||||
battleSave->playersGender[i] = sRecordedBattle_Players[i].gender;
|
||||
battleSave->playersLanguage[i] = sRecordedBattle_Players[i].language;
|
||||
battleSave->playersBank[i] = sRecordedBattle_Players[i].bank;
|
||||
battleSave->playersBattlers[i] = sRecordedBattle_Players[i].battlerId;
|
||||
battleSave->playersTrainerId[i] = sRecordedBattle_Players[i].trainerId;
|
||||
}
|
||||
|
||||
@ -375,16 +367,16 @@ u32 MoveRecordedBattleToSaveData(void)
|
||||
}
|
||||
else if (sRecordedBattle_BattleFlags & BATTLE_TYPE_MULTI)
|
||||
{
|
||||
switch (sRecordedBattle_Players[0].bank)
|
||||
switch (sRecordedBattle_Players[0].battlerId)
|
||||
{
|
||||
case 0:
|
||||
case 2:
|
||||
if (!(sRecordedBattle_Players[gUnknown_0203C7B4].bank & 1))
|
||||
if (!(sRecordedBattle_Players[gUnknown_0203C7B4].battlerId & 1))
|
||||
battleSave->battleFlags |= BATTLE_TYPE_x80000000;
|
||||
break;
|
||||
case 1:
|
||||
case 3:
|
||||
if ((sRecordedBattle_Players[gUnknown_0203C7B4].bank & 1))
|
||||
if ((sRecordedBattle_Players[gUnknown_0203C7B4].battlerId & 1))
|
||||
battleSave->battleFlags |= BATTLE_TYPE_x80000000;
|
||||
break;
|
||||
}
|
||||
@ -1349,7 +1341,7 @@ static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src)
|
||||
}
|
||||
gLinkPlayers[i].gender = src->playersGender[i];
|
||||
gLinkPlayers[i].language = src->playersLanguage[i];
|
||||
gLinkPlayers[i].lp_field_18 = src->playersBank[i];
|
||||
gLinkPlayers[i].lp_field_18 = src->playersBattlers[i];
|
||||
gLinkPlayers[i].trainerId = src->playersTrainerId[i];
|
||||
|
||||
if (var)
|
||||
@ -1388,7 +1380,7 @@ static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src)
|
||||
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
{
|
||||
for (j = 0; j < BANK_RECORD_SIZE; j++)
|
||||
for (j = 0; j < BATTLER_RECORD_SIZE; j++)
|
||||
{
|
||||
sBattleRecords[i][j] = src->battleRecord[i][j];
|
||||
}
|
||||
@ -1456,7 +1448,7 @@ static void RecordedBattle_RestoreSavedParties(void)
|
||||
}
|
||||
}
|
||||
|
||||
u8 GetActiveBankLinkPlayerGender(void)
|
||||
u8 GetActiveBattlerLinkPlayerGender(void)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
@ -1497,7 +1489,7 @@ u8 GetTextSpeedInRecordedBattle(void)
|
||||
return sRecordedBattle_TextSpeed;
|
||||
}
|
||||
|
||||
void RecordedBattle_CopyBankMoves(void)
|
||||
void RecordedBattle_CopyBattlerMoves(void)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
@ -1518,32 +1510,32 @@ void RecordedBattle_CopyBankMoves(void)
|
||||
|
||||
void sub_818603C(u8 arg0)
|
||||
{
|
||||
s32 bank, j, k;
|
||||
s32 battlerId, j, k;
|
||||
|
||||
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
|
||||
return;
|
||||
|
||||
for (bank = 0; bank < gBattlersCount; bank++)
|
||||
for (battlerId = 0; battlerId < gBattlersCount; battlerId++)
|
||||
{
|
||||
if (GetBattlerSide(bank) != B_SIDE_OPPONENT) // player's side only
|
||||
if (GetBattlerSide(battlerId) != B_SIDE_OPPONENT) // player's side only
|
||||
{
|
||||
if (arg0 == 1)
|
||||
{
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
if (gBattleMons[bank].moves[j] != sRecordedBattle_PlayerMonMoves[bank / 2][j])
|
||||
if (gBattleMons[battlerId].moves[j] != sRecordedBattle_PlayerMonMoves[battlerId / 2][j])
|
||||
break;
|
||||
}
|
||||
if (j != 4) // player's mon's move has been changed
|
||||
{
|
||||
RecordedBattle_SetBattlerAction(bank, ACTION_MOVE_CHANGE);
|
||||
RecordedBattle_SetBattlerAction(battlerId, ACTION_MOVE_CHANGE);
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
for (k = 0; k < 4; k++)
|
||||
{
|
||||
if (gBattleMons[bank].moves[j] == sRecordedBattle_PlayerMonMoves[bank / 2][k])
|
||||
if (gBattleMons[battlerId].moves[j] == sRecordedBattle_PlayerMonMoves[battlerId / 2][k])
|
||||
{
|
||||
RecordedBattle_SetBattlerAction(bank, k);
|
||||
RecordedBattle_SetBattlerAction(battlerId, k);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1552,7 +1544,7 @@ void sub_818603C(u8 arg0)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sBattleRecords[bank][sRecordedBytesNo[bank]] == ACTION_MOVE_CHANGE)
|
||||
if (sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] == ACTION_MOVE_CHANGE)
|
||||
{
|
||||
u8 ppBonuses[4];
|
||||
u8 array1[4];
|
||||
@ -1561,58 +1553,58 @@ void sub_818603C(u8 arg0)
|
||||
u8 array3[8];
|
||||
u8 var;
|
||||
|
||||
RecordedBattle_GetBattlerAction(bank);
|
||||
RecordedBattle_GetBattlerAction(battlerId);
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
ppBonuses[j] = ((gBattleMons[bank].ppBonuses & ((3 << (j << 1)))) >> (j << 1));
|
||||
ppBonuses[j] = ((gBattleMons[battlerId].ppBonuses & ((3 << (j << 1)))) >> (j << 1));
|
||||
}
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
array1[j] = RecordedBattle_GetBattlerAction(bank);
|
||||
movePp.moves[j] = gBattleMons[bank].moves[array1[j]];
|
||||
movePp.pp[j] = gBattleMons[bank].pp[array1[j]];
|
||||
array1[j] = RecordedBattle_GetBattlerAction(battlerId);
|
||||
movePp.moves[j] = gBattleMons[battlerId].moves[array1[j]];
|
||||
movePp.pp[j] = gBattleMons[battlerId].pp[array1[j]];
|
||||
array3[j] = ppBonuses[array1[j]];
|
||||
array2[j] = (gDisableStructs[bank].unk18_b & gBitTable[j]) >> j;
|
||||
array2[j] = (gDisableStructs[battlerId].unk18_b & gBitTable[j]) >> j;
|
||||
}
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
gBattleMons[bank].moves[j] = movePp.moves[j];
|
||||
gBattleMons[bank].pp[j] = movePp.pp[j];
|
||||
gBattleMons[battlerId].moves[j] = movePp.moves[j];
|
||||
gBattleMons[battlerId].pp[j] = movePp.pp[j];
|
||||
}
|
||||
gBattleMons[bank].ppBonuses = 0;
|
||||
gDisableStructs[bank].unk18_b = 0;
|
||||
gBattleMons[battlerId].ppBonuses = 0;
|
||||
gDisableStructs[battlerId].unk18_b = 0;
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
gBattleMons[bank].ppBonuses |= (array3[j]) << (j << 1);
|
||||
gDisableStructs[bank].unk18_b |= (array2[j]) << (j);
|
||||
gBattleMons[battlerId].ppBonuses |= (array3[j]) << (j << 1);
|
||||
gDisableStructs[battlerId].unk18_b |= (array2[j]) << (j);
|
||||
}
|
||||
|
||||
if (!(gBattleMons[bank].status2 & STATUS2_TRANSFORMED))
|
||||
if (!(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED))
|
||||
{
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
ppBonuses[j] = ((GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_PP_BONUSES, NULL) & ((3 << (j << 1)))) >> (j << 1));
|
||||
ppBonuses[j] = ((GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP_BONUSES, NULL) & ((3 << (j << 1)))) >> (j << 1));
|
||||
}
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
movePp.moves[j] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_MOVE1 + array1[j], NULL);
|
||||
movePp.pp[j] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_PP1 + array1[j], NULL);
|
||||
movePp.moves[j] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_MOVE1 + array1[j], NULL);
|
||||
movePp.pp[j] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP1 + array1[j], NULL);
|
||||
array3[j] = ppBonuses[array1[j]];
|
||||
}
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
SetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_MOVE1 + j, &movePp.moves[j]);
|
||||
SetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_PP1 + j, &movePp.pp[j]);
|
||||
SetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_MOVE1 + j, &movePp.moves[j]);
|
||||
SetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP1 + j, &movePp.pp[j]);
|
||||
}
|
||||
var = 0;
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
var |= (array3[j]) << (j << 1);
|
||||
}
|
||||
SetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_PP_BONUSES, &var);
|
||||
SetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP_BONUSES, &var);
|
||||
}
|
||||
|
||||
gChosenMoveByBattler[bank] = gBattleMons[bank].moves[*(gBattleStruct->chosenMovePositions + bank)];
|
||||
gChosenMoveByBattler[battlerId] = gBattleMons[battlerId].moves[*(gBattleStruct->chosenMovePositions + battlerId)];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -15,7 +15,7 @@ void sub_81700F8(void)
|
||||
imeBackup = REG_IME;
|
||||
REG_IME = 0;
|
||||
RegisterRamReset(0x00000001);
|
||||
ClearGpuRegBits(REG_OFFSET_DISPCNT, 0x80);
|
||||
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_FORCED_BLANK);
|
||||
REG_IME = imeBackup;
|
||||
gMain.inBattle = FALSE;
|
||||
SetSaveBlocksPointers(sub_815355C());
|
||||
|
||||
@ -12,6 +12,7 @@
|
||||
#include "sprite.h"
|
||||
#include "constants/species.h"
|
||||
#include "battle_interface.h"
|
||||
#include "battle_anim.h"
|
||||
|
||||
extern u16 gBattle_BG0_X;
|
||||
extern u16 gBattle_BG0_Y;
|
||||
@ -21,28 +22,12 @@ extern u16 gBattle_BG2_X;
|
||||
extern u16 gBattle_BG2_Y;
|
||||
extern u16 gBattle_BG3_X;
|
||||
extern u16 gBattle_BG3_Y;
|
||||
extern u8 gReservedSpritePaletteCount;
|
||||
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBankInMenu;
|
||||
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattlersCount;
|
||||
extern u32 gBattleTypeFlags;
|
||||
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
|
||||
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
|
||||
extern struct SpriteTemplate gUnknown_0202499C;
|
||||
|
||||
extern const union AnimCmd * const * const gMonAnimationsSpriteAnimsPtrTable[];
|
||||
|
||||
extern void ScanlineEffect_Clear(void);
|
||||
extern void sub_8035658(void);
|
||||
extern bool8 IsDoubleBattle(void);
|
||||
extern u8 GetSubstituteSpriteDefault_Y(u8 bank);
|
||||
extern u8 GetBattlerSpriteDefault_Y(u8 bank);
|
||||
extern u8 sub_80A82E4(u8 bank);
|
||||
extern void sub_806A068(u16 species, u8 bankIdentity);
|
||||
extern void sub_806A12C(u16 backPicId, u8 bankIdentity);
|
||||
extern u8 GetBattlerSpriteCoord(u8 bank, u8 caseId);
|
||||
|
||||
// this file's functions
|
||||
static void CB2_ReshowBattleScreenAfterMenu(void);
|
||||
@ -175,7 +160,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void)
|
||||
SetBattlerShadowSpriteCallback(opponentBank, species);
|
||||
}
|
||||
|
||||
ActionSelectionCreateCursorAt(gActionSelectionCursor[gBankInMenu], 0);
|
||||
ActionSelectionCreateCursorAt(gActionSelectionCursor[gBattlerInMenuId], 0);
|
||||
|
||||
if (gLinkVSyncDisabled != 0 && gReceivedRemoteLinkPlayers != 0)
|
||||
{
|
||||
|
||||
@ -108,7 +108,7 @@ void SafariZoneRetirePrompt(void)
|
||||
void CB2_EndSafariBattle(void)
|
||||
{
|
||||
sSafariZoneFleedMons += gBattleResults.field_1F;
|
||||
if (gBattleOutcome == B_OUTCOME_CAUGHT_POKE)
|
||||
if (gBattleOutcome == B_OUTCOME_CAUGHT)
|
||||
sSafariZoneCaughtMons++;
|
||||
if (gNumSafariBalls != 0)
|
||||
{
|
||||
@ -121,7 +121,7 @@ void CB2_EndSafariBattle(void)
|
||||
gFieldCallback = sub_80AF6F0;
|
||||
SetMainCallback2(c2_load_new_map);
|
||||
}
|
||||
else if (gBattleOutcome == B_OUTCOME_CAUGHT_POKE)
|
||||
else if (gBattleOutcome == B_OUTCOME_CAUGHT)
|
||||
{
|
||||
ScriptContext1_SetupScript(EventScript_2A4B9B);
|
||||
ScriptContext1_Stop();
|
||||
|
||||
@ -63,13 +63,6 @@ static EWRAM_DATA u16 sMovingNpcMapBank = 0;
|
||||
static EWRAM_DATA u16 sMovingNpcMapId = 0;
|
||||
static EWRAM_DATA u16 sFieldEffectScriptId = 0;
|
||||
|
||||
extern u16 gSpecialVar_0x8000;
|
||||
extern u16 gSpecialVar_0x8001;
|
||||
extern u16 gSpecialVar_0x8002;
|
||||
extern u16 gSpecialVar_0x8004;
|
||||
|
||||
extern u16 gSpecialVar_Result;
|
||||
|
||||
extern u16 gSpecialVar_ContestCategory;
|
||||
|
||||
IWRAM_DATA u8 gUnknown_03000F30;
|
||||
|
||||
@ -32,6 +32,7 @@
|
||||
#include "international_string_util.h"
|
||||
#include "event_data.h"
|
||||
#include "battle.h"
|
||||
#include "battle_setup.h"
|
||||
#include "rom6.h"
|
||||
#include "decoration.h"
|
||||
#include "link.h"
|
||||
|
||||
8
src/tv.c
8
src/tv.c
@ -1208,7 +1208,7 @@ void PutPokemonTodayFailedOnTheAir(void)
|
||||
{
|
||||
ct = 0xFF;
|
||||
}
|
||||
if (ct > 2 && (gBattleOutcome == B_OUTCOME_POKE_FLED || gBattleOutcome == B_OUTCOME_WON))
|
||||
if (ct > 2 && (gBattleOutcome == B_OUTCOME_MON_FLED || gBattleOutcome == B_OUTCOME_WON))
|
||||
{
|
||||
sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
|
||||
if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_POKEMON_TODAY_FAILED, FALSE) != TRUE)
|
||||
@ -2406,7 +2406,7 @@ void sub_80EE184(void)
|
||||
case B_OUTCOME_DREW:
|
||||
show->breakingNews.kind = TVSHOW_OFF_AIR;
|
||||
return;
|
||||
case B_OUTCOME_CAUGHT_POKE:
|
||||
case B_OUTCOME_CAUGHT:
|
||||
show->breakingNews.outcome = 0;
|
||||
break;
|
||||
case B_OUTCOME_WON:
|
||||
@ -2417,8 +2417,8 @@ void sub_80EE184(void)
|
||||
case B_OUTCOME_NO_SAFARI_BALLS:
|
||||
show->breakingNews.outcome = 2;
|
||||
break;
|
||||
case B_OUTCOME_POKE_FLED:
|
||||
case B_OUTCOME_POKE_TELEPORTED:
|
||||
case B_OUTCOME_MON_FLED:
|
||||
case B_OUTCOME_MON_TELEPORTED:
|
||||
show->breakingNews.outcome = 3;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -202,33 +202,7 @@ gUnknown_03005CDE: @ 3005CDE
|
||||
.space 0x1A
|
||||
|
||||
.include "rtc.o"
|
||||
|
||||
gPreBattleCallback1: @ 3005D00
|
||||
.space 0x4
|
||||
|
||||
gBattleMainFunc: @ 3005D04
|
||||
.space 0xC
|
||||
|
||||
gBattleResults: @ 3005D10
|
||||
.space 0x44
|
||||
|
||||
gLeveledUpInBattle: @ 3005D54
|
||||
.space 0xC
|
||||
|
||||
gBattlerControllerFuncs: @ 3005D60
|
||||
.space 0x10
|
||||
|
||||
gHealthboxSpriteIds: @ 3005D70
|
||||
.space 0x4
|
||||
|
||||
gMultiUsePlayerCursor: @ 3005D74
|
||||
.space 0x4
|
||||
|
||||
gNumberOfMovesToChoose: @ 3005D78
|
||||
.space 0x4
|
||||
|
||||
gUnknown_03005D7C: @ 3005D7C
|
||||
.space 0x4
|
||||
.include "battle_main.o"
|
||||
|
||||
gRngValue: @ 3005D80
|
||||
.space 0x4
|
||||
|
||||
283
sym_ewram.txt
283
sym_ewram.txt
@ -239,288 +239,7 @@ gBattle_WIN1V: @ 2022E2A
|
||||
.space 0x2
|
||||
|
||||
.include "src/battle_message.o"
|
||||
|
||||
gUnknown_02022F88: @ 2022F88
|
||||
.space 0x64
|
||||
|
||||
gBattleTypeFlags: @ 2022FEC
|
||||
.space 0x4
|
||||
|
||||
gBattleTerrain: @ 2022FF0
|
||||
.space 0x4
|
||||
|
||||
gUnknown_02022FF4: @ 2022FF4
|
||||
.space 0x4
|
||||
|
||||
gUnknown_02022FF8: @ 2022FF8
|
||||
.space 0x60
|
||||
|
||||
gUnknown_02023058: @ 2023058
|
||||
.space 0x4
|
||||
|
||||
gUnknown_0202305C: @ 202305C
|
||||
.space 0x4
|
||||
|
||||
gUnknown_02023060: @ 2023060
|
||||
.space 0x4
|
||||
|
||||
gBattleBufferA: @ 2023064
|
||||
.space 0x800
|
||||
|
||||
gBattleBufferB: @ 2023864
|
||||
.space 0x800
|
||||
|
||||
gActiveBattler: @ 2024064
|
||||
.space 0x4
|
||||
|
||||
gBattleControllerExecFlags: @ 2024068
|
||||
.space 0x4
|
||||
|
||||
gBattlersCount: @ 202406C
|
||||
.space 0x2
|
||||
|
||||
gBattlerPartyIndexes: @ 202406E
|
||||
.space 0x8
|
||||
|
||||
gBattlerPositions: @ 2024076
|
||||
.space 0x4
|
||||
|
||||
gActionsByTurnOrder: @ 202407A
|
||||
.space 0x4
|
||||
|
||||
gBattleTurnOrder: @ 202407E
|
||||
.space 0x4
|
||||
|
||||
gCurrentTurnActionNumber: @ 2024082
|
||||
.space 0x1
|
||||
|
||||
gCurrentActionFuncId: @ 2024083
|
||||
.space 0x1
|
||||
|
||||
gBattleMons: @ 2024084
|
||||
.space 0x160
|
||||
|
||||
gBattlerSpriteIds: @ 20241E4
|
||||
.space 0x4
|
||||
|
||||
gCurrMovePos: @ 20241E8
|
||||
.space 0x1
|
||||
|
||||
gUnknown_020241E9: @ 20241E9
|
||||
.space 0x1
|
||||
|
||||
gCurrentMove: @ 20241EA
|
||||
.space 0x2
|
||||
|
||||
gChosenMove: @ 20241EC
|
||||
.space 0x2
|
||||
|
||||
gRandomMove: @ 20241EE
|
||||
.space 0x2
|
||||
|
||||
gBattleMoveDamage: @ 20241F0
|
||||
.space 0x4
|
||||
|
||||
gHpDealt: @ 20241F4
|
||||
.space 0x4
|
||||
|
||||
gTakenDmg: @ 20241F8
|
||||
.space 0x10
|
||||
|
||||
gLastUsedItem: @ 2024208
|
||||
.space 0x2
|
||||
|
||||
gLastUsedAbility: @ 202420A
|
||||
.space 0x1
|
||||
|
||||
gBattlerAttacker: @ 202420B
|
||||
.space 0x1
|
||||
|
||||
gBattlerTarget: @ 202420C
|
||||
.space 0x1
|
||||
|
||||
gBank1: @ 202420D
|
||||
.space 0x1
|
||||
|
||||
gEffectBank: @ 202420E
|
||||
.space 0x1
|
||||
|
||||
gStringBattler: @ 202420F
|
||||
.space 0x1
|
||||
|
||||
gAbsentBattlerFlags: @ 2024210
|
||||
.space 0x1
|
||||
|
||||
gCritMultiplier: @ 2024211
|
||||
.space 0x1
|
||||
|
||||
gMultiHitCounter: @ 2024212
|
||||
.space 0x2
|
||||
|
||||
gBattlescriptCurrInstr: @ 2024214
|
||||
.space 0x8
|
||||
|
||||
gChosenActionByBattler: @ 202421C
|
||||
.space 0x4
|
||||
|
||||
gSelectionBattleScripts: @ 2024220
|
||||
.space 0x10
|
||||
|
||||
gPalaceSelectionBattleScripts: @ 2024230
|
||||
.space 0x10
|
||||
|
||||
gLastPrintedMoves: @ 2024240
|
||||
.space 0x8
|
||||
|
||||
gLastMoves: @ 2024248
|
||||
.space 0x8
|
||||
|
||||
gLastLandedMoves: @ 2024250
|
||||
.space 0x8
|
||||
|
||||
gLastHitByType: @ 2024258
|
||||
.space 0x8
|
||||
|
||||
gLastResultingMoves: @ 2024260
|
||||
.space 0x8
|
||||
|
||||
gLockedMoves: @ 2024268
|
||||
.space 0x8
|
||||
|
||||
gLastHitBy: @ 2024270
|
||||
.space 0x4
|
||||
|
||||
gChosenMoveByBattler: @ 2024274
|
||||
.space 0x8
|
||||
|
||||
gMoveResultFlags: @ 202427C
|
||||
.space 0x4
|
||||
|
||||
gHitMarker: @ 2024280
|
||||
.space 0x4
|
||||
|
||||
gUnknown_02024284: @ 2024284
|
||||
.space 0x4
|
||||
|
||||
gTakenDmgBanks: @ 2024288
|
||||
.space 0x4
|
||||
|
||||
gUnknown_0202428C: @ 202428C
|
||||
.space 0x2
|
||||
|
||||
gSideStatuses: @ 202428E
|
||||
.space 0x6
|
||||
|
||||
gSideTimers: @ 2024294
|
||||
.space 0x18
|
||||
|
||||
gStatuses3: @ 20242AC
|
||||
.space 0x10
|
||||
|
||||
gDisableStructs: @ 20242BC
|
||||
.space 0x70
|
||||
|
||||
gPauseCounterBattle: @ 202432C
|
||||
.space 0x2
|
||||
|
||||
gPaydayMoney: @ 202432E
|
||||
.space 0x2
|
||||
|
||||
gRandomTurnNumber: @ 2024330
|
||||
.space 0x2
|
||||
|
||||
gBattleCommunication: @ 2024332
|
||||
.space 0x1
|
||||
|
||||
gUnknown_02024333: @ 2024333
|
||||
.space 0x7
|
||||
|
||||
gBattleOutcome: @ 202433A
|
||||
.space 0x2
|
||||
|
||||
gProtectStructs: @ 202433C
|
||||
.space 0x40
|
||||
|
||||
gSpecialStatuses: @ 202437C
|
||||
.space 0x50
|
||||
|
||||
gBattleWeather: @ 20243CC
|
||||
.space 0x4
|
||||
|
||||
gWishFutureKnock: @ 20243D0
|
||||
.space 0x2C
|
||||
|
||||
gUnknown_020243FC: @ 20243FC
|
||||
.space 0x2
|
||||
|
||||
gSentPokesToOpponent: @ 20243FE
|
||||
.space 0x2
|
||||
|
||||
gDynamicBasePower: @ 2024400
|
||||
.space 0x2
|
||||
|
||||
gExpShareExp: @ 2024402
|
||||
.space 0x2
|
||||
|
||||
gEnigmaBerries: @ 2024404
|
||||
.space 0x70
|
||||
|
||||
gBattleScripting: @ 2024474
|
||||
.space 0x28
|
||||
|
||||
gBattleStruct: @ 202449C
|
||||
.space 0x4
|
||||
|
||||
gLinkBattleSendBuffer: @ 20244A0
|
||||
.space 0x4
|
||||
|
||||
gLinkBattleRecvBuffer: @ 20244A4
|
||||
.space 0x4
|
||||
|
||||
gBattleResources: @ 20244A8
|
||||
.space 0x4
|
||||
|
||||
gActionSelectionCursor: @ 20244AC
|
||||
.space 0x4
|
||||
|
||||
gMoveSelectionCursor: @ 20244B0
|
||||
.space 0x4
|
||||
|
||||
gUnknown_020244B4: @ 20244B4
|
||||
.space 0x4
|
||||
|
||||
gBankInMenu: @ 20244B8
|
||||
.space 0x1
|
||||
|
||||
gDoingBattleAnim: @ 20244B9
|
||||
.space 0x3
|
||||
|
||||
gTransformedPersonalities: @ 20244BC
|
||||
.space 0x10
|
||||
|
||||
gPlayerDpadHoldFrames: @ 20244CC
|
||||
.space 0x4
|
||||
|
||||
gBattleSpritesDataPtr: @ 20244D0
|
||||
.space 0x4
|
||||
|
||||
gMonSpritesGfxPtr: @ 20244D4
|
||||
.space 0x4
|
||||
|
||||
gUnknown_020244D8: @ 20244D8
|
||||
.space 0x4
|
||||
|
||||
gUnknown_020244DC: @ 20244DC
|
||||
.space 0x4
|
||||
|
||||
gBattleMovePower: @ 20244E0
|
||||
.space 0x2
|
||||
|
||||
gMoveToLearn: @ 20244E2
|
||||
.space 0x2
|
||||
|
||||
gBattleMonForms: @ 20244E4
|
||||
.space 0x4
|
||||
.include "src/battle_main.o"
|
||||
|
||||
.include "src/pokemon_1.o"
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user