summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSlawter666 <38655737+Slawter666@users.noreply.github.com>2018-08-07 22:18:30 +0100
committerSlawter666 <38655737+Slawter666@users.noreply.github.com>2018-08-07 22:18:30 +0100
commit704e3c7334f40b101b1f09da63da56576ac86bd2 (patch)
treef6a4c60670da605676293713eaad936b188db477
parentab2cc59629bfb8c4809807e82cb5224b4596844a (diff)
parent85ebd76cd03e1ee84f182585060b3a79b8653e85 (diff)
Merge https://github.com/pret/pokeemerald into spritesheet
-rw-r--r--asm/battle_anim_80A9C70.s6
-rw-r--r--asm/pokemon_summary_screen.s862
-rw-r--r--data/battle_anim_scripts.s2
-rw-r--r--data/battle_scripts_1.s76
-rw-r--r--data/battle_scripts_2.s3
-rw-r--r--include/battle.h5
-rw-r--r--include/battle_util.h4
-rw-r--r--include/constants/battle_script_commands.h13
-rw-r--r--include/contest.h15
-rw-r--r--src/battle_main.c6
-rw-r--r--src/battle_script_commands.c24
-rw-r--r--src/battle_util.c162
-rw-r--r--src/egg_hatch.c2
-rw-r--r--src/pokemon_summary_screen.c295
-rw-r--r--tools/preproc/asm_file.cpp2
-rw-r--r--tools/preproc/c_file.cpp2
16 files changed, 462 insertions, 1017 deletions
diff --git a/asm/battle_anim_80A9C70.s b/asm/battle_anim_80A9C70.s
index 755653156..3515b973e 100644
--- a/asm/battle_anim_80A9C70.s
+++ b/asm/battle_anim_80A9C70.s
@@ -623,8 +623,8 @@ _080AA186:
bx r0
thumb_func_end sub_80AA124
- thumb_func_start sub_80AA18C
-sub_80AA18C: @ 80AA18C
+ thumb_func_start AnimTask_StatsChange
+AnimTask_StatsChange: @ 80AA18C
push {r4,r5,lr}
lsls r0, 24
lsrs r4, r0, 24
@@ -853,7 +853,7 @@ _080AA352:
pop {r0}
bx r0
.pool
- thumb_func_end sub_80AA18C
+ thumb_func_end AnimTask_StatsChange
thumb_func_start LaunchStatusAnimation
LaunchStatusAnimation: @ 80AA364
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s
index f55d097ed..b2cba6dab 100644
--- a/asm/pokemon_summary_screen.s
+++ b/asm/pokemon_summary_screen.s
@@ -5,869 +5,7 @@
.text
- thumb_func_start sub_81C3E2C
-sub_81C3E2C: @ 81C3E2C
- push {r4,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x4
- bne _081C3E48
- ldr r0, =gUnknown_0203CF1C
- ldr r0, [r0]
- ldr r1, =0x000040c4
- b _081C3E50
- .pool
-_081C3E48:
- ldr r0, =gUnknown_0203CF1C
- ldr r0, [r0]
- lsls r1, 1
- adds r0, 0x84
-_081C3E50:
- adds r0, r1
- ldrh r4, [r0]
- cmp r4, 0
- beq _081C3E82
- ldr r0, =gUnknown_0861CD14
- movs r1, 0x2
- bl sub_81C2D2C
- lsls r0, 24
- lsrs r0, 24
- ldr r3, =gContestEffectDescriptionPointers
- ldr r2, =gContestMoves
- lsls r1, r4, 3
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- movs r2, 0
- str r2, [sp]
- str r2, [sp, 0x4]
- movs r2, 0x6
- movs r3, 0x1
- bl sub_81C25A4
-_081C3E82:
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81C3E2C
-
- thumb_func_start sub_81C3E9C
-sub_81C3E9C: @ 81C3E9C
- push {r4-r6,lr}
- sub sp, 0x8
- lsls r0, 16
- lsrs r4, r0, 16
- adds r6, r4, 0
- ldr r0, =gUnknown_0861CD14
- movs r1, 0x2
- bl sub_81C2D2C
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r5, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- cmp r4, 0
- beq _081C3F30
- ldr r0, =gUnknown_0203CF1C
- ldr r0, [r0]
- ldr r1, =0x000040c0
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _081C3F00
- adds r0, r4, 0
- bl sub_81C3C5C
- ldr r1, =gMoveDescriptionPointers
- subs r0, r4, 0x1
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- movs r0, 0
- str r0, [sp]
- str r0, [sp, 0x4]
- adds r0, r5, 0
- movs r2, 0x6
- movs r3, 0x1
- bl sub_81C25A4
- b _081C3F20
- .pool
-_081C3F00:
- ldr r2, =gContestEffectDescriptionPointers
- ldr r1, =gContestMoves
- lsls r0, r6, 3
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r2
- ldr r1, [r0]
- movs r0, 0
- str r0, [sp]
- str r0, [sp, 0x4]
- adds r0, r5, 0
- movs r2, 0x6
- movs r3, 0x1
- bl sub_81C25A4
-_081C3F20:
- adds r0, r5, 0
- bl PutWindowTilemap
- b _081C3F36
- .pool
-_081C3F30:
- adds r0, r5, 0
- bl ClearWindowTilemap
-_081C3F36:
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_81C3E9C
-
- thumb_func_start sub_81C3F44
-sub_81C3F44: @ 81C3F44
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- ldr r4, =gUnknown_0861CD14
- adds r0, r4, 0
- movs r1, 0
- bl sub_81C2D2C
- lsls r0, 24
- lsrs r6, r0, 24
- adds r7, r6, 0
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_81C2D2C
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, =gUnknown_0203CF1C
- ldr r1, [r0]
- ldr r2, =0x000040c4
- adds r0, r1, r2
- ldrh r2, [r0]
- cmp r2, 0
- bne _081C3F9C
- ldr r1, =gText_Cancel
- str r2, [sp]
- movs r0, 0x1
- str r0, [sp, 0x4]
- adds r0, r6, 0
- movs r2, 0
- movs r3, 0x41
- bl sub_81C25A4
- b _081C4044
- .pool
-_081C3F9C:
- ldrh r5, [r0]
- ldr r2, =0x000040c0
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _081C3FD0
- movs r0, 0xD
- adds r1, r5, 0
- muls r1, r0
- ldr r0, =gMoveNames
- adds r1, r0
- movs r0, 0
- str r0, [sp]
- movs r0, 0x6
- str r0, [sp, 0x4]
- adds r0, r6, 0
- movs r2, 0
- movs r3, 0x41
- bl sub_81C25A4
- b _081C3FEC
- .pool
-_081C3FD0:
- movs r0, 0xD
- adds r1, r5, 0
- muls r1, r0
- ldr r0, =gMoveNames
- adds r1, r0
- movs r0, 0
- str r0, [sp]
- movs r0, 0x5
- str r0, [sp, 0x4]
- adds r0, r7, 0
- movs r2, 0
- movs r3, 0x41
- bl sub_81C25A4
-_081C3FEC:
- ldr r4, =gStringVar1
- ldr r1, =gBattleMoves
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x4]
- adds r0, r4, 0
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- bl DynamicPlaceholderTextUtil_Reset
- movs r0, 0
- adds r1, r4, 0
- bl DynamicPlaceholderTextUtil_SetPlaceholderPtr
- movs r0, 0x1
- adds r1, r4, 0
- bl DynamicPlaceholderTextUtil_SetPlaceholderPtr
- ldr r4, =gStringVar4
- ldr r1, =gUnknown_0861CE97
- adds r0, r4, 0
- bl DynamicPlaceholderTextUtil_ExpandPlaceholders
- movs r0, 0x1
- adds r1, r4, 0
- movs r2, 0x2C
- bl GetStringRightAlignXOffset
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0
- str r0, [sp]
- movs r0, 0xC
- str r0, [sp, 0x4]
- mov r0, r8
- adds r1, r4, 0
- movs r3, 0x41
- bl sub_81C25A4
-_081C4044:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81C3F44
-
- thumb_func_start sub_81C4064
-sub_81C4064: @ 81C4064
- push {r4,lr}
- sub sp, 0x8
- ldr r0, =gUnknown_0861CD14
- movs r1, 0
- bl sub_81C2D2C
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x48
- str r0, [sp]
- movs r0, 0x10
- str r0, [sp, 0x4]
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0x42
- bl FillWindowPixelRect
- adds r0, r4, 0
- movs r1, 0x2
- bl CopyWindowToVram
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81C4064
-
- thumb_func_start sub_81C40A0
-sub_81C40A0: @ 81C40A0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- mov r9, r0
- mov r10, r1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- mov r0, r10
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldr r5, =gUnknown_0861CD14
- adds r0, r5, 0
- movs r1, 0
- bl sub_81C2D2C
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_81C2D2C
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- mov r0, r9
- lsls r6, r0, 4
- movs r0, 0x48
- mov r8, r0
- str r0, [sp]
- movs r0, 0x10
- str r0, [sp, 0x4]
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0
- adds r3, r6, 0
- bl FillWindowPixelRect
- mov r0, r10
- lsls r7, r0, 4
- mov r0, r8
- str r0, [sp]
- movs r0, 0x10
- str r0, [sp, 0x4]
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0
- adds r3, r7, 0
- bl FillWindowPixelRect
- movs r4, 0x30
- str r4, [sp]
- movs r0, 0x10
- str r0, [sp, 0x4]
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0
- adds r3, r6, 0
- bl FillWindowPixelRect
- str r4, [sp]
- movs r0, 0x10
- str r0, [sp, 0x4]
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0
- adds r3, r7, 0
- bl FillWindowPixelRect
- mov r0, r9
- bl sub_81C3B08
- mov r0, r10
- bl sub_81C3B08
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81C40A0
-
- thumb_func_start sub_81C4154
-sub_81C4154: @ 81C4154
- push {r4,lr}
- sub sp, 0x8
- ldr r0, =gUnknown_0861CD14
- movs r1, 0x2
- bl sub_81C2D2C
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- ldr r1, =gText_HMMovesCantBeForgotten2
- movs r0, 0
- str r0, [sp]
- str r0, [sp, 0x4]
- adds r0, r4, 0
- movs r2, 0x6
- movs r3, 0x1
- bl sub_81C25A4
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81C4154
-
- thumb_func_start sub_81C4190
-sub_81C4190: @ 81C4190
- push {r4,r5,lr}
- movs r2, 0
- ldr r5, =gUnknown_0203CF1C
- ldr r4, =0x000040d3
- movs r3, 0xFF
-_081C419A:
- ldr r0, [r5]
- adds r0, r4
- adds r0, r2
- ldrb r1, [r0]
- orrs r1, r3
- strb r1, [r0]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x1B
- bls _081C419A
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81C4190
-
- thumb_func_start sub_81C41C0
-sub_81C41C0: @ 81C41C0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r5, =gUnknown_0203CF1C
- ldr r0, [r5]
- ldr r1, =0x000040d3
- adds r0, r1
- adds r1, r0, r4
- ldrb r0, [r1]
- cmp r0, 0xFF
- beq _081C41F2
- adds r1, r0, 0
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r0, [r5]
- ldr r1, =0x000040d3
- adds r0, r1
- adds r0, r4
- movs r1, 0xFF
- strb r1, [r0]
-_081C41F2:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81C41C0
-
- thumb_func_start sub_81C4204
-sub_81C4204: @ 81C4204
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r3, =gSprites
- ldr r2, =gUnknown_0203CF1C
- ldr r2, [r2]
- ldr r4, =0x000040d3
- adds r2, r4
- adds r2, r0
- ldrb r0, [r2]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r3
- adds r2, 0x3E
- movs r0, 0x1
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81C4204
-
- thumb_func_start sub_81C424C
-sub_81C424C: @ 81C424C
- push {r4,lr}
- movs r4, 0x3
-_081C4250:
- ldr r0, =gUnknown_0203CF1C
- ldr r0, [r0]
- ldr r1, =0x000040d3
- adds r0, r1
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0xFF
- beq _081C4268
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_81C4204
-_081C4268:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1B
- bls _081C4250
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81C424C
- thumb_func_start sub_81C4280
-sub_81C4280: @ 81C4280
- push {lr}
- ldr r0, =gUnknown_0203CF1C
- ldr r0, [r0]
- ldr r1, =0x000040c0
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _081C42B0
- cmp r0, 0x2
- bgt _081C42A4
- cmp r0, 0
- beq _081C42AA
- b _081C42C2
- .pool
-_081C42A4:
- cmp r0, 0x3
- beq _081C42BA
- b _081C42C2
-_081C42AA:
- bl sub_81C43A0
- b _081C42C2
-_081C42B0:
- bl sub_81C4420
- bl sub_81C44F0
- b _081C42C2
-_081C42BA:
- bl sub_81C4484
- bl sub_81C44F0
-_081C42C2:
- pop {r0}
- bx r0
- thumb_func_end sub_81C4280
-
- thumb_func_start sub_81C42C8
-sub_81C42C8: @ 81C42C8
- push {r4,r5,lr}
- movs r4, 0x3
- ldr r5, =gUnknown_0203CF1C
-_081C42CE:
- ldr r0, [r5]
- ldr r1, =0x000040d3
- adds r0, r1
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _081C42F2
- ldr r0, =gUnknown_0861CFC4
- movs r1, 0
- movs r2, 0
- movs r3, 0x2
- bl CreateSprite
- ldr r1, [r5]
- ldr r2, =0x000040d3
- adds r1, r2
- adds r1, r4
- strb r0, [r1]
-_081C42F2:
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_81C4204
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bls _081C42CE
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81C42C8
-
- thumb_func_start sub_81C4318
-sub_81C4318: @ 81C4318
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x4
- adds r5, r0, 0
- adds r6, r1, 0
- mov r8, r2
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 24
- lsrs r6, 24
- mov r0, r8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r3, 24
- lsrs r3, 24
- ldr r0, =gUnknown_0203CF1C
- ldr r0, [r0]
- ldr r1, =0x000040d3
- adds r0, r1
- adds r0, r3
- ldrb r0, [r0]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, =gSprites
- adds r4, r0
- adds r0, r4, 0
- adds r1, r5, 0
- str r3, [sp]
- bl StartSpriteAnim
- ldr r0, =gUnknown_0861CFDC
- adds r5, r0
- ldrb r1, [r5]
- lsls r1, 4
- ldrb r2, [r4, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x5]
- adds r6, 0x10
- strh r6, [r4, 0x20]
- movs r0, 0x8
- add r8, r0
- mov r1, r8
- strh r1, [r4, 0x22]
- ldr r3, [sp]
- adds r0, r3, 0
- movs r1, 0
- bl sub_81C4204
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81C4318
-
- thumb_func_start sub_81C43A0
-sub_81C43A0: @ 81C43A0
- push {r4,r5,lr}
- ldr r0, =gUnknown_0203CF1C
- ldr r0, [r0]
- adds r5, r0, 0
- adds r5, 0x70
- ldrb r0, [r5, 0x4]
- cmp r0, 0
- beq _081C43CC
- movs r0, 0x9
- movs r1, 0x78
- movs r2, 0x30
- movs r3, 0x3
- bl sub_81C4318
- movs r0, 0x4
- movs r1, 0x1
- bl sub_81C4204
- b _081C4418
- .pool
-_081C43CC:
- ldr r4, =gBaseStats
- ldrh r1, [r5]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0, 0x6]
- movs r1, 0x78
- movs r2, 0x30
- movs r3, 0x3
- bl sub_81C4318
- ldrh r1, [r5]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r1, r0, r4
- ldrb r0, [r1, 0x6]
- ldrb r2, [r1, 0x7]
- cmp r0, r2
- beq _081C4410
- ldrb r0, [r1, 0x7]
- movs r1, 0xA0
- movs r2, 0x30
- movs r3, 0x4
- bl sub_81C4318
- movs r0, 0x4
- movs r1, 0
- bl sub_81C4204
- b _081C4418
- .pool
-_081C4410:
- movs r0, 0x4
- movs r1, 0x1
- bl sub_81C4204
-_081C4418:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81C43A0
-
- thumb_func_start sub_81C4420
-sub_81C4420: @ 81C4420
- push {r4-r6,lr}
- ldr r0, =gUnknown_0203CF1C
- ldr r0, [r0]
- adds r5, r0, 0
- adds r5, 0x70
- movs r4, 0
- ldr r6, =gBattleMoves
-_081C442E:
- lsls r0, r4, 1
- adds r1, r5, 0
- adds r1, 0x14
- adds r1, r0
- ldrh r0, [r1]
- cmp r0, 0
- beq _081C4468
- adds r1, r0, 0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r0, [r0, 0x2]
- lsls r2, r4, 28
- movs r1, 0x80
- lsls r1, 22
- adds r2, r1
- lsrs r2, 24
- adds r3, r4, 0x3
- lsls r3, 24
- lsrs r3, 24
- movs r1, 0x55
- bl sub_81C4318
- b _081C4474
- .pool
-_081C4468:
- adds r0, r4, 0x3
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl sub_81C4204
-_081C4474:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _081C442E
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_81C4420
-
- thumb_func_start sub_81C4484
-sub_81C4484: @ 81C4484
- push {r4,r5,lr}
- ldr r0, =gUnknown_0203CF1C
- ldr r0, [r0]
- adds r5, r0, 0
- adds r5, 0x70
- movs r4, 0
-_081C4490:
- lsls r0, r4, 1
- adds r1, r5, 0
- adds r1, 0x14
- adds r2, r1, r0
- ldrh r0, [r2]
- cmp r0, 0
- beq _081C44D4
- ldr r1, =gContestMoves
- lsls r0, 3
- adds r0, r1
- ldrb r0, [r0, 0x1]
- lsls r0, 29
- lsrs r0, 5
- movs r1, 0x90
- lsls r1, 21
- adds r0, r1
- lsrs r0, 24
- lsls r2, r4, 28
- movs r1, 0x80
- lsls r1, 22
- adds r2, r1
- lsrs r2, 24
- adds r3, r4, 0x3
- lsls r3, 24
- lsrs r3, 24
- movs r1, 0x55
- bl sub_81C4318
- b _081C44E0
- .pool
-_081C44D4:
- adds r0, r4, 0x3
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl sub_81C4204
-_081C44E0:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _081C4490
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81C4484
-
- thumb_func_start sub_81C44F0
-sub_81C44F0: @ 81C44F0
- push {lr}
- ldr r0, =gUnknown_0203CF1C
- ldr r1, [r0]
- ldr r0, =0x000040c4
- adds r3, r1, r0
- ldrh r0, [r3]
- cmp r0, 0
- bne _081C4514
- movs r0, 0x7
- movs r1, 0x1
- bl sub_81C4204
- b _081C4560
- .pool
-_081C4514:
- ldr r2, =0x000040c0
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _081C4540
- ldr r2, =gBattleMoves
- ldrh r1, [r3]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- movs r1, 0x55
- movs r2, 0x60
- movs r3, 0x7
- bl sub_81C4318
- b _081C4560
- .pool
-_081C4540:
- ldr r1, =gContestMoves
- ldrh r0, [r3]
- lsls r0, 3
- adds r0, r1
- ldrb r0, [r0, 0x1]
- lsls r0, 29
- lsrs r0, 5
- movs r1, 0x90
- lsls r1, 21
- adds r0, r1
- lsrs r0, 24
- movs r1, 0x55
- movs r2, 0x60
- movs r3, 0x7
- bl sub_81C4318
-_081C4560:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81C44F0
thumb_func_start sub_81C4568
sub_81C4568: @ 81C4568
diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s
index 727a62f3d..624a5c69f 100644
--- a/data/battle_anim_scripts.s
+++ b/data/battle_anim_scripts.s
@@ -10484,7 +10484,7 @@ AnimScript_82D7ECA:
end
Anim_StatChange:
- createvisualtask sub_80AA18C, 0x5
+ createvisualtask AnimTask_StatsChange, 0x5
waitforvisualfinish
end
diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s
index 0487199b5..959258ea0 100644
--- a/data/battle_scripts_1.s
+++ b/data/battle_scripts_1.s
@@ -2240,34 +2240,34 @@ BattleScript_EffectMemento::
setatkhptozero
attackanimation
waitanimation
- jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_82DA148
- setbyte sFIELD_1B, 0x0
- playstatchangeanimation BS_TARGET, 0x12, 0x7
- playstatchangeanimation BS_TARGET, 0x2, 0x3
+ jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_EffectMementoPrintNoEffect
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, ATK48_STAT_NEGATIVE | ATK48_STAT_BY_TWO | ATK48_ONLY_MULTIPLE
+ playstatchangeanimation BS_TARGET, BIT_ATK, ATK48_STAT_NEGATIVE | ATK48_STAT_BY_TWO
setstatchanger STAT_ATK, 2, TRUE
- statbuffchange 0x1, BattleScript_82DA119
- jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, 0x1, BattleScript_82DA119
+ statbuffchange 0x1, BattleScript_EffectMementoTrySpAtk
+ jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, 0x1, BattleScript_EffectMementoTrySpAtk
printfromtable gStatDownStringIds
waitmessage 0x40
-BattleScript_82DA119::
- playstatchangeanimation BS_TARGET, 0x10, 0x3
+BattleScript_EffectMementoTrySpAtk:
+ playstatchangeanimation BS_TARGET, BIT_SPATK, ATK48_STAT_NEGATIVE | ATK48_STAT_BY_TWO
setstatchanger STAT_SPATK, 2, TRUE
- statbuffchange 0x1, BattleScript_82DA13C
- jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, 0x1, BattleScript_82DA13C
+ statbuffchange 0x1, BattleScript_EffectMementoTryFaint
+ jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, 0x1, BattleScript_EffectMementoTryFaint
printfromtable gStatDownStringIds
waitmessage 0x40
-BattleScript_82DA13C::
+BattleScript_EffectMementoTryFaint:
tryfaintmon BS_ATTACKER, FALSE, NULL
goto BattleScript_MoveEnd
-BattleScript_82DA148::
+BattleScript_EffectMementoPrintNoEffect:
printstring STRINGID_BUTNOEFFECT
waitmessage 0x40
- goto BattleScript_82DA13C
-BattleScript_82DA153::
+ goto BattleScript_EffectMementoTryFaint
+BattleScript_82DA153:
attackstring
ppreduce
jumpifattackandspecialattackcannotfall BattleScript_82DA15A
-BattleScript_82DA15A::
+BattleScript_82DA15A:
setatkhptozero
pause 0x40
effectivenesssound
@@ -2688,16 +2688,16 @@ BattleScript_TickleDoMoveAnim::
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
attackanimation
waitanimation
- setbyte sFIELD_1B, 0x0
- playstatchangeanimation BS_TARGET, 0x6, 0x5
- playstatchangeanimation BS_TARGET, 0x2, 0x1
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_TARGET, BIT_ATK | BIT_DEF, ATK48_STAT_NEGATIVE | ATK48_ONLY_MULTIPLE
+ playstatchangeanimation BS_TARGET, BIT_ATK, ATK48_STAT_NEGATIVE
setstatchanger STAT_ATK, 1, TRUE
statbuffchange 0x1, BattleScript_TickleTryLowerDef
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_TickleTryLowerDef
printfromtable gStatDownStringIds
waitmessage 0x40
BattleScript_TickleTryLowerDef::
- playstatchangeanimation BS_TARGET, 0x4, 0x1
+ playstatchangeanimation BS_TARGET, BIT_DEF, ATK48_STAT_NEGATIVE
setstatchanger STAT_DEF, 1, TRUE
statbuffchange 0x1, BattleScript_TickleEnd
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_TickleEnd
@@ -2722,8 +2722,8 @@ BattleScript_EffectCosmicPower::
BattleScript_CosmicPowerDoMoveAnim::
attackanimation
waitanimation
- setbyte sFIELD_1B, 0x0
- playstatchangeanimation BS_ATTACKER, 0x24, 0x0
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, 0x0
setstatchanger STAT_DEF, 1, FALSE
statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_CosmicPowerTrySpDef
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CosmicPowerTrySpDef
@@ -2751,8 +2751,8 @@ BattleScript_EffectBulkUp::
BattleScript_BulkUpDoMoveAnim::
attackanimation
waitanimation
- setbyte sFIELD_1B, 0x0
- playstatchangeanimation BS_ATTACKER, 0x6, 0x0
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF, 0x0
setstatchanger STAT_ATK, 1, FALSE
statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_BulkUpTryDef
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_BulkUpTryDef
@@ -2776,8 +2776,8 @@ BattleScript_EffectCalmMind::
BattleScript_CalmMindDoMoveAnim::
attackanimation
waitanimation
- setbyte sFIELD_1B, 0x0
- playstatchangeanimation BS_ATTACKER, 0x30, 0x0
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_SPDEF, 0x0
setstatchanger STAT_SPATK, 1, FALSE
statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_CalmMindTrySpDef
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CalmMindTrySpDef
@@ -2808,8 +2808,8 @@ BattleScript_EffectDragonDance::
BattleScript_DragonDanceDoMoveAnim::
attackanimation
waitanimation
- setbyte sFIELD_1B, 0x0
- playstatchangeanimation BS_ATTACKER, 0xA, 0x0
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_SPEED, 0x0
setstatchanger STAT_ATK, 1, FALSE
statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_DragonDanceTrySpeed
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_DragonDanceTrySpeed
@@ -3487,8 +3487,8 @@ BattleScript_AllStatsUp::
jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, 0xC, BattleScript_AllStatsUpAtk
jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, 0xC, BattleScript_AllStatsUpRet
BattleScript_AllStatsUpAtk::
- setbyte sFIELD_1B, 0x0
- playstatchangeanimation BS_ATTACKER, 0x3E, 0x0
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_SPEED | BIT_SPATK | BIT_SPDEF, 0x0
setstatchanger STAT_ATK, 1, FALSE
statbuffchange MOVE_EFFECT_AFFECTS_USER | 0x1, BattleScript_AllStatsUpDef
printfromtable gStatUpStringIds
@@ -3655,16 +3655,16 @@ BattleScript_PrintMonIsRooted::
goto BattleScript_MoveEnd
BattleScript_AtkDefDown::
- setbyte sFIELD_1B, 0x0
- playstatchangeanimation BS_ATTACKER, 0x6, 0xD
- playstatchangeanimation BS_ATTACKER, 0x2, 0x9
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_ATK, ATK48_DONT_CHECK_LOWER | ATK48_STAT_NEGATIVE | ATK48_ONLY_MULTIPLE
+ playstatchangeanimation BS_ATTACKER, BIT_ATK, ATK48_DONT_CHECK_LOWER | ATK48_STAT_NEGATIVE
setstatchanger STAT_ATK, 1, TRUE
statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | 0x1, BattleScript_82DB144
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_82DB144
printfromtable gStatDownStringIds
waitmessage 0x40
BattleScript_82DB144::
- playstatchangeanimation BS_ATTACKER, 0x4, 0x9
+ playstatchangeanimation BS_ATTACKER, BIT_DEF, ATK48_DONT_CHECK_LOWER | ATK48_STAT_NEGATIVE
setstatchanger STAT_DEF, 1, TRUE
statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | 0x1, BattleScript_82DB167
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_82DB167
@@ -3729,14 +3729,14 @@ BattleScript_OneHitKOMsg::
return
BattleScript_SAtkDown2::
- setbyte sFIELD_1B, 0x0
- playstatchangeanimation BS_ATTACKER, 0x10, 0xB
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_ATTACKER, BIT_SPATK, ATK48_DONT_CHECK_LOWER | ATK48_STAT_NEGATIVE | ATK48_STAT_BY_TWO
setstatchanger STAT_SPATK, 2, TRUE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | 0x1, BattleScript_82DB1FE
- jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_82DB1FE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | 0x1, BattleScript_SAtkDown2End
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_SAtkDown2End
printfromtable gStatDownStringIds
waitmessage 0x40
-BattleScript_82DB1FE::
+BattleScript_SAtkDown2End::
return
BattleScript_FocusPunchSetUp::
diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s
index 1fbaa9536..485847ed1 100644
--- a/data/battle_scripts_2.s
+++ b/data/battle_scripts_2.s
@@ -4,6 +4,7 @@
#include "constants/battle_string_ids.h"
#include "constants/items.h"
#include "constants/songs.h"
+#include "constants/game_stat.h"
.include "asm/macros.inc"
.include "asm/macros/battle_script.inc"
.include "constants/constants.inc"
@@ -62,7 +63,7 @@ BattleScript_SafariBallThrow::
BattleScript_SuccessBallThrow::
jumpifhalfword CMP_EQUAL, gLastUsedItem, ITEM_SAFARI_BALL, BattleScript_PrintCaughtMonInfo
- incrementgamestat 0xB
+ incrementgamestat GAME_STAT_POKEMON_CAPTURES
BattleScript_PrintCaughtMonInfo::
printstring STRINGID_GOTCHAPKMNCAUGHT
trysetcaughtmondexflags BattleScript_TryNicknameCaughtMon
diff --git a/include/battle.h b/include/battle.h
index f6c50ea8a..fae21908b 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -568,10 +568,11 @@ struct BattleStruct
}
#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8
+#define GET_STAT_BUFF_VALUE2(n)((n & 0xF0))
#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40
#define STAT_BUFF_NEGATIVE 0x80 // 0x80, the sign bit
-#define SET_STAT_BUFF_VALUE(n)(((s8)(((s8)(n) << 4)) & 0xF0))
+#define SET_STAT_BUFF_VALUE(n)((((n) << 4) & 0xF0))
#define SET_STATCHANGER(statId, stage, goesDown)(gBattleScripting.statChanger = (statId) + (stage << 4) + (goesDown << 7))
@@ -592,7 +593,7 @@ struct BattleScripting
u8 animTurn;
u8 animTargetsHit;
u8 statChanger;
- u8 field_1B;
+ bool8 statAnimPlayed;
u8 atk23_state;
u8 battleStyle;
u8 atk6C_state;
diff --git a/include/battle_util.h b/include/battle_util.h
index 0531966df..be9b5f1fe 100644
--- a/include/battle_util.h
+++ b/include/battle_util.h
@@ -59,8 +59,8 @@ u8 TrySetCantSelectMoveBattleScript(void);
u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u8 check);
bool8 AreAllMovesUnusable(void);
u8 GetImprisonedMovesCount(u8 battlerId, u16 move);
-u8 UpdateTurnCounters(void);
-u8 TurnBasedEffects(void);
+u8 DoFieldEndTurnEffects(void);
+u8 DoBattlerEndTurnEffects(void);
bool8 HandleWishPerishSongOnTurnEnd(void);
bool8 HandleFaintedMonActions(void);
void TryClearRageStatuses(void);
diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h
index c820a1114..84ec9d512 100644
--- a/include/constants/battle_script_commands.h
+++ b/include/constants/battle_script_commands.h
@@ -17,7 +17,7 @@
#define sB_ANIM_TURN gBattleScripting + 0x18
#define sB_ANIM_TARGETS_HIT gBattleScripting + 0x19
#define sSTATCHANGER gBattleScripting + 0x1A
-#define sFIELD_1B gBattleScripting + 0x1B
+#define sSTAT_ANIM_PLAYED gBattleScripting + 0x1B
#define sGIVEEXP_STATE gBattleScripting + 0x1C
#define sBATTLE_STYLE gBattleScripting + 0x1D
#define sLVLBOX_STATE gBattleScripting + 0x1E
@@ -91,7 +91,16 @@
// atk48
#define ATK48_STAT_NEGATIVE 0x1
#define ATK48_STAT_BY_TWO 0x2
-#define ATK48_BIT_x4 0x4
+#define ATK48_ONLY_MULTIPLE 0x4
#define ATK48_DONT_CHECK_LOWER 0x8
+#define BIT_HP 0x1
+#define BIT_ATK 0x2
+#define BIT_DEF 0x4
+#define BIT_SPEED 0x8
+#define BIT_SPATK 0x10
+#define BIT_SPDEF 0x20
+#define BIT_ACC 0x40
+#define BIT_EVASION 0x80
+
#endif // GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H
diff --git a/include/contest.h b/include/contest.h
index d920117f3..c263882eb 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -1,6 +1,21 @@
#ifndef GUARD_CONTEST_H
#define GUARD_CONTEST_H
+struct ContestMove
+{
+ u8 effect;
+ u8 contestCategory:3;
+ u8 comboStarterId;
+ u8 comboMoves[4];
+};
+
+struct ContestEffect
+{
+ u8 effectType;
+ u8 appeal;
+ u8 jam;
+};
+
struct ContestStruct_02039E00
{
u16 unk_00;
diff --git a/src/battle_main.c b/src/battle_main.c
index 3212d39f3..86937f85f 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -3964,9 +3964,9 @@ void BattleTurnPassed(void)
TurnValuesCleanUp(TRUE);
if (gBattleOutcome == 0)
{
- if (UpdateTurnCounters())
+ if (DoFieldEndTurnEffects())
return;
- if (TurnBasedEffects())
+ if (DoBattlerEndTurnEffects())
return;
}
if (HandleFaintedMonActions())
@@ -4008,7 +4008,7 @@ void BattleTurnPassed(void)
gChosenMoveByBattler[i] = MOVE_NONE;
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
*(gBattleStruct->monToSwitchIntoId + i) = PARTY_SIZE;
*(&gBattleStruct->field_91) = gAbsentBattlerFlags;
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 3af03a5e0..5c0b78240 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -1120,9 +1120,9 @@ static void atk01_accuracycheck(void)
{
u16 move = T2_READ_16(gBattlescriptCurrInstr + 5);
- if (move == 0xFFFE || move == 0xFFFF)
+ if (move == NO_ACC_CALC || move == NO_ACC_CALC_CHECK_LOCK_ON)
{
- if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && move == 0xFFFF && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker)
+ if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && move == NO_ACC_CALC_CHECK_LOCK_ON && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker)
gBattlescriptCurrInstr += 7;
else if (gStatuses3[gBattlerTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
@@ -4378,22 +4378,22 @@ static void atk46_playanimation2(void) // animation Id is stored in the first po
static void atk47_setgraphicalstatchangevalues(void)
{
u8 value = 0;
- switch (gBattleScripting.statChanger & 0xF0)
+ switch (GET_STAT_BUFF_VALUE2(gBattleScripting.statChanger))
{
- case 0x10: // +1
+ case SET_STAT_BUFF_VALUE(1): // +1
value = 0xF;
break;
- case 0x20: // +2
+ case SET_STAT_BUFF_VALUE(2): // +2
value = 0x27;
break;
- case 0x90: // -1
+ case SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE: // -1
value = 0x16;
break;
- case 0xA0: // -2
+ case SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE: // -2
value = 0x2E;
break;
}
- gBattleScripting.animArg1 = (gBattleScripting.statChanger & 0xF) + value - 1;
+ gBattleScripting.animArg1 = GET_STAT_BUFF_ID(gBattleScripting.statChanger) + value - 1;
gBattleScripting.animArg2 = 0;
gBattlescriptCurrInstr++;
}
@@ -4479,16 +4479,16 @@ static void atk48_playstatchangeanimation(void)
}
}
- if (gBattlescriptCurrInstr[3] & ATK48_BIT_x4 && changeableStatsCount < 2)
+ if (gBattlescriptCurrInstr[3] & ATK48_ONLY_MULTIPLE && changeableStatsCount < 2)
{
gBattlescriptCurrInstr += 4;
}
- else if (changeableStatsCount != 0 && gBattleScripting.field_1B == 0)
+ else if (changeableStatsCount != 0 && !gBattleScripting.statAnimPlayed)
{
BtlController_EmitBattleAnimation(0, B_ANIM_STATS_CHANGE, statAnimId);
MarkBattlerForControllerExec(gActiveBattler);
- if (gBattlescriptCurrInstr[3] & ATK48_BIT_x4 && changeableStatsCount > 1)
- gBattleScripting.field_1B = 1;
+ if (gBattlescriptCurrInstr[3] & ATK48_ONLY_MULTIPLE && changeableStatsCount > 1)
+ gBattleScripting.statAnimPlayed = TRUE;
gBattlescriptCurrInstr += 4;
}
else
diff --git a/src/battle_util.c b/src/battle_util.c
index c739c648c..875244d79 100644
--- a/src/battle_util.c
+++ b/src/battle_util.c
@@ -426,7 +426,7 @@ u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u8 check)
gPotentialItemEffectBattler = battlerId;
- for (i = 0; i < MAX_BATTLERS_COUNT; i++)
+ for (i = 0; i < 4; i++)
{
if (gBattleMons[battlerId].moves[i] == 0 && check & MOVE_LIMITATION_ZEROMOVE)
unusableMoves |= gBitTable[i];
@@ -490,7 +490,22 @@ u8 GetImprisonedMovesCount(u8 battlerId, u16 move)
return imprisionedMoves;
}
-u8 UpdateTurnCounters(void)
+enum
+{
+ ENDTURN_ORDER,
+ ENDTURN_REFLECT,
+ ENDTURN_LIGHT_SCREEN,
+ ENDTURN_MIST,
+ ENDTURN_SAFEGUARD,
+ ENDTURN_WISH,
+ ENDTURN_RAIN,
+ ENDTURN_SANDSTORM,
+ ENDTURN_SUN,
+ ENDTURN_HAIL,
+ ENDTURN_FIELD_COUNT,
+};
+
+u8 DoFieldEndTurnEffects(void)
{
u8 effect = 0;
s32 i;
@@ -508,7 +523,7 @@ u8 UpdateTurnCounters(void)
switch (gBattleStruct->turnCountersTracker)
{
- case 0:
+ case ENDTURN_ORDER:
for (i = 0; i < gBattlersCount; i++)
{
gBattlerByTurnOrder[i] = i;
@@ -530,7 +545,7 @@ u8 UpdateTurnCounters(void)
gBattleStruct->turnSideTracker = 0;
}
// fall through
- case 1:
+ case ENDTURN_REFLECT:
while (gBattleStruct->turnSideTracker < 2)
{
side = gBattleStruct->turnSideTracker;
@@ -555,7 +570,7 @@ u8 UpdateTurnCounters(void)
gBattleStruct->turnSideTracker = 0;
}
break;
- case 2:
+ case ENDTURN_LIGHT_SCREEN:
while (gBattleStruct->turnSideTracker < 2)
{
side = gBattleStruct->turnSideTracker;
@@ -581,7 +596,7 @@ u8 UpdateTurnCounters(void)
gBattleStruct->turnSideTracker = 0;
}
break;
- case 3:
+ case ENDTURN_MIST:
while (gBattleStruct->turnSideTracker < 2)
{
side = gBattleStruct->turnSideTracker;
@@ -605,7 +620,7 @@ u8 UpdateTurnCounters(void)
gBattleStruct->turnSideTracker = 0;
}
break;
- case 4:
+ case ENDTURN_SAFEGUARD:
while (gBattleStruct->turnSideTracker < 2)
{
side = gBattleStruct->turnSideTracker;
@@ -629,7 +644,7 @@ u8 UpdateTurnCounters(void)
gBattleStruct->turnSideTracker = 0;
}
break;
- case 5:
+ case ENDTURN_WISH:
while (gBattleStruct->turnSideTracker < gBattlersCount)
{
gActiveBattler = gBattlerByTurnOrder[gBattleStruct->turnSideTracker];
@@ -650,7 +665,7 @@ u8 UpdateTurnCounters(void)
gBattleStruct->turnCountersTracker++;
}
break;
- case 6:
+ case ENDTURN_RAIN:
if (gBattleWeather & WEATHER_RAIN_ANY)
{
if (!(gBattleWeather & WEATHER_RAIN_PERMANENT))
@@ -680,7 +695,7 @@ u8 UpdateTurnCounters(void)
}
gBattleStruct->turnCountersTracker++;
break;
- case 7:
+ case ENDTURN_SANDSTORM:
if (gBattleWeather & WEATHER_SANDSTORM_ANY)
{
if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT) && --gWishFutureKnock.weatherDuration == 0)
@@ -700,7 +715,7 @@ u8 UpdateTurnCounters(void)
}
gBattleStruct->turnCountersTracker++;
break;
- case 8:
+ case ENDTURN_SUN:
if (gBattleWeather & WEATHER_SUN_ANY)
{
if (!(gBattleWeather & WEATHER_SUN_PERMANENT) && --gWishFutureKnock.weatherDuration == 0)
@@ -718,8 +733,8 @@ u8 UpdateTurnCounters(void)
}
gBattleStruct->turnCountersTracker++;
break;
- case 9:
- if (gBattleWeather & WEATHER_HAIL)
+ case ENDTURN_HAIL:
+ if (gBattleWeather & WEATHER_HAIL_ANY)
{
if (--gWishFutureKnock.weatherDuration == 0)
{
@@ -738,7 +753,7 @@ u8 UpdateTurnCounters(void)
}
gBattleStruct->turnCountersTracker++;
break;
- case 10:
+ case ENDTURN_FIELD_COUNT:
effect++;
break;
}
@@ -746,14 +761,36 @@ u8 UpdateTurnCounters(void)
return (gBattleMainFunc != BattleTurnPassed);
}
-#define TURNBASED_MAX_CASE 19
+enum
+{
+ ENDTURN_INGRAIN,
+ ENDTURN_ABILITIES,
+ ENDTURN_ITEMS1,
+ ENDTURN_LEECH_SEED,
+ ENDTURN_POISON,
+ ENDTURN_BAD_POISON,
+ ENDTURN_BURN,
+ ENDTURN_NIGHTMARES,
+ ENDTURN_CURSE,
+ ENDTURN_WRAP,
+ ENDTURN_UPROAR,
+ ENDTURN_THRASH,
+ ENDTURN_DISABLE,
+ ENDTURN_ENCORE,
+ ENDTURN_LOCK_ON,
+ ENDTURN_CHARGE,
+ ENDTURN_TAUNT,
+ ENDTURN_YAWN,
+ ENDTURN_ITEMS2,
+ ENDTURN_BATTLER_COUNT
+};
-u8 TurnBasedEffects(void)
+u8 DoBattlerEndTurnEffects(void)
{
u8 effect = 0;
gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20);
- while (gBattleStruct->turnEffectsBattlerId < gBattlersCount && gBattleStruct->turnEffectsTracker <= TURNBASED_MAX_CASE)
+ while (gBattleStruct->turnEffectsBattlerId < gBattlersCount && gBattleStruct->turnEffectsTracker <= ENDTURN_BATTLER_COUNT)
{
gActiveBattler = gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->turnEffectsBattlerId];
if (gAbsentBattlerFlags & gBitTable[gActiveBattler])
@@ -764,7 +801,7 @@ u8 TurnBasedEffects(void)
{
switch (gBattleStruct->turnEffectsTracker)
{
- case 0: // ingrain
+ case ENDTURN_INGRAIN: // ingrain
if ((gStatuses3[gActiveBattler] & STATUS3_ROOTED)
&& gBattleMons[gActiveBattler].hp != gBattleMons[gActiveBattler].maxHP
&& gBattleMons[gActiveBattler].hp != 0)
@@ -778,22 +815,22 @@ u8 TurnBasedEffects(void)
}
gBattleStruct->turnEffectsTracker++;
break;
- case 1: // end turn abilities
+ case ENDTURN_ABILITIES: // end turn abilities
if (AbilityBattleEffects(ABILITYEFFECT_ENDTURN, gActiveBattler, 0, 0, 0))
effect++;
gBattleStruct->turnEffectsTracker++;
break;
- case 2: // item effects
+ case ENDTURN_ITEMS1: // item effects
if (ItemBattleEffects(1, gActiveBattler, 0))
effect++;
gBattleStruct->turnEffectsTracker++;
break;
- case 18: // item effects again
+ case ENDTURN_ITEMS2: // item effects again
if (ItemBattleEffects(1, gActiveBattler, 1))
effect++;
gBattleStruct->turnEffectsTracker++;
break;
- case 3: // leech seed
+ case ENDTURN_LEECH_SEED: // leech seed
if ((gStatuses3[gActiveBattler] & STATUS3_LEECHSEED)
&& gBattleMons[gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BATTLER].hp != 0
&& gBattleMons[gActiveBattler].hp != 0)
@@ -809,7 +846,7 @@ u8 TurnBasedEffects(void)
}
gBattleStruct->turnEffectsTracker++;
break;
- case 4: // poison
+ case ENDTURN_POISON: // poison
if ((gBattleMons[gActiveBattler].status1 & STATUS1_POISON) && gBattleMons[gActiveBattler].hp != 0)
{
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8;
@@ -820,7 +857,7 @@ u8 TurnBasedEffects(void)
}
gBattleStruct->turnEffectsTracker++;
break;
- case 5: // toxic poison
+ case ENDTURN_BAD_POISON: // toxic poison
if ((gBattleMons[gActiveBattler].status1 & STATUS1_TOXIC_POISON) && gBattleMons[gActiveBattler].hp != 0)
{
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 16;
@@ -834,7 +871,7 @@ u8 TurnBasedEffects(void)
}
gBattleStruct->turnEffectsTracker++;
break;
- case 6: // burn
+ case ENDTURN_BURN: // burn
if ((gBattleMons[gActiveBattler].status1 & STATUS1_BURN) && gBattleMons[gActiveBattler].hp != 0)
{
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8;
@@ -845,7 +882,7 @@ u8 TurnBasedEffects(void)
}
gBattleStruct->turnEffectsTracker++;
break;
- case 7: // spooky nightmares
+ case ENDTURN_NIGHTMARES: // spooky nightmares
if ((gBattleMons[gActiveBattler].status2 & STATUS2_NIGHTMARE) && gBattleMons[gActiveBattler].hp != 0)
{
// R/S does not perform this sleep check, which causes the nightmare effect to
@@ -865,7 +902,7 @@ u8 TurnBasedEffects(void)
}
gBattleStruct->turnEffectsTracker++;
break;
- case 8: // curse
+ case ENDTURN_CURSE: // curse
if ((gBattleMons[gActiveBattler].status2 & STATUS2_CURSED) && gBattleMons[gActiveBattler].hp != 0)
{
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 4;
@@ -876,7 +913,7 @@ u8 TurnBasedEffects(void)
}
gBattleStruct->turnEffectsTracker++;
break;
- case 9: // wrap
+ case ENDTURN_WRAP: // wrap
if ((gBattleMons[gActiveBattler].status2 & STATUS2_WRAPPED) && gBattleMons[gActiveBattler].hp != 0)
{
gBattleMons[gActiveBattler].status2 -= 0x2000;
@@ -909,7 +946,7 @@ u8 TurnBasedEffects(void)
}
gBattleStruct->turnEffectsTracker++;
break;
- case 10: // uproar
+ case ENDTURN_UPROAR: // uproar
if (gBattleMons[gActiveBattler].status2 & STATUS2_UPROAR)
{
for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount; gBattlerAttacker++)
@@ -958,7 +995,7 @@ u8 TurnBasedEffects(void)
if (effect != 2)
gBattleStruct->turnEffectsTracker++;
break;
- case 11: // thrash
+ case ENDTURN_THRASH: // thrash
if (gBattleMons[gActiveBattler].status2 & STATUS2_LOCK_CONFUSE)
{
gBattleMons[gActiveBattler].status2 -= 0x400;
@@ -980,7 +1017,7 @@ u8 TurnBasedEffects(void)
}
gBattleStruct->turnEffectsTracker++;
break;
- case 12: // disable
+ case ENDTURN_DISABLE: // disable
if (gDisableStructs[gActiveBattler].disableTimer1 != 0)
{
s32 i;
@@ -1003,7 +1040,7 @@ u8 TurnBasedEffects(void)
}
gBattleStruct->turnEffectsTracker++;
break;
- case 13: // encore
+ case ENDTURN_ENCORE: // encore
if (gDisableStructs[gActiveBattler].encoreTimer1 != 0)
{
if (gBattleMons[gActiveBattler].moves[gDisableStructs[gActiveBattler].encoredMovePos] != gDisableStructs[gActiveBattler].encoredMove) // pokemon does not have the encored move anymore
@@ -1022,22 +1059,22 @@ u8 TurnBasedEffects(void)
}
gBattleStruct->turnEffectsTracker++;
break;
- case 14: // lock-on decrement
+ case ENDTURN_LOCK_ON: // lock-on decrement
if (gStatuses3[gActiveBattler] & STATUS3_ALWAYS_HITS)
gStatuses3[gActiveBattler] -= 0x8;
gBattleStruct->turnEffectsTracker++;
break;
- case 15: // charge
+ case ENDTURN_CHARGE: // charge
if (gDisableStructs[gActiveBattler].chargeTimer1 && --gDisableStructs[gActiveBattler].chargeTimer1 == 0)
gStatuses3[gActiveBattler] &= ~STATUS3_CHARGED_UP;
gBattleStruct->turnEffectsTracker++;
break;
- case 16: // taunt
+ case ENDTURN_TAUNT: // taunt
if (gDisableStructs[gActiveBattler].tauntTimer1)
gDisableStructs[gActiveBattler].tauntTimer1--;
gBattleStruct->turnEffectsTracker++;
break;
- case 17: // yawn
+ case ENDTURN_YAWN: // yawn
if (gStatuses3[gActiveBattler] & STATUS3_YAWN)
{
gStatuses3[gActiveBattler] -= 0x800;
@@ -1056,7 +1093,7 @@ u8 TurnBasedEffects(void)
}
gBattleStruct->turnEffectsTracker++;
break;
- case 19: // done
+ case ENDTURN_BATTLER_COUNT: // done
gBattleStruct->turnEffectsTracker = 0;
gBattleStruct->turnEffectsBattlerId++;
break;
@@ -1264,7 +1301,24 @@ void TryClearRageStatuses(void)
}
}
-#define ATKCANCELLER_MAX_CASE 14
+enum
+{
+ CANCELLER_FLAGS,
+ CANCELLER_ASLEEP,
+ CANCELLER_FROZEN,
+ CANCELLER_TRUANT,
+ CANCELLER_RECHARGE,
+ CANCELLER_FLINCH,
+ CANCELLER_DISABLED,
+ CANCELLER_TAUNTED,
+ CANCELLER_IMPRISONED,
+ CANCELLER_CONFUSED,
+ CANCELLER_PARALYSED,
+ CANCELLER_IN_LOVE,
+ CANCELLER_BIDE,
+ CANCELLER_THAW,
+ CANCELLER_END,
+};
u8 AtkCanceller_UnableToUseMove(void)
{
@@ -1274,12 +1328,12 @@ u8 AtkCanceller_UnableToUseMove(void)
{
switch (gBattleStruct->atkCancellerTracker)
{
- case 0: // flags clear
+ case CANCELLER_FLAGS: // flags clear
gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_DESTINY_BOND);
gStatuses3[gBattlerAttacker] &= ~(STATUS3_GRUDGE);
gBattleStruct->atkCancellerTracker++;
break;
- case 1: // check being asleep
+ case CANCELLER_ASLEEP: // check being asleep
if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP)
{
if (UproarWakeUpCheck(gBattlerAttacker))
@@ -1323,7 +1377,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
gBattleStruct->atkCancellerTracker++;
break;
- case 2: // check being frozen
+ case CANCELLER_FROZEN: // check being frozen
if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE)
{
if (Random() % 5)
@@ -1350,7 +1404,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
gBattleStruct->atkCancellerTracker++;
break;
- case 3: // truant
+ case CANCELLER_TRUANT: // truant
if (gBattleMons[gBattlerAttacker].ability == ABILITY_TRUANT && gDisableStructs[gBattlerAttacker].truantCounter)
{
CancelMultiTurnMoves(gBattlerAttacker);
@@ -1362,7 +1416,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
gBattleStruct->atkCancellerTracker++;
break;
- case 4: // recharge
+ case CANCELLER_RECHARGE: // recharge
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_RECHARGE)
{
gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_RECHARGE);
@@ -1374,7 +1428,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
gBattleStruct->atkCancellerTracker++;
break;
- case 5: // flinch
+ case CANCELLER_FLINCH: // flinch
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_FLINCHED)
{
gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_FLINCHED);
@@ -1386,7 +1440,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
gBattleStruct->atkCancellerTracker++;
break;
- case 6: // disabled move
+ case CANCELLER_DISABLED: // disabled move
if (gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != 0)
{
gProtectStructs[gBattlerAttacker].usedDisabledMove = 1;
@@ -1398,7 +1452,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
gBattleStruct->atkCancellerTracker++;
break;
- case 7: // taunt
+ case CANCELLER_TAUNTED: // taunt
if (gDisableStructs[gBattlerAttacker].tauntTimer1 && gBattleMoves[gCurrentMove].power == 0)
{
gProtectStructs[gBattlerAttacker].usedTauntedMove = 1;
@@ -1409,7 +1463,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
gBattleStruct->atkCancellerTracker++;
break;
- case 8: // imprisoned
+ case CANCELLER_IMPRISONED: // imprisoned
if (GetImprisonedMovesCount(gBattlerAttacker, gCurrentMove))
{
gProtectStructs[gBattlerAttacker].usedImprisionedMove = 1;
@@ -1420,7 +1474,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
gBattleStruct->atkCancellerTracker++;
break;
- case 9: // confusion
+ case CANCELLER_CONFUSED: // confusion
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_CONFUSION)
{
gBattleMons[gBattlerAttacker].status2--;
@@ -1450,7 +1504,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
gBattleStruct->atkCancellerTracker++;
break;
- case 10: // paralysis
+ case CANCELLER_PARALYSED: // paralysis
if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) && (Random() % 4) == 0)
{
gProtectStructs[gBattlerAttacker].prlzImmobility = 1;
@@ -1462,7 +1516,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
gBattleStruct->atkCancellerTracker++;
break;
- case 11: // infatuation
+ case CANCELLER_IN_LOVE: // infatuation
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION)
{
gBattleScripting.battler = CountTrailingZeroBits((gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION) >> 0x10);
@@ -1482,7 +1536,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
gBattleStruct->atkCancellerTracker++;
break;
- case 12: // bide
+ case CANCELLER_BIDE: // bide
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_BIDE)
{
gBattleMons[gBattlerAttacker].status2 -= 0x100;
@@ -1512,7 +1566,7 @@ u8 AtkCanceller_UnableToUseMove(void)
}
gBattleStruct->atkCancellerTracker++;
break;
- case 13: // move thawing
+ case CANCELLER_THAW: // move thawing
if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE)
{
if (gBattleMoves[gCurrentMove].effect == EFFECT_THAW_HIT)
@@ -1526,11 +1580,11 @@ u8 AtkCanceller_UnableToUseMove(void)
}
gBattleStruct->atkCancellerTracker++;
break;
- case ATKCANCELLER_MAX_CASE:
+ case CANCELLER_END:
break;
}
- } while (gBattleStruct->atkCancellerTracker != ATKCANCELLER_MAX_CASE && effect == 0);
+ } while (gBattleStruct->atkCancellerTracker != CANCELLER_END && effect == 0);
if (effect == 2)
{
diff --git a/src/egg_hatch.c b/src/egg_hatch.c
index 64ec47537..67876f33b 100644
--- a/src/egg_hatch.c
+++ b/src/egg_hatch.c
@@ -631,7 +631,7 @@ static void CB2_EggHatch_1(void)
GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_HatchedFromEgg);
EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 3, 0xFF);
- PlayFanfare(371);
+ PlayFanfare(MUS_FANFA5);
sEggHatchData->CB2_state++;
PutWindowTilemap(sEggHatchData->windowId);
CopyWindowToVram(sEggHatchData->windowId, 3);
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index a78b11e66..32d2bde4f 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -27,21 +27,8 @@
#include "scanline_effect.h"
#include "menu_helpers.h"
#include "daycare.h"
-
-struct ContestMove
-{
- u8 effect;
- u8 type;
- u8 comboID;
- u8 combo[4];
-};
-
-struct ContestEffect
-{
- u8 type;
- u8 appeal;
- u8 jam;
-};
+#include "data2.h"
+#include "contest.h"
extern struct UnkSummaryStruct* gUnknown_0203CF1C;
extern struct BgTemplate gUnknown_0861CBB4;
@@ -69,6 +56,8 @@ extern u8 gUnknown_0861CE74[];
extern u8 gUnknown_0861CE7B[];
extern struct WindowTemplate gUnknown_0861CCEC;
extern struct WindowTemplate gUnknown_0861CD14;
+extern const u8 *const gContestEffectDescriptionPointers[];
+extern const u8 *const gMoveDescriptionPointers[];
void sub_81C488C(u8 a);
extern u8 sub_81221EC();
@@ -96,6 +85,7 @@ extern u8 gText_PkmnInfo[];
extern u8 gText_PkmnSkills[];
extern u8 gText_BattleMoves[];
extern u8 gText_ContestMoves[];
+extern u8 gText_HMMovesCantBeForgotten2[];
extern u8 gText_Cancel2[];
extern u8 gText_Info[];
extern u8 gText_Switch[];
@@ -144,7 +134,9 @@ extern u8 gUnknown_0861CE8E[];
extern u8 gText_OneDash[];
extern u8 gText_TwoDashes[];
extern u8 gText_ThreeDashes[];
+extern u8 gText_Cancel[];
extern u8 gUnknown_0861CE97[];
+extern const struct SpriteTemplate gUnknown_0861CFC4;
extern void sub_8199C30(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f);
extern bool8 sub_81A6BF4();
@@ -173,6 +165,9 @@ void sub_81C4984();
void sub_81C4A08();
void sub_81C4A88();
void sub_81C4280();
+void sub_81C43A0();
+void sub_81C4484();
+void sub_81C4420();
void sub_81C0510(u8 taskId);
void sub_81C171C(u8 taskId);
void ResetAllBgsCoordinates();
@@ -341,10 +336,7 @@ struct UnkSummaryStruct
u8 unk40C9;
u8 unk40CA;
u8 unk40CB[8];
- u8 unk40D3;
- u8 unk40D4;
- u8 unk40D5;
- u8 unk_filler5[0x19];
+ u8 unk40D3[0x1C];
u8 unk40EF;
s16 unk40F0;
u8 unk_filler4[6];
@@ -506,8 +498,8 @@ bool8 sub_81BFB10(void)
gMain.state++;
break;
case 17:
- gUnknown_0203CF1C->unk40D3 = sub_81C45F4(&gUnknown_0203CF1C->currentMon, &gUnknown_0203CF1C->unk40F0);
- if (gUnknown_0203CF1C->unk40D3 != 0xFF)
+ gUnknown_0203CF1C->unk40D3[0] = sub_81C45F4(&gUnknown_0203CF1C->currentMon, &gUnknown_0203CF1C->unk40F0);
+ if (gUnknown_0203CF1C->unk40D3[0] != 0xFF)
{
gUnknown_0203CF1C->unk40F0 = 0;
gMain.state++;
@@ -890,10 +882,10 @@ void sub_81C0704(u8 taskId)
break;
case 1:
sub_81C4898();
- DestroySpriteAndFreeResources(&gSprites[gUnknown_0203CF1C->unk40D3]);
+ DestroySpriteAndFreeResources(&gSprites[gUnknown_0203CF1C->unk40D3[0]]);
break;
case 2:
- DestroySpriteAndFreeResources(&gSprites[gUnknown_0203CF1C->unk40D4]);
+ DestroySpriteAndFreeResources(&gSprites[gUnknown_0203CF1C->unk40D3[1]]);
break;
case 3:
sub_81C0098(&gUnknown_0203CF1C->currentMon);
@@ -916,10 +908,10 @@ void sub_81C0704(u8 taskId)
data[1] = 0;
break;
case 8:
- gUnknown_0203CF1C->unk40D3 = sub_81C45F4(&gUnknown_0203CF1C->currentMon, &data[1]);
- if (gUnknown_0203CF1C->unk40D3 == 0xFF)
+ gUnknown_0203CF1C->unk40D3[0] = sub_81C45F4(&gUnknown_0203CF1C->currentMon, &data[1]);
+ if (gUnknown_0203CF1C->unk40D3[0] == 0xFF)
return;
- gSprites[gUnknown_0203CF1C->unk40D3].data[2] = 1;
+ gSprites[gUnknown_0203CF1C->unk40D3[0]].data[2] = 1;
sub_81C0E24();
data[1] = 0;
break;
@@ -934,7 +926,7 @@ void sub_81C0704(u8 taskId)
sub_81C2524();
break;
case 12:
- gSprites[gUnknown_0203CF1C->unk40D3].data[2] = 0;
+ gSprites[gUnknown_0203CF1C->unk40D3[0]].data[2] = 0;
break;
default:
if (sub_81221EC() == 0 && FuncIsActiveTask(sub_81C20F0) == 0)
@@ -1139,7 +1131,7 @@ void sub_81C0E48(u8 taskId)
gUnknown_0203CF1C->unk40C6 = 0;
move = gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6];
ClearWindowTilemap(0x13);
- if (gSprites[gUnknown_0203CF1C->unk40D5].invisible == 0)
+ if (gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible == 0)
ClearWindowTilemap(0xD);
sub_81C1DA4(9, -3);
sub_81C1EFC(9, -3, move);
@@ -1245,7 +1237,7 @@ void sub_81C1070(s16 *a, s8 b, u8 *c)
if ((*c == 4 && gUnknown_0203CF1C->unk40C4 == 0) || a[1] == 1)
{
ClearWindowTilemap(19);
- if (!gSprites[gUnknown_0203CF1C->unk40D5].invisible)
+ if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
ClearWindowTilemap(13);
schedule_bg_copy_tilemap_to_vram(0);
sub_81C1DA4(9, -3);
@@ -1889,7 +1881,7 @@ void sub_81C1940(u8 taskId)
{
ClearWindowTilemap(19);
- if (!gSprites[gUnknown_0203CF1C->unk40D5].invisible)
+ if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
ClearWindowTilemap(13);
move = gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6];
gTasks[taskId].func = sub_81C174C;
@@ -1903,7 +1895,7 @@ void sub_81C1940(u8 taskId)
if (gUnknown_0203CF1C->unk40C0 != 3)
{
ClearWindowTilemap(19);
- if (!gSprites[gUnknown_0203CF1C->unk40D5].invisible)
+ if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
ClearWindowTilemap(13);
move = gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6];
gTasks[taskId].func = sub_81C174C;
@@ -1915,7 +1907,7 @@ void sub_81C1940(u8 taskId)
else if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
ClearWindowTilemap(19);
- if (!gSprites[gUnknown_0203CF1C->unk40D5].invisible)
+ if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
ClearWindowTilemap(13);
move = gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6];
sub_81C3E9C(move);
@@ -2208,7 +2200,7 @@ void sub_81C1E20(u8 taskId)
}
else
{
- if (!gSprites[gUnknown_0203CF1C->unk40D5].invisible)
+ if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
PutWindowTilemap(13);
PutWindowTilemap(19);
}
@@ -2259,7 +2251,7 @@ void sub_81C1F80(u8 taskId)
}
else
{
- if (!gSprites[gUnknown_0203CF1C->unk40D5].invisible)
+ if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
{
PutWindowTilemap(13);
}
@@ -3591,3 +3583,238 @@ void sub_81C3D54(u8 taskId)
}
data[0]++;
}
+
+void sub_81C3E2C(u8 moveSlot)
+{
+ u16 move;
+
+ if (moveSlot == 4)
+ move = gUnknown_0203CF1C->unk40C4;
+ else
+ move = gUnknown_0203CF1C->summary.moves[moveSlot];
+
+ if (move != MOVE_NONE)
+ {
+ u8 windowId = sub_81C2D2C(&gUnknown_0861CD14, 2);
+ sub_81C25A4(windowId, gContestEffectDescriptionPointers[gContestMoves[move].effect], 6, 1, 0, 0);
+ }
+}
+
+void sub_81C3E9C(u16 move)
+{
+ u8 windowId = sub_81C2D2C(&gUnknown_0861CD14, 2);
+ FillWindowPixelBuffer(windowId, 0);
+ if (move != MOVE_NONE)
+ {
+ if (gUnknown_0203CF1C->unk40C0 == 2)
+ {
+ sub_81C3C5C(move);
+ sub_81C25A4(windowId, gMoveDescriptionPointers[move - 1], 6, 1, 0, 0);
+ }
+ else
+ {
+ sub_81C25A4(windowId, gContestEffectDescriptionPointers[gContestMoves[move].effect], 6, 1, 0, 0);
+ }
+ PutWindowTilemap(windowId);
+ }
+ else
+ {
+ ClearWindowTilemap(windowId);
+ }
+
+ schedule_bg_copy_tilemap_to_vram(0);
+}
+
+void sub_81C3F44(void)
+{
+ u8 windowId1 = sub_81C2D2C(&gUnknown_0861CD14, 0);
+ u8 windowId2 = sub_81C2D2C(&gUnknown_0861CD14, 1);
+ if (gUnknown_0203CF1C->unk40C4 == MOVE_NONE)
+ {
+ sub_81C25A4(windowId1, gText_Cancel, 0, 0x41, 0, 1);
+ }
+ else
+ {
+ u16 move = gUnknown_0203CF1C->unk40C4;
+ if (gUnknown_0203CF1C->unk40C0 == 2)
+ sub_81C25A4(windowId1, gMoveNames[move], 0, 0x41, 0, 6);
+ else
+ sub_81C25A4(windowId1, gMoveNames[move], 0, 0x41, 0, 5);
+
+ ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].pp, 1, 2);
+ DynamicPlaceholderTextUtil_Reset();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar1);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_0861CE97);
+ sub_81C25A4(windowId2, gStringVar4, GetStringRightAlignXOffset(1, gStringVar4, 0x2C), 0x41, 0, 12);
+ }
+}
+
+void sub_81C4064(void)
+{
+ u8 windowId = sub_81C2D2C(&gUnknown_0861CD14, 0);
+ FillWindowPixelRect(windowId, 0, 0, 0x42, 0x48, 0x10);
+ CopyWindowToVram(windowId, 2);
+}
+
+void sub_81C40A0(u8 a, u8 b)
+{
+ u8 windowId1 = sub_81C2D2C(&gUnknown_0861CD14, 0);
+ u8 windowId2 = sub_81C2D2C(&gUnknown_0861CD14, 1);
+
+ FillWindowPixelRect(windowId1, 0, 0, a * 16, 0x48, 0x10);
+ FillWindowPixelRect(windowId1, 0, 0, b * 16, 0x48, 0x10);
+
+ FillWindowPixelRect(windowId2, 0, 0, a * 16, 0x30, 0x10);
+ FillWindowPixelRect(windowId2, 0, 0, b * 16, 0x30, 0x10);
+
+ sub_81C3B08(a);
+ sub_81C3B08(b);
+}
+
+void sub_81C4154(void)
+{
+ u8 windowId = sub_81C2D2C(&gUnknown_0861CD14, 2);
+ FillWindowPixelBuffer(windowId, 0);
+ sub_81C25A4(windowId, gText_HMMovesCantBeForgotten2, 6, 1, 0, 0);
+}
+
+void sub_81C4190(void)
+{
+ u8 i;
+
+ for (i = 0; i < 28; i++)
+ gUnknown_0203CF1C->unk40D3[i] |= 0xFF;
+}
+
+void sub_81C41C0(u8 spriteArrayId)
+{
+ if (gUnknown_0203CF1C->unk40D3[spriteArrayId] != 0xFF)
+ {
+ DestroySprite(&gSprites[gUnknown_0203CF1C->unk40D3[spriteArrayId]]);
+ gUnknown_0203CF1C->unk40D3[spriteArrayId] = 0xFF;
+ }
+}
+
+void sub_81C4204(u8 spriteArrayId, bool8 invisible)
+{
+ gSprites[gUnknown_0203CF1C->unk40D3[spriteArrayId]].invisible = invisible;
+}
+
+void sub_81C424C(void)
+{
+ u8 i;
+
+ for (i = 3; i < 28; i++)
+ {
+ if (gUnknown_0203CF1C->unk40D3[i] != 0xFF)
+ sub_81C4204(i, TRUE);
+ }
+}
+
+void sub_81C4280(void)
+{
+ switch (gUnknown_0203CF1C->unk40C0)
+ {
+ case 0:
+ sub_81C43A0();
+ break;
+ case 2:
+ sub_81C4420();
+ sub_81C44F0();
+ break;
+ case 3:
+ sub_81C4484();
+ sub_81C44F0();
+ break;
+ }
+}
+
+void sub_81C42C8(void)
+{
+ u8 i;
+
+ for (i = 3; i < 8; i++)
+ {
+ if (gUnknown_0203CF1C->unk40D3[i] == 0xFF)
+ gUnknown_0203CF1C->unk40D3[i] = CreateSprite(&gUnknown_0861CFC4, 0, 0, 2);
+
+ sub_81C4204(i, TRUE);
+ }
+}
+
+extern const u8 gUnknown_0861CFDC[];
+
+void sub_81C4318(u8 typeId, u8 x, u8 y, u8 spriteArrayId)
+{
+ struct Sprite *sprite = &gSprites[gUnknown_0203CF1C->unk40D3[spriteArrayId]];
+ StartSpriteAnim(sprite, typeId);
+ sprite->oam.paletteNum = gUnknown_0861CFDC[typeId];
+ sprite->pos1.x = x + 16;
+ sprite->pos1.y = y + 8;
+ sub_81C4204(spriteArrayId, FALSE);
+}
+
+void sub_81C43A0(void)
+{
+ struct PokeSummary *summary = &gUnknown_0203CF1C->summary;
+ if (summary->isEgg)
+ {
+ sub_81C4318(TYPE_MYSTERY, 0x78, 0x30, 3);
+ sub_81C4204(4, TRUE);
+ }
+ else
+ {
+ sub_81C4318(gBaseStats[summary->species].type1, 0x78, 0x30, 3);
+ if (gBaseStats[summary->species].type1 != gBaseStats[summary->species].type2)
+ {
+ sub_81C4318(gBaseStats[summary->species].type2, 0xA0, 0x30, 4);
+ sub_81C4204(4, FALSE);
+ }
+ else
+ {
+ sub_81C4204(4, TRUE);
+ }
+ }
+}
+
+void sub_81C4420(void)
+{
+ u8 i;
+ struct PokeSummary *summary = &gUnknown_0203CF1C->summary;
+ for (i = 0; i < 4; i++)
+ {
+ if (summary->moves[i] != MOVE_NONE)
+ sub_81C4318(gBattleMoves[summary->moves[i]].type, 0x55, 0x20 + (i * 0x10), i + 3);
+ else
+ sub_81C4204(i + 3, TRUE);
+ }
+}
+
+void sub_81C4484(void)
+{
+ u8 i;
+ struct PokeSummary *summary = &gUnknown_0203CF1C->summary;
+ for (i = 0; i < 4; i++)
+ {
+ if (summary->moves[i] != MOVE_NONE)
+ sub_81C4318(NUMBER_OF_MON_TYPES + gContestMoves[summary->moves[i]].contestCategory, 0x55, 0x20 + (i * 0x10), i + 3);
+ else
+ sub_81C4204(i + 3, TRUE);
+ }
+}
+
+void sub_81C44F0(void)
+{
+ if (gUnknown_0203CF1C->unk40C4 == MOVE_NONE)
+ {
+ sub_81C4204(7, TRUE);
+ }
+ else
+ {
+ if (gUnknown_0203CF1C->unk40C0 == 2)
+ sub_81C4318(gBattleMoves[gUnknown_0203CF1C->unk40C4].type, 0x55, 0x60, 7);
+ else
+ sub_81C4318(NUMBER_OF_MON_TYPES + gContestMoves[gUnknown_0203CF1C->unk40C4].contestCategory, 0x55, 0x60, 7);
+ }
+}
diff --git a/tools/preproc/asm_file.cpp b/tools/preproc/asm_file.cpp
index bb296b78b..383010aa3 100644
--- a/tools/preproc/asm_file.cpp
+++ b/tools/preproc/asm_file.cpp
@@ -266,7 +266,7 @@ int AsmFile::ReadString(unsigned char* s)
{
m_pos += stringParser.ParseString(m_pos, s, length);
}
- catch (std::runtime_error e)
+ catch (std::runtime_error& e)
{
RaiseError(e.what());
}
diff --git a/tools/preproc/c_file.cpp b/tools/preproc/c_file.cpp
index 24b3453e8..2f4bfea7c 100644
--- a/tools/preproc/c_file.cpp
+++ b/tools/preproc/c_file.cpp
@@ -206,7 +206,7 @@ void CFile::TryConvertString()
{
m_pos += stringParser.ParseString(m_pos, s, length);
}
- catch (std::runtime_error e)
+ catch (std::runtime_error& e)
{
RaiseError(e.what());
}