summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_2.s30
-rw-r--r--asm/battle_4.s1396
-rw-r--r--asm/rom3.s10
-rw-r--r--data/battle_scripts_1.s6
-rw-r--r--include/battle.h24
-rw-r--r--include/battle_controllers.h1
-rw-r--r--include/pokemon.h1
-rw-r--r--src/battle_3.c5
-rw-r--r--src/battle_4.c570
-rw-r--r--sym_ewram.txt4
10 files changed, 616 insertions, 1431 deletions
diff --git a/asm/battle_2.s b/asm/battle_2.s
index 47db7e082..f965af976 100644
--- a/asm/battle_2.s
+++ b/asm/battle_2.s
@@ -6357,7 +6357,7 @@ sub_8039F40: @ 8039F40
mov r12, r1
ldr r5, =gDisableStructs
movs r4, 0
- ldr r7, =gUnknown_02024240
+ ldr r7, =gUnknownMovesUsedByBanks
ldr r6, =gLockedMoves
_08039F70:
ldr r0, =gStatuses3
@@ -7073,7 +7073,7 @@ _0803A540:
mov r1, r9
ldrb r0, [r1]
lsls r0, 1
- ldr r3, =gUnknown_02024240
+ ldr r3, =gUnknownMovesUsedByBanks
adds r0, r3
strh r4, [r0]
ldrb r0, [r1]
@@ -7584,7 +7584,7 @@ _0803A852:
strh r2, [r0]
ldrb r0, [r1]
lsls r0, 1
- ldr r1, =gUnknown_02024240
+ ldr r1, =gUnknownMovesUsedByBanks
adds r0, r1
strh r2, [r0]
ldr r2, =gActiveBank
@@ -13706,7 +13706,7 @@ _0803E110:
ands r0, r1
strb r0, [r3]
ldr r2, =gCurrentMove
- ldr r1, =gUnknown_020241EC
+ ldr r1, =gLastUsedMove
movs r0, 0xA5
strh r0, [r1]
strh r0, [r2]
@@ -13746,7 +13746,7 @@ _0803E1BC:
beq _0803E204
_0803E1E2:
ldr r3, =gCurrentMove
- ldr r2, =gUnknown_020241EC
+ ldr r2, =gLastUsedMove
ldr r1, =gLockedMoves
lsls r0, r4, 1
adds r0, r1
@@ -13776,7 +13776,7 @@ _0803E204:
cmp r1, r0
bne _0803E268
ldr r2, =gCurrentMove
- ldr r0, =gUnknown_020241EC
+ ldr r0, =gLastUsedMove
strh r3, [r0]
strh r3, [r2]
ldrb r1, [r6]
@@ -13807,7 +13807,7 @@ _0803E268:
mov r0, r8
strb r2, [r0]
ldr r3, =gCurrentMove
- ldr r2, =gUnknown_020241EC
+ ldr r2, =gLastUsedMove
ldrb r0, [r0]
lsls r0, 1
ldrb r1, [r6]
@@ -13869,7 +13869,7 @@ _0803E2DC:
cmp r3, r2
beq _0803E334
ldr r1, =gCurrentMove
- ldr r0, =gUnknown_020241EC
+ ldr r0, =gLastUsedMove
strh r3, [r0]
strh r3, [r1]
ldrh r0, [r1]
@@ -13885,7 +13885,7 @@ _0803E316:
.pool
_0803E334:
ldr r1, =gCurrentMove
- ldr r0, =gUnknown_020241EC
+ ldr r0, =gLastUsedMove
strh r3, [r0]
strh r3, [r1]
_0803E33C:
@@ -14086,7 +14086,7 @@ _0803E4E0:
b _0803E5E2
_0803E4E8:
ldr r2, =gBattleMoves
- ldr r0, =gUnknown_020241EC
+ ldr r0, =gLastUsedMove
ldrh r1, [r0]
lsls r0, r1, 1
adds r0, r1
@@ -14218,7 +14218,7 @@ _0803E630:
cmp r0, 0
beq _0803E6E0
ldr r2, =gBattleMoves
- ldr r0, =gUnknown_020241EC
+ ldr r0, =gLastUsedMove
ldrh r1, [r0]
lsls r0, r1, 1
adds r0, r1
@@ -14406,7 +14406,7 @@ _0803E7EC:
.pool
_0803E808:
ldr r4, =gBattlescriptCurrInstr
- ldr r3, =gUnknown_082D86A8
+ ldr r3, =gBattleScriptsForMoveEffects
ldr r2, =gBattleMoves
ldr r0, =gCurrentMove
ldrh r1, [r0]
@@ -16252,8 +16252,8 @@ CancelMultiTurnMoves: @ 803F8A0
.pool
thumb_func_end CancelMultiTurnMoves
- thumb_func_start sub_803F90C
-sub_803F90C: @ 803F90C
+ thumb_func_start HasMoveFailed
+HasMoveFailed: @ 803F90C
push {lr}
lsls r0, 24
ldr r1, =gProtectStructs
@@ -16298,7 +16298,7 @@ _0803F95C:
_0803F95E:
pop {r1}
bx r1
- thumb_func_end sub_803F90C
+ thumb_func_end HasMoveFailed
thumb_func_start PrepareStringBattle
PrepareStringBattle: @ 803F964
diff --git a/asm/battle_4.s b/asm/battle_4.s
index ddde05c1d..6a609e0fb 100644
--- a/asm/battle_4.s
+++ b/asm/battle_4.s
@@ -5,1380 +5,6 @@
.text
-
- thumb_func_start atk48_playstatchangeanimation
-atk48_playstatchangeanimation: @ 804B9D8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- movs r7, 0
- movs r0, 0
- mov r8, r0
- movs r3, 0
- ldr r5, =gBattlescriptCurrInstr
- ldr r0, [r5]
- ldrb r0, [r0, 0x1]
- str r3, [sp]
- bl GetBattleBank
- ldr r2, =gActiveBank
- strb r0, [r2]
- ldr r0, [r5]
- ldrb r4, [r0, 0x2]
- ldrb r1, [r0, 0x3]
- movs r0, 0x1
- ands r0, r1
- ldr r3, [sp]
- cmp r0, 0
- beq _0804BAEC
- movs r0, 0x2
- ands r0, r1
- movs r1, 0x15
- cmp r0, 0
- beq _0804BA18
- movs r1, 0x2D
-_0804BA18:
- cmp r4, 0
- beq _0804BAC0
- movs r0, 0x1
- mov r10, r0
- ldr r0, =gBattleMons + 0x18
- mov r9, r0
- lsls r5, r1, 16
-_0804BA26:
- adds r0, r4, 0
- mov r1, r10
- ands r0, r1
- cmp r0, 0
- beq _0804BAB2
- ldr r0, =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r1, [r0, 0x3]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0804BA58
- ldr r0, =gActiveBank
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7, r0
- b _0804BAA0
- .pool
-_0804BA58:
- ldr r6, =gActiveBank
- ldrb r0, [r6]
- str r3, [sp]
- bl GetBankIdentity
- mov r1, r10
- ands r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSideTimers
- adds r0, r1
- ldrb r0, [r0, 0x4]
- ldr r3, [sp]
- cmp r0, 0
- bne _0804BAB2
- ldr r0, =gBattleMons
- ldrb r2, [r6]
- movs r1, 0x58
- muls r2, r1
- adds r0, r2, r0
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x1D
- beq _0804BAB2
- cmp r0, 0x49
- beq _0804BAB2
- cmp r0, 0x33
- bne _0804BA96
- cmp r7, 0x6
- beq _0804BAB2
-_0804BA96:
- cmp r0, 0x34
- bne _0804BA9E
- cmp r7, 0x1
- beq _0804BAB2
-_0804BA9E:
- adds r0, r7, r2
-_0804BAA0:
- add r0, r9
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- ble _0804BAB2
- lsrs r0, r5, 16
- mov r8, r0
- adds r3, 0x1
-_0804BAB2:
- lsrs r4, 1
- movs r1, 0x80
- lsls r1, 9
- adds r5, r1
- adds r7, 0x1
- cmp r4, 0
- bne _0804BA26
-_0804BAC0:
- ldr r0, =gBattlescriptCurrInstr
- mov r9, r0
- cmp r3, 0x1
- ble _0804BB4E
- ldr r0, [r0]
- ldrb r1, [r0, 0x3]
- movs r0, 0x2
- ands r0, r1
- movs r1, 0x39
- mov r8, r1
- cmp r0, 0
- beq _0804BB4E
- movs r0, 0x3A
- b _0804BB4C
- .pool
-_0804BAEC:
- movs r0, 0x2
- ands r0, r1
- movs r1, 0xE
- cmp r0, 0
- beq _0804BAF8
- movs r1, 0x26
-_0804BAF8:
- mov r9, r5
- cmp r4, 0
- beq _0804BB34
- ldr r6, =gBattleMons + 0x18
- adds r5, r2, 0
- lsls r2, r1, 16
-_0804BB04:
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0804BB26
- ldrb r1, [r5]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7, r0
- adds r0, r6
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0xB
- bgt _0804BB26
- lsrs r1, r2, 16
- mov r8, r1
- adds r3, 0x1
-_0804BB26:
- lsrs r4, 1
- movs r0, 0x80
- lsls r0, 9
- adds r2, r0
- adds r7, 0x1
- cmp r4, 0
- bne _0804BB04
-_0804BB34:
- cmp r3, 0x1
- ble _0804BB4E
- mov r1, r9
- ldr r0, [r1]
- ldrb r1, [r0, 0x3]
- movs r0, 0x2
- ands r0, r1
- movs r1, 0x37
- mov r8, r1
- cmp r0, 0
- beq _0804BB4E
- movs r0, 0x38
-_0804BB4C:
- mov r8, r0
-_0804BB4E:
- mov r1, r9
- ldr r2, [r1]
- ldrb r1, [r2, 0x3]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0804BB6C
- cmp r3, 0x1
- bgt _0804BB6C
- adds r0, r2, 0x4
- mov r1, r9
- b _0804BBBA
- .pool
-_0804BB6C:
- cmp r3, 0
- beq _0804BBB4
- ldr r4, =gBattleScripting
- ldrb r0, [r4, 0x1B]
- cmp r0, 0
- bne _0804BBB4
- movs r0, 0
- movs r1, 0x1
- mov r2, r8
- str r3, [sp]
- bl EmitBattleAnimation
- ldr r0, =gActiveBank
- ldrb r0, [r0]
- bl MarkBufferBankForExecution
- ldr r0, =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r1, [r0, 0x3]
- movs r0, 0x4
- ands r0, r1
- ldr r3, [sp]
- cmp r0, 0
- beq _0804BBA4
- cmp r3, 0x1
- ble _0804BBA4
- movs r0, 0x1
- strb r0, [r4, 0x1B]
-_0804BBA4:
- ldr r1, =gBattlescriptCurrInstr
- b _0804BBB6
- .pool
-_0804BBB4:
- mov r1, r9
-_0804BBB6:
- ldr r0, [r1]
- adds r0, 0x4
-_0804BBBA:
- str r0, [r1]
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end atk48_playstatchangeanimation
-
- thumb_func_start atk49_moveendturn
-atk49_moveendturn: @ 804BBCC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x1C
- movs r0, 0
- mov r10, r0
- ldr r2, =gUnknown_020241EC
- ldrh r1, [r2]
- ldr r0, =0x0000ffff
- movs r3, 0
- str r3, [sp, 0x18]
- cmp r1, r0
- beq _0804BBEE
- ldrh r2, [r2]
- str r2, [sp, 0x18]
-_0804BBEE:
- ldr r0, =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r4, [r0, 0x1]
- str r4, [sp, 0x10]
- ldrb r0, [r0, 0x2]
- str r0, [sp, 0x14]
- ldr r1, =gBattleMons
- ldr r0, =gBankAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, r0, r1
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _0804BC34
- ldr r1, =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x7]
- b _0804BC3E
- .pool
-_0804BC34:
- ldrh r0, [r1, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r0, 24
-_0804BC3E:
- str r0, [sp, 0x8]
- ldr r1, =gBattleStruct
- ldr r0, =gBankAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, 0xC8
- ldr r1, [r1]
- adds r0, r1, r0
- str r0, [sp, 0xC]
- ldrb r0, [r1, 0x13]
- cmp r0, 0
- beq _0804BCF0
- movs r5, 0x3F
- ands r5, r0
- str r5, [sp, 0x4]
- b _0804BD02
- .pool
-_0804BC68:
- ldr r4, =gActiveBank
- strb r2, [r4]
- movs r0, 0
- movs r1, 0x1
- bl dp01_build_cmdbuf_x33_a_33_33
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- b _0804C15A
- .pool
-_0804BC80:
- ldr r4, =gActiveBank
- strb r2, [r4]
- movs r0, 0
- movs r1, 0
- bl dp01_build_cmdbuf_x33_a_33_33
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r5
- ldr r0, [r1]
- ldr r2, =0xfffbff3f
- ands r0, r2
- str r0, [r1]
- b _0804C15A
- .pool
-_0804BCAC:
- strb r2, [r7]
- ldr r0, [r5]
- orrs r0, r6
- str r0, [r5]
- ldr r0, =gBattleScripting
- strb r4, [r0, 0x14]
- bl MoveValuesCleanUp
- ldr r2, =gUnknown_082D86A8
- mov r0, r8
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- add r0, r9
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- bl BattleScriptPush
- ldr r1, =gBattlescriptCurrInstr
- ldr r0, =gUnknown_082DB87D
- bl _0804C5B8
- .pool
-_0804BCF0:
- ldr r2, =gBattleMoves
- ldr r0, =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- str r0, [sp, 0x4]
-_0804BD02:
- ldr r1, =gBattleScripting
- mov r12, r1
- b _0804BD1E
- .pool
-_0804BD14:
- mov r2, r10
- cmp r2, 0
- beq _0804BD1E
- bl _0804C5A4
-_0804BD1E:
- mov r3, r12
- ldrb r0, [r3, 0x14]
- cmp r0, 0x11
- bls _0804BD2A
- bl _0804C570
-_0804BD2A:
- lsls r0, 2
- ldr r1, =_0804BD38
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0804BD38:
- .4byte _0804BD80
- .4byte _0804BE5C
- .4byte _0804BF18
- .4byte _0804BF3C
- .4byte _0804BF54
- .4byte _0804BF7C
- .4byte _0804BFA0
- .4byte _0804C048
- .4byte _0804C0BE
- .4byte _0804C0F4
- .4byte _0804C194
- .4byte _0804C088
- .4byte _0804C0A8
- .4byte _0804C1D8
- .4byte _0804C21C
- .4byte _0804C3FC
- .4byte _0804C4E4
- .4byte _0804C570
-_0804BD80:
- ldr r6, =gBattleMons
- ldr r5, =gBankTarget
- ldrb r3, [r5]
- movs r7, 0x58
- adds r2, r3, 0
- muls r2, r7
- adds r0, r6, 0
- adds r0, 0x50
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 16
- ands r0, r1
- cmp r0, 0
- bne _0804BDA0
- b _0804C184
-_0804BDA0:
- adds r0, r2, r6
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0804BDAA
- b _0804C184
-_0804BDAA:
- ldr r0, =gBankAttacker
- ldrb r1, [r0]
- cmp r1, r3
- bne _0804BDB4
- b _0804C184
-_0804BDB4:
- adds r0, r1, 0
- bl GetBankSide
- adds r4, r0, 0
- ldrb r0, [r5]
- bl GetBankSide
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- bne _0804BDCC
- b _0804C184
-_0804BDCC:
- ldr r0, =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0804BDDA
- b _0804C184
-_0804BDDA:
- ldr r2, =gSpecialStatuses
- ldrb r3, [r5]
- lsls r0, r3, 2
- adds r0, r3
- lsls r1, r0, 2
- adds r0, r2, 0
- adds r0, 0x8
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0804BDFE
- adds r0, r2, 0
- adds r0, 0xC
- adds r0, r1, r0
- ldr r0, [r0]
- cmp r0, 0
- bne _0804BDFE
- b _0804C184
-_0804BDFE:
- ldr r2, =gBattleMoves
- ldr r0, =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _0804BE14
- b _0804C184
-_0804BE14:
- adds r0, r3, 0
- muls r0, r7
- adds r1, r0, r6
- ldrb r2, [r1, 0x19]
- movs r0, 0x19
- ldrsb r0, [r1, r0]
- cmp r0, 0xB
- ble _0804BE26
- b _0804C184
-_0804BE26:
- adds r0, r2, 0x1
- strb r0, [r1, 0x19]
- bl BattleScriptPushCursor
- ldr r1, =gBattlescriptCurrInstr
- ldr r0, =gUnknown_082DAE0D
- str r0, [r1]
- b _0804C0B8
- .pool
-_0804BE5C:
- ldr r4, =gBattleMons
- ldr r6, =gBankTarget
- ldrb r2, [r6]
- movs r5, 0x58
- mov r12, r5
- mov r1, r12
- muls r1, r2
- adds r7, r4, 0
- adds r7, 0x4C
- adds r5, r1, r7
- ldr r3, [r5]
- movs r0, 0x20
- ands r0, r3
- cmp r0, 0
- bne _0804BE7C
- b _0804C184
-_0804BE7C:
- adds r0, r1, r4
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0804BE86
- b _0804C184
-_0804BE86:
- ldr r0, =gBankAttacker
- ldrb r0, [r0]
- cmp r0, r2
- bne _0804BE90
- b _0804C184
-_0804BE90:
- ldr r0, =gSpecialStatuses
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 2
- adds r0, 0xC
- adds r1, r0
- ldr r0, [r1]
- cmp r0, 0
- bne _0804BEA4
- b _0804C184
-_0804BEA4:
- ldr r0, =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0804BEB2
- b _0804C184
-_0804BEB2:
- ldr r0, [sp, 0x4]
- cmp r0, 0xA
- beq _0804BEBA
- b _0804C184
-_0804BEBA:
- movs r0, 0x21
- negs r0, r0
- ands r3, r0
- str r3, [r5]
- ldr r4, =gActiveBank
- ldrb r0, [r6]
- strb r0, [r4]
- ldrb r0, [r6]
- mov r1, r12
- muls r1, r0
- adds r0, r1, 0
- adds r0, r7
- str r0, [sp]
- movs r0, 0
- movs r1, 0x28
- movs r2, 0
- movs r3, 0x4
- bl EmitSetAttributes
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- bl BattleScriptPushCursor
- ldr r1, =gBattlescriptCurrInstr
- ldr r0, =gUnknown_082DB282
- str r0, [r1]
- movs r2, 0x1
- mov r10, r2
- b _0804C184
- .pool
-_0804BF18:
- ldr r0, =gBankTarget
- ldrb r1, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x7
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0804BF32
- b _0804C184
-_0804BF32:
- movs r3, 0x1
- mov r10, r3
- b _0804C184
- .pool
-_0804BF3C:
- ldr r0, =gBankTarget
- ldrb r1, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x4
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- b _0804C0B2
- .pool
-_0804BF54:
- movs r0, 0
- str r0, [sp]
- movs r0, 0x5
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0804BF6C
- b _0804C184
-_0804BF6C:
- movs r5, 0x1
- mov r10, r5
- ldr r0, =gBattleScripting
- mov r12, r0
- b _0804C570
- .pool
-_0804BF7C:
- ldr r0, =gBankAttacker
- ldrb r1, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x8
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0804BF96
- b _0804C184
-_0804BF96:
- movs r1, 0x1
- mov r10, r1
- b _0804C184
- .pool
-_0804BFA0:
- ldr r0, =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 18
- ands r0, r1
- cmp r0, 0
- beq _0804BFE4
- ldr r2, [sp, 0x8]
- cmp r2, 0x1D
- bne _0804BFE4
- ldr r0, =gUnknown_020241EC
- ldrh r2, [r0]
- adds r3, r0, 0
- cmp r2, 0xA5
- beq _0804BFE4
- ldr r4, [sp, 0xC]
- ldrh r1, [r4]
- cmp r1, 0
- beq _0804BFCC
- ldr r0, =0x0000ffff
- cmp r1, r0
- bne _0804BFE4
-_0804BFCC:
- cmp r2, 0xE2
- bne _0804BFDE
- ldr r0, =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _0804BFDE
- b _0804C4B6
-_0804BFDE:
- ldrh r0, [r3]
- ldr r1, [sp, 0xC]
- strh r0, [r1]
-_0804BFE4:
- movs r4, 0
- ldr r2, =gBattleMons
- ldr r3, =gBankAttacker
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r2, 0xC
- adds r0, r2
- ldrh r0, [r0]
- ldr r5, [sp, 0xC]
- ldrh r1, [r5]
- mov r9, r3
- cmp r0, r1
- beq _0804C01C
- mov r6, r9
- movs r3, 0x58
- adds r5, r1, 0
-_0804C006:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _0804C01C
- lsls r0, r4, 1
- ldrb r1, [r6]
- muls r1, r3
- adds r0, r1
- adds r0, r2
- ldrh r0, [r0]
- cmp r0, r5
- bne _0804C006
-_0804C01C:
- cmp r4, 0x4
- bne _0804C026
- movs r0, 0
- ldr r1, [sp, 0xC]
- strh r0, [r1]
-_0804C026:
- mov r2, r12
- ldrb r0, [r2, 0x14]
- adds r0, 0x1
- strb r0, [r2, 0x14]
- b _0804C570
- .pool
-_0804C048:
- movs r4, 0
- ldr r0, =gNoOfAllBanks
- ldrb r3, [r0]
- cmp r4, r3
- blt _0804C054
- b _0804C202
-_0804C054:
- ldr r7, =gBattleStruct
- movs r6, 0
- movs r3, 0xD0
- adds r5, r0, 0
- ldr r2, =gBattleMons
-_0804C05E:
- ldr r0, [r7]
- adds r0, r3
- ldrh r1, [r0]
- cmp r1, 0
- beq _0804C06C
- strh r1, [r2, 0x2E]
- strh r6, [r0]
-_0804C06C:
- adds r3, 0x2
- adds r2, 0x58
- adds r4, 0x1
- ldrb r0, [r5]
- cmp r4, r0
- blt _0804C05E
- b _0804C202
- .pool
-_0804C088:
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ItemBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _0804C184
- movs r2, 0x1
- mov r10, r2
- ldr r3, =gBattleScripting
- mov r12, r3
- b _0804C570
- .pool
-_0804C0A8:
- movs r0, 0x4
- movs r1, 0
- movs r2, 0
- bl ItemBattleEffects
-_0804C0B2:
- lsls r0, 24
- cmp r0, 0
- beq _0804C184
-_0804C0B8:
- movs r4, 0x1
- mov r10, r4
- b _0804C184
-_0804C0BE:
- ldr r1, =gStatuses3
- ldr r0, =gBankAttacker
- ldrb r2, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, =0x000400c0
- ands r0, r1
- cmp r0, 0
- bne _0804C0D4
- b _0804C4B6
-_0804C0D4:
- ldr r0, =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0804C0E2
- b _0804BC68
-_0804C0E2:
- b _0804C4B6
- .pool
-_0804C0F4:
- ldr r0, =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0804C120
- ldr r1, =gStatuses3
- ldr r0, =gBankAttacker
- ldrb r2, [r0]
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- ldr r1, =0x000400c0
- ands r0, r1
- cmp r0, 0
- beq _0804C120
- adds r0, r2, 0
- bl sub_803F90C
- lsls r0, 24
- cmp r0, 0
- beq _0804C184
-_0804C120:
- ldr r4, =gActiveBank
- ldr r5, =gBankAttacker
- ldrb r0, [r5]
- strb r0, [r4]
- movs r0, 0
- movs r1, 0
- bl dp01_build_cmdbuf_x33_a_33_33
- ldrb r0, [r4]
- bl MarkBufferBankForExecution
- ldr r0, =gStatuses3
- ldrb r2, [r5]
- lsls r2, 2
- adds r2, r0
- ldr r0, [r2]
- ldr r1, =0xfffbff3f
- ands r0, r1
- str r0, [r2]
- ldr r2, =gSpecialStatuses
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
-_0804C15A:
- ldr r1, =gBattleScripting
- ldrb r0, [r1, 0x14]
- adds r0, 0x1
- strb r0, [r1, 0x14]
- b _0804C5BA
- .pool
-_0804C184:
- ldr r1, =gBattleScripting
- ldrb r0, [r1, 0x14]
- adds r0, 0x1
- strb r0, [r1, 0x14]
- mov r12, r1
- b _0804C570
- .pool
-_0804C194:
- ldr r0, =gSpecialStatuses
- ldr r6, =gBankTarget
- ldrb r2, [r6]
- lsls r3, r2, 2
- adds r1, r3, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 29
- cmp r0, 0
- blt _0804C202
- ldr r0, =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r2, r0
- bcs _0804C202
- ldr r5, =gStatuses3
- adds r0, r3, r5
- ldr r0, [r0]
- ldr r1, =0x000400c0
- ands r0, r1
- cmp r0, 0
- bne _0804C1C2
- b _0804BC80
-_0804C1C2:
- b _0804C202
- .pool
-_0804C1D8:
- movs r4, 0
- ldr r0, =gNoOfAllBanks
- ldrb r2, [r0]
- cmp r4, r2
- bge _0804C202
- ldr r2, =gDisableStructs
- ldr r5, =0xfeffffff
- adds r3, r0, 0
- ldr r1, =gBattleMons + 0x50
-_0804C1EA:
- ldrb r0, [r2, 0xA]
- cmp r0, 0
- bne _0804C1F6
- ldr r0, [r1]
- ands r0, r5
- str r0, [r1]
-_0804C1F6:
- adds r2, 0x1C
- adds r1, 0x58
- adds r4, 0x1
- ldrb r0, [r3]
- cmp r4, r0
- blt _0804C1EA
-_0804C202:
- mov r1, r12
- ldrb r0, [r1, 0x14]
- adds r0, 0x1
- strb r0, [r1, 0x14]
- b _0804C570
- .pool
-_0804C21C:
- ldr r1, =gHitMarker
- ldr r3, [r1]
- movs r0, 0x80
- lsls r0, 5
- ands r0, r3
- ldr r2, =gBankAttacker
- mov r9, r2
- adds r5, r1, 0
- cmp r0, 0
- beq _0804C246
- ldr r0, =gActiveBank
- ldrb r2, [r2]
- strb r2, [r0]
- ldr r1, =gBankTarget
- ldrb r0, [r1]
- mov r4, r9
- strb r0, [r4]
- strb r2, [r1]
- ldr r0, =0xffffefff
- ands r3, r0
- str r3, [r5]
-_0804C246:
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 3
- ands r0, r1
- cmp r0, 0
- beq _0804C262
- ldr r0, =gUnknown_02024240
- mov r2, r9
- ldrb r1, [r2]
- lsls r1, 1
- adds r1, r0
- ldr r0, =gUnknown_020241EC
- ldrh r0, [r0]
- strh r0, [r1]
-_0804C262:
- ldr r0, =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r2, =gBitTable
- mov r3, r9
- ldrb r4, [r3]
- lsls r0, r4, 2
- adds r0, r2
- ldr r3, [r0]
- ands r1, r3
- adds r6, r2, 0
- cmp r1, 0
- beq _0804C27C
- b _0804C3E8
-_0804C27C:
- ldr r0, =gBattleStruct
- ldr r1, [r0]
- adds r1, 0x91
- ldrb r1, [r1]
- ands r1, r3
- adds r7, r0, 0
- cmp r1, 0
- beq _0804C28E
- b _0804C3E8
-_0804C28E:
- ldr r0, =gBattleMoves
- ldr r2, [sp, 0x18]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r1, [r1]
- mov r8, r0
- cmp r1, 0x7F
- bne _0804C2A4
- b _0804C3E8
-_0804C2A4:
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 18
- ands r0, r1
- cmp r0, 0
- beq _0804C308
- ldr r0, =gLastUsedMovesByBanks
- lsls r1, r4, 1
- adds r1, r0
- ldr r0, =gUnknown_020241EC
- ldrh r0, [r0]
- strh r0, [r1]
- ldr r0, =gUnknown_02024260
- mov r3, r9
- ldrb r1, [r3]
- lsls r1, 1
- adds r1, r0
- ldr r0, =gCurrentMove
- ldrh r0, [r0]
- strh r0, [r1]
- b _0804C322
- .pool
-_0804C308:
- ldr r1, =gLastUsedMovesByBanks
- lsls r0, r4, 1
- adds r0, r1
- ldr r1, =0x0000ffff
- strh r1, [r0]
- ldr r1, =gUnknown_02024260
- mov r4, r9
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- movs r1, 0x1
- negs r1, r1
- strh r1, [r0]
-_0804C322:
- ldr r2, =gBankTarget
- ldrb r3, [r2]
- lsls r0, r3, 2
- adds r0, r6
- ldr r0, [r0]
- lsls r0, 28
- ldr r1, [r5]
- ands r1, r0
- cmp r1, 0
- bne _0804C340
- ldr r0, =gUnknown_02024270
- adds r0, r3, r0
- mov r3, r9
- ldrb r1, [r3]
- strb r1, [r0]
-_0804C340:
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 18
- ands r0, r1
- cmp r0, 0
- beq _0804C3DC
- ldr r0, =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0804C3DC
- ldr r0, =gUnknown_020241EC
- ldrh r3, [r0]
- ldr r0, =0x0000ffff
- cmp r3, r0
- bne _0804C390
- ldr r1, =gUnknown_02024250
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r1
- strh r3, [r0]
- b _0804C3E8
- .pool
-_0804C390:
- ldr r0, =gUnknown_02024250
- ldrb r1, [r2]
- lsls r1, 1
- adds r1, r0
- ldr r4, =gCurrentMove
- ldrh r0, [r4]
- strh r0, [r1]
- ldr r0, [r7]
- ldrb r3, [r0, 0x13]
- cmp r3, 0
- beq _0804C3C0
- ldr r0, =gUnknown_02024258
- ldrb r1, [r2]
- lsls r1, 1
- adds r1, r0
- movs r0, 0x3F
- ands r0, r3
- b _0804C3E6
- .pool
-_0804C3C0:
- ldr r0, =gUnknown_02024258
- ldrb r2, [r2]
- lsls r2, 1
- adds r2, r0
- ldrh r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- add r0, r8
- ldrb r0, [r0, 0x2]
- strh r0, [r2]
- b _0804C3E8
- .pool
-_0804C3DC:
- ldr r0, =gUnknown_02024250
- ldrb r1, [r2]
- lsls r1, 1
- adds r1, r0
- ldr r0, =0x0000ffff
-_0804C3E6:
- strh r0, [r1]
-_0804C3E8:
- mov r4, r12
- ldrb r0, [r4, 0x14]
- adds r0, 0x1
- strb r0, [r4, 0x14]
- b _0804C570
- .pool
-_0804C3FC:
- ldr r0, =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r7, =gBitTable
- ldr r2, =gBankAttacker
- ldrb r3, [r2]
- lsls r0, r3, 2
- adds r0, r7
- ldr r4, [r0]
- ands r1, r4
- mov r9, r2
- cmp r1, 0
- bne _0804C4B6
- ldr r6, =gBattleStruct
- ldr r5, [r6]
- adds r0, r5, 0
- adds r0, 0x91
- ldrb r0, [r0]
- ands r0, r4
- cmp r0, 0
- bne _0804C4B6
- ldr r1, =gBattleMoves
- ldr r2, [sp, 0x18]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0804C4B6
- ldr r0, =gHitMarker
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 18
- ands r0, r1
- cmp r0, 0
- beq _0804C4B6
- ldr r4, =gBankTarget
- ldrb r0, [r4]
- cmp r3, r0
- beq _0804C4B6
- ldrb r2, [r4]
- lsls r0, r2, 2
- adds r0, r7
- ldr r0, [r0]
- lsls r0, 28
- ands r1, r0
- cmp r1, 0
- bne _0804C4B6
- ldr r0, =gBattleMoveFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0804C4B6
- lsls r1, r2, 1
- adds r1, r5
- adds r1, 0x98
- ldr r3, =gUnknown_020241EC
- ldrh r0, [r3]
- strb r0, [r1]
- ldrb r1, [r4]
- ldr r0, [r6]
- lsls r1, 1
- adds r1, r0
- adds r1, 0x99
- ldrh r0, [r3]
- lsrs r0, 8
- strb r0, [r1]
- ldrb r0, [r4]
- mov r2, r9
- ldrb r1, [r2]
- ldr r2, [r6]
- lsls r0, 3
- lsls r1, 1
- adds r0, r1
- adds r0, r2
- adds r0, 0xE0
- ldrh r1, [r3]
- strb r1, [r0]
- ldrb r1, [r4]
- mov r4, r9
- ldrb r0, [r4]
- ldr r2, [r6]
- lsls r1, 3
- lsls r0, 1
- adds r1, r0
- adds r1, r2
- adds r1, 0xE1
- ldrh r0, [r3]
- lsrs r0, 8
- strb r0, [r1]
-_0804C4B6:
- mov r5, r12
- ldrb r0, [r5, 0x14]
- adds r0, 0x1
- strb r0, [r5, 0x14]
- b _0804C570
- .pool
-_0804C4E4:
- ldr r5, =gHitMarker
- ldr r2, [r5]
- movs r0, 0x80
- lsls r0, 12
- ands r0, r2
- cmp r0, 0
- bne _0804C568
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0804C568
- ldr r1, =gProtectStructs
- ldr r0, =gBankAttacker
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0, 0x1]
- lsls r0, 29
- cmp r0, 0
- blt _0804C568
- ldr r0, =gBattleMoves
- mov r9, r0
- ldr r1, =gCurrentMove
- mov r8, r1
- ldrh r0, [r1]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- add r1, r9
- ldrb r0, [r1, 0x6]
- cmp r0, 0x8
- bne _0804C568
- movs r6, 0x80
- lsls r6, 2
- adds r4, r6, 0
- ands r4, r2
- cmp r4, 0
- bne _0804C568
- ldr r7, =gBankTarget
- ldrb r0, [r7]
- bl GetBankIdentity
- movs r1, 0x2
- eors r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl GetBankByPlayerAI
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, =gBattleMons
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- beq _0804C55E
- bl _0804BCAC
-_0804C55E:
- ldr r0, [r5]
- orrs r0, r6
- str r0, [r5]
- ldr r2, =gBattleScripting
- mov r12, r2
-_0804C568:
- mov r3, r12
- ldrb r0, [r3, 0x14]
- adds r0, 0x1
- strb r0, [r3, 0x14]
-_0804C570:
- ldr r4, [sp, 0x10]
- cmp r4, 0x1
- bne _0804C582
- mov r5, r10
- cmp r5, 0
- bne _0804C582
- movs r0, 0x11
- mov r1, r12
- strb r0, [r1, 0x14]
-_0804C582:
- ldr r2, [sp, 0x10]
- cmp r2, 0x2
- bne _0804C598
- ldr r4, [sp, 0x14]
- mov r3, r12
- ldrb r3, [r3, 0x14]
- cmp r4, r3
- bne _0804C598
- movs r0, 0x11
- mov r4, r12
- strb r0, [r4, 0x14]
-_0804C598:
- mov r5, r12
- ldrb r0, [r5, 0x14]
- cmp r0, 0x11
- beq _0804C5A4
- bl _0804BD14
-_0804C5A4:
- mov r1, r12
- ldrb r0, [r1, 0x14]
- cmp r0, 0x11
- bne _0804C5BA
- mov r2, r10
- cmp r2, 0
- bne _0804C5BA
- ldr r1, =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x3
-_0804C5B8:
- str r0, [r1]
-_0804C5BA:
- add sp, 0x1C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end atk49_moveendturn
-
thumb_func_start atk4A_typecalc2
atk4A_typecalc2: @ 804C5F4
push {r4-r7,lr}
@@ -5448,7 +4074,7 @@ atk63_jumptorandomattack: @ 804E990
b _0804E9C2
.pool
_0804E9B4:
- ldr r2, =gUnknown_020241EC
+ ldr r2, =gLastUsedMove
ldr r1, =gCurrentMove
ldr r0, =gRandomMove
ldrh r0, [r0]
@@ -5456,7 +4082,7 @@ _0804E9B4:
strh r0, [r2]
adds r0, r1, 0
_0804E9C2:
- ldr r3, =gUnknown_082D86A8
+ ldr r3, =gBattleScriptsForMoveEffects
ldr r2, =gBattleMoves
ldrh r1, [r0]
lsls r0, r1, 1
@@ -6746,7 +5372,7 @@ atk6F_set_visible: @ 804F50C
strb r0, [r4]
movs r0, 0
movs r1, 0
- bl dp01_build_cmdbuf_x33_a_33_33
+ bl EmitSpriteInvisibility
ldrb r0, [r4]
bl MarkBufferBankForExecution
ldr r0, [r5]
@@ -8215,7 +6841,7 @@ _0805024A:
ldr r1, =gBankTarget
strb r0, [r1]
ldr r5, =gBattlescriptCurrInstr
- ldr r3, =gUnknown_082D86A8
+ ldr r3, =gBattleScriptsForMoveEffects
ldr r2, =gBattleMoves
ldrh r1, [r4]
lsls r0, r1, 1
@@ -11692,7 +10318,7 @@ atk9B_transformdataexecution: @ 805205C
push {r4-r7,lr}
mov r7, r8
push {r7}
- ldr r1, =gUnknown_020241EC
+ ldr r1, =gLastUsedMove
ldr r2, =0x0000ffff
adds r0, r2, 0
strh r0, [r1]
@@ -12000,7 +10626,7 @@ atk9D_copyattack: @ 8052300
mov r6, r9
mov r5, r8
push {r5-r7}
- ldr r0, =gUnknown_020241EC
+ ldr r0, =gLastUsedMove
ldr r1, =0x0000ffff
adds r7, r1, 0
strh r7, [r0]
@@ -12256,7 +10882,7 @@ _0805251C:
ldr r1, =0xfffffbff
ands r0, r1
str r0, [r2]
- ldr r3, =gUnknown_082D86A8
+ ldr r3, =gBattleScriptsForMoveEffects
ldr r2, =gBattleMoves
ldrh r1, [r4]
lsls r0, r1, 1
@@ -13229,7 +11855,7 @@ atkA8_copymovepermanently: @ 8052D8C
mov r5, r8
push {r5-r7}
sub sp, 0x14
- ldr r0, =gUnknown_020241EC
+ ldr r0, =gLastUsedMove
ldr r1, =0x0000ffff
adds r5, r1, 0
strh r5, [r0]
@@ -13252,7 +11878,7 @@ atkA8_copymovepermanently: @ 8052D8C
beq _08052DC4
b _08052F18
_08052DC4:
- ldr r0, =gUnknown_02024240
+ ldr r0, =gUnknownMovesUsedByBanks
ldr r2, =gBankTarget
ldrb r1, [r2]
lsls r1, 1
@@ -13387,7 +12013,7 @@ _08052E7A:
strb r0, [r1]
movs r0, 0x2
strb r0, [r1, 0x1]
- ldr r3, =gUnknown_02024240
+ ldr r3, =gUnknownMovesUsedByBanks
ldr r2, =gBankTarget
ldrb r0, [r2]
lsls r0, 1
@@ -16755,7 +15381,7 @@ atkCC_callterrainattack: @ 8054BEC
bl GetMoveTarget
ldr r1, =gBankTarget
strb r0, [r1]
- ldr r3, =gUnknown_082D86A8
+ ldr r3, =gBattleScriptsForMoveEffects
ldr r2, =gBattleMoves
ldrh r1, [r4]
lsls r0, r1, 1
diff --git a/asm/rom3.s b/asm/rom3.s
index 84dec85e5..f4a273d95 100644
--- a/asm/rom3.s
+++ b/asm/rom3.s
@@ -2596,7 +2596,7 @@ dp01_build_cmdbuf_x10_TODO: @ 8033BE4
ldr r4, =gCurrentMove
ldrh r0, [r4]
strh r0, [r2, 0x4]
- ldr r0, =gUnknown_020241EC
+ ldr r0, =gLastUsedMove
ldrh r0, [r0]
mov r1, r12
strh r0, [r1, 0x2]
@@ -2711,7 +2711,7 @@ EmitPrintStringPlayerOnly: @ 8033CFC
ldr r0, =gCurrentMove
ldrh r0, [r0]
strh r0, [r2, 0x4]
- ldr r0, =gUnknown_020241EC
+ ldr r0, =gLastUsedMove
ldrh r0, [r0]
mov r1, r12
strh r0, [r1, 0x2]
@@ -3642,8 +3642,8 @@ dp01_build_cmdbuf_x32_32_32_32: @ 80343F4
.pool
thumb_func_end dp01_build_cmdbuf_x32_32_32_32
- thumb_func_start dp01_build_cmdbuf_x33_a_33_33
-dp01_build_cmdbuf_x33_a_33_33: @ 8034414
+ thumb_func_start EmitSpriteInvisibility
+EmitSpriteInvisibility: @ 8034414
push {lr}
adds r3, r1, 0
lsls r0, 24
@@ -3659,7 +3659,7 @@ dp01_build_cmdbuf_x33_a_33_33: @ 8034414
pop {r0}
bx r0
.pool
- thumb_func_end dp01_build_cmdbuf_x33_a_33_33
+ thumb_func_end EmitSpriteInvisibility
thumb_func_start EmitBattleAnimation
EmitBattleAnimation: @ 8034438
diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s
index 0d94d31b0..14305b7a2 100644
--- a/data/battle_scripts_1.s
+++ b/data/battle_scripts_1.s
@@ -3,7 +3,7 @@
.section script_data, "aw", %progbits
-gUnknown_082D86A8:: @ 82D86A8
+gBattleScriptsForMoveEffects:: @ 82D86A8
.incbin "baserom.gba", 0x2d86a8, 0x388
gUnknown_082D8A30:: @ 82D8A30
@@ -138,7 +138,7 @@ gUnknown_082DADD8:: @ 82DADD8
gUnknown_082DAE03:: @ 82DAE03
.incbin "baserom.gba", 0x2dae03, 0xa
-gUnknown_082DAE0D:: @ 82DAE0D
+BattleScript_RageIsBuilding:: @ 82DAE0D
.incbin "baserom.gba", 0x2dae0d, 0x7
BattleScript_MoveUsedIsDisabled:: @ 82DAE14
@@ -279,7 +279,7 @@ BattleScript_MoveUsedIsFrozen:: @ 82DB26A
BattleScript_MoveUsedUnfroze:: @ 82DB277
.incbin "baserom.gba", 0x2db277, 0xb
-gUnknown_082DB282:: @ 82DB282
+BattleScript_DefrostedViaFireMove:: @ 82DB282
.incbin "baserom.gba", 0x2db282, 0x9
BattleScript_MoveUsedIsParalyzed:: @ 82DB28B
diff --git a/include/battle.h b/include/battle.h
index 957e3542b..a6573934f 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -619,14 +619,7 @@ struct BattleStruct
u8 field_95;
u8 field_96;
u8 field_97;
- u8 field_98;
- u8 field_99;
- u8 field_9A;
- u8 field_9B;
- u8 field_9C;
- u8 field_9D;
- u8 field_9E;
- u8 field_9F;
+ u8 mirrorMoves[8]; // ask gamefreak why they declared it that way
u8 field_A0;
u8 field_A1;
u8 field_A2;
@@ -647,14 +640,16 @@ struct BattleStruct
u16 usedHeldItems[BATTLE_BANKS_COUNT];
u8 field_C0[8];
u16 choicedMove[BATTLE_BANKS_COUNT];
- u16 field_D0[BATTLE_BANKS_COUNT];
+ u16 changedItems[BATTLE_BANKS_COUNT];
u8 intimidateBank;
u8 fillerD9[0xDA-0xD9];
u8 field_DA;
u8 turnSideTracker;
u8 fillerDC[0xDF-0xDC];
u8 field_DF;
- u8 fillerE0[0x1A0-0xE0];
+ u8 mirrorMoveArrays[32];
+ u16 castformPalette[4][16];
+ u8 field_180[32];
u8 field_1A0;
u8 field_1A1;
u8 filler1A2;
@@ -675,6 +670,14 @@ extern struct BattleStruct* gBattleStruct;
var2[offsetof(struct structName, offsetField)] = value; \
}
+// This is a leftover from R/S direct use of ewram addresses
+#define GET_CHANGED_ITEM_PTR_VIA_MEME_ACCESS(bank, varName) \
+{ \
+ void** memes1 = (void**)(&gBattleStruct); \
+ void* memes2 = (void*)((u32)(bank * 2 + offsetof(struct BattleStruct, changedItems))); \
+ varName = (u16*)(((void*)(*memes1) + (u32)(memes2))); \
+}
+
#define GET_MOVE_TYPE(move, typeArg) \
{ \
if (gBattleStruct->dynamicMoveType) \
@@ -836,6 +839,7 @@ void PressurePPLose(u8 bankAtk, u8 bankDef, u16 move);
void PrepareStringBattle(u16 stringId, u8 bank);
u8 GetBattleBank(u8 caseId);
void UndoEffectsAfterFainting(void);
+bool8 HasMoveFailed(u8 bank);
// battle_3
void BattleScriptPush(const u8* bsPtr);
diff --git a/include/battle_controllers.h b/include/battle_controllers.h
index bfa1bd507..2ae6f002f 100644
--- a/include/battle_controllers.h
+++ b/include/battle_controllers.h
@@ -10,6 +10,7 @@ void EmitPrintStringPlayerOnly(u8 bufferId, u16 stringId);
void EmitFaintAnimation(u8 bufferId);
void EmitExpUpdate(u8 bufferId, u8 partyId, u16 expPoints);
void EmitBattleAnimation(u8 bufferId, u8 animationId, u16 argument);
+void EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible);
void MarkBufferBankForExecution(u8 bank);
diff --git a/include/pokemon.h b/include/pokemon.h
index 674e6dbf4..1049776e8 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -443,6 +443,7 @@ struct BattleMove
#define FLAG_PROTECT_AFFECTED 0x2
#define FLAG_MAGICCOAT_AFFECTED 0x4
#define FLAG_SNATCH_AFFECTED 0x8
+#define FLAG_MIRROR_MOVE_AFFECTED 0x10
#define FLAG_KINGSROCK_AFFECTED 0x20
struct SpindaSpot
diff --git a/src/battle_3.c b/src/battle_3.c
index 1b62e3bb8..4453545d3 100644
--- a/src/battle_3.c
+++ b/src/battle_3.c
@@ -186,7 +186,6 @@ extern void b_call_bc_move_exec(const u8 *);
extern void BattleTurnPassed(void);
extern void SetMoveEffect(bool8 primary, u8 certainArg);
extern bool8 UproarWakeUpCheck(u8 bank);
-extern u8 sub_803F90C(u8 bank);
extern void sub_803F9EC();
extern bool8 sub_80423F4(u8 bank, u8, u8);
extern u8 sub_806D864(u8);
@@ -848,7 +847,7 @@ u8 TurnBasedEffects(void)
{
gBankAttacker = gActiveBank;
gBattleMons[gActiveBank].status2 -= 0x10; // uproar timer goes down
- if (sub_803F90C(gActiveBank))
+ if (HasMoveFailed(gActiveBank))
{
CancelMultiTurnMoves(gActiveBank);
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
@@ -874,7 +873,7 @@ u8 TurnBasedEffects(void)
if (gBattleMons[gActiveBank].status2 & STATUS2_LOCK_CONFUSE)
{
gBattleMons[gActiveBank].status2 -= 0x400;
- if (sub_803F90C(gActiveBank))
+ if (HasMoveFailed(gActiveBank))
CancelMultiTurnMoves(gActiveBank);
else if (!(gBattleMons[gActiveBank].status2 & STATUS2_LOCK_CONFUSE)
&& (gBattleMons[gActiveBank].status2 & STATUS2_MULTIPLETURNS))
diff --git a/src/battle_4.c b/src/battle_4.c
index ec84d1a5c..f896cd806 100644
--- a/src/battle_4.c
+++ b/src/battle_4.c
@@ -57,6 +57,8 @@ extern u8 gBattleMoveFlags;
extern u8 gBattleCommunication[];
extern u16 gUnknown_02024250[4];
extern u16 gUnknown_02024258[4];
+extern u16 gUnknown_02024260[4];
+extern u8 gUnknown_02024270[4];
extern u8 gStringBank;
extern u16 gDynamicBasePower;
extern u16 gLastUsedItem;
@@ -78,6 +80,9 @@ extern u8 gCurrentMoveTurn;
extern u8 gBattleBufferB[BATTLE_BANKS_COUNT][0x200];
extern u16 gLockedMoves[BATTLE_BANKS_COUNT];
extern u16 gPartnerTrainerId;
+extern u16 gLastUsedMove;
+extern u16 gUnknownMovesUsedByBanks[BATTLE_BANKS_COUNT];
+extern u16 gLastUsedMovesByBanks[BATTLE_BANKS_COUNT];
extern const struct BattleMove gBattleMoves[];
extern const struct BaseStats gBaseStats[];
@@ -85,6 +90,7 @@ extern const u8 gTypeEffectiveness[];
extern const u16 gMissStringIds[];
extern const u16 gTrappingMoves[];
extern const u8 gTrainerMoney[];
+extern const u8* const gBattleScriptsForMoveEffects[];
// functions
extern void sub_81A5718(u8 bank); // battle frontier 2
@@ -132,6 +138,9 @@ extern const u8 BattleScript_FaintAttacker[];
extern const u8 BattleScript_FaintTarget[];
extern const u8 BattleScript_DestinyBondTakesLife[];
extern const u8 BattleScript_GrudgeTakesPp[];
+extern const u8 BattleScript_RageIsBuilding[];
+extern const u8 BattleScript_DefrostedViaFireMove[];
+extern const u8 gUnknown_082DB87D[];
// read via orr
#define BSScriptRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24)
@@ -145,7 +154,7 @@ extern const u8 BattleScript_GrudgeTakesPp[];
#define TARGET_PROTECT_AFFECTED ((gProtectStructs[gBankTarget].protected && gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED))
-#define TARGET_TURN_DAMAGED (((gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_physical.moveturnLostHP_special)))
+#define TARGET_TURN_DAMAGED (((gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special)))
// this file's functions
bool8 IsTwoTurnsMove(u16 move);
@@ -227,7 +236,7 @@ void atk45_playanimation(void);
void atk46_playanimation2(void);
void atk47_setgraphicalstatchangevalues(void);
void atk48_playstatchangeanimation(void);
-void atk49_moveendturn(void);
+void atk49_moveend(void);
void atk4A_typecalc2(void);
void atk4B_return_atk_to_ball(void);
void atk4C_copy_poke_data(void);
@@ -479,7 +488,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
atk46_playanimation2,
atk47_setgraphicalstatchangevalues,
atk48_playstatchangeanimation,
- atk49_moveendturn,
+ atk49_moveend,
atk4A_typecalc2,
atk4B_return_atk_to_ball,
atk4C_copy_poke_data,
@@ -2616,13 +2625,12 @@ void SetMoveEffect(bool8 primary, u8 certain)
else
{
// This is a leftover from R/S direct use of ewram addresses
- void** memes1 = (void**)(&gBattleStruct);
- void* memes2 = (void*)((u32)(gBankAttacker * 2 + offsetof(struct BattleStruct, field_D0)));
- u16* memes3 = (u16*)(((void*)(*memes1) + (u32)(memes2)));
- gLastUsedItem = *memes3 = gBattleMons[gBankTarget].item;
+ u16* changedItem;
+ GET_CHANGED_ITEM_PTR_VIA_MEME_ACCESS(gBankAttacker, changedItem);
+ gLastUsedItem = *changedItem = gBattleMons[gBankTarget].item;
// A sane representation of this would simply be:
- // gLastUsedItem = gBattleStruct->field_D0[gBankAttacker] = gBattleMons[gBankTarget].item;
+ // gLastUsedItem = gBattleStruct->changedItems[gBankAttacker] = gBattleMons[gBankTarget].item;
gBattleMons[gBankTarget].item = 0;
@@ -4269,6 +4277,7 @@ void atk47_setgraphicalstatchangevalues(void)
gBattlescriptCurrInstr++;
}
+#ifdef NONMATCHING
void atk48_playstatchangeanimation(void)
{
u32 currStat = 0;
@@ -4358,3 +4367,548 @@ void atk48_playstatchangeanimation(void)
gBattlescriptCurrInstr += 4;
}
}
+#else
+__attribute__((naked))
+void atk48_playstatchangeanimation(void)
+{
+ asm("\n\
+ .syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x4\n\
+ movs r7, 0\n\
+ movs r0, 0\n\
+ mov r8, r0\n\
+ movs r3, 0\n\
+ ldr r5, =gBattlescriptCurrInstr\n\
+ ldr r0, [r5]\n\
+ ldrb r0, [r0, 0x1]\n\
+ str r3, [sp]\n\
+ bl GetBattleBank\n\
+ ldr r2, =gActiveBank\n\
+ strb r0, [r2]\n\
+ ldr r0, [r5]\n\
+ ldrb r4, [r0, 0x2]\n\
+ ldrb r1, [r0, 0x3]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ ldr r3, [sp]\n\
+ cmp r0, 0\n\
+ beq _0804BAEC\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ movs r1, 0x15\n\
+ cmp r0, 0\n\
+ beq _0804BA18\n\
+ movs r1, 0x2D\n\
+_0804BA18:\n\
+ cmp r4, 0\n\
+ beq _0804BAC0\n\
+ movs r0, 0x1\n\
+ mov r10, r0\n\
+ ldr r0, =gBattleMons + 0x18\n\
+ mov r9, r0\n\
+ lsls r5, r1, 16\n\
+_0804BA26:\n\
+ adds r0, r4, 0\n\
+ mov r1, r10\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0804BAB2\n\
+ ldr r0, =gBattlescriptCurrInstr\n\
+ ldr r0, [r0]\n\
+ ldrb r1, [r0, 0x3]\n\
+ movs r0, 0x8\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0804BA58\n\
+ ldr r0, =gActiveBank\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ adds r0, r7, r0\n\
+ b _0804BAA0\n\
+ .pool\n\
+_0804BA58:\n\
+ ldr r6, =gActiveBank\n\
+ ldrb r0, [r6]\n\
+ str r3, [sp]\n\
+ bl GetBankIdentity\n\
+ mov r1, r10\n\
+ ands r1, r0\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ ldr r1, =gSideTimers\n\
+ adds r0, r1\n\
+ ldrb r0, [r0, 0x4]\n\
+ ldr r3, [sp]\n\
+ cmp r0, 0\n\
+ bne _0804BAB2\n\
+ ldr r0, =gBattleMons\n\
+ ldrb r2, [r6]\n\
+ movs r1, 0x58\n\
+ muls r2, r1\n\
+ adds r0, r2, r0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x1D\n\
+ beq _0804BAB2\n\
+ cmp r0, 0x49\n\
+ beq _0804BAB2\n\
+ cmp r0, 0x33\n\
+ bne _0804BA96\n\
+ cmp r7, 0x6\n\
+ beq _0804BAB2\n\
+_0804BA96:\n\
+ cmp r0, 0x34\n\
+ bne _0804BA9E\n\
+ cmp r7, 0x1\n\
+ beq _0804BAB2\n\
+_0804BA9E:\n\
+ adds r0, r7, r2\n\
+_0804BAA0:\n\
+ add r0, r9\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 24\n\
+ asrs r0, 24\n\
+ cmp r0, 0\n\
+ ble _0804BAB2\n\
+ lsrs r0, r5, 16\n\
+ mov r8, r0\n\
+ adds r3, 0x1\n\
+_0804BAB2:\n\
+ lsrs r4, 1\n\
+ movs r1, 0x80\n\
+ lsls r1, 9\n\
+ adds r5, r1\n\
+ adds r7, 0x1\n\
+ cmp r4, 0\n\
+ bne _0804BA26\n\
+_0804BAC0:\n\
+ ldr r0, =gBattlescriptCurrInstr\n\
+ mov r9, r0\n\
+ cmp r3, 0x1\n\
+ ble _0804BB4E\n\
+ ldr r0, [r0]\n\
+ ldrb r1, [r0, 0x3]\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ movs r1, 0x39\n\
+ mov r8, r1\n\
+ cmp r0, 0\n\
+ beq _0804BB4E\n\
+ movs r0, 0x3A\n\
+ b _0804BB4C\n\
+ .pool\n\
+_0804BAEC:\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ movs r1, 0xE\n\
+ cmp r0, 0\n\
+ beq _0804BAF8\n\
+ movs r1, 0x26\n\
+_0804BAF8:\n\
+ mov r9, r5\n\
+ cmp r4, 0\n\
+ beq _0804BB34\n\
+ ldr r6, =gBattleMons + 0x18\n\
+ adds r5, r2, 0\n\
+ lsls r2, r1, 16\n\
+_0804BB04:\n\
+ movs r0, 0x1\n\
+ ands r0, r4\n\
+ cmp r0, 0\n\
+ beq _0804BB26\n\
+ ldrb r1, [r5]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ adds r0, r7, r0\n\
+ adds r0, r6\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 24\n\
+ asrs r0, 24\n\
+ cmp r0, 0xB\n\
+ bgt _0804BB26\n\
+ lsrs r1, r2, 16\n\
+ mov r8, r1\n\
+ adds r3, 0x1\n\
+_0804BB26:\n\
+ lsrs r4, 1\n\
+ movs r0, 0x80\n\
+ lsls r0, 9\n\
+ adds r2, r0\n\
+ adds r7, 0x1\n\
+ cmp r4, 0\n\
+ bne _0804BB04\n\
+_0804BB34:\n\
+ cmp r3, 0x1\n\
+ ble _0804BB4E\n\
+ mov r1, r9\n\
+ ldr r0, [r1]\n\
+ ldrb r1, [r0, 0x3]\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ movs r1, 0x37\n\
+ mov r8, r1\n\
+ cmp r0, 0\n\
+ beq _0804BB4E\n\
+ movs r0, 0x38\n\
+_0804BB4C:\n\
+ mov r8, r0\n\
+_0804BB4E:\n\
+ mov r1, r9\n\
+ ldr r2, [r1]\n\
+ ldrb r1, [r2, 0x3]\n\
+ movs r0, 0x4\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0804BB6C\n\
+ cmp r3, 0x1\n\
+ bgt _0804BB6C\n\
+ adds r0, r2, 0x4\n\
+ mov r1, r9\n\
+ b _0804BBBA\n\
+ .pool\n\
+_0804BB6C:\n\
+ cmp r3, 0\n\
+ beq _0804BBB4\n\
+ ldr r4, =gBattleScripting\n\
+ ldrb r0, [r4, 0x1B]\n\
+ cmp r0, 0\n\
+ bne _0804BBB4\n\
+ movs r0, 0\n\
+ movs r1, 0x1\n\
+ mov r2, r8\n\
+ str r3, [sp]\n\
+ bl EmitBattleAnimation\n\
+ ldr r0, =gActiveBank\n\
+ ldrb r0, [r0]\n\
+ bl MarkBufferBankForExecution\n\
+ ldr r0, =gBattlescriptCurrInstr\n\
+ ldr r0, [r0]\n\
+ ldrb r1, [r0, 0x3]\n\
+ movs r0, 0x4\n\
+ ands r0, r1\n\
+ ldr r3, [sp]\n\
+ cmp r0, 0\n\
+ beq _0804BBA4\n\
+ cmp r3, 0x1\n\
+ ble _0804BBA4\n\
+ movs r0, 0x1\n\
+ strb r0, [r4, 0x1B]\n\
+_0804BBA4:\n\
+ ldr r1, =gBattlescriptCurrInstr\n\
+ b _0804BBB6\n\
+ .pool\n\
+_0804BBB4:\n\
+ mov r1, r9\n\
+_0804BBB6:\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x4\n\
+_0804BBBA:\n\
+ str r0, [r1]\n\
+ add sp, 0x4\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided");
+}
+#endif // NONMATCHING
+
+#define ATK49_LAST_CASE 17
+
+void atk49_moveend(void)
+{
+ s32 i;
+ bool32 effect;
+ u8 moveType;
+ u8 holdEffectAtk;
+ u16 *choicedMoveAtk;
+ u8 arg1, arg2;
+ u16 lastMove;
+
+ effect = FALSE;
+
+ if (gLastUsedMove == 0xFFFF)
+ lastMove = 0;
+ else
+ lastMove = gLastUsedMove;
+
+ arg1 = gBattlescriptCurrInstr[1];
+ arg2 = gBattlescriptCurrInstr[2];
+
+ if (gBattleMons[gBankAttacker].item == ITEM_ENIGMA_BERRY)
+ holdEffectAtk = gEnigmaBerries[gBankAttacker].holdEffect;
+ else
+ holdEffectAtk = ItemId_GetHoldEffect(gBattleMons[gBankAttacker].item);
+
+ choicedMoveAtk = &gBattleStruct->choicedMove[gBankAttacker];
+
+ GET_MOVE_TYPE(gCurrentMove, moveType);
+
+ do
+ {
+ switch (gBattleScripting.atk49_state)
+ {
+ case 0: // rage check
+ if (gBattleMons[gBankTarget].status2 & STATUS2_RAGE
+ && gBattleMons[gBankTarget].hp != 0 && gBankAttacker != gBankTarget
+ && GetBankSide(gBankAttacker) != GetBankSide(gBankTarget)
+ && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT) && TARGET_TURN_DAMAGED
+ && gBattleMoves[gCurrentMove].power && gBattleMons[gBankTarget].statStages[STAT_STAGE_ATK] <= 0xB)
+ {
+ gBattleMons[gBankTarget].statStages[STAT_STAGE_ATK]++;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_RageIsBuilding;
+ effect = TRUE;
+ }
+ gBattleScripting.atk49_state++;
+ break;
+ case 1: // defrosting check
+ if (gBattleMons[gBankTarget].status1 & STATUS_FREEZE
+ && gBattleMons[gBankTarget].hp != 0 && gBankAttacker != gBankTarget
+ && gSpecialStatuses[gBankTarget].moveturnLostHP_special
+ && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT) && moveType == TYPE_FIRE)
+ {
+ gBattleMons[gBankTarget].status1 &= ~(STATUS_FREEZE);
+ gActiveBank = gBankTarget;
+ EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status1);
+ MarkBufferBankForExecution(gActiveBank);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove;
+ effect = TRUE;
+ }
+ gBattleScripting.atk49_state++;
+ break;
+ case 2: // target synchronize
+ if (AbilityBattleEffects(ABILITYEFFECT_SYNCHRONIZE, gBankTarget, 0, 0, 0))
+ effect = TRUE;
+ gBattleScripting.atk49_state++;
+ break;
+ case 3: // contact abilities
+ if (AbilityBattleEffects(ABILITYEFFECT_CONTACT, gBankTarget, 0, 0, 0))
+ effect = TRUE;
+ gBattleScripting.atk49_state++;
+ break;
+ case 4: // status immunities
+ if (AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, 0, 0, 0, 0))
+ effect = TRUE; // it loops through all banks, so we increment after its done with all banks
+ else
+ gBattleScripting.atk49_state++;
+ break;
+ case 5: // attacker synchronize
+ if (AbilityBattleEffects(ABILITYEFFECT_ATK_SYNCHRONIZE, gBankAttacker, 0, 0, 0))
+ effect = TRUE;
+ gBattleScripting.atk49_state++;
+ break;
+ case 6: // update choice band move
+ if (!(gHitMarker & HITMARKER_OBEYS) || holdEffectAtk != HOLD_EFFECT_CHOICE_BAND
+ || gLastUsedMove == MOVE_STRUGGLE || (*choicedMoveAtk != 0 && *choicedMoveAtk != 0xFFFF))
+ goto LOOP;
+ if (gLastUsedMove == MOVE_BATON_PASS && !(gBattleMoveFlags & MOVESTATUS_FAILED))
+ {
+ gBattleScripting.atk49_state++;
+ break;
+ }
+ *choicedMoveAtk = gLastUsedMove;
+ LOOP:
+ {
+ for (i = 0; i < 4; i++)
+ {
+ if (gBattleMons[gBankAttacker].moves[i] == *choicedMoveAtk)
+ break;
+ }
+ if (i == 4)
+ *choicedMoveAtk = 0;
+
+ gBattleScripting.atk49_state++;
+ }
+ break;
+ case 7: // changed held items
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ u16* changedItem;
+ GET_CHANGED_ITEM_PTR_VIA_MEME_ACCESS(i, changedItem);
+ if (*changedItem != 0)
+ {
+ gBattleMons[i].item = *changedItem;
+ *changedItem = 0;
+ }
+ }
+ gBattleScripting.atk49_state++;
+ break;
+ case 11: // item effects for all banks
+ if (ItemBattleEffects(3, 0, FALSE))
+ effect = TRUE;
+ else
+ gBattleScripting.atk49_state++;
+ break;
+ case 12: // king's rock and shell bell
+ if (ItemBattleEffects(4, 0, FALSE))
+ effect = TRUE;
+ gBattleScripting.atk49_state++;
+ break;
+ case 8: // make attacker sprite invisible
+ if (gStatuses3[gBankAttacker] & (STATUS3_SEMI_INVULNERABLE)
+ && gHitMarker & HITMARKER_NO_ANIMATIONS)
+ {
+ gActiveBank = gBankAttacker;
+ EmitSpriteInvisibility(0, TRUE);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattleScripting.atk49_state++;
+ return;
+ }
+ gBattleScripting.atk49_state++;
+ break;
+ case 9: // make attacker sprite visible
+ if (gBattleMoveFlags & MOVESTATUS_NOEFFECT
+ || !(gStatuses3[gBankAttacker] & (STATUS3_SEMI_INVULNERABLE))
+ || HasMoveFailed(gBankAttacker))
+ {
+ gActiveBank = gBankAttacker;
+ EmitSpriteInvisibility(0, FALSE);
+ MarkBufferBankForExecution(gActiveBank);
+ gStatuses3[gBankAttacker] &= ~(STATUS3_SEMI_INVULNERABLE);
+ gSpecialStatuses[gBankAttacker].restoredBankSprite = 1;
+ gBattleScripting.atk49_state++;
+ return;
+ }
+ gBattleScripting.atk49_state++;
+ break;
+ case 10: // make target sprite visible
+ if (!gSpecialStatuses[gBankTarget].restoredBankSprite && gBankTarget < gNoOfAllBanks
+ && !(gStatuses3[gBankTarget] & STATUS3_SEMI_INVULNERABLE))
+ {
+ gActiveBank = gBankTarget;
+ EmitSpriteInvisibility(0, FALSE);
+ MarkBufferBankForExecution(gActiveBank);
+ gStatuses3[gBankTarget] &= ~(STATUS3_SEMI_INVULNERABLE);
+ gBattleScripting.atk49_state++;
+ return;
+ }
+ gBattleScripting.atk49_state++;
+ break;
+ case 13: // update substitute
+ for (i = 0; i < gNoOfAllBanks; i++)
+ {
+ if (gDisableStructs[i].substituteHP == 0)
+ gBattleMons[i].status2 &= ~(STATUS2_SUBSTITUTE);
+ }
+ gBattleScripting.atk49_state++;
+ break;
+ case 14: // This case looks interesting, although I am not certain what it does. Probably fine tunes edge cases.
+ if (gHitMarker & HITMARKER_PURSUIT_TRAP)
+ {
+ gActiveBank = gBankAttacker;
+ gBankAttacker = gBankTarget;
+ gBankTarget = gActiveBank;
+ gHitMarker &= ~(HITMARKER_PURSUIT_TRAP);
+ }
+ if (gHitMarker & HITMARKER_ATTACKSTRING_PRINTED)
+ {
+ gUnknownMovesUsedByBanks[gBankAttacker] = gLastUsedMove;
+ }
+ if (!(gAbsentBankFlags & gBitTable[gBankAttacker])
+ && !(gBattleStruct->field_91 & gBitTable[gBankAttacker])
+ && gBattleMoves[lastMove].effect != EFFECT_BATON_PASS)
+ {
+ if (gHitMarker & HITMARKER_OBEYS)
+ {
+ gLastUsedMovesByBanks[gBankAttacker] = gLastUsedMove;
+ gUnknown_02024260[gBankAttacker] = gCurrentMove;
+ }
+ else
+ {
+ gLastUsedMovesByBanks[gBankAttacker] = 0xFFFF;
+ gUnknown_02024260[gBankAttacker] = 0xFFFF;
+ }
+
+ if (!(gHitMarker & HITMARKER_FAINTED(gBankTarget)))
+ gUnknown_02024270[gBankTarget] = gBankAttacker;
+
+ if (gHitMarker & HITMARKER_OBEYS && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT))
+ {
+ if (gLastUsedMove == 0xFFFF)
+ {
+ gUnknown_02024250[gBankTarget] = gLastUsedMove;
+ }
+ else
+ {
+ gUnknown_02024250[gBankTarget] = gCurrentMove;
+ GET_MOVE_TYPE(gCurrentMove, gUnknown_02024258[gBankTarget]);
+ }
+ }
+ else
+ {
+ gUnknown_02024250[gBankTarget] = 0xFFFF;
+ }
+ }
+ gBattleScripting.atk49_state++;
+ break;
+ case 15: // mirror move
+ if (!(gAbsentBankFlags & gBitTable[gBankAttacker]) && !(gBattleStruct->field_91 & gBitTable[gBankAttacker])
+ && gBattleMoves[lastMove].flags & FLAG_MIRROR_MOVE_AFFECTED && gHitMarker & HITMARKER_OBEYS
+ && gBankAttacker != gBankTarget && !(gHitMarker & HITMARKER_FAINTED(gBankTarget))
+ && !(gBattleMoveFlags & MOVESTATUS_NOEFFECT))
+ {
+ u8 target, attacker;
+
+ *(gBattleStruct->mirrorMoves + gBankTarget * 2 + 0) = gLastUsedMove;
+ *(gBattleStruct->mirrorMoves + gBankTarget * 2 + 1) = gLastUsedMove >> 8;
+
+ target = gBankTarget;
+ attacker = gBankAttacker;
+ *(attacker * 2 + target * 8 + (u8*)(gBattleStruct->mirrorMoveArrays) + 0) = gLastUsedMove;
+
+ target = gBankTarget;
+ attacker = gBankAttacker;
+ *(attacker * 2 + target * 8 + (u8*)(gBattleStruct->mirrorMoveArrays) + 1) = gLastUsedMove >> 8;
+ }
+ gBattleScripting.atk49_state++;
+ break;
+ case 16: //
+ if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) && gBattleTypeFlags & BATTLE_TYPE_DOUBLE
+ && !gProtectStructs[gBankAttacker].chargingTurn && gBattleMoves[gCurrentMove].target == MOVE_TARGET_BOTH
+ && !(gHitMarker & HITMARKER_NO_ATTACKSTRING))
+ {
+ u8 bank = GetBankByPlayerAI(GetBankIdentity(gBankTarget) ^ 2);
+ if (gBattleMons[bank].hp != 0)
+ {
+ gBankTarget = bank;
+ gHitMarker |= HITMARKER_NO_ATTACKSTRING;
+ gBattleScripting.atk49_state = 0;
+ MoveValuesCleanUp();
+ BattleScriptPush(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]);
+ gBattlescriptCurrInstr = gUnknown_082DB87D;
+ return;
+ }
+ else
+ {
+ gHitMarker |= HITMARKER_NO_ATTACKSTRING;
+ }
+ }
+ gBattleScripting.atk49_state++;
+ break;
+ case ATK49_LAST_CASE:
+ break;
+ }
+
+ if (arg1 == 1 && effect == FALSE)
+ gBattleScripting.atk49_state = ATK49_LAST_CASE;
+ if (arg1 == 2 && arg2 == gBattleScripting.atk49_state)
+ gBattleScripting.atk49_state = ATK49_LAST_CASE;
+
+ } while (gBattleScripting.atk49_state != ATK49_LAST_CASE && effect == FALSE);
+
+ if (gBattleScripting.atk49_state == ATK49_LAST_CASE && effect == FALSE)
+ gBattlescriptCurrInstr += 3;
+}
+
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 616b1ca80..bc7392885 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -334,7 +334,7 @@ gUnknown_020241E9: @ 20241E9
gCurrentMove: @ 20241EA
.space 0x2
-gUnknown_020241EC: @ 20241EC
+gLastUsedMove: @ 20241EC
.space 0x2
gRandomMove: @ 20241EE
@@ -391,7 +391,7 @@ gUnknown_02024220: @ 2024220
gUnknown_02024230: @ 2024230
.space 0x10
-gUnknown_02024240: @ 2024240
+gUnknownMovesUsedByBanks: @ 2024240
.space 0x8
gLastUsedMovesByBanks: @ 2024248