summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-12-23 13:39:13 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2017-12-23 13:39:13 -0500
commit73c16c109cdb996fa59f5aa63e9f030c21cbe54f (patch)
treeb0b4b7eefc77441d711105cf036b273f22ce2ec2 /src
parent56bf99fd9106b3cc8fac45cc051cbeeec40e34aa (diff)
parentaa13f45ebb79aed62171fbfe654d8b542fc9aa6c (diff)
Merge branch 'master' into slot_machine
Diffstat (limited to 'src')
-rw-r--r--src/battle/anim/beta_beat_up.c34
-rw-r--r--src/battle/anim/bubble.c102
-rw-r--r--src/battle/anim/energy_wave.c162
-rw-r--r--src/battle/anim/fury_cutter_count.c20
-rw-r--r--src/battle/anim/guard.c34
-rw-r--r--src/battle/anim/heated_rock.c205
-rwxr-xr-xsrc/battle/anim/love_bg.c7
-rw-r--r--src/battle/anim/noise.c56
-rw-r--r--src/battle/anim/note_spin.c110
-rw-r--r--src/battle/anim/rain.c56
-rwxr-xr-xsrc/battle/anim/scary_face.c7
-rw-r--r--src/battle/anim/shock.c106
-rw-r--r--src/battle/anim/sunlight.c17
-rw-r--r--src/battle/anim/thunder.c36
-rw-r--r--src/battle/anim/water.c371
-rw-r--r--src/battle/anim/wisp_orb.c105
-rw-r--r--src/battle/battle_controller_player.c4
-rw-r--r--src/battle/battle_controller_safari.c4
-rw-r--r--src/battle/battle_controller_wally.c2
-rw-r--r--src/battle/battle_party_menu.c8
-rw-r--r--src/battle/battle_setup.c12
-rw-r--r--src/battle/reshow_battle_screen.c10
-rw-r--r--src/contest.c5542
-rw-r--r--src/debug/matsuda_debug_menu.c66
-rw-r--r--src/engine/cable_club.c26
-rw-r--r--src/engine/link.c2
-rw-r--r--src/engine/sprite.c8
-rw-r--r--src/field/battle_tower.c42
-rw-r--r--src/field/berry.c8
-rw-r--r--src/field/berry_tag_screen.c14
-rw-r--r--src/field/daycare.c4
-rw-r--r--src/field/decoration.c4
-rw-r--r--src/field/dewford_trend.c6
-rw-r--r--src/field/event_data.c6
-rw-r--r--src/field/field_control_avatar.c14
-rw-r--r--src/field/field_poison.c6
-rw-r--r--src/field/field_screen_effect.c6
-rw-r--r--src/field/field_specials.c38
-rw-r--r--src/field/fldeff_decoration.c10
-rw-r--r--src/field/fldeff_secretpower.c2
-rw-r--r--src/field/fldeff_strength.c6
-rw-r--r--src/field/item_menu.c70
-rw-r--r--src/field/item_use.c52
-rw-r--r--src/field/lottery_corner.c8
-rw-r--r--src/field/map_obj_lock.c4
-rw-r--r--src/field/mauville_man.c24
-rw-r--r--src/field/party_menu.c4
-rw-r--r--src/field/pokeblock.c32
-rw-r--r--src/field/safari_zone.c22
-rw-r--r--src/field/scrcmd.c160
-rw-r--r--src/field/script_menu.c28
-rw-r--r--src/field/secret_base.c36
-rw-r--r--src/field/start_menu.c6
-rw-r--r--src/field/starter_choose.c4
-rw-r--r--src/field/trader.c10
-rw-r--r--src/field/tv.c74
-rw-r--r--src/field/use_pokeblock.c4
-rw-r--r--src/field/wild_encounter.c8
-rw-r--r--src/pokemon/learn_move.c3
-rw-r--r--src/pokemon/pokeblock_feed.c4
-rw-r--r--src/pokemon/pokemon_menu.c34
-rw-r--r--src/pokemon/pokemon_size_record.c10
-rw-r--r--src/pokemon/pokemon_summary_screen.c7
-rw-r--r--src/rom6.c4
-rw-r--r--src/rom_8077ABC.c15
-rw-r--r--src/scene/berry_blender.c12
-rw-r--r--src/scene/new_game.c19
-rw-r--r--src/script_pokemon_util_80C4BF0.c66
-rw-r--r--src/script_pokemon_util_80F99CC.c10
69 files changed, 7457 insertions, 551 deletions
diff --git a/src/battle/anim/beta_beat_up.c b/src/battle/anim/beta_beat_up.c
new file mode 100644
index 000000000..499e52a80
--- /dev/null
+++ b/src/battle/anim/beta_beat_up.c
@@ -0,0 +1,34 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "rom_8077ABC.h"
+#include "trig.h"
+
+extern s16 gBattleAnimArgs[8];
+extern u8 gBattleAnimBankAttacker;
+extern u8 gBattleAnimBankTarget;
+
+static void sub_80D6278(struct Sprite *);
+
+// beta_beat_up
+
+void sub_80D6234(struct Sprite *sprite)
+{
+ if (GetBankSide(gBattleAnimBankAttacker) != 0)
+ {
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ }
+ else
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ }
+
+ sprite->callback = sub_80D6278;
+}
+
+static void sub_80D6278(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ {
+ move_anim_8074EE0(sprite);
+ }
+}
diff --git a/src/battle/anim/bubble.c b/src/battle/anim/bubble.c
new file mode 100644
index 000000000..5da0d9929
--- /dev/null
+++ b/src/battle/anim/bubble.c
@@ -0,0 +1,102 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "rom_8077ABC.h"
+#include "trig.h"
+#include "util.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gBattleAnimBankAttacker;
+extern u8 gBattleAnimBankTarget;
+
+static void sub_80D32E8(struct Sprite *sprite);
+static void sub_80D3370(struct Sprite *sprite);
+static void sub_80D3398(struct Sprite *sprite);
+
+// bubble (indidivual bubble that floats around)
+// Used in Bubble and Bubblebeam
+
+void sub_80D31C8(struct Sprite* sprite)
+{
+ u8 newSpriteId;
+
+ if (GetBankSide(gBattleAnimBankAttacker) != 0)
+ {
+ sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) - gBattleAnimArgs[0];
+ sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[1];
+ }
+ else
+ {
+ sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[0];
+ sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[1];
+ }
+
+ sprite->animPaused = 1;
+
+ if (GetBankSide(gBattleAnimBankAttacker) != 0)
+ {
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ }
+
+ sprite->data[0] = gBattleAnimArgs[6];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3);
+
+ obj_translate_based_on_private_1_2_3_4(sprite);
+
+ newSpriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
+ sprite->data[5] = newSpriteId;
+
+ sprite->pos1.x -= Sin((u8)gBattleAnimArgs[4], gBattleAnimArgs[2]);
+ sprite->pos1.y -= Cos((u8)gBattleAnimArgs[4], gBattleAnimArgs[3]);
+
+ gSprites[newSpriteId].data[0] = gBattleAnimArgs[2];
+ gSprites[newSpriteId].data[1] = gBattleAnimArgs[3];
+ gSprites[newSpriteId].data[2] = gBattleAnimArgs[5];
+ gSprites[newSpriteId].data[3] = (u8)gBattleAnimArgs[4] * 256;
+ gSprites[newSpriteId].data[4] = gBattleAnimArgs[6];
+
+ sprite->callback = sub_80D32E8;
+ sprite->callback(sprite);
+}
+
+static void sub_80D32E8(struct Sprite *sprite)
+{
+ u8 spriteId = sprite->data[5];
+
+ u8 counter = gSprites[spriteId].data[4];
+ u16 index = gSprites[spriteId].data[3];
+
+ sprite->data[0] = 1;
+ sub_8078B5C(sprite);
+
+ sprite->pos2.x += Sin(index / 256, gSprites[spriteId].data[0]);
+ sprite->pos2.y += Cos(index / 256, gSprites[spriteId].data[1]);
+
+ gSprites[spriteId].data[3] = gSprites[spriteId].data[2] + index;
+
+ if (--counter != 0)
+ {
+ gSprites[spriteId].data[4] = counter;
+ }
+ else
+ {
+ sprite->callback = sub_80D3370;
+ DestroySprite(&gSprites[spriteId]);
+ }
+}
+
+static void sub_80D3370(struct Sprite *sprite)
+{
+ sprite->animPaused = 0;
+ sprite->callback = sub_8078600;
+ StoreSpriteCallbackInData(sprite, sub_80D3398);
+}
+
+static void sub_80D3398(struct Sprite *sprite)
+{
+ sprite->data[0] = 10;
+ sprite->callback = sub_80782D8;
+ StoreSpriteCallbackInData(sprite, move_anim_8074EE0);
+}
diff --git a/src/battle/anim/energy_wave.c b/src/battle/anim/energy_wave.c
new file mode 100644
index 000000000..ffba5c300
--- /dev/null
+++ b/src/battle/anim/energy_wave.c
@@ -0,0 +1,162 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "rom_8077ABC.h"
+#include "sprite.h"
+#include "task.h"
+#include "trig.h"
+
+extern s16 gBattleAnimArgs[8];
+extern u8 gBattleAnimBankAttacker;
+extern u8 gBattleAnimBankTarget;
+extern const struct SpriteTemplate gSpriteTemplate_83D9130[];
+
+static void sub_80D35DC(struct Sprite *);
+static void sub_80D365C(u8);
+static void sub_80D370C(struct Sprite *);
+
+// energy_wave (animates steady "waves" of energy)
+// Used in Hydro Pump, Mud Shot, Signal Beam, Flamethrower, Psywave, and
+// Hydro Cannon.
+
+void sub_80D3554(struct Sprite *sprite)
+{
+ sub_80787B0(sprite, 1);
+
+ sprite->data[0] = 30;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3);
+
+ obj_translate_based_on_private_1_2_3_4(sprite);
+
+ sprite->data[5] = 0xD200 / sprite->data[0];
+ sprite->data[7] = gBattleAnimArgs[3];
+
+ if (gBattleAnimArgs[7] > 127)
+ {
+ sprite->data[6] = (gBattleAnimArgs[7] - 127) << 8;
+ sprite->data[7] = -sprite->data[7];
+ }
+ else
+ {
+ sprite->data[6] = gBattleAnimArgs[7] << 8;
+ }
+
+ sprite->callback = sub_80D35DC;
+ sprite->callback(sprite);
+}
+
+static void sub_80D35DC(struct Sprite *sprite)
+{
+ if (sub_8078B5C(sprite))
+ {
+ move_anim_8072740(sprite);
+ }
+
+ sprite->pos2.y += Sin(sprite->data[6] >> 8, sprite->data[7]);
+ if (((sprite->data[6] + sprite->data[5]) >> 8) > 127)
+ {
+ sprite->data[6] = 0;
+ sprite->data[7] = -sprite->data[7];
+ }
+ else
+ {
+ sprite->data[6] += sprite->data[5];
+ }
+}
+
+void sub_80D3630(u8 taskId)
+{
+ gTasks[taskId].data[0] = gBattleAnimArgs[0];
+ gBattleAnimArgs[7] = 0;
+ gTasks[taskId].func = sub_80D365C;
+}
+
+static void sub_80D365C(u8 taskId)
+{
+ gBattleAnimArgs[7] = (gBattleAnimArgs[7] + 3) & 0xFF;
+ if (--gTasks[taskId].data[0] == 0)
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_80D3698(struct Sprite *sprite)
+{
+ u8 subpriority;
+
+ sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 0);
+ sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1);
+ sprite->pos2.y = -10;
+
+ subpriority = sub_8079E90(gBattleAnimBankAttacker);
+
+ if (!NotInBattle())
+ {
+ if (GetBankSide(gBattleAnimBankAttacker) == 0)
+ {
+ sprite->pos2.x = 10;
+ sprite->subpriority = subpriority + 2;
+ }
+ else
+ {
+ sprite->pos2.x = -10;
+ sprite->subpriority = subpriority - 2;
+ }
+ }
+ else
+ {
+ sprite->pos2.x = -10;
+ sprite->subpriority = subpriority + 2;
+ }
+
+ sprite->callback = sub_80D370C;
+}
+
+static void sub_80D370C(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ {
+ move_anim_8072740(sprite);
+ }
+}
+
+void sub_80D3728(struct Sprite *sprite)
+{
+ int var1, var2;
+
+ if (GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget))
+ {
+ gBattleAnimArgs[0] *= -1;
+
+ if (GetBankIdentity(gBattleAnimBankAttacker) == 0 || GetBankIdentity(gBattleAnimBankAttacker) == 1)
+ {
+ gBattleAnimArgs[0] *= -1;
+ }
+
+ }
+
+ if ((gBattleAnimArgs[5] & 0xFF00) == 0)
+ var1 = 1;
+ else
+ var1 = 0;
+
+ if ((u8)gBattleAnimArgs[5] == 0)
+ var2 = 3;
+ else
+ var2 = 1;
+
+ sub_80787B0(sprite, var1);
+
+ if (GetBankSide(gBattleAnimBankAttacker) != 0)
+ {
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ }
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2];
+ sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, var2) + gBattleAnimArgs[3];
+ sprite->callback = sub_8078B34;
+ StoreSpriteCallbackInData(sprite, move_anim_8072740);
+}
diff --git a/src/battle/anim/fury_cutter_count.c b/src/battle/anim/fury_cutter_count.c
new file mode 100644
index 000000000..17b084585
--- /dev/null
+++ b/src/battle/anim/fury_cutter_count.c
@@ -0,0 +1,20 @@
+#include "global.h"
+#include "battle_anim.h"
+
+extern s16 gBattleAnimArgs[8];
+extern u8 *gDisableStructMoveAnim; // TODO: this is declared with a different type in different files
+
+// fury_cutter (updates the direction and count of the fury cutter animation)
+// Used in Fury Cutter.
+
+void UpdateFuryCutterAnimDirection(u8 taskId)
+{
+ gBattleAnimArgs[7] = gDisableStructMoveAnim[16] & 1;
+ DestroyAnimVisualTask(taskId);
+}
+
+void UpdateFuryCutterAnimCount(u8 taskId)
+{
+ gBattleAnimArgs[7] = gDisableStructMoveAnim[16];
+ DestroyAnimVisualTask(taskId);
+}
diff --git a/src/battle/anim/guard.c b/src/battle/anim/guard.c
new file mode 100644
index 000000000..4769db2e4
--- /dev/null
+++ b/src/battle/anim/guard.c
@@ -0,0 +1,34 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "rom_8077ABC.h"
+
+extern s16 gBattleAnimArgs[8];
+extern u8 gBattleAnimBankAttacker;
+extern u8 gBattleAnimBankTarget;
+extern u16 gBattleTypeFlags;
+
+// guard (moves guard rings upwards)
+// Used in Safeguard.
+
+void sub_80D3014(struct Sprite *sprite)
+{
+ if ((gBattleTypeFlags & 1) && IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2))
+ {
+ sub_807A3FC(gBattleAnimBankAttacker, 0, &sprite->pos1.x, &sprite->pos1.y);
+ sprite->pos1.y += 40;
+
+ StartSpriteAffineAnim(sprite, 1);
+ }
+ else
+ {
+ sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 0);
+ sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1) + 40;
+ }
+
+ sprite->data[0] = 13;
+ sprite->data[2] = sprite->pos1.x;
+ sprite->data[4] = sprite->pos1.y - 72;
+
+ sprite->callback = sub_8078B34;
+ StoreSpriteCallbackInData(sprite, move_anim_8072740);
+}
diff --git a/src/battle/anim/heated_rock.c b/src/battle/anim/heated_rock.c
new file mode 100644
index 000000000..1d59669cf
--- /dev/null
+++ b/src/battle/anim/heated_rock.c
@@ -0,0 +1,205 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "rom_8077ABC.h"
+
+extern s16 gBattleAnimArgs[8];
+extern u8 gBattleAnimBankAttacker;
+extern u8 gBattleAnimBankTarget;
+extern u16 gBattleTypeFlags;
+
+void sub_80D59B0(struct Sprite *);
+static void sub_80D5A74(struct Sprite *);
+
+// heated_rock (moves heated rock sprites)
+// Used in Eruption.
+
+void sub_80D58FC(struct Sprite *sprite)
+{
+ sub_80D59B0(sprite);
+
+ if (sprite->invisible)
+ {
+ gTasks[sprite->data[6]].data[sprite->data[7]]--;
+ DestroySprite(sprite);
+ }
+}
+
+u16 sub_80D5940(u8 spriteId)
+{
+ u16 var1 = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y + gSprites[spriteId].centerToCornerVecY;
+
+ if (GetBankSide(gBattleAnimBankAttacker) == 0)
+ {
+ var1 = ((var1 << 16) + 0x4A0000) >> 16;
+ }
+ else
+ {
+ var1 = ((var1 << 16) + 0x2C0000) >> 16;
+ }
+
+ return var1;
+}
+
+void sub_80D5994(struct Sprite *sprite, s16 x, s16 y)
+{
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = (u16)sprite->pos1.x * 8;
+ sprite->data[3] = (u16)sprite->pos1.y * 8;
+ sprite->data[4] = x * 8;
+ sprite->data[5] = y * 8;
+}
+
+#ifdef NONMATCHING
+void sub_80D59B0(struct Sprite *sprite)
+{
+ int var1;
+ int var2;
+
+ if (++sprite->data[0] > 2)
+ {
+ sprite->data[0] = 0;
+ ++sprite->data[1];
+ sprite->data[3] += ((u16)sprite->data[1] * (u16)sprite->data[1]);
+ }
+
+ var1 = (u16)sprite->data[4] + (u16)sprite->data[2];
+ sprite->data[2] = var1;
+ var1 = (s16)var1 >> 3;
+ sprite->pos1.x = var1;
+
+ var2 = (u16)sprite->data[5] + (u16)sprite->data[3];
+ sprite->data[3] = var2;
+ var2 = (s16)var2 >> 3;
+ sprite->pos1.y = var2;
+
+ if ((u32)((var1 + 8) << 16) > 0x1000000 || var2 < -8 || var2 > 120)
+ {
+ sprite->invisible = 1;
+ }
+}
+#else
+__attribute__((naked))
+void sub_80D59B0(struct Sprite *sprite)
+{
+ asm(".syntax unified\n\
+ push {lr}\n\
+ adds r2, r0, 0\n\
+ ldrh r0, [r2, 0x2E]\n\
+ adds r0, 0x1\n\
+ strh r0, [r2, 0x2E]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x2\n\
+ ble _080D59DA\n\
+ movs r0, 0\n\
+ strh r0, [r2, 0x2E]\n\
+ ldrh r0, [r2, 0x30]\n\
+ adds r0, 0x1\n\
+ strh r0, [r2, 0x30]\n\
+ ldrh r0, [r2, 0x30]\n\
+ adds r1, r0, 0\n\
+ muls r1, r0\n\
+ adds r0, r1, 0\n\
+ ldrh r3, [r2, 0x34]\n\
+ adds r0, r3\n\
+ strh r0, [r2, 0x34]\n\
+_080D59DA:\n\
+ ldrh r0, [r2, 0x36]\n\
+ ldrh r1, [r2, 0x32]\n\
+ adds r0, r1\n\
+ strh r0, [r2, 0x32]\n\
+ lsls r0, 16\n\
+ asrs r0, 19\n\
+ strh r0, [r2, 0x20]\n\
+ ldrh r1, [r2, 0x38]\n\
+ ldrh r3, [r2, 0x34]\n\
+ adds r1, r3\n\
+ strh r1, [r2, 0x34]\n\
+ lsls r1, 16\n\
+ asrs r3, r1, 19\n\
+ strh r3, [r2, 0x22]\n\
+ adds r0, 0x8\n\
+ lsls r0, 16\n\
+ movs r1, 0x80\n\
+ lsls r1, 17\n\
+ cmp r0, r1\n\
+ bhi _080D5A10\n\
+ adds r1, r3, 0\n\
+ movs r0, 0x8\n\
+ negs r0, r0\n\
+ cmp r1, r0\n\
+ blt _080D5A10\n\
+ cmp r1, 0x78\n\
+ ble _080D5A1C\n\
+_080D5A10:\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x3E\n\
+ ldrb r1, [r0]\n\
+ movs r2, 0x4\n\
+ orrs r1, r2\n\
+ strb r1, [r0]\n\
+_080D5A1C:\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
+
+void sub_80D5A20(struct Sprite *sprite)
+{
+ sprite->pos1.x = gBattleAnimArgs[0];
+ sprite->pos1.y = gBattleAnimArgs[1];
+
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ sprite->data[6] = gBattleAnimArgs[2];
+ sprite->data[7] = gBattleAnimArgs[3];
+
+ sprite->oam.tileNum += gBattleAnimArgs[4] * 16;
+ sprite->callback = sub_80D5A74;
+}
+
+static void sub_80D5A74(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (sprite->data[6] != 0)
+ {
+ sprite->data[6]--;
+ return;
+ }
+
+ sprite->data[0]++;
+ // fall through
+ case 1:
+ sprite->pos1.y += 8;
+ if (sprite->pos1.y >= sprite->data[7])
+ {
+ sprite->pos1.y = sprite->data[7];
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ if ((++sprite->data[2] & 1) != 0)
+ {
+ sprite->pos2.y = -3;
+ }
+ else
+ {
+ sprite->pos2.y = 3;
+ }
+ }
+
+ if (++sprite->data[3] > 16)
+ {
+ move_anim_8072740(sprite);
+ }
+ break;
+ }
+}
diff --git a/src/battle/anim/love_bg.c b/src/battle/anim/love_bg.c
index c5659463e..1e49b536c 100755
--- a/src/battle/anim/love_bg.c
+++ b/src/battle/anim/love_bg.c
@@ -6,13 +6,6 @@
#include "decompress.h"
#include "palette.h"
-struct Struct_sub_8078914
-{
- u8 *field_0;
- u8 *field_4;
- u8 field_8;
-};
-
extern s16 gBattleAnimArgs[];
extern u8 gBattleAnimBankAttacker;
extern u8 gBattleAnimBankTarget;
diff --git a/src/battle/anim/noise.c b/src/battle/anim/noise.c
new file mode 100644
index 000000000..78953d96a
--- /dev/null
+++ b/src/battle/anim/noise.c
@@ -0,0 +1,56 @@
+#include "global.h"
+#include "rom_8077ABC.h"
+#include "battle_anim.h"
+
+extern s16 gBattleAnimArgs[8];
+extern u8 gBattleAnimBankAttacker;
+extern u8 gBattleAnimBankTarget;
+
+static void sub_80D2E30(struct Sprite *);
+
+// noise (moving music note)
+// Used in Uproar.
+
+void sub_80D2D68(struct Sprite* sprite)
+{
+ int var1;
+ u8 slot = gBattleAnimArgs[0] == 0 ? gBattleAnimBankAttacker : gBattleAnimBankTarget;
+
+ if (GetBankSide(slot) == 1)
+ {
+ gBattleAnimArgs[1] *= -1;
+ }
+
+ sprite->pos1.x = sub_8077ABC(slot, 2) + gBattleAnimArgs[1];
+ sprite->pos1.y = sub_8077ABC(slot, 3) + gBattleAnimArgs[2];
+ sprite->data[0] = 0;
+ sprite->data[1] = (u16)sprite->pos1.x << 3;
+ sprite->data[2] = (u16)sprite->pos1.y << 3;
+
+ var1 = gBattleAnimArgs[1] << 3;
+ if (var1 < 0)
+ var1 += 7;
+ sprite->data[3] = var1 >> 3;
+
+ var1 = gBattleAnimArgs[2] << 3;
+ if (var1 < 0)
+ var1 += 7;
+ sprite->data[4] = var1 >> 3;
+
+ sprite->oam.tileNum += gBattleAnimArgs[3] * 16;
+ sprite->callback = sub_80D2E30;
+}
+
+static void sub_80D2E30(struct Sprite *sprite)
+{
+ sprite->data[1] += sprite->data[3];
+ sprite->data[2] += sprite->data[4];
+
+ sprite->pos1.x = sprite->data[1] >> 3;
+ sprite->pos1.y = sprite->data[2] >> 3;
+
+ if (++sprite->data[0] > 16)
+ {
+ move_anim_8072740(sprite);
+ }
+}
diff --git a/src/battle/anim/note_spin.c b/src/battle/anim/note_spin.c
new file mode 100644
index 000000000..bdc0f4615
--- /dev/null
+++ b/src/battle/anim/note_spin.c
@@ -0,0 +1,110 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "rom_8077ABC.h"
+#include "trig.h"
+
+extern s16 gBattleAnimArgs[8];
+extern u8 gBattleAnimBankAttacker;
+extern u8 gBattleAnimBankTarget;
+
+static void sub_80D2F80(struct Sprite *);
+static void sub_80D2FA4(struct Sprite *);
+
+// note_spin (spins music notes around, and rotates them)
+// Used in Perish Song.
+
+void sub_80D2E68(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->data[1] = 120 - gBattleAnimArgs[0];
+ sprite->invisible = 1;
+ }
+
+ if (++sprite->data[0] == sprite->data[1])
+ {
+ sub_8079108(sprite->oam.paletteNum + 16, 0);
+ }
+
+ if (sprite->data[0] == sprite->data[1] + 80)
+ {
+ move_anim_8072740(sprite);
+ }
+}
+
+void sub_80D2EC8(struct Sprite *sprite)
+{
+ int index;
+ int var2;
+
+ if (sprite->data[0] == 0)
+ {
+ sprite->pos1.x = 120;
+ sprite->pos1.y = (gBattleAnimArgs[0] + (((u16)gBattleAnimArgs[0]) >> 31)) / 2 - 15;
+
+ StartSpriteAnim(sprite, gBattleAnimArgs[1]);
+
+ sprite->data[5] = 120;
+ sprite->data[3] = gBattleAnimArgs[2];
+ }
+
+ sprite->data[0]++;
+
+ sprite->data[1] = (sprite->data[0] + ((u16)sprite->data[0] >> 31)) / 2;
+ index = ((sprite->data[0] * 3) + (u16)sprite->data[3]);
+ var2 = 0xFF;
+ sprite->data[6] = (sprite->data[6] + 10) & 0xFF;
+
+ index &= var2;
+ sprite->pos2.x = Cos(index, 100);
+
+ sprite->pos2.y = sprite->data[1] + Sin(index, 10) + Cos(sprite->data[6], 4);
+
+ if (sprite->data[0] > sprite->data[5])
+ {
+ sprite->callback = sub_80D2F80;
+
+ sprite->data[0] = 0;
+ oamt_add_pos2_onto_pos1(sprite);
+ sprite->data[2] = 5;
+ sprite->data[4] = 0;
+ sprite->data[3] = 0;
+
+ StartSpriteAffineAnim(sprite, 1);
+ }
+}
+
+static void sub_80D2F80(struct Sprite *sprite)
+{
+ if (++sprite->data[0] > 10)
+ {
+ sprite->data[0] = 0;
+ sprite->callback = sub_80D2FA4;
+ }
+}
+
+static void sub_80D2FA4(struct Sprite *sprite)
+{
+ sprite->data[3] += sprite->data[2];
+ sprite->pos2.y = sprite->data[3];
+
+ sprite->data[2]++;
+
+ if (sprite->data[3] > 48 && sprite->data[2] > 0)
+ {
+ sprite->data[2] = sprite->data[4] - 5;
+ sprite->data[4]++;
+ }
+
+ if (sprite->data[4] > 3)
+ {
+ int var1 = sprite->data[2];
+ sprite->invisible = var1 - (((s32)(var1 + ((u32)var1 >> 31)) >> 1) << 1);
+ move_anim_8072740(sprite);
+ }
+
+ if (sprite->data[4] == 4)
+ {
+ move_anim_8072740(sprite);
+ }
+}
diff --git a/src/battle/anim/rain.c b/src/battle/anim/rain.c
new file mode 100644
index 000000000..b38233e3c
--- /dev/null
+++ b/src/battle/anim/rain.c
@@ -0,0 +1,56 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "random.h"
+#include "sprite.h"
+#include "task.h"
+
+extern s16 gBattleAnimArgs[8];
+extern const struct SpriteTemplate gSpriteTemplate_83D9130[];
+
+static void MoveAnimRaindrop(struct Sprite *);
+
+// rain (spawns and animates raindrops)
+// Used in Rain Dance and general rain animation.
+
+void CreateAnimRaindrops(u8 taskId)
+{
+ if (gTasks[taskId].data[0] == 0)
+ {
+ gTasks[taskId].data[1] = gBattleAnimArgs[0];
+ gTasks[taskId].data[2] = gBattleAnimArgs[1];
+ gTasks[taskId].data[3] = gBattleAnimArgs[2];
+ }
+
+ gTasks[taskId].data[0]++;
+
+ if (gTasks[taskId].data[0] % gTasks[taskId].data[2] == 1)
+ {
+ u8 x = Random() % 240;
+ u8 y = Random() % 80;
+ CreateSprite(gSpriteTemplate_83D9130, x, y, 4);
+ }
+
+ if (gTasks[taskId].data[0] == gTasks[taskId].data[3])
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void SetAnimRaindropCallback(struct Sprite *sprite)
+{
+ sprite->callback = MoveAnimRaindrop;
+}
+
+static void MoveAnimRaindrop(struct Sprite *sprite)
+{
+ if (++sprite->data[0] <= 13)
+ {
+ sprite->pos2.x++;
+ sprite->pos2.y += 4;
+ }
+
+ if (sprite->animEnded)
+ {
+ DestroySprite(sprite);
+ }
+}
diff --git a/src/battle/anim/scary_face.c b/src/battle/anim/scary_face.c
index 9f1dfd7d0..0c5056704 100755
--- a/src/battle/anim/scary_face.c
+++ b/src/battle/anim/scary_face.c
@@ -6,13 +6,6 @@
#include "decompress.h"
#include "palette.h"
-struct Struct_sub_8078914
-{
- u8 *field_0;
- u8 *field_4;
- u8 field_8;
-};
-
extern s16 gBattleAnimArgs[];
extern u8 gBattleAnimBankAttacker;
extern u8 gBattleAnimBankTarget;
diff --git a/src/battle/anim/shock.c b/src/battle/anim/shock.c
new file mode 100644
index 000000000..35c380f23
--- /dev/null
+++ b/src/battle/anim/shock.c
@@ -0,0 +1,106 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "rom_8077ABC.h"
+#include "trig.h"
+
+extern s16 gBattleAnimArgs[8];
+extern u8 gBattleAnimBankAttacker;
+extern u8 gBattleAnimBankTarget;
+extern struct OamMatrix gOamMatrices[];
+
+extern void sub_80DA48C(struct Sprite *);
+
+// shock (moves the little electricity lines)
+// Used in Shock.
+
+void sub_80D6294(struct Sprite *sprite)
+{
+ sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2);
+ sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3);
+
+ if (GetBankSide(gBattleAnimBankAttacker) != 0)
+ {
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ sprite->pos1.y -= gBattleAnimArgs[1];
+ }
+ else
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+
+ sprite->data[0] = 0;
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->data[2] = gBattleAnimArgs[3];
+ sprite->data[3] = gBattleAnimArgs[4];
+
+ StoreSpriteCallbackInData(sprite, move_anim_8074EE0);
+ sprite->callback = sub_8078114;
+}
+
+void sub_80D6328(struct Sprite *sprite)
+{
+ u8 slot;
+ u32 matrixNum;
+ s16 sineVal;
+
+ switch (gBattleAnimArgs[4])
+ {
+ case 0:
+ slot = gBattleAnimBankAttacker;
+ break;
+ case 1:
+ default:
+ slot = gBattleAnimBankTarget;
+ break;
+ case 2:
+ if (!IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2))
+ {
+ slot = gBattleAnimBankAttacker;
+ }
+ else
+ {
+ slot = gBattleAnimBankAttacker ^ 2;
+ }
+ break;
+ case 3:
+ if (IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2))
+ {
+ slot = gBattleAnimBankTarget ^ 2;
+ }
+ else
+ {
+ slot = gBattleAnimBankTarget;
+ }
+ break;
+ }
+
+ if (gBattleAnimArgs[5] == 0)
+ {
+ sprite->pos1.x = sub_8077ABC(slot, 0);
+ sprite->pos1.y = sub_8077ABC(slot, 1);
+ }
+ else
+ {
+ sprite->pos1.x = sub_8077ABC(slot, 2);
+ sprite->pos1.y = sub_8077ABC(slot, 3);
+ }
+
+ sprite->pos2.x = (gSineTable[gBattleAnimArgs[0]] * gBattleAnimArgs[1]) >> 8;
+ sprite->pos2.y = (gSineTable[gBattleAnimArgs[0] + 64] * gBattleAnimArgs[1]) >> 8;
+
+ if (gBattleAnimArgs[6] & 1)
+ {
+ sprite->oam.priority = sub_8079ED4(slot) + 1;
+ }
+
+ matrixNum = sprite->oam.matrixNum;
+ sineVal = gSineTable[gBattleAnimArgs[2]];
+
+ gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[gBattleAnimArgs[2] + 64];
+ gOamMatrices[matrixNum].b = sineVal;
+ gOamMatrices[matrixNum].c = -sineVal;
+
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->callback = sub_80DA48C;
+}
diff --git a/src/battle/anim/sunlight.c b/src/battle/anim/sunlight.c
new file mode 100644
index 000000000..f6cb8a077
--- /dev/null
+++ b/src/battle/anim/sunlight.c
@@ -0,0 +1,17 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "rom_8077ABC.h"
+
+// sunlight (creates sunlight orbs)
+// Used in Sunny Day
+
+void sub_80D517C(struct Sprite *sprite)
+{
+ sprite->pos1.x = 0;
+ sprite->pos1.y = 0;
+ sprite->data[0] = 60;
+ sprite->data[2] = 140;
+ sprite->data[4] = 80;
+ sprite->callback = sub_8078B34;
+ StoreSpriteCallbackInData(sprite, move_anim_8072740);
+}
diff --git a/src/battle/anim/thunder.c b/src/battle/anim/thunder.c
new file mode 100644
index 000000000..5064148ef
--- /dev/null
+++ b/src/battle/anim/thunder.c
@@ -0,0 +1,36 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "rom_8077ABC.h"
+
+extern s16 gBattleAnimArgs[8];
+extern u8 gBattleAnimBankAttacker;
+extern u8 gBattleAnimBankTarget;
+extern u16 gBattleTypeFlags;
+
+static void sub_80D6218(struct Sprite *);
+
+// thunder (positions the lightning bolts)
+// Used in Thunder, Thunder Punch, and Tri Attack.
+
+void sub_80D61C8(struct Sprite *sprite)
+{
+ if (GetBankSide(gBattleAnimBankAttacker) != 0)
+ {
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ }
+ else
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ }
+
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->callback = sub_80D6218;
+}
+
+static void sub_80D6218(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ move_anim_8072740(sprite);
+ }
+}
diff --git a/src/battle/anim/water.c b/src/battle/anim/water.c
new file mode 100644
index 000000000..396a4637d
--- /dev/null
+++ b/src/battle/anim/water.c
@@ -0,0 +1,371 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "rom_8077ABC.h"
+#include "trig.h"
+#include "util.h"
+
+extern s16 gBattleAnimArgs[];
+extern u8 gBattleAnimBankAttacker;
+extern u8 gBattleAnimBankTarget;
+
+static void sub_80D3874(struct Sprite *);
+
+void sub_80D37FC(struct Sprite *sprite)
+{
+ sub_8078764(sprite, 1);
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2];
+ sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[4];
+
+ sprite->callback = sub_8078B34;
+ StoreSpriteCallbackInData(sprite, move_anim_8072740);
+}
+
+void sub_80D3838(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[3] != 0)
+ {
+ sub_8078764(sprite, 1);
+ }
+ else
+ {
+ sub_80787B0(sprite, 1);
+ }
+
+ sprite->data[7] = gBattleAnimArgs[2];
+ sprite->callback = sub_80D3874;
+}
+
+static void sub_80D3874(struct Sprite *sprite)
+{
+ sprite->data[0] = (sprite->data[0] + 11) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[0], 4);
+
+ sprite->data[1] += 48;
+ sprite->pos2.y = -(sprite->data[1] >> 8);
+
+ if (--sprite->data[7] == -1)
+ {
+ move_anim_8072740(sprite);
+ }
+}
+
+__attribute__((naked))
+void sub_80D38BC(u8 taskId)
+{
+ asm(".syntax unified\n\
+ .equ REG_BLDCNT, 0x4000050\n\
+ .equ REG_BG1CNT, 0x400000A\n\
+ .equ REG_BG1HOFS, 0x4000014\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x14\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r10, r0\n\
+ ldr r1, _080D398C @ =REG_BLDCNT\n\
+ ldr r2, _080D3990 @ =0x00003f42\n\
+ adds r0, r2, 0\n\
+ strh r0, [r1]\n\
+ adds r1, 0x2\n\
+ movs r3, 0x80\n\
+ lsls r3, 5\n\
+ adds r0, r3, 0\n\
+ strh r0, [r1]\n\
+ ldr r2, _080D3994 @ =REG_BG1CNT\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0x4\n\
+ negs r0, r0\n\
+ ands r0, r1\n\
+ movs r1, 0x1\n\
+ orrs r0, r1\n\
+ strb r0, [r2]\n\
+ ldrb r1, [r2, 0x1]\n\
+ movs r0, 0x3F\n\
+ ands r0, r1\n\
+ movs r1, 0x40\n\
+ orrs r0, r1\n\
+ strb r0, [r2, 0x1]\n\
+ mov r0, sp\n\
+ bl sub_8078914\n\
+ ldr r2, [sp]\n\
+ movs r3, 0x80\n\
+ lsls r3, 6\n\
+ add r6, sp, 0x10\n\
+ add r0, sp, 0xC\n\
+ mov r12, r0\n\
+ movs r5, 0\n\
+ ldr r1, _080D3998 @ =0x040000d4\n\
+ movs r4, 0x80\n\
+ lsls r4, 5\n\
+ mov r8, r6\n\
+ ldr r7, _080D399C @ =0x85000400\n\
+ movs r0, 0x85\n\
+ lsls r0, 24\n\
+ mov r9, r0\n\
+_080D3920:\n\
+ str r5, [sp, 0x10]\n\
+ mov r0, r8\n\
+ str r0, [r1]\n\
+ str r2, [r1, 0x4]\n\
+ str r7, [r1, 0x8]\n\
+ ldr r0, [r1, 0x8]\n\
+ adds r2, r4\n\
+ subs r3, r4\n\
+ cmp r3, r4\n\
+ bhi _080D3920\n\
+ str r5, [sp, 0x10]\n\
+ str r6, [r1]\n\
+ str r2, [r1, 0x4]\n\
+ lsrs r0, r3, 2\n\
+ mov r2, r9\n\
+ orrs r0, r2\n\
+ str r0, [r1, 0x8]\n\
+ ldr r0, [r1, 0x8]\n\
+ movs r0, 0\n\
+ mov r3, r12\n\
+ strb r0, [r3]\n\
+ strb r0, [r3]\n\
+ ldr r1, [sp, 0x4]\n\
+ movs r0, 0\n\
+ str r0, [sp, 0x10]\n\
+ ldr r0, _080D3998 @ =0x040000d4\n\
+ str r6, [r0]\n\
+ str r1, [r0, 0x4]\n\
+ ldr r1, _080D399C @ =0x85000400\n\
+ str r1, [r0, 0x8]\n\
+ ldr r0, [r0, 0x8]\n\
+ bl NotInBattle\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _080D39B8\n\
+ ldr r2, _080D3994 @ =REG_BG1CNT\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0xD\n\
+ negs r0, r0\n\
+ ands r0, r1\n\
+ movs r1, 0x4\n\
+ orrs r0, r1\n\
+ strb r0, [r2]\n\
+ ldr r0, _080D39A0 @ =gBattleAnimBankAttacker\n\
+ ldrb r0, [r0]\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ bne _080D39A8\n\
+ ldr r0, _080D39A4 @ =gUnknown_08E70968\n\
+ b _080D39AA\n\
+ .align 2, 0\n\
+_080D398C: .4byte REG_BLDCNT\n\
+_080D3990: .4byte 0x00003f42\n\
+_080D3994: .4byte REG_BG1CNT\n\
+_080D3998: .4byte 0x040000d4\n\
+_080D399C: .4byte 0x85000400\n\
+_080D39A0: .4byte gBattleAnimBankAttacker\n\
+_080D39A4: .4byte gUnknown_08E70968\n\
+_080D39A8:\n\
+ ldr r0, _080D39B4 @ =gUnknown_08E70C38\n\
+_080D39AA:\n\
+ ldr r1, [sp, 0x4]\n\
+ bl LZDecompressVram\n\
+ b _080D39CE\n\
+ .align 2, 0\n\
+_080D39B4: .4byte gUnknown_08E70C38\n\
+_080D39B8:\n\
+ ldr r0, _080D39F0 @ =gUnknown_08E70F0C\n\
+ ldr r1, [sp, 0x4]\n\
+ bl LZDecompressVram\n\
+ mov r0, sp\n\
+ ldrb r0, [r0, 0x8]\n\
+ ldr r1, [sp, 0x4]\n\
+ movs r2, 0\n\
+ movs r3, 0x1\n\
+ bl sub_80763FC\n\
+_080D39CE:\n\
+ ldr r0, _080D39F4 @ =gBattleAnimBackgroundImage_Surf\n\
+ ldr r1, [sp]\n\
+ bl LZDecompressVram\n\
+ ldr r0, _080D39F8 @ =gBattleAnimArgs\n\
+ movs r1, 0\n\
+ ldrsh r0, [r0, r1]\n\
+ cmp r0, 0\n\
+ bne _080D3A00\n\
+ ldr r0, _080D39FC @ =gBattleAnimBackgroundPalette_Surf\n\
+ mov r1, sp\n\
+ ldrb r1, [r1, 0x8]\n\
+ lsls r1, 4\n\
+ movs r2, 0x20\n\
+ bl LoadCompressedPalette\n\
+ b _080D3A0E\n\
+ .align 2, 0\n\
+_080D39F0: .4byte gUnknown_08E70F0C\n\
+_080D39F4: .4byte gBattleAnimBackgroundImage_Surf\n\
+_080D39F8: .4byte gBattleAnimArgs\n\
+_080D39FC: .4byte gBattleAnimBackgroundPalette_Surf\n\
+_080D3A00:\n\
+ ldr r0, _080D3A78 @ =gBattleAnimBackgroundImageMuddyWater_Pal\n\
+ mov r1, sp\n\
+ ldrb r1, [r1, 0x8]\n\
+ lsls r1, 4\n\
+ movs r2, 0x20\n\
+ bl LoadCompressedPalette\n\
+_080D3A0E:\n\
+ ldr r0, _080D3A7C @ =sub_80D3D68\n\
+ ldr r4, _080D3A80 @ =gTasks\n\
+ mov r2, r10\n\
+ lsls r5, r2, 2\n\
+ adds r1, r5, r2\n\
+ lsls r1, 3\n\
+ adds r6, r1, r4\n\
+ ldrb r1, [r6, 0x7]\n\
+ adds r1, 0x1\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ bl CreateTask\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ movs r3, 0\n\
+ mov r9, r3\n\
+ mov r0, r8\n\
+ strh r0, [r6, 0x26]\n\
+ mov r1, r8\n\
+ lsls r0, r1, 2\n\
+ add r0, r8\n\
+ lsls r0, 3\n\
+ adds r7, r0, r4\n\
+ mov r2, r9\n\
+ strh r2, [r7, 0x8]\n\
+ movs r0, 0x80\n\
+ lsls r0, 5\n\
+ strh r0, [r7, 0xA]\n\
+ strh r0, [r7, 0xC]\n\
+ bl NotInBattle\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0\n\
+ beq _080D3A94\n\
+ ldr r3, _080D3A84 @ =0x0000ffb0\n\
+ adds r0, r3, 0\n\
+ ldr r1, _080D3A88 @ =gUnknown_030042C0\n\
+ strh r0, [r1]\n\
+ ldr r2, _080D3A8C @ =0x0000ffd0\n\
+ adds r0, r2, 0\n\
+ ldr r3, _080D3A90 @ =gUnknown_030041B4\n\
+ strh r0, [r3]\n\
+ movs r0, 0x2\n\
+ strh r0, [r6, 0x8]\n\
+ movs r0, 0x1\n\
+ strh r0, [r6, 0xA]\n\
+ mov r0, r9\n\
+ strh r0, [r7, 0xE]\n\
+ b _080D3AEE\n\
+ .align 2, 0\n\
+_080D3A78: .4byte gBattleAnimBackgroundImageMuddyWater_Pal\n\
+_080D3A7C: .4byte sub_80D3D68\n\
+_080D3A80: .4byte gTasks\n\
+_080D3A84: .4byte 0x0000ffb0\n\
+_080D3A88: .4byte gUnknown_030042C0\n\
+_080D3A8C: .4byte 0x0000ffd0\n\
+_080D3A90: .4byte gUnknown_030041B4\n\
+_080D3A94:\n\
+ ldr r0, _080D3AC4 @ =gBattleAnimBankAttacker\n\
+ ldrb r0, [r0]\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r1, r0, 24\n\
+ cmp r1, 0x1\n\
+ bne _080D3AD8\n\
+ ldr r2, _080D3AC8 @ =0x0000ff20\n\
+ adds r0, r2, 0\n\
+ ldr r3, _080D3ACC @ =gUnknown_030042C0\n\
+ strh r0, [r3]\n\
+ movs r2, 0x80\n\
+ lsls r2, 1\n\
+ adds r0, r2, 0\n\
+ ldr r3, _080D3AD0 @ =gUnknown_030041B4\n\
+ strh r0, [r3]\n\
+ movs r0, 0x2\n\
+ strh r0, [r6, 0x8]\n\
+ ldr r0, _080D3AD4 @ =0x0000ffff\n\
+ strh r0, [r6, 0xA]\n\
+ strh r1, [r7, 0xE]\n\
+ b _080D3AEE\n\
+ .align 2, 0\n\
+_080D3AC4: .4byte gBattleAnimBankAttacker\n\
+_080D3AC8: .4byte 0x0000ff20\n\
+_080D3ACC: .4byte gUnknown_030042C0\n\
+_080D3AD0: .4byte gUnknown_030041B4\n\
+_080D3AD4: .4byte 0x0000ffff\n\
+_080D3AD8:\n\
+ ldr r0, _080D3B1C @ =gUnknown_030042C0\n\
+ strh r4, [r0]\n\
+ ldr r1, _080D3B20 @ =0x0000ffd0\n\
+ adds r0, r1, 0\n\
+ ldr r2, _080D3B24 @ =gUnknown_030041B4\n\
+ strh r0, [r2]\n\
+ ldr r0, _080D3B28 @ =0x0000fffe\n\
+ strh r0, [r6, 0x8]\n\
+ movs r0, 0x1\n\
+ strh r0, [r6, 0xA]\n\
+ strh r4, [r7, 0xE]\n\
+_080D3AEE:\n\
+ ldr r1, _080D3B2C @ =REG_BG1HOFS\n\
+ ldr r3, _080D3B1C @ =gUnknown_030042C0\n\
+ ldrh r0, [r3]\n\
+ strh r0, [r1]\n\
+ adds r1, 0x2\n\
+ ldr r2, _080D3B24 @ =gUnknown_030041B4\n\
+ ldrh r0, [r2]\n\
+ strh r0, [r1]\n\
+ ldr r1, _080D3B30 @ =gTasks\n\
+ mov r3, r8\n\
+ lsls r0, r3, 2\n\
+ add r0, r8\n\
+ lsls r0, 3\n\
+ adds r2, r0, r1\n\
+ movs r3, 0xE\n\
+ ldrsh r0, [r2, r3]\n\
+ cmp r0, 0\n\
+ bne _080D3B34\n\
+ movs r0, 0x30\n\
+ strh r0, [r2, 0x10]\n\
+ movs r0, 0x70\n\
+ b _080D3B38\n\
+ .align 2, 0\n\
+_080D3B1C: .4byte gUnknown_030042C0\n\
+_080D3B20: .4byte 0x0000ffd0\n\
+_080D3B24: .4byte gUnknown_030041B4\n\
+_080D3B28: .4byte 0x0000fffe\n\
+_080D3B2C: .4byte REG_BG1HOFS\n\
+_080D3B30: .4byte gTasks\n\
+_080D3B34:\n\
+ movs r0, 0\n\
+ strh r0, [r2, 0x10]\n\
+_080D3B38:\n\
+ strh r0, [r2, 0x12]\n\
+ mov r2, r10\n\
+ adds r0, r5, r2\n\
+ lsls r0, 3\n\
+ adds r0, r1\n\
+ movs r1, 0x1\n\
+ strh r1, [r0, 0x14]\n\
+ ldr r1, _080D3B5C @ =sub_80D3B60\n\
+ str r1, [r0]\n\
+ add sp, 0x14\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\
+ .align 2, 0\n\
+_080D3B5C: .4byte sub_80D3B60\n\
+ .syntax divided\n");
+}
diff --git a/src/battle/anim/wisp_orb.c b/src/battle/anim/wisp_orb.c
new file mode 100644
index 000000000..0e13fa119
--- /dev/null
+++ b/src/battle/anim/wisp_orb.c
@@ -0,0 +1,105 @@
+#include "global.h"
+#include "battle_anim.h"
+#include "constants/songs.h"
+#include "rom_8077ABC.h"
+#include "sound.h"
+#include "trig.h"
+
+extern s16 gBattleAnimArgs[8];
+extern u8 gBattleAnimBankAttacker;
+extern u8 gBattleAnimBankTarget;
+extern u16 gBattleTypeFlags;
+extern u8 gUnknown_0202F7D2;
+
+static void sub_80D5C5C(struct Sprite *);
+
+// wisp_orb (animates the wisp orbs)
+// Used in Will-O-Wisp
+
+void sub_80D5B0C(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sub_80787B0(sprite, 0);
+ StartSpriteAnim(sprite, gBattleAnimArgs[2]);
+ sprite->data[7] = gBattleAnimArgs[2];
+
+ if (GetBankSide(gBattleAnimBankAttacker) != 0)
+ {
+ sprite->data[4] = 4;
+ }
+ else
+ {
+ sprite->data[4] = -4;
+ }
+
+ sprite->oam.priority = sub_8079ED4(gBattleAnimBankTarget);
+ sprite->data[0]++;
+ break;
+ case 1:
+ sprite->data[1] += 192;
+ if (GetBankSide(gBattleAnimBankAttacker) != 0)
+ {
+ sprite->pos2.y = -(sprite->data[1] >> 8);
+ }
+ else
+ {
+ sprite->pos2.y = sprite->data[1] >> 8;
+ }
+
+ sprite->pos2.x = Sin(sprite->data[2], sprite->data[4]);
+ sprite->data[2] = (sprite->data[2] + 4) & 0xFF;
+
+ if (++sprite->data[3] == 1)
+ {
+ sprite->data[3] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ sprite->pos2.x = Sin(sprite->data[2], sprite->data[4]);
+ sprite->data[2] = (sprite->data[2] + 4) & 0xFF;
+
+ if (++sprite->data[3] == 31)
+ {
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+
+ sprite->data[0] = 256;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3);
+
+ sub_8078BD4(sprite);
+ sprite->callback = sub_80D5C5C;
+ }
+ break;
+ }
+}
+
+static void sub_80D5C5C(struct Sprite *sprite)
+{
+ s16 initialData5;
+ s16 newData5;
+
+ if (!sub_8078B5C(sprite))
+ {
+ sprite->pos2.x += Sin(sprite->data[5], 16);
+ initialData5 = sprite->data[5];
+ sprite->data[5] = (sprite->data[5] + 4) & 0xFF;
+ newData5 = sprite->data[5];
+
+ if ((initialData5 == 0 || initialData5 > 196) && newData5 > 0 && sprite->data[7] == 0)
+ {
+ PlaySE12WithPanning(SE_W172, gUnknown_0202F7D2);
+ }
+ }
+ else
+ {
+ move_anim_8072740(sprite);
+ }
+}
diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c
index 653f0938c..c2d34db0d 100644
--- a/src/battle/battle_controller_player.c
+++ b/src/battle/battle_controller_player.c
@@ -162,7 +162,7 @@ extern u8 gUnknown_0300434C[];
extern u8 gUnknown_0202E8F4;
extern u8 gUnknown_0202E8F5;
extern u8 gUnknown_02038470[];
-extern u16 gScriptItemId;
+extern u16 gSpecialVar_ItemId;
extern u8 gDisplayedStringBattle[];
extern const u8 BattleText_LinkStandby[];
@@ -1522,7 +1522,7 @@ void sub_802E03C(void)
{
if (gMain.callback2 == sub_800F808 && !gPaletteFade.active)
{
- Emitcmd35(1, gScriptItemId);
+ Emitcmd35(1, gSpecialVar_ItemId);
PlayerBufferExecCompleted();
}
}
diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c
index 3dcfca948..6f6286945 100644
--- a/src/battle/battle_controller_safari.c
+++ b/src/battle/battle_controller_safari.c
@@ -31,7 +31,7 @@ extern u8 gObjectBankIDs[];
extern struct SpriteTemplate gUnknown_02024E8C;
extern u16 gBattleTypeFlags;
extern u32 gBattleExecBuffer;
-extern u16 gScriptItemId;
+extern u16 gSpecialVar_ItemId;
extern MainCallback gPreBattleCallback1;
extern u8 gBankInMenu;
extern u8 gHealthboxIDs[];
@@ -315,7 +315,7 @@ void sub_812B758(void)
{
if (gMain.callback2 == sub_800F808 && !gPaletteFade.active)
{
- Emitcmd35(1, gScriptItemId);
+ Emitcmd35(1, gSpecialVar_ItemId);
SafariBufferExecCompleted();
}
}
diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c
index 0d698d9a5..d81c43381 100644
--- a/src/battle/battle_controller_wally.c
+++ b/src/battle/battle_controller_wally.c
@@ -367,7 +367,7 @@ void sub_81374FC(void)
if (gMain.callback2 == sub_800F808
&& !gPaletteFade.active)
{
- Emitcmd35(1, gScriptItemId);
+ Emitcmd35(1, gSpecialVar_ItemId);
WallyBufferExecCompleted();
}
}
diff --git a/src/battle/battle_party_menu.c b/src/battle/battle_party_menu.c
index 5decf8a7b..d4dcae0ca 100644
--- a/src/battle/battle_party_menu.c
+++ b/src/battle/battle_party_menu.c
@@ -426,7 +426,7 @@ bool8 SetUpBattlePartyMenu(void)
case 10:
if (gUnknown_02038473 == 3)
{
- if (GetItemEffectType(gScriptItemId) == 10)
+ if (GetItemEffectType(gSpecialVar_ItemId) == 10)
ewram1B000.promptTextId = 0xFF;
else
ewram1B000.promptTextId = 3;
@@ -464,9 +464,9 @@ void HandleBattlePartyMenu(u8 taskId)
{
if (!gPaletteFade.active)
{
- if (gUnknown_02038473 == 3 && GetItemEffectType(gScriptItemId) == 10)
+ if (gUnknown_02038473 == 3 && GetItemEffectType(gSpecialVar_ItemId) == 10)
{
- gUnknown_03004AE4(taskId, gScriptItemId, Task_80952E4);
+ gUnknown_03004AE4(taskId, gSpecialVar_ItemId, Task_80952E4);
return;
}
@@ -480,7 +480,7 @@ void HandleBattlePartyMenu(u8 taskId)
else
{
sub_806D5A4();
- gUnknown_03004AE4(taskId, gScriptItemId, Task_80952E4);
+ gUnknown_03004AE4(taskId, gSpecialVar_ItemId, Task_80952E4);
}
}
else
diff --git a/src/battle/battle_setup.c b/src/battle/battle_setup.c
index 6baf47dee..f71aad090 100644
--- a/src/battle/battle_setup.c
+++ b/src/battle/battle_setup.c
@@ -33,7 +33,7 @@
#include "text.h"
#include "trainer.h"
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
extern void (*gFieldCallback)(void);
@@ -48,7 +48,7 @@ EWRAM_DATA static u8 *sTrainerBattleScriptRetAddr = NULL;
EWRAM_DATA static u8 *sTrainerBattleEndScript = NULL;
extern u16 gBattleTypeFlags;
-extern u16 gScriptLastTalked;
+extern u16 gSpecialVar_LastTalked;
extern u8 gBattleOutcome;
extern struct MapObject gMapObjects[];
@@ -858,8 +858,8 @@ static void CB2_GiveStarter(void)
{
u16 starterPoke;
- *GetVarPointer(0x4023) = gScriptResult;
- starterPoke = GetStarterPokemon(gScriptResult);
+ *GetVarPointer(0x4023) = gSpecialVar_Result;
+ starterPoke = GetStarterPokemon(gSpecialVar_Result);
ScriptGiveMon(starterPoke, 5, 0, 0, 0, 0);
ResetTasks();
sub_80408BC();
@@ -980,7 +980,7 @@ static void battle_80801F0(void)
{
if (sTrainerMapObjectLocalId)
{
- gScriptLastTalked = sTrainerMapObjectLocalId;
+ gSpecialVar_LastTalked = sTrainerMapObjectLocalId;
gSelectedMapObject = GetFieldObjectIdByLocalIdAndMap(sTrainerMapObjectLocalId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
}
}
@@ -1029,7 +1029,7 @@ u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data)
void TrainerWantsBattle(u8 trainerMapObjId, u8 *trainerScript)
{
gSelectedMapObject = trainerMapObjId;
- gScriptLastTalked = gMapObjects[trainerMapObjId].localId;
+ gSpecialVar_LastTalked = gMapObjects[trainerMapObjId].localId;
BattleSetup_ConfigureTrainerBattle(trainerScript + 1);
ScriptContext1_SetupScript(gUnknown_0819F80B);
ScriptContext2_Enable();
diff --git a/src/battle/reshow_battle_screen.c b/src/battle/reshow_battle_screen.c
index 14f465352..03b5660fe 100644
--- a/src/battle/reshow_battle_screen.c
+++ b/src/battle/reshow_battle_screen.c
@@ -198,15 +198,9 @@ static void CB2_ReshowBattleScreenAfterMenu(void)
static void sub_807B06C(void)
{
- struct BGCntrlBitfield *regBgcnt1, *regBgcnt2;
-
sub_800D6D4();
-
- regBgcnt1 = (void*)(&REG_BG1CNT);
- regBgcnt1->charBaseBlock = 0;
-
- regBgcnt2 = (void*)(&REG_BG2CNT);
- regBgcnt2->charBaseBlock = 0;
+ ((vBgCnt *)&REG_BG1CNT)->charBaseBlock = 0;
+ ((vBgCnt *)&REG_BG2CNT)->charBaseBlock = 0;
}
static bool8 LoadAppropiateBankSprite(u8 bank)
diff --git a/src/contest.c b/src/contest.c
new file mode 100644
index 000000000..3aa3c8f59
--- /dev/null
+++ b/src/contest.c
@@ -0,0 +1,5542 @@
+#include "global.h"
+#include "constants/items.h"
+#include "constants/map_objects.h"
+#include "constants/moves.h"
+#include "constants/songs.h"
+#include "constants/species.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "blend_palette.h"
+#include "contest.h"
+#include "contest_link_80C857C.h"
+#include "data2.h"
+#include "decompress.h"
+#include "ewram.h"
+#include "graphics.h"
+#include "link.h"
+#include "m4a.h"
+#include "main.h"
+#include "menu.h"
+#include "menu_cursor.h"
+#include "overworld.h"
+#include "palette.h"
+#include "random.h"
+#include "rom_8077ABC.h"
+#include "script.h"
+#include "sound.h"
+#include "sprite.h"
+#include "string_util.h"
+#include "task.h"
+#include "text.h"
+#include "tv.h"
+#include "unknown_task.h"
+#include "util.h"
+
+extern u8 AreMovesContestCombo(u16, u16); // I don't think this is a bool
+extern void sub_80C8A38(u8);
+extern void sub_80C8AD0(u8);
+extern void sub_80C8C80(u8);
+extern void sub_81288F4();
+extern u8 sub_8128944(void);
+
+struct Shared18000
+{
+ /*0x18000*/ u8 unk18000;
+ /*0x18001*/ u8 filler18001[3];
+ /*0x18004*/ u16 unk18004[16][16];
+ /*0x18204*/ u16 unk18204[0x200];
+ /*0x18604*/ u16 unk18604[0x200];
+ /*0x18A04*/ u8 unk18A04[0x800];
+};
+
+struct Contest
+{
+ /*0x19204*/ u8 playerMoveChoice;
+ /*0x19205*/ u8 turnNumber;
+ /*0x19206*/ u8 unk19206[4]; // seems to only be used by an unref function
+ /*0x1920A*/ u16 unk1920A_0:1; // Task active flags?
+ u16 unk1920A_1:1;
+ u16 unk1920A_2:1;
+ u16 unk1920A_3:1;
+ u16 unk1920A_4:1;
+ u16 unk1920A_5:1;
+ u16 unk1920A_6:1;
+ u16 unk1920A_7:1;
+ /*0x1920B*/ u16 unk1920B_0:1;
+ u16 unk1920B_1:1;
+ u16 unk1920B_2:1;
+ /*0x1920C*/ u8 mainTaskId;
+ /*0x1920D*/ u8 unk1920D[4];
+ /*0x19211*/ u8 unk19211;
+ /*0x19212*/ u8 unk19212;
+ /*0x19213*/ u8 filler19213;
+ /*0x19214*/ u8 unk19214;
+ /*0x19215*/ u8 unk19215;
+ /*0x19216*/ u8 unk19216; // sprite ID
+ /*0x19217*/ s8 applauseLevel;
+ /*0x19218*/ u8 unk19218[4];
+ /*0x1921C*/ u32 unk1921C; // saved RNG value?
+ u16 unk19220[5][4]; // move history?
+ u8 unk19248[5][4]; // excitement history
+ u8 applauseMeterSpriteId; // sprite ID
+ /*0x1925D*/ u8 unk1925D;
+ /*0x1925E*/ u8 unk1925E;
+};
+
+struct ContestantStatus
+{
+ s16 appeal1; // move appeal?
+ s16 appeal2; // final appeal after end of turn, maybe?
+ s16 unk4;
+ u16 currMove;
+ u16 prevMove;
+ u8 moveCategory;
+ u8 unkB_0:2;
+ u8 unkB_2:2;
+ u8 moveRepeatCount:3;
+ u8 unkB_7:1; // used a one-time move?
+ u8 unkC_0:1;
+ u8 unkC_1:2;
+ s8 unkD;
+ u8 unkE;
+ u8 unkF;
+ u8 unk10_0:1;
+ u8 unk10_1:1;
+ u8 unk10_2:1;
+ u8 unk10_3:1;
+ u8 unk10_4:2;
+ u8 unk10_6:2;
+ u8 unk11_0:2;
+ u8 unk11_2:1;
+ u8 unk11_3:1;
+ u8 unk11_4:1;
+ u8 unk11_5:1;
+ u8 unk12;
+ u8 unk13; // status action?
+ u8 unk14;
+ u8 disappointedRepeat:1;
+ u8 unk15_1:1;
+ u8 unk15_2:1;
+ u8 unk15_3:1;
+ u8 unk15_4:1;
+ u8 unk15_5:1;
+ u8 unk15_6:1;
+ u8 unk16;
+ u8 unk17;
+ u8 unk18;
+ u8 unk19; // turn position
+ u8 attentionLevel; // How much the Pokemon "stood out"
+ u8 unk1B;
+};
+
+struct UnknownContestStruct3
+{
+ u8 unk0;
+ u8 unk1;
+ //u8 unk2_0:1;
+ //u8 unk2_1:1;
+ u8 unk2; // maybe a bitfield
+ u8 filler3;
+};
+
+// possibly the same as UnknownContestStruct3?
+struct UnknownContestStruct4
+{
+ u8 unk0; // sprite ID
+ u8 unk1; // sprite ID
+ u8 unk2_0:1;
+ u8 unk2_1:1;
+ u8 unk2_2:1;
+ u8 filler3;
+};
+
+struct UnknownContestStruct5
+{
+ s8 bits_0; // current move excitement?
+ u8 bits_8:1;
+ u8 bits_9:3;
+ u8 bits_C:4;
+ s8 unk2;
+ u8 filler3;
+};
+
+struct UnknownContestStruct7
+{
+ u8 unk0[4];
+ u16 unk4;
+ u16 unk6;
+ u8 filler8[0xD-8];
+ u8 unkD[4];
+ u8 unk11;
+ u8 filler12[2];
+};
+
+struct UnknownContestStruct8
+{
+ u16 unk0;
+ u16 unk2;
+ u8 unk4_0:1;
+ u8 unk5;
+ u8 filler6[2];
+ u32 unk8;
+ u32 unkC;
+ u32 unk10;
+};
+
+struct UnknownContestStruct6
+{
+ s32 unk0;
+ s32 unk4;
+ s32 unk8;
+ s32 unkC;
+};
+
+#define shared15800 (gSharedMem + 0x15800)
+#define shared15DE0 (*(struct ContestWinner *)(gSharedMem + 0x15DE0))
+#define shared16800 (gSharedMem + 0x16800)
+#define shared18000 (*(struct Shared18000 *)(gSharedMem + 0x18000))
+#define shared18004 ((u16 *)(gSharedMem + 0x18004))
+#define sContest (*(struct Contest *)(gSharedMem + 0x19204))
+#define sContestantStatus ((struct ContestantStatus *)(gSharedMem + 0x19260))
+#define shared192D0_ (*(struct UnknownContestStruct7 *)(gSharedMem + 0x192D0))
+#define shared192E4 (gSharedMem + 0x192E4)
+#define shared19328 (*(struct UnknownContestStruct5 *)(gSharedMem + 0x19328))
+#define shared19338 ((struct UnknownContestStruct4 *)(gSharedMem + 0x19338))
+#define shared19348_ (*(struct UnknownContestStruct8 *)(gSharedMem + 0x19348))
+
+extern struct MusicPlayerInfo gMPlay_SE1;
+extern u16 gSpecialVar_ContestCategory;
+extern u16 gSpecialVar_ContestRank;
+extern u8 gBattleMonForms[];
+extern u8 gDisplayedStringBattle[];
+extern u16 gBattleTypeFlags;
+extern u8 gBankAttacker;
+extern u8 gBankTarget;
+extern u8 gBanksBySide[];
+extern u8 gObjectBankIDs[];
+extern u8 gIsLinkContest;
+extern u8 gContestPlayerMonIndex;
+extern u16 gUnknown_030041B0;
+extern s16 gUnknown_030041B4;
+extern u16 gUnknown_030041B8;
+extern u16 gUnknown_03004200;
+extern struct Window gUnknown_03004210;
+extern u16 gUnknown_03004240;
+extern u16 gUnknown_03004244;
+extern u16 gUnknown_03004280;
+extern u16 gUnknown_03004288;
+extern u16 gUnknown_030042A0;
+extern u16 gUnknown_030042A4;
+extern u16 gUnknown_030042C0;
+extern u16 gUnknown_030042C4;
+extern u32 gUnknown_03005D28; // saved RNG value
+
+extern s16 gUnknown_02038680[];
+extern u16 gUnknown_02038688[];
+extern u8 gUnknown_02038694;
+extern u8 gUnknown_02038696[];
+extern u8 gUnknown_0203869B;
+extern s16 gUnknown_02038670[];
+extern s16 gUnknown_02038678[];
+extern u8 gContestFinalStandings[]; // What "place" each participant came in.
+extern struct SpriteTemplate gUnknown_02024E8C;
+
+
+extern const struct ContestPokemon gContestOpponents[60];
+extern const u8 gUnknown_083CA308[][2];
+extern const u8 gUnknown_083CA310[][2];
+extern const u8 gUnknown_083CA318[][2];
+extern const u8 gUnknown_083CA330[][2];
+extern const u8 gUnknown_083CA338[];
+extern const u8 gUnknown_083CA33C[];
+extern const u8 gUnknown_083CA340[][4];
+extern const struct SpriteSheet gUnknown_083CA350;
+extern const struct SpriteTemplate gSpriteTemplate_83CA3AC;
+extern const struct CompressedSpriteSheet gUnknown_083CA3C4[];
+extern const struct SpritePalette gUnknown_083CA3E4;
+extern const struct SpriteTemplate gSpriteTemplate_83CA3F4[];
+extern const struct SubspriteTable gSubspriteTables_83CA464[];
+extern const struct CompressedSpriteSheet gUnknown_083CA46C;
+extern const struct SpritePalette gUnknown_083CA474;
+extern const struct SpriteTemplate gSpriteTemplate_83CA484;
+extern const struct SpriteTemplate gSpriteTemplate_83CA4A4;
+extern const struct CompressedSpriteSheet gUnknown_083CA4BC;
+extern const struct CompressedSpriteSheet gUnknown_083CA4C4;
+extern const struct CompressedSpritePalette gUnknown_083CA4CC;
+extern const struct SpriteTemplate gUnknown_083CA4D4;
+extern const struct CompressedSpriteSheet gUnknown_083CC3AC;
+extern const struct CompressedSpritePalette gUnknown_083CC3B4[];
+extern const struct SpriteTemplate gSpriteTemplate_83CC454[];
+extern const u8 gText_Contest_WhichMoveWillBePlayed[];
+extern const u8 gText_Contest_ButItCantParticipate[];
+extern const u8 gUnknown_083CAFD7[];
+extern const u8 gUnknown_083CB00D[];
+extern const u8 ContestString_JudgeExpectantly2[];
+extern const u8 ContestString_WentOverWell[];
+extern const u8 ContestString_WentOverVeryWell[];
+extern const u8 ContestString_AppealComboExcellently[];
+extern const u8 gUnknown_083CBF60[];
+extern const u8 gUnknown_083CB02C[];
+extern const u8 *const gContestStandOutStrings[];
+extern const u8 ContestString_DissapointedRepeat[];
+extern const u8 ContestString_WentOverGreat[];
+extern const u8 ContestString_DidntGoWell[];
+extern const u8 ContestString_GotCrowdGoing[];
+extern const u8 ContestString_CantAppealNextTurn[];
+extern const u8 ContestString_CrowdWatches[];
+extern const u8 ContestString_Ignored2[];
+extern const u8 *const gUnknown_083CC188[];
+extern const u8 gText_Contest_Shyness[];
+extern const u8 gText_Contest_Anxiety[];
+extern const u8 gText_Contest_Laziness[];
+extern const u8 gText_Contest_Hesitancy[];
+extern const u8 gText_Contest_Fear[];
+extern const u8 *const gContestCategoryStrings[];
+extern const u8 gUnknown_083CC2EC[];
+extern const u8 *const gUnknown_083CC330[];
+extern const u8 gUnknownText_UnknownFormatting2[];
+extern const u8 gUnknownText_UnknownFormatting3[];
+extern const u8 gUnknown_083CC59C[];
+extern const u8 gUnknown_083CC5A2[];
+extern const u16 gUnknown_083CC5A4[];
+extern const struct ContestWinner gUnknown_083CC5D0[];
+extern const u8 gUnknownText_MissedTurn[];
+extern const u8 gUnknownText_LinkStandbyAndWinner[];
+extern void (*const gContestEffectFuncs[])(void);
+extern const s8 gContestExcitementTable[][5];
+
+void sub_80AB350(void);
+void sub_80AB5D4(u8);
+void sub_80AB604(u8);
+void sub_80AB678(u8);
+void sub_80AB694(u8);
+void sub_80AB6B4(u8);
+u8 sub_80AB70C(u8 *);
+void sub_80AB960(u8);
+void sub_80AB9A0(u8);
+void ContestMainCallback2(void);
+void ContestVBlankCallback(void);
+void sub_80ABB70(u8);
+void sub_80ABC3C(u8);
+void sub_80ABC70(u8);
+void sub_80ABCDC(u8);
+void sub_80ABEA0(u8);
+void sub_80AC0AC(s8);
+void nullsub_17(s8);
+void sub_80AC0C8(u8);
+void sub_80AC15C(u8);
+void sub_80AC188(u8);
+void sub_80AC204(u8);
+void sub_80AC250(u8);
+void sub_80AC284(u8);
+void sub_80AC2CC(u8);
+void sub_80AD8DC(u8);
+void sub_80AD8FC(struct Sprite *);
+void sub_80AD92C(struct Sprite *);
+void sub_80AD960(u8);
+void sub_80ADA1C(u8);
+void sub_80ADA4C(u8);
+void sub_80ADAD8(u8);
+void sub_80ADB04(u8);
+void sub_80ADB48(u8);
+void sub_80ADB88(u8);
+void sub_80ADC10(u8);
+void sub_80ADC4C(u8);
+void sub_80ADC84(u8);
+void sub_80ADCB4(u8);
+void sub_80ADD04(u8);
+void sub_80ADD74(u8);
+void sub_80ADDA4(u8);
+void sub_80ADE54(u8);
+void sub_80ADEAC(u8);
+void sub_80ADEEC(u8);
+void sub_80ADF4C(u8);
+void sub_80ADF98(u8);
+void sub_80ADFD8(u8);
+void sub_80AE010(void);
+void InsertStringDigit(u8 *, s32);
+bool8 sub_80AE074(void);
+void sub_80AEB4C(void *);
+void sub_80AE5BC(u8);
+void sub_80AE5D4(u8, u8);
+void sub_80AE6CC(u8);
+void sub_80AE6E4(u8, u8);
+u8 CreateJudgeSprite(void);
+u8 sub_80AE8B4(void);
+u8 sub_80AE9FC(u16, u32, u32);
+bool8 sub_80AEB1C(u16);
+void sub_80AEB30(void);
+void sub_80AEBEC(u16);
+void sub_80AED58(void);
+bool8 sub_80AEE54(u8, u8);
+bool8 sub_80AF038(u8);
+void sub_80AF120(void);
+void sub_80AF138(void);
+u16 GetChosenMove(u8);
+void sub_80AF1B8(void);
+void sub_80AF2A0(u8);
+void sub_80AF2FC(void);
+void sub_80AF3C0(void);
+bool8 Contest_IsMonsTurnDisabled(u8);
+s16 sub_80AF688(u8);
+void DetermineFinalStandings(void);
+bool8 sub_80AF828(s32, s32, struct UnknownContestStruct6 *);
+void sub_80AF860(void);
+void sub_80AF94C(u8);
+void sub_80AFA5C(void);
+u16 sub_80AFB40(u8);
+s8 sub_80AFB74(s16);
+u8 sub_80AFBA0(s16, s16, u8);
+void sub_80AFC74(u8);
+void sub_80AFE30(void);
+void sub_80AFF10(void);
+bool8 sub_80AFF28(void);
+void sub_80AFF60(struct Sprite *);
+void sub_80AFFE0(bool8);
+void sub_80B0034(void);
+void CreateApplauseMeterSprite(void);
+void nullsub_18(s8);
+void sub_80B0238(struct Sprite *);
+void sub_80B0280(struct Sprite *);
+void sub_80B02A8(struct Sprite *);
+void sub_80B02F4(struct Sprite *);
+void sub_80B0324(void);
+void sub_80B03A8(u8);
+void sub_80B03D8(u8);
+void sub_80B0458(u8);
+void sub_80B0518(void);
+void sub_80B0548(u8);
+void sub_80B05A4(u8);
+void nullsub_19(int);
+void sub_80B05FC(u8);
+void sub_80B0748(u8);
+void sub_80B09B0(u8);
+u8 sub_80B09E4(u8);
+void sub_80B0BC4(u8, bool8);
+void sub_80B0C5C(struct Sprite *);
+void sub_80B0CB0(struct Sprite *);
+void sub_80B0CDC(u8, int);
+void sub_80B0D7C(void);
+void sub_80B1118(void);
+void sub_80B114C(u8);
+void sub_80B146C(u8, u8);
+void sub_80B159C(void);
+void sub_80B1710(u8);
+void sub_80B1928(void);
+s8 Contest_GetMoveExcitement(u16);
+u8 sub_80B1A2C(void);
+void c3_08130B10(u8);
+void sub_80B1B14(void);
+void sub_80B1B68(u8);
+void sub_80B1BDC(void);
+void sub_80B1C34(u8);
+void sub_80B1CBC(s8);
+void sub_80B1CFC(u8);
+void sub_80B1DDC(void);
+void sub_80B1DFC(u8);
+void sub_80B1EA8(s8, s8);
+void sub_80B1F4C(u8);
+void sub_80B1FD0(bool8);
+const u8 *GetTurnOrderNumberGfx(u8);
+void sub_80B20C4(void);
+bool8 sub_80B214C(u8);
+void sub_80B2184(void);
+void sub_80B2280(void);
+void sub_80B237C(u8);
+void sub_80B23BC(u8);
+void sub_80B2400(u8);
+void sub_80B253C(u8);
+void sub_80B25A4(u8);
+void sub_80B25E4(u8);
+void sub_80B26C8(u8);
+u16 SanitizeMove(u16);
+u16 SanitizeSpecies(u16);
+void sub_80B2790(u8);
+void sub_80B28CC(int);
+void sub_80B28F0(u8);
+void sub_80B292C(void);
+void sub_80B2968(void);
+void SelectContestMoveBankTarget(u16);
+
+
+void nullsub_89(u8 taskId)
+{
+}
+
+void ResetLinkContestBoolean(void)
+{
+ gIsLinkContest = FALSE;
+}
+
+void ResetContestGpuRegs(void)
+{
+ u16 savedIme;
+
+ REG_DISPCNT = 0x40;
+ savedIme = REG_IME;
+ REG_IME = 0;
+ REG_IE |= INTR_FLAG_VBLANK;
+ REG_IME = savedIme;
+ REG_DISPSTAT = 8;
+ REG_BG0CNT = 0x9800;
+ REG_BG1CNT = 0x9E09;
+ REG_BG2CNT = 0x9C00;
+ REG_BG3CNT = 0x3A03;
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ REG_BLDY = 0;
+ REG_WININ = 0x3F3F;
+ REG_WINOUT = 0x3F3F;
+ REG_DISPCNT |= 0x7F00;
+
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 0;
+ gUnknown_030042C0 = 0;
+ gUnknown_030041B4 = 0;
+ gUnknown_03004288 = 0;
+ gUnknown_03004280 = 0;
+ gUnknown_030041B0 = 0;
+ gUnknown_030041B8 = 0;
+ gUnknown_030042C4 = 0;
+ gUnknown_03004240 = 0;
+ gUnknown_03004200 = 0;
+ gUnknown_03004244 = 0;
+}
+
+void sub_80AB2AC(void)
+{
+ s32 i;
+
+ LZDecompressVram(gContestMiscGfx, (void *)VRAM);
+ LZDecompressVram(gContestAudienceGfx, (void *)(VRAM + 0x2000));
+ LZDecompressVram(gUnknown_08D1725C, (void *)(VRAM + 0xD000));
+ LoadCompressedPalette(gUnknown_08D17144, 0, 0x200);
+ sub_80AB350();
+ for (i = 0; i < 4; i++)
+ {
+ u32 var = 5 + i;
+
+ LoadPalette(shared18000.unk18004[var], 16 * (5 + gUnknown_02038696[i]), 16 * sizeof(u16));
+ }
+}
+
+void SetUpContestWindow(void)
+{
+ SetUpWindowConfig(&gWindowConfig_81E6FD8);
+ InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6FD8);
+ InitWindowFromConfig(&gMenuWindow, &gWindowConfig_81E6FF4);
+}
+
+void sub_80AB350(void)
+{
+ u8 i;
+
+ LoadFontDefaultPalette(&gWindowConfig_81E6FD8);
+ FillPalette(0, 0, 2);
+ for (i = 10; i < 14; i++)
+ LoadPalette(gPlttBufferUnfaded + 241, 240 + i, 2);
+ FillPalette(0x7E3F, 0xF3, 2);
+}
+
+void ClearContestVars(void)
+{
+ s32 i;
+
+ memset(&sContest, 0, sizeof(sContest));
+ for (i = 0; i < 4; i++)
+ sContest.unk19206[i] = 0xFF;
+
+ for (i = 0; i < 4; i++)
+ memset(&sContestantStatus[i], 0, sizeof(sContestantStatus[i]));
+ for (i = 0; i < 4; i++)
+ {
+ sContestantStatus[i].unkB_0 = 0;
+ sContestantStatus[i].unk13 = 0xFF;
+ sContestantStatus[i].unk14 = 0xFF;
+ }
+
+ memset(&shared192D0_, 0, sizeof(shared192D0_));
+ memset(shared192E4, 0, 0x44 * sizeof(*shared192E4));
+ memset(&shared19328, 0, sizeof(shared19328));
+ memset(shared19338, 0, 4 * sizeof(*shared19338));
+ if (!(gIsLinkContest & 1))
+ sub_80B0F28(0);
+ for (i = 0; i < 4; i++)
+ {
+ sContestantStatus[i].unk19 = 0xFF;
+ sContest.unk19218[i] = gUnknown_02038696[i];
+ }
+ sub_80B159C();
+}
+
+void CB2_StartContest(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ SetVBlankCallback(NULL);
+ SetUpContestWindow();
+ ResetContestGpuRegs();
+ dp12_8087EA4();
+ ResetPaletteFade();
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ DmaClearLarge32(3, (void *)VRAM, VRAM_SIZE, 0x1000);
+ ResetSpriteData();
+ ResetTasks();
+ FreeAllSpritePalettes();
+ gReservedSpritePaletteCount = 4;
+ //shared18000.unk18000 = 0;
+ gSharedMem[0x18000] = 0;
+ ClearBattleMonForms();
+ ClearContestVars();
+ gMain.state++;
+ break;
+ case 1:
+ sub_80AB350();
+ gMain.state++;
+ break;
+ case 2:
+ if (sub_80AB70C(&sContest.unk1925D) == 0)
+ break;
+ sContest.unk1925D = 0;
+ gMain.state++;
+ break;
+ case 3:
+ sub_80B2184();
+ gUnknown_030042C0 = 0;
+ gUnknown_030041B4 = 0;
+ BeginFastPaletteFade(2);
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ SetVBlankCallback(ContestVBlankCallback);
+ sContest.mainTaskId = CreateTask(sub_80AB5D4, 10);
+ SetMainCallback2(ContestMainCallback2);
+ break;
+ }
+}
+
+void sub_80AB5D4(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ gTasks[taskId].func = sub_80AB604;
+}
+
+void sub_80AB604(u8 taskId)
+{
+ if (gIsLinkContest & 1)
+ {
+ if (!gPaletteFade.active)
+ {
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ sub_80AF860();
+ CreateTask(sub_80AB678, 0);
+ gTasks[taskId].func = nullsub_89;
+ }
+ }
+ else
+ {
+ gTasks[taskId].func = sub_80AB960;
+ }
+}
+
+void sub_80AB678(u8 taskId)
+{
+ SetTaskFuncWithFollowupFunc(taskId, sub_80C89DC, sub_80AB694);
+}
+
+void sub_80AB694(u8 taskId)
+{
+ u16 one = 1;
+
+ gTasks[taskId].data[0] = one;
+ gTasks[taskId].func = sub_80AB6B4;
+}
+
+void sub_80AB6B4(u8 taskId)
+{
+ gTasks[taskId].data[0]--;
+ if (gTasks[taskId].data[0] <= 0)
+ {
+ GetMultiplayerId(); // unused return value
+ DestroyTask(taskId);
+ gTasks[sContest.mainTaskId].func = sub_80AB960;
+ gRngValue = gUnknown_03005D28;
+ }
+}
+
+u8 sub_80AB70C(u8 *a)
+{
+ u16 sp0[16];
+ u16 sp20[16];
+
+ switch (*a)
+ {
+ case 0:
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ DmaClearLarge32(3, (void *)VRAM, VRAM_SIZE, 0x1000);
+ break;
+ case 1:
+ LZDecompressVram(gContestMiscGfx, (void *)VRAM);
+ break;
+ case 2:
+ LZDecompressVram(gContestAudienceGfx, (void *)(VRAM + 0x2000));
+ DmaCopyLarge32(3, (void *)(VRAM + 0x2000), shared15800, 0x2000, 0x1000);
+ break;
+ case 3:
+ LZDecompressVram(gUnknown_08D1725C, (void *)(VRAM + 0xD000));
+ break;
+ case 4:
+ LZDecompressVram(gUnknown_08D17424, (void *)(VRAM + 0xE000));
+ DmaCopy32Defvars(3, (void *)(VRAM + 0xE000), shared18000.unk18A04, 0x800);
+ break;
+ case 5:
+ LoadCompressedPalette(gUnknown_08D17144, 0, 0x200);
+ CpuCopy32(gPlttBufferUnfaded + 128, sp0, 16 * sizeof(u16));
+ CpuCopy32(gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, sp20, 16 * sizeof(u16));
+ CpuCopy32(sp20, gPlttBufferUnfaded + 128, 16 * sizeof(u16));
+ CpuCopy32(sp0, gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, 16 * sizeof(u16));
+ DmaCopy32Defvars(3, gPlttBufferUnfaded, shared18000.unk18004, 0x200);
+ sub_80AB350();
+ break;
+ case 6:
+ sub_80B1118();
+ sub_80AFA5C();
+ sub_80AEB30();
+ sContest.unk19216 = sub_80AE8B4();
+ sub_80AFE30();
+ sub_80B0034();
+ CreateApplauseMeterSprite();
+ sub_80B0324();
+ sub_80B0518();
+ gBanksBySide[0] = 0;
+ gBanksBySide[1] = 1;
+ gBanksBySide[2] = 3;
+ gBanksBySide[3] = 2;
+ gBattleTypeFlags = 0;
+ gBankAttacker = 2;
+ gBankTarget = 3;
+ gObjectBankIDs[gBankAttacker] = CreateJudgeSprite();
+ sub_80B292C();
+ break;
+ default:
+ *a = 0;
+ return 1;
+ }
+
+ (*a)++;
+ return 0;
+}
+
+void sub_80AB960(u8 taskId)
+{
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ if (!gPaletteFade.active)
+ {
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].func = sub_80AB9A0;
+ }
+}
+
+void sub_80AB9A0(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (gTasks[taskId].data[1]++ <= 60)
+ break;
+ gTasks[taskId].data[1] = 0;
+ PlaySE12WithPanning(SE_C_MAKU_U, 0);
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ gUnknown_030041B4 += 7;
+ if (gUnknown_030041B4 <= 160)
+ break;
+ gTasks[taskId].data[0]++;
+ break;
+ case 2:
+ sub_80B2280();
+ gTasks[taskId].data[0]++;
+ break;
+ case 3:
+ REG_BG0CNT_BITFIELD.priority = 0;
+ REG_BG2CNT_BITFIELD.priority = 0;
+ sub_80B1B14();
+ gTasks[taskId].data[0]++;
+ break;
+ case 4:
+ default:
+ if (sContest.unk1920A_6)
+ break;
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].func = sub_80ABB70;
+ break;
+ }
+}
+
+void ContestMainCallback2(void)
+{
+ AnimateSprites();
+ RunTasks();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+void ContestVBlankCallback(void)
+{
+ REG_BG0HOFS = gUnknown_030042A4;
+ REG_BG0VOFS = gUnknown_030042A0;
+ REG_BG1HOFS = gUnknown_030042C0;
+ REG_BG1VOFS = gUnknown_030041B4;
+ REG_BG2HOFS = gUnknown_03004288;
+ REG_BG2VOFS = gUnknown_03004280;
+ REG_BG3HOFS = gUnknown_030041B0;
+ REG_BG3VOFS = gUnknown_030041B8;
+ REG_WIN0H = gUnknown_030042C4;
+ REG_WIN0V = gUnknown_03004240;
+ REG_WIN1H = gUnknown_03004200;
+ REG_WIN1V = gUnknown_03004244;
+ TransferPlttBuffer();
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ sub_8089668();
+}
+
+void sub_80ABB70(u8 taskId)
+{
+ gUnknown_030042A0 = 0;
+ gUnknown_03004280 = 0;
+ sub_80B0D7C();
+ DmaCopy32Defvars(3, gPlttBufferUnfaded, shared18000.unk18204, 0x400);
+ if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex))
+ StringCopy(gDisplayedStringBattle, gText_Contest_WhichMoveWillBePlayed);
+ else
+ StringCopy(gDisplayedStringBattle, gText_Contest_ButItCantParticipate);
+ InsertStringDigit(gDisplayedStringBattle, sContest.turnNumber + 1);
+ sub_80AF138();
+ StringExpandPlaceholders(gStringVar4, gDisplayedStringBattle);
+ sub_8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15);
+ gTasks[taskId].func = sub_80ABC3C;
+}
+
+void sub_80ABC3C(u8 taskId)
+{
+ if (sub_80037A0(&gMenuWindow) == 1)
+ gTasks[taskId].func = sub_80ABC70;
+}
+
+void sub_80ABC70(u8 taskId)
+{
+ if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys == B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex))
+ {
+ sub_80AFFE0(TRUE);
+ gTasks[taskId].func = sub_80ABCDC;
+ }
+ else
+ {
+ gTasks[taskId].func = sub_80AC0C8;
+ }
+ }
+}
+
+// Print the move list
+void sub_80ABCDC(u8 taskId)
+{
+ u8 i;
+ u8 sp8[32];
+
+ gUnknown_030042A0 = 0xA0;
+ gUnknown_03004280 = 0xA0;
+ FillWindowRect_DefaultPalette(
+ &gUnknown_03004210,
+ 0,
+ gUnknown_083CA340[0][0],
+ gUnknown_083CA340[0][1],
+ gUnknown_083CA340[0][2],
+ gUnknown_083CA340[0][3]);
+
+ for (i = 0; i < 4; i++)
+ {
+ u16 move = gContestMons[gContestPlayerMonIndex].moves[i];
+ u8 *r5 = sp8;
+
+ if (sContestantStatus[gContestPlayerMonIndex].prevMove != MOVE_NONE
+ && sub_80B214C(gContestPlayerMonIndex)
+ && AreMovesContestCombo(sContestantStatus[gContestPlayerMonIndex].prevMove, move) != 0
+ && sContestantStatus[gContestPlayerMonIndex].unk15_4)
+ {
+ r5 = StringCopy(sp8, gUnknownText_UnknownFormatting2);
+ }
+ else if (move != 0
+ && sContestantStatus[gContestPlayerMonIndex].prevMove == move
+ && gContestMoves[move].effect != CONTEST_EFFECT_REPEATABLE)
+ {
+ // Gray the text because it is a repeated move
+ r5 = StringCopy(sp8, gUnknownText_UnknownFormatting3);
+ }
+ r5 = StringCopy(r5, gMoveNames[move]);
+
+ sub_8002E4C(
+ &gUnknown_03004210,
+ sp8,
+ 776 + i * 20,
+ gUnknown_083CA340[i][0] * 8 + 4,
+ gUnknown_083CA340[i][1] * 8,
+ 1);
+ sub_8002F44(&gUnknown_03004210);
+ }
+
+ sub_814A5C0(0, 0xFFFF, 12, 0x2D9F, 72);
+ sub_80AC0AC(sContest.playerMoveChoice);
+ sub_80AEBEC(gContestMons[gContestPlayerMonIndex].moves[sContest.playerMoveChoice]);
+ gTasks[taskId].func = sub_80ABEA0;
+}
+
+// Handle move selection input
+void sub_80ABEA0(u8 taskId)
+{
+ u8 numMoves = 0;
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (gContestMons[gContestPlayerMonIndex].moves[i] != MOVE_NONE)
+ numMoves++;
+ }
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ DestroyMenuCursor();
+ PlaySE(SE_SELECT);
+ gTasks[taskId].func = sub_80AC0C8;
+ }
+ else
+ {
+ switch (gMain.newAndRepeatedKeys)
+ {
+ case B_BUTTON:
+ sub_814A904();
+ PlaySE(SE_SELECT);
+ sub_80AFFE0(FALSE);
+ FillWindowRect_DefaultPalette(
+ &gUnknown_03004210,
+ 0,
+ gUnknown_083CA340[0][0],
+ gUnknown_083CA340[0][1],
+ gUnknown_083CA340[0][2],
+ gUnknown_083CA340[0][3]);
+ if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex))
+ StringCopy(gDisplayedStringBattle, gText_Contest_WhichMoveWillBePlayed);
+ else
+ StringCopy(gDisplayedStringBattle, gText_Contest_ButItCantParticipate);
+ InsertStringDigit(gDisplayedStringBattle, sContest.turnNumber + 1);
+ sub_80AF138();
+ StringExpandPlaceholders(gStringVar4, gDisplayedStringBattle);
+ sub_8003460(&gMenuWindow, gStringVar4, 776, 1, 15);
+ gUnknown_030042A0 = 0;
+ gUnknown_03004280 = 0;
+ gTasks[taskId].func = sub_80ABC70;
+ break;
+ case DPAD_LEFT:
+ case DPAD_RIGHT:
+ break;
+ case DPAD_UP:
+ nullsub_17(sContest.playerMoveChoice);
+ if (sContest.playerMoveChoice == 0)
+ sContest.playerMoveChoice = numMoves - 1;
+ else
+ sContest.playerMoveChoice--;
+ sub_80AC0AC(sContest.playerMoveChoice);
+ sub_80AED58();
+ sub_80AEBEC(gContestMons[gContestPlayerMonIndex].moves[sContest.playerMoveChoice]);
+ if (numMoves > 1)
+ PlaySE(SE_SELECT);
+ break;
+ case DPAD_DOWN:
+ nullsub_17(sContest.playerMoveChoice);
+ if (sContest.playerMoveChoice == numMoves - 1)
+ sContest.playerMoveChoice = 0;
+ else
+ sContest.playerMoveChoice++;
+ sub_80AC0AC(sContest.playerMoveChoice);
+ sub_80AED58();
+ sub_80AEBEC(gContestMons[gContestPlayerMonIndex].moves[sContest.playerMoveChoice]);
+ if (numMoves > 1)
+ PlaySE(SE_SELECT);
+ break;
+ }
+ }
+}
+
+void sub_80AC0AC(s8 a)
+{
+ sub_814A880(4, 88 + a * 16);
+}
+
+void nullsub_17(s8 a)
+{
+}
+
+void sub_80AC0C8(u8 taskId)
+{
+ if (gIsLinkContest & 1)
+ {
+ u16 var = GetChosenMove(gContestPlayerMonIndex);
+ u8 taskId2;
+
+ sContestantStatus[gContestPlayerMonIndex].currMove = var;
+ taskId2 = CreateTask(sub_80C8A38, 0);
+ SetTaskFuncWithFollowupFunc(taskId2, sub_80C8A38, sub_80AC15C);
+ gTasks[taskId].func = nullsub_89;
+ sub_80AF860();
+ sub_80AFFE0(FALSE);
+ }
+ else
+ {
+ sub_80AF1B8();
+ gTasks[taskId].func = sub_80AC188;
+ }
+}
+
+void sub_80AC15C(u8 taskId)
+{
+ DestroyTask(taskId);
+ gTasks[sContest.mainTaskId].func = sub_80AC188;
+}
+
+void sub_80AC188(u8 taskId)
+{
+ sub_80AF138();
+ gUnknown_030042A0 = 0;
+ gUnknown_03004280 = 0;
+ sub_80AFFE0(FALSE);
+ DmaCopy32Defvars(3, gPlttBufferFaded, shared18000.unk18604, 0x400);
+ LoadPalette(shared18000.unk18204, 0, 0x400);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].func = sub_80AC204;
+}
+
+void sub_80AC204(u8 taskId)
+{
+ if (++gTasks[taskId].data[0] > 2)
+ {
+ gTasks[taskId].data[0] = 0;
+ if (++gTasks[taskId].data[1] == 2)
+ {
+ sub_80B1BDC();
+ sub_80B25E4(1);
+ gTasks[taskId].func = sub_80AC250;
+ }
+ }
+}
+
+void sub_80AC250(u8 taskId)
+{
+ if (!sContest.unk1920A_6 && !sContest.unk1920B_1)
+ gTasks[taskId].func = sub_80AC284;
+}
+
+void sub_80AC284(u8 taskId)
+{
+ if (++gTasks[taskId].data[0] > 19)
+ {
+ sContest.unk19214 = 0;
+ sContest.unk1921C = gRngValue;
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80AC2CC;
+ }
+}
+
+void sub_80AC2CC(u8 taskId)
+{
+ u8 spriteId;
+ s32 i;
+ u8 r7 = sContest.unk19215;
+ s8 r4;
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ sub_80B0D7C();
+ for (i = 0; sContest.unk19214 != shared192D0_.unk0[i]; i++)
+ ;
+ sContest.unk19215 = i;
+ r7 = sContest.unk19215;
+ if (gIsLinkContest & 1)
+ {
+ u8 taskId2;
+
+ sContest.unk1920B_2 = 1;
+ if (sub_80AE074())
+ sub_80B114C(sContest.unk19215);
+ taskId2 = CreateTask(sub_80C8C80, 0);
+ SetTaskFuncWithFollowupFunc(taskId2, sub_80C8C80, sub_80AD8DC);
+ sub_80AF860();
+ gTasks[taskId].data[0] = 1;
+ }
+ else
+ {
+ sub_80B114C(sContest.unk19215);
+ gTasks[taskId].data[0] = 2;
+ }
+ return;
+ case 1:
+ if (!sContest.unk1920B_2)
+ gTasks[taskId].data[0] = 2;
+ return;
+ case 2:
+ if (sContestantStatus[r7].unkC_1 != 0
+ || sContestantStatus[r7].unkB_7)
+ {
+ gTasks[taskId].data[0] = 31;
+ }
+ else
+ {
+ sub_80AF138();
+ sub_80B0CDC(r7, 0);
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 3;
+ }
+ return;
+ case 3:
+ for (i = 0; i < 4; i++)
+ gBattleMonForms[i] = 0;
+ memset(&shared19348_, 0, sizeof(shared19348_));
+ sub_80B28F0(sContest.unk19215);
+ spriteId = sub_80AE9FC(
+ gContestMons[sContest.unk19215].species,
+ gContestMons[sContest.unk19215].otId,
+ gContestMons[sContest.unk19215].personality);
+ gSprites[spriteId].pos2.x = 120;
+ gSprites[spriteId].callback = sub_80AD8FC;
+ gTasks[taskId].data[2] = spriteId;
+ gObjectBankIDs[gBankAttacker] = spriteId;
+ sub_80B0BC4(sub_80B09E4(sContest.unk19215), FALSE);
+ gTasks[taskId].data[0] = 4;
+ return;
+ case 4:
+ spriteId = gTasks[taskId].data[2];
+ if (gSprites[spriteId].callback == SpriteCallbackDummy)
+ {
+ if (!shared19338[r7].unk2_1)
+ gTasks[taskId].data[0] = 5;
+ }
+ return;
+ case 5:
+ if (sContestantStatus[r7].unkC_0)
+ {
+ gTasks[taskId].data[0] = 33;
+ }
+ else
+ {
+ sub_80AF138();
+ StringCopy(gStringVar1, gContestMons[r7].nickname);
+ if (sContestantStatus[r7].currMove < NUM_MOVES)
+ StringCopy(gStringVar2, gMoveNames[sContestantStatus[r7].currMove]);
+ else
+ StringCopy(gStringVar2, gUnknown_083CC330[sContestantStatus[r7].moveCategory]);
+ StringExpandPlaceholders(gStringVar4, gUnknown_083CAFD7);
+ sub_8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15);
+ gTasks[taskId].data[0] = 6;
+ }
+ return;
+ case 6:
+ if (sub_80037A0(&gMenuWindow) != 0)
+ {
+ sContest.unk1925E = 0;
+ gTasks[taskId].data[0] = 7;
+ }
+ return;
+ case 7:
+ {
+ u16 move = SanitizeMove(sContestantStatus[sContest.unk19215].currMove);
+
+ sub_80B2790(sContest.unk19215);
+ sub_80B28F0(sContest.unk19215);
+ SelectContestMoveBankTarget(move);
+ ExecuteMoveAnim(move);
+ gTasks[taskId].data[0] = 8;
+ }
+ return;
+ case 8:
+ gAnimScriptCallback();
+ if (!gAnimScriptActive)
+ {
+ sub_80B28CC(r7);
+ if (sContest.unk1925E != 0)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 9;
+ }
+ else
+ {
+ if (!sContestantStatus[r7].unk15_4)
+ sub_80B03A8(r7);
+ sub_80B20C4();
+ gTasks[taskId].data[0] = 23;
+ }
+ }
+ return;
+ case 9:
+ if (gTasks[taskId].data[10]++ > 30)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 7;
+ }
+ return;
+ case 23:
+ gTasks[taskId].data[1] = 0;
+ if (sContestantStatus[r7].unk13 != 0xFF)
+ {
+ sub_80B146C(r7, sContestantStatus[r7].unk13);
+ sContestantStatus[r7].unk13 = 0xFF;
+ gTasks[taskId].data[0] = 24;
+ }
+ else
+ {
+ if (sContestantStatus[r7].unk14 != 0xFF)
+ {
+ for (i = 0; i < 4; i++)
+ {
+ if (i != r7 && sContestantStatus[i].unk13 != 0xFF)
+ break;
+ }
+ if (i == 4)
+ {
+ sub_80B146C(r7, sContestantStatus[r7].unk14);
+ sContestantStatus[r7].unk14 = 0xFF;
+ gTasks[taskId].data[0] = 24;
+ }
+ else
+ {
+ gTasks[taskId].data[0] = 48;
+ }
+ }
+ else
+ {
+ gTasks[taskId].data[0] = 48;
+ }
+ }
+ return;
+ case 24:
+ if (sub_80037A0(&gMenuWindow) != 0)
+ gTasks[taskId].data[0] = 23;
+ return;
+ case 48:
+ if (sContestantStatus[r7].unk11_0 == 1)
+ {
+ sub_80B1710(5);
+ }
+ else if (sContestantStatus[r7].unk11_0 == 2)
+ {
+ sub_80B1710(6);
+ }
+ else if (sContestantStatus[r7].unk11_0 == 3)
+ {
+ sub_80B1710(7);
+ }
+ else
+ {
+ gTasks[taskId].data[0] = 47;
+ return;
+ }
+ gTasks[taskId].data[0] = 49;
+ return;
+ case 49:
+ if (!sContest.unk1920A_4)
+ gTasks[taskId].data[0] = 47;
+ return;
+ case 47:
+ sub_80B1FD0(TRUE);
+ gTasks[taskId].data[0] = 12;
+ return;
+ case 12:
+ sub_80AFBA0(0, sContestantStatus[r7].appeal2, r7);
+ gTasks[taskId].data[0] = 13;
+ return;
+ case 13:
+ if (!shared19338[sContest.unk19215].unk2_2)
+ gTasks[taskId].data[0] = 35;
+ return;
+ case 35:
+ if (sContestantStatus[r7].unk10_4 == 1)
+ sub_80B1710(8);
+ gTasks[taskId].data[0] = 36;
+ return;
+ case 36:
+ if (!sContest.unk1920A_4)
+ gTasks[taskId].data[0] = 37;
+ return;
+ case 37:
+ if (sub_80AEE54(r7, 1))
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 38;
+ }
+ else
+ {
+ gTasks[taskId].data[0] = 50;
+ }
+ return;
+ case 38:
+ if (++gTasks[taskId].data[10] > 20)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 50;
+ }
+ return;
+ case 50:
+ if (sub_80AF038(r7))
+ PlaySE(SE_C_PASI);
+ gTasks[taskId].data[0] = 25;
+ return;
+ case 25:
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[0] = 26;
+ return;
+ case 26:
+ {
+ s32 r2 = 0;
+
+ r4 = 0;
+ for (i = gTasks[taskId].data[1]; i < 4; i++)
+ {
+ r4 = 0;
+ for (r2 = 0; r2 < 4; r2++)
+ {
+ if (r2 != r7 && gUnknown_02038696[r2] == i
+ && sContestantStatus[r2].unk13 != 0xFF)
+ {
+ r4 = 1;
+ break;
+ }
+ }
+ if (r4 != 0)
+ break;
+ }
+ if (r4)
+ {
+ gTasks[taskId].data[1] = gUnknown_02038696[r2];
+ sub_80B146C(r2, sContestantStatus[r2].unk13);
+ sContestantStatus[r2].unk13 = 0xFF;
+ gTasks[taskId].data[0] = 27;
+ }
+ else
+ {
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 51;
+ sub_80AF120();
+ }
+ }
+ return;
+ case 27:
+ if (sub_80037A0(&gMenuWindow) != 0)
+ gTasks[taskId].data[0] = 28;
+ return;
+ case 28:
+ for (i = 0; gTasks[taskId].data[1] != gUnknown_02038696[i]; i++)
+ ;
+ sub_80AFBA0(sContestantStatus[i].appeal2 + sContestantStatus[i].unkE, -sContestantStatus[i].unkE, i);
+ gTasks[taskId].data[0] = 29;
+ return;
+ case 29:
+ for (i = 0; gTasks[taskId].data[1] != gUnknown_02038696[i]; i++)
+ ;
+ if (!shared19338[i].unk2_2)
+ gTasks[taskId].data[0] = 39;
+ return;
+ case 39:
+ for (i = 0; gTasks[taskId].data[1] != gUnknown_02038696[i]; i++)
+ ;
+ if (sub_80AEE54(i, 1))
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 40;
+ }
+ else
+ {
+ gTasks[taskId].data[0] = 30;
+ }
+ return;
+ case 40:
+ if (++gTasks[taskId].data[10] > 20)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 30;
+ }
+ return;
+ case 30:
+ for (i = 0; i < 4; i++)
+ {
+ if (gUnknown_02038696[i] == gTasks[taskId].data[1])
+ break;
+ }
+ if (sub_80AF038(i))
+ PlaySE(SE_C_PASI);
+ else
+ PlaySE(SE_C_SYU);
+ if (sContestantStatus[i].unk15_5)
+ {
+ sub_80B03A8(i);
+ sContestantStatus[i].unk15_5 = 0;
+ }
+ gTasks[taskId].data[1]++;
+ gTasks[taskId].data[0] = 26;
+ return;
+ case 51:
+ if (gTasks[taskId].data[10]++ > 9)
+ {
+ gTasks[taskId].data[10] = 0;
+ if (sContestantStatus[r7].unkC_1 != 0
+ || sContestantStatus[r7].unk11_2)
+ {
+ sub_80AF138();
+ StringCopy(gStringVar1, gContestMons[r7].nickname);
+ StringExpandPlaceholders(gStringVar4, ContestString_CantAppealNextTurn);
+ sub_8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15);
+ }
+ gTasks[taskId].data[0] = 52;
+ }
+ return;
+ case 52:
+ if (sub_80037A0(&gMenuWindow) != 0)
+ {
+ if (!sContestantStatus[r7].unk15_6)
+ gTasks[taskId].data[0] = 17;
+ else
+ gTasks[taskId].data[0] = 14;
+ }
+ return;
+ case 14:
+ r4 = sContestantStatus[r7].unk16;
+ if (sContestantStatus[r7].unk16 != 0)
+ {
+ sub_80AF138();
+ if (r4 == 1)
+ sub_8002EB0(&gMenuWindow, ContestString_WentOverWell, 776, 1, 15);
+ else if (r4 == 2)
+ sub_8002EB0(&gMenuWindow, ContestString_WentOverVeryWell, 776, 1, 15);
+ else
+ sub_8002EB0(&gMenuWindow, ContestString_AppealComboExcellently, 776, 1, 15);
+ sub_80B1710(3);
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 45;
+ }
+ else
+ {
+ sub_80AF138();
+ StringCopy(gStringVar1, gContestMons[r7].nickname);
+ StringExpandPlaceholders(gStringVar4, ContestString_JudgeExpectantly2);
+ sub_8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15);
+ sub_80B1710(2);
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 45;
+ }
+ return;
+ case 45:
+ if (!sContest.unk1920A_4)
+ {
+ sub_80B09B0(sContest.unk19215);
+ gTasks[taskId].data[0] = 15;
+ }
+ return;
+ case 15:
+ if (sub_80037A0(&gMenuWindow) != 0)
+ {
+ if (++gTasks[taskId].data[10] > 50)
+ {
+ if (!sContestantStatus[r7].unk15_4)
+ {
+ sub_80AFBA0(
+ sContestantStatus[r7].appeal2,
+ sContestantStatus[r7].unk17,
+ r7);
+ sContestantStatus[r7].appeal2 += sContestantStatus[r7].unk17;
+ }
+ gTasks[taskId].data[0] = 16;
+ }
+ }
+ return;
+ case 16:
+ if (!shared19338[r7].unk2_2)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 17;
+ }
+ return;
+ case 17:
+ if (sContestantStatus[r7].disappointedRepeat)
+ {
+ sub_80AF138();
+ StringCopy(gStringVar1, gContestMons[r7].nickname);
+ StringExpandPlaceholders(gStringVar4, ContestString_DissapointedRepeat);
+ sub_8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15);
+ gTasks[taskId].data[10] = 0;
+ sub_80B1710(0);
+ gTasks[taskId].data[0] = 46;
+ }
+ else
+ {
+ gTasks[taskId].data[0] = 41;
+ }
+ return;
+ case 46:
+ if (!sContest.unk1920A_4)
+ gTasks[taskId].data[0] = 19;
+ return;
+ case 19:
+ if (sub_80037A0(&gMenuWindow) != 0)
+ {
+ sub_80AFBA0(sContestantStatus[r7].appeal2, -sContestantStatus[r7].unk18, r7);
+ sContestantStatus[r7].appeal2 -= sContestantStatus[r7].unk18;
+ gTasks[taskId].data[0] = 18;
+ }
+ return;
+ case 18:
+ sub_80B0D7C();
+ if (!shared19338[r7].unk2_2)
+ {
+ gTasks[taskId].data[10] = 0;
+ sub_80AF138();
+ gTasks[taskId].data[0] = 41;
+ }
+ return;
+ case 41:
+ if (shared19328.bits_8 && r7 != shared19328.bits_9)
+ {
+ gTasks[taskId].data[0] = 57;
+ }
+ else
+ {
+ r4 = shared19328.bits_0;
+ if (sContestantStatus[r7].unk11_4)
+ {
+ r4 = 1;
+ StringCopy(gStringVar3, gMoveNames[sContestantStatus[r7].currMove]);
+ }
+ else
+ {
+ StringCopy(gStringVar3, gContestCategoryStrings[gContestMoves[sContestantStatus[r7].currMove].contestCategory]);
+ }
+ if (r4 > 0)
+ {
+ if (sContestantStatus[r7].disappointedRepeat)
+ r4 = 0;
+ }
+ sub_80AF138();
+ StringCopy(gStringVar1, gContestMons[r7].nickname);
+ sContest.applauseLevel += r4;
+ if (sContest.applauseLevel < 0)
+ sContest.applauseLevel = 0;
+ if (r4 == 0)
+ {
+ gTasks[taskId].data[0] = 55;
+ }
+ else
+ {
+ if (r4 < 0)
+ StringExpandPlaceholders(gStringVar4, ContestString_DidntGoWell);
+ else if (r4 > 0 && sContest.applauseLevel <= 4)
+ StringExpandPlaceholders(gStringVar4, ContestString_WentOverGreat);
+ else
+ StringExpandPlaceholders(gStringVar4, ContestString_GotCrowdGoing);
+ sub_8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15);
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11] = 0;
+ if (r4 < 0)
+ gTasks[taskId].data[0] = 53;
+ else
+ gTasks[taskId].data[0] = 54;
+ }
+ }
+ return;
+ case 53:
+ switch (gTasks[taskId].data[10])
+ {
+ case 0:
+ sub_80B1EA8(-1, 1);
+ PlayFanfare(BGM_ME_ZANNEN);
+ gTasks[taskId].data[10]++;
+ break;
+ case 1:
+ if (!sContest.unk1920B_0 && sub_80037A0(&gMenuWindow) != 0)
+ {
+ sub_80B1CBC(-1);
+ gTasks[taskId].data[10]++;
+ }
+ break;
+ case 2:
+ if (!sContest.unk1920A_5)
+ {
+ if (gTasks[taskId].data[11]++ > 29)
+ {
+ gTasks[taskId].data[11] = 0;
+ sub_80B1EA8(-1, -1);
+ gTasks[taskId].data[10]++;
+ }
+ }
+ break;
+ case 3:
+ if (!gPaletteFade.active)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11] = 0;
+ gTasks[taskId].data[0] = 43;
+ }
+ break;
+ }
+ return;
+ case 54:
+ switch (gTasks[taskId].data[10])
+ {
+ case 0:
+ if (sub_80037A0(&gMenuWindow) != 0)
+ {
+ sub_80B1EA8(1, 1);
+ gTasks[taskId].data[10]++;
+ }
+ break;
+ case 1:
+ if (!sContest.unk1920B_0)
+ {
+ sub_80B1DDC();
+ PlaySE(SE_W227B);
+ sub_80B1CBC(1);
+ gTasks[taskId].data[10]++;
+ }
+ break;
+ case 2:
+ if (!sContest.unk1920A_5)
+ {
+ if (gTasks[taskId].data[11]++ > 29)
+ {
+ gTasks[taskId].data[11] = 0;
+ sub_80AFBA0(sContestantStatus[r7].appeal2, shared19328.unk2, r7);
+ sContestantStatus[r7].appeal2 += shared19328.unk2;
+ gTasks[taskId].data[10]++;
+ }
+ }
+ break;
+ case 3:
+ if (!shared19338[r7].unk2_2)
+ {
+ if (!sContest.unk1920A_7)
+ {
+ sub_80B1EA8(1, -1);
+ gTasks[taskId].data[10]++;
+ }
+ }
+ break;
+ case 4:
+ if (!gPaletteFade.active)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11] = 0;
+ gTasks[taskId].data[0] = 43;
+ }
+ break;
+ }
+ return;
+ case 43:
+ if (!shared19338[r7].unk2_2)
+ {
+ sub_80AF138();
+ gTasks[taskId].data[0] = 55;
+ }
+ return;
+ case 57:
+ sub_80AF138();
+ StringCopy(gStringVar3, gContestMons[shared19328.bits_9].nickname);
+ StringCopy(gStringVar1, gContestMons[r7].nickname);
+ StringCopy(gStringVar2, gMoveNames[sContestantStatus[r7].currMove]);
+ StringExpandPlaceholders(gStringVar4, ContestString_CrowdWatches);
+ sub_8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15);
+ gTasks[taskId].data[0] = 58;
+ return;
+ case 58:
+ if (sub_80037A0(&gMenuWindow) != 0)
+ {
+ sub_80AF138();
+ StringExpandPlaceholders(gStringVar4, ContestString_Ignored2);
+ sub_8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15);
+ gTasks[taskId].data[0] = 59;
+ }
+ return;
+ case 59:
+ if (sub_80037A0(&gMenuWindow) != 0)
+ {
+ sub_80AF138();
+ gTasks[taskId].data[0] = 55;
+ }
+ return;
+ case 33:
+ if (sContestantStatus[r7].unk15_4)
+ sContestantStatus[r7].unk15_4 = 0;
+ sub_80B09B0(r7);
+ StringCopy(gStringVar1, gContestMons[r7].nickname);
+ StringCopy(gStringVar2, gMoveNames[sContestantStatus[r7].currMove]);
+ StringExpandPlaceholders(gStringVar4, gUnknown_083CBF60);
+ sub_8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15);
+ gTasks[taskId].data[0] = 34;
+ return;
+ case 34:
+ if (sub_80037A0(&gMenuWindow) != 0)
+ gTasks[taskId].data[0] = 55;
+ return;
+ case 55:
+ sub_80B1BDC();
+ gTasks[taskId].data[0] = 56;
+ return;
+ case 56:
+ if (!sContest.unk1920A_6)
+ {
+ if (sContest.applauseLevel > 4)
+ {
+ sContest.applauseLevel = 0;
+ sub_80B1928();
+ }
+ gTasks[taskId].data[0] = 10;
+ }
+ return;
+ case 10:
+ spriteId = gTasks[taskId].data[2];
+ gSprites[spriteId].callback = sub_80AD92C;
+ gTasks[taskId].data[0] = 11;
+ return;
+ case 11:
+ spriteId = gTasks[taskId].data[2];
+ if (gSprites[spriteId].invisible)
+ {
+ FreeSpriteOamMatrix(&gSprites[spriteId]);
+ DestroySprite(&gSprites[spriteId]);
+ gTasks[taskId].data[0] = 20;
+ }
+ return;
+ case 20:
+ for (i = 0; i < 4; i++)
+ sub_80B0CDC(i, 1);
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 21;
+ return;
+ case 31:
+ sub_80AF138();
+ StringCopy(gStringVar1, gContestMons[r7].nickname);
+ StringExpandPlaceholders(gStringVar4, gUnknown_083CB00D);
+ sub_8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15);
+ gTasks[taskId].data[0] = 32;
+ return;
+ case 32:
+ if (sub_80037A0(&gMenuWindow) != 0)
+ gTasks[taskId].data[0] = 21;
+ return;
+ case 21:
+ if (++gTasks[taskId].data[10] > 29)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0] = 22;
+ }
+ return;
+ case 22:
+ if (++sContest.unk19214 == 4)
+ {
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].func = sub_80AD960;
+ }
+ else
+ {
+ gTasks[taskId].data[0] = 0;
+ }
+ nullsub_18(0);
+ return;
+ }
+}
+
+void sub_80AD8DC(u8 taskId)
+{
+ sContest.unk1920B_2 = 0;
+ DestroyTask(taskId);
+}
+
+void sub_80AD8FC(struct Sprite *sprite)
+{
+ if (sprite->pos2.x != 0)
+ {
+ sprite->pos2.x -= 2;
+ }
+ else
+ {
+ if (++sprite->data[0] == 31)
+ {
+ sprite->data[0] = 0;
+ sprite->callback = SpriteCallbackDummy;
+ }
+ }
+}
+
+void sub_80AD92C(struct Sprite *sprite)
+{
+ sprite->pos2.x -= 6;
+ if (sprite->pos1.x + sprite->pos2.x < -32)
+ {
+ sprite->callback = SpriteCallbackDummy;
+ sprite->invisible = TRUE;
+ }
+}
+
+void sub_80AD960(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (gIsLinkContest & 1)
+ {
+ u8 taskId2;
+
+ sContest.unk1920B_2 = 1;
+ if (sub_80AE074())
+ {
+ sub_80AF2FC();
+ sub_80AF3C0();
+ }
+ taskId2 = CreateTask(sub_80C8C80, 0);
+ SetTaskFuncWithFollowupFunc(taskId2, sub_80C8C80, sub_80AD8DC);
+ sub_80AF860();
+ gTasks[taskId].data[0] = 1;
+ }
+ else
+ {
+ sub_80AF2FC();
+ sub_80AF3C0();
+ gTasks[taskId].data[0] = 2;
+ }
+ break;
+ case 1:
+ if (!sContest.unk1920B_2)
+ gTasks[taskId].data[0] = 2;
+ break;
+ case 2:
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80ADA1C;
+ break;
+ }
+}
+
+void sub_80ADA1C(u8 taskId)
+{
+ sub_80B1FD0(FALSE);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].func = sub_80ADA4C;
+}
+
+void sub_80ADA4C(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (++gTasks[taskId].data[1] > 20)
+ {
+ sub_80B25E4(2);
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (!sContest.unk1920B_1)
+ {
+ if (++gTasks[taskId].data[1] > 20)
+ {
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[0]++;
+ }
+ }
+ break;
+ case 2:
+ sub_80AFF10();
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].func = sub_80ADAD8;
+ break;
+ }
+}
+
+void sub_80ADAD8(u8 taskId)
+{
+ if (sub_80AFF28())
+ gTasks[taskId].func = sub_80ADB04;
+}
+
+void sub_80ADB04(u8 taskId)
+{
+ DmaCopy32Defvars(3, shared18000.unk18204, gPlttBufferUnfaded, 0x400);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 2;
+ gTasks[taskId].func = sub_80ADB48;
+}
+
+void sub_80ADB48(u8 taskId)
+{
+ if (++gTasks[taskId].data[0] > 2)
+ {
+ gTasks[taskId].data[0] = 0;
+ if (--gTasks[taskId].data[1] == 0)
+ gTasks[taskId].func = sub_80ADB88;
+ }
+}
+
+void sub_80ADB88(u8 taskId)
+{
+ u8 r4 = sContestantStatus[gContestPlayerMonIndex].attentionLevel;
+
+ sub_80AF138();
+ StringCopy(gStringVar1, gContestMons[gContestPlayerMonIndex].nickname);
+ StringExpandPlaceholders(gStringVar4, gContestStandOutStrings[r4]);
+ sub_8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15);
+ gTasks[taskId].func = sub_80ADC10;
+}
+
+void sub_80ADC10(u8 taskId)
+{
+ if (sub_80037A0(&gMenuWindow) == 1)
+ {
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80ADC4C;
+ sub_80B0D7C();
+ }
+}
+
+void sub_80ADC4C(u8 taskId)
+{
+ if (gTasks[taskId].data[0]++ > 29)
+ {
+ gTasks[taskId].data[0] = 0;
+ sub_80AFF10();
+ gTasks[taskId].func = sub_80ADC84;
+ }
+}
+
+void sub_80ADC84(u8 taskId)
+{
+ if (sub_80AFF28())
+ {
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80ADCB4;
+ }
+}
+
+void sub_80ADCB4(u8 taskId)
+{
+ sub_80B2184();
+ gTasks[taskId].func = sub_80B237C;
+}
+
+void sub_80ADCDC(u8 taskId)
+{
+ sub_80B2280();
+ gTasks[taskId].func = sub_80ADD04;
+}
+
+void sub_80ADD04(u8 taskId)
+{
+ REG_BG0CNT_BITFIELD.priority = 0;
+ REG_BG2CNT_BITFIELD.priority = 0;
+ if (++sContest.turnNumber == 5)
+ {
+ gTasks[taskId].func = sub_80ADDA4;
+ }
+ else
+ {
+ sub_80B1B14();
+ gTasks[taskId].func = sub_80ADD74;
+ }
+}
+
+void sub_80ADD74(u8 taskId)
+{
+ if (!sContest.unk1920A_6)
+ gTasks[taskId].func = sub_80ABB70;
+}
+
+void sub_80ADDA4(u8 taskId)
+{
+ s32 i;
+
+ gUnknown_030042A0 = 0;
+ gUnknown_03004280 = 0;
+ for (i = 0; i < 4; i++)
+ gUnknown_02038680[i] = sContestantStatus[i].unk4;
+ sub_80AF668();
+ sub_80AF138();
+ sub_80BE23C(sContestantStatus[gContestPlayerMonIndex].prevMove);
+ gUnknown_03005D28 = gRngValue;
+ StringExpandPlaceholders(gStringVar4, gUnknown_083CB02C);
+ sub_8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15);
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].func = sub_80ADE54;
+}
+
+void sub_80ADE54(u8 taskId)
+{
+ if (sub_80037A0(&gMenuWindow) == 1)
+ {
+ sub_80B2184();
+ gUnknown_030042C0 = 0;
+ gUnknown_030041B4 = 160;
+ PlaySE12WithPanning(SE_C_MAKU_D, 0);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80ADEAC;
+ }
+}
+
+void sub_80ADEAC(u8 taskId)
+{
+ gUnknown_030041B4 -= 7;
+ if (gUnknown_030041B4 < 0)
+ gUnknown_030041B4 = 0;
+ if (*(u16 *)&gUnknown_030041B4 == 0) // Why cast?
+ {
+ gTasks[taskId].func = sub_80ADEEC;
+ gTasks[taskId].data[0] = 0;
+ }
+}
+
+void sub_80ADEEC(u8 taskId)
+{
+ if (gTasks[taskId].data[0]++ >= 50)
+ {
+ gTasks[taskId].data[0] = 0;
+ if (gIsLinkContest & 1)
+ {
+ gTasks[taskId].func = sub_80ADF4C;
+ }
+ else
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gTasks[taskId].func = sub_80ADFD8;
+ }
+ }
+}
+
+void sub_80ADF4C(u8 taskId)
+{
+ u8 taskId2 = CreateTask(sub_80C8AD0, 0);
+
+ SetTaskFuncWithFollowupFunc(taskId2, sub_80C8AD0, sub_80ADF98);
+ gTasks[taskId].func = nullsub_89;
+ sub_80AF860();
+ sub_80AFFE0(FALSE);
+}
+
+void sub_80ADF98(u8 taskId)
+{
+ DestroyTask(taskId);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gTasks[sContest.mainTaskId].func = sub_80ADFD8;
+}
+
+void sub_80ADFD8(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ DestroyTask(taskId);
+ gFieldCallback = sub_80AE010;
+ SetMainCallback2(c2_exit_to_overworld_2_switch);
+ }
+}
+
+void sub_80AE010(void)
+{
+ // Why disable and re-enable again?
+ ScriptContext2_Disable();
+ EnableBothScriptContexts();
+}
+
+// Expands a one-digit number in the string
+void InsertStringDigit(u8 *str, s32 n)
+{
+ while (1)
+ {
+ if (*str == EOS)
+ break;
+ // Find the EXT_CTRL_CODE_BEGIN, 0 sequence, and place the number there
+ if (*str == EXT_CTRL_CODE_BEGIN && *(str + 1) == 0)
+ {
+ u8 *end;
+
+ end = ConvertIntToDecimalStringN(str, n, STR_CONV_MODE_LEFT_ALIGN, 1);
+ *end = EOS; // ConvertIntToDecimalStringN already does this.
+ StringAppend(end, str + 2); // Shift the rest of the string over.
+ break;
+ }
+ str++;
+ }
+}
+
+void sub_80AE054(void)
+{
+ if (!(gIsLinkContest & 1))
+ gContestPlayerMonIndex = 3;
+}
+
+bool8 sub_80AE074(void)
+{
+ if (gContestPlayerMonIndex == gUnknown_0203869B)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void Contest_CreatePlayerMon(u8 partyIndex)
+{
+ u8 name[20];
+ u16 heldItem;
+ s16 cool;
+ s16 beauty;
+ s16 cute;
+ s16 smart;
+ s16 tough;
+
+ StringCopy(name, gSaveBlock2.playerName);
+ StripExtCtrlCodes(name);
+ if (gIsLinkContest & 1)
+ {
+ u8 temp = name[5];
+
+ name[5] = EOS;
+ name[7] = temp;
+ }
+ memcpy(gContestMons[gContestPlayerMonIndex].trainerName, name, 8);
+ if (gSaveBlock2.playerGender == MALE)
+ gContestMons[gContestPlayerMonIndex].trainerGfxId = MAP_OBJ_GFX_LINK_BRENDAN;
+ else
+ gContestMons[gContestPlayerMonIndex].trainerGfxId = MAP_OBJ_GFX_LINK_MAY;
+ gContestMons[gContestPlayerMonIndex].flags = 0;
+ gContestMons[gContestPlayerMonIndex].unk2C = 0;
+ gContestMons[gContestPlayerMonIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES);
+ GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, name);
+ StringGetEnd10(name);
+ if (gIsLinkContest & 1)
+ {
+ StripExtCtrlCodes(name);
+ if (GetMonData(&gPlayerParty[partyIndex], MON_DATA_LANGUAGE) == LANGUAGE_JAPANESE)
+ {
+ name[5] = EOS;
+ name[10] = EXT_CTRL_CODE_BEGIN;
+ }
+ else
+ {
+ u8 temp = name[5];
+
+ name[5] = EOS;
+ name[10] = temp;
+ }
+ }
+ memcpy(gContestMons[gContestPlayerMonIndex].nickname, name, 11);
+ gContestMons[gContestPlayerMonIndex].cool = GetMonData(&gPlayerParty[partyIndex], MON_DATA_COOL);
+ gContestMons[gContestPlayerMonIndex].beauty = GetMonData(&gPlayerParty[partyIndex], MON_DATA_BEAUTY);
+ gContestMons[gContestPlayerMonIndex].cute = GetMonData(&gPlayerParty[partyIndex], MON_DATA_CUTE);
+ gContestMons[gContestPlayerMonIndex].smart = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SMART);
+ gContestMons[gContestPlayerMonIndex].tough = GetMonData(&gPlayerParty[partyIndex], MON_DATA_TOUGH);
+ gContestMons[gContestPlayerMonIndex].sheen = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SHEEN);
+ gContestMons[gContestPlayerMonIndex].moves[0] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE1);
+ gContestMons[gContestPlayerMonIndex].moves[1] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE2);
+ gContestMons[gContestPlayerMonIndex].moves[2] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE3);
+ gContestMons[gContestPlayerMonIndex].moves[3] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE4);
+ gContestMons[gContestPlayerMonIndex].personality = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PERSONALITY);
+ gContestMons[gContestPlayerMonIndex].otId = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_ID);
+
+ heldItem = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM);
+ cool = gContestMons[gContestPlayerMonIndex].cool;
+ beauty = gContestMons[gContestPlayerMonIndex].beauty;
+ cute = gContestMons[gContestPlayerMonIndex].cute;
+ smart = gContestMons[gContestPlayerMonIndex].smart;
+ tough = gContestMons[gContestPlayerMonIndex].tough;
+ if (heldItem == ITEM_RED_SCARF)
+ cool += 20;
+ else if (heldItem == ITEM_BLUE_SCARF)
+ beauty += 20;
+ else if (heldItem == ITEM_PINK_SCARF)
+ cute += 20;
+ else if (heldItem == ITEM_GREEN_SCARF)
+ smart += 20;
+ else if (heldItem == ITEM_YELLOW_SCARF)
+ tough += 20;
+ if (cool > 255)
+ cool = 255;
+ if (beauty > 255)
+ beauty = 255;
+ if (cute > 255)
+ cute = 255;
+ if (smart > 255)
+ smart = 255;
+ if (tough > 255)
+ tough = 255;
+ gContestMons[gContestPlayerMonIndex].cool = cool;
+ gContestMons[gContestPlayerMonIndex].beauty = beauty;
+ gContestMons[gContestPlayerMonIndex].cute = cute;
+ gContestMons[gContestPlayerMonIndex].smart = smart;
+ gContestMons[gContestPlayerMonIndex].tough = tough;
+}
+
+void Contest_InitAllPokemon(u8 a, u8 b)
+{
+ s32 i;
+ u8 opponentsCount = 0;
+ u8 opponents[64];
+
+ sub_80AE054();
+
+ // Find all suitable opponents
+ for (i = 0; i < 60; i++)
+ {
+ if (b == gContestOpponents[i].unk1C_0)
+ {
+ if (a == 0 && gContestOpponents[i].unk1C_2)
+ opponents[opponentsCount++] = i;
+ else if (a == 1 && gContestOpponents[i].unk1C_3)
+ opponents[opponentsCount++] = i;
+ else if (a == 2 && gContestOpponents[i].unk1C_4)
+ opponents[opponentsCount++] = i;
+ else if (a == 3 && gContestOpponents[i].unk1C_5)
+ opponents[opponentsCount++] = i;
+ else if (a == 4 && gContestOpponents[i].unk1C_6)
+ opponents[opponentsCount++] = i;
+ }
+ }
+ opponents[opponentsCount] = 0xFF;
+
+ // Choose three random opponents from the list
+ for (i = 0; i < 3; i++)
+ {
+ u16 rnd = Random() % opponentsCount;
+ s32 j;
+
+ gContestMons[i] = gContestOpponents[opponents[rnd]];
+ for (j = rnd; opponents[j] != 0xFF; j++)
+ opponents[j] = opponents[j + 1];
+ opponentsCount--;
+ }
+
+#ifndef NONMATCHING
+ // Compiler, please put i in r5. Thanks.
+ asm(""::"r"(i));
+ asm(""::"r"(i));
+ asm(""::"r"(i));
+ asm(""::"r"(i));
+ asm(""::"r"(i));
+#endif
+
+ Contest_CreatePlayerMon(gUnknown_02038694);
+}
+
+// GetContestAvailability?
+u8 sub_80AE47C(struct Pokemon *pkmn)
+{
+ u8 ribbon;
+ u8 retVal;
+
+ if (GetMonData(pkmn, MON_DATA_IS_EGG))
+ return 3;
+ if (GetMonData(pkmn, MON_DATA_HP) == 0)
+ return 4;
+ switch (gSpecialVar_ContestCategory)
+ {
+ case CONTEST_CATEGORY_COOL:
+ ribbon = GetMonData(pkmn, MON_DATA_COOL_RIBBON);
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ ribbon = GetMonData(pkmn, MON_DATA_BEAUTY_RIBBON);
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ ribbon = GetMonData(pkmn, MON_DATA_CUTE_RIBBON);
+ break;
+ case CONTEST_CATEGORY_SMART:
+ ribbon = GetMonData(pkmn, MON_DATA_SMART_RIBBON);
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ ribbon = GetMonData(pkmn, MON_DATA_TOUGH_RIBBON);
+ break;
+ default:
+ return 0;
+ }
+
+ // Couldn't get this to match any other way.
+ // Returns 2, 1, or 0 respectively if ribbon's rank is above, equal, or below
+ // the current contest rank.
+ if (ribbon > gSpecialVar_ContestRank)
+ retVal = 2;
+ else if (ribbon >= gSpecialVar_ContestRank)
+ retVal = 1;
+ else
+ retVal = 0;
+ return retVal;
+}
+
+void sub_80AE514(void)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ FillWindowRect_DefaultPalette(
+ &gUnknown_03004210,
+ 0,
+ gUnknown_083CA308[gUnknown_02038696[i]][0],
+ gUnknown_083CA308[gUnknown_02038696[i]][1],
+ gUnknown_083CA310[gUnknown_02038696[i]][0] + 5,
+ gUnknown_083CA310[gUnknown_02038696[i]][1] + 1);
+ sub_80AE5BC(i);
+ sub_80AE6CC(i);
+ }
+}
+
+u8 *sub_80AE598(u8 *dest, const u8 *b, u8 c)
+{
+ dest = StringCopy(dest, gUnknown_083CC59C);
+ *dest++ = c;
+ dest = StringCopy(dest, b);
+ return dest;
+}
+
+void sub_80AE5BC(u8 a)
+{
+ sub_80AE5D4(a, a + 10);
+}
+
+void sub_80AE5D4(u8 p, u8 b)
+{
+ u8 *str = gDisplayedStringBattle;
+
+ str = sub_80AE598(str, gEmptyString_81E72B0, b);
+ str[0] = EXT_CTRL_CODE_BEGIN;
+ str[1] = 6;
+ str[2] = 4;
+ str += 3;
+
+ *str++ = CHAR_SLASH;
+
+ if ((gIsLinkContest & 1) && gLinkPlayers[p].language == LANGUAGE_JAPANESE)
+ {
+ StringCopy(str, gLinkPlayers[p].name);
+ sub_8004D04(
+ &gUnknown_03004210,
+ gDisplayedStringBattle,
+ 592 + gUnknown_02038696[p] * 22,
+ 251 + gUnknown_083CA310[gUnknown_02038696[p]][0] * 8,
+ gUnknown_083CA310[gUnknown_02038696[p]][1] * 8,
+ 1);
+ }
+ else
+ {
+ StringCopy(str, gContestMons[p].trainerName);
+ sub_8003460(
+ &gUnknown_03004210,
+ gDisplayedStringBattle,
+ 592 + gUnknown_02038696[p] * 22,
+ gUnknown_083CA310[gUnknown_02038696[p]][0],
+ gUnknown_083CA310[gUnknown_02038696[p]][1]);
+ }
+}
+
+void sub_80AE6CC(u8 a)
+{
+ sub_80AE6E4(a, a + 10);
+}
+
+void sub_80AE6E4(u8 a, u8 b)
+{
+ u8 *str = gDisplayedStringBattle;
+
+ str[0] = EXT_CTRL_CODE_BEGIN;
+ str[1] = 6;
+ str[2] = 4;
+ str += 3;
+
+ str = sub_80AE598(str, gContestMons[a].nickname, b);
+ *str = EOS;
+
+ sub_8004D04(
+ &gUnknown_03004210,
+ gDisplayedStringBattle,
+ 512 + gUnknown_02038696[a] * 20,
+ 253 + gUnknown_083CA308[gUnknown_02038696[a]][0] * 8,
+ gUnknown_083CA308[gUnknown_02038696[a]][1] * 8,
+ 1);
+}
+
+u16 sub_80AE770(u8 a, u8 b)
+{
+ u8 r5;
+ u8 r4;
+ u8 r3;
+
+ switch (b)
+ {
+ case 0:
+ r5 = gContestMons[a].cool;
+ r4 = gContestMons[a].tough;
+ r3 = gContestMons[a].beauty;
+ break;
+ case 1:
+ r5 = gContestMons[a].beauty;
+ r4 = gContestMons[a].cool;
+ r3 = gContestMons[a].cute;
+ break;
+ case 2:
+ r5 = gContestMons[a].cute;
+ r4 = gContestMons[a].beauty;
+ r3 = gContestMons[a].smart;
+ break;
+ case 3:
+ r5 = gContestMons[a].smart;
+ r4 = gContestMons[a].cute;
+ r3 = gContestMons[a].tough;
+ break;
+ case 4:
+ default:
+ r5 = gContestMons[a].tough;
+ r4 = gContestMons[a].smart;
+ r3 = gContestMons[a].cool;
+ break;
+ }
+ return r5 + (r4 + r3 + gContestMons[a].sheen) / 2;
+}
+
+void sub_80AE82C(u8 a)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ gUnknown_02038670[i] = sub_80AE770(i, a);
+}
+
+u8 CreateJudgeSprite(void)
+{
+ u8 spriteId;
+
+ LoadCompressedObjectPic(&gUnknown_083CA4BC);
+ LoadCompressedPalette(gContest2Pal, 0x110, 32);
+ spriteId = CreateSprite(&gSpriteTemplate_83CA4A4, 112, 36, 30);
+ gSprites[spriteId].oam.paletteNum = 1;
+ gSprites[spriteId].callback = SpriteCallbackDummy;
+ return spriteId;
+}
+
+u8 sub_80AE8B4(void)
+{
+ u8 spriteId;
+
+ LoadCompressedObjectPic(&gUnknown_083CA4C4);
+ LoadCompressedObjectPalette(&gUnknown_083CA4CC);
+ spriteId = CreateSprite(&gUnknown_083CA4D4, 96, 10, 29);
+ gSprites[spriteId].invisible = TRUE;
+ gSprites[spriteId].data[0] = gSprites[spriteId].oam.tileNum;
+ return spriteId;
+}
+
+u8 unref_sub_80AE908(void)
+{
+ u16 species = gContestMons[gContestPlayerMonIndex].species;
+ u8 spriteId;
+
+ DecompressPicFromTable_2(
+ &gMonFrontPicTable[species],
+ gMonFrontPicCoords[species].coords,
+ gMonFrontPicCoords[species].y_offset,
+ (void *)0x02000000,
+ gUnknown_081FAF4C[1],
+ species);
+ LoadCompressedPalette(gMonPaletteTable[species].data, 0x110, 32);
+ GetMonSpriteTemplate_803C56C(gContestMons[gContestPlayerMonIndex].species, 1);
+ spriteId = CreateSprite(
+ &gUnknown_02024E8C,
+ 112, 80 + (8 - gMonFrontPicCoords[gContestMons[gContestPlayerMonIndex].species].coords) * 4,
+ 30);
+ gSprites[spriteId].oam.paletteNum = 1;
+ gSprites[spriteId].callback = SpriteCallbackDummy;
+ gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7C18;
+ StartSpriteAffineAnim(&gSprites[spriteId], 0);
+ return spriteId;
+}
+
+u8 sub_80AE9FC(u16 species, u32 otId, u32 personality)
+{
+ const u8 *lzPaletteData;
+ u8 spriteId;
+
+ species = SanitizeSpecies(species);
+ HandleLoadSpecialPokePic(
+ &gMonBackPicTable[species],
+ gMonBackPicCoords[species].coords,
+ gMonBackPicCoords[species].y_offset,
+ 0x02000000,
+ gUnknown_081FAF4C[0],
+ species,
+ personality);
+ lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personality);
+ LoadCompressedPalette(lzPaletteData, 0x120, 32);
+ GetMonSpriteTemplate_803C56C(species, 0);
+ spriteId = CreateSprite(&gUnknown_02024E8C, 112, sub_8077E44(2, species, 0), 30);
+ gSprites[spriteId].oam.paletteNum = 2;
+ gSprites[spriteId].oam.priority = 2;
+ gSprites[spriteId].subpriority = sub_8079E90(2);
+ gSprites[spriteId].callback = SpriteCallbackDummy;
+ gSprites[spriteId].data[0] = gSprites[spriteId].oam.paletteNum;
+ gSprites[spriteId].data[2] = species;
+ if (sub_80AEB1C(species))
+ gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7C18;
+ else
+ gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7BEC;
+ StartSpriteAffineAnim(&gSprites[spriteId], 0);
+ return spriteId;
+}
+
+bool8 sub_80AEB1C(u16 species)
+{
+ if (species == SPECIES_UNOWN)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+void sub_80AEB30(void)
+{
+ sub_80AEB4C((void *)(VRAM + 0xC000));
+ sub_80AEB4C((void *)(VRAM + 0xE000));
+}
+
+void sub_80AEB4C(void *a)
+{
+ DmaCopy16Defvars(3, a, (u8 *)a + 0x500, 0x280);
+}
+
+u16 sub_80AEB68(u16 move, u8 b)
+{
+ u16 var;
+
+ switch (gContestEffects[gContestMoves[move].effect].effectType)
+ {
+ case 0:
+ case 1:
+ case 8:
+ var = 0x9082;
+ break;
+ case 2:
+ case 3:
+ var = 0x9088;
+ break;
+ default:
+ var = 0x9086;
+ break;
+ }
+ var += 0x9000 + (b << 12);
+ return var;
+}
+
+void sub_80AEBEC(u16 a)
+{
+ u8 category;
+ u16 categoryTile;
+ s32 i;
+ u8 numHearts;
+
+ FillWindowRect_DefaultPalette(&gUnknown_03004210, 0, 11, 31, 16, 34);
+
+ category = gContestMoves[a].contestCategory;
+ if (category == CONTEST_CATEGORY_COOL)
+ categoryTile = 0x4040;
+ else if (category == CONTEST_CATEGORY_BEAUTY)
+ categoryTile = 0x4045;
+ else if (category == CONTEST_CATEGORY_CUTE)
+ categoryTile = 0x404A;
+ else if (category == CONTEST_CATEGORY_SMART)
+ categoryTile = 0x406A;
+ else
+ categoryTile = 0x408A;
+
+ for (i = 0; i < 5; i++)
+ {
+ *(u16 *)(VRAM + 0xC7D6 + i * 2) = categoryTile;
+ *(u16 *)(VRAM + 0xC816 + i * 2) = categoryTile + 16;
+ categoryTile++;
+ }
+
+ if (gContestEffects[gContestMoves[a].effect].appeal == 0xFF)
+ numHearts = 0;
+ else
+ numHearts = gContestEffects[gContestMoves[a].effect].appeal / 10;
+ if (numHearts > 8)
+ numHearts = 8;
+ for (i = 0; i < 8; i++)
+ {
+ if (i < numHearts)
+ *(u16 *)(VRAM + 0xC7EA + i * 2) = 0x5012;
+ else
+ *(u16 *)(VRAM + 0xC7EA + i * 2) = 0x5035;
+ }
+
+ if (gContestEffects[gContestMoves[a].effect].jam == 0xFF)
+ numHearts = 0;
+ else
+ numHearts = gContestEffects[gContestMoves[a].effect].jam / 10;
+ if (numHearts > 8)
+ numHearts = 8;
+ for (i = 0; i < 8; i++)
+ {
+ if (i < numHearts)
+ *(u16 *)(VRAM + 0xC82A + i * 2) = 0x5014;
+ else
+ *(u16 *)(VRAM + 0xC82A + i * 2) = 0x5036;
+ }
+
+ sub_8003460(&gUnknown_03004210, gContestEffectStrings[gContestMoves[a].effect], 868, 11, 35);
+ sub_8003460(&gUnknown_03004210, gUnknown_083CC5A2, 866, 16, 31);
+}
+
+void sub_80AED58(void)
+{
+ FillWindowRect_DefaultPalette(&gUnknown_03004210, 0, 11, 35, 28, 40);
+}
+
+// unused
+void sub_80AED7C(u16 move, u8 b)
+{
+ u8 r5 = gUnknown_02038696[b] * 5 + 2;
+
+ if (!Contest_IsMonsTurnDisabled(b) && move != MOVE_NONE)
+ {
+ u16 tile = sub_80AEB68(move, b);
+
+ *(u16 *)(VRAM + 0xC028 + r5 * 64) = tile;
+ *(u16 *)(VRAM + 0xC028 + r5 * 64 + 2) = tile + 1;
+
+ *(u16 *)(VRAM + 0xC068 + r5 * 64) = tile + 16;
+ *(u16 *)(VRAM + 0xC068 + r5 * 64 + 2) = tile + 17;
+
+ }
+ else
+ {
+ *(u16 *)(VRAM + 0xC028 + r5 * 64) = 0;
+ *(u16 *)(VRAM + 0xC028 + r5 * 64 + 2) = 0;
+
+ *(u16 *)(VRAM + 0xC068 + r5 * 64) = 0;
+ *(u16 *)(VRAM + 0xC068 + r5 * 64 + 2) = 0;
+ }
+}
+
+void unref_sub_80AEE20(void)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ sub_80AED7C(sContestantStatus[i].currMove, i);
+}
+
+u16 sub_80AEE4C(u8 unused)
+{
+ return 0x2034;
+}
+
+bool8 sub_80AEE54(u8 a, u8 b)
+{
+ u8 r9;
+ u16 r8;
+ s32 r4;
+
+ if (sContestantStatus[a].unk10_4 == 0)
+ return FALSE;
+ r9 = gUnknown_02038696[a] * 5 + 2;
+ if (sContestantStatus[a].unk10_4 == 1)
+ {
+ r8 = sub_80AEE4C(a);
+ r4 = 0;
+ while (sContestantStatus[a].unkD / 10 > r4)
+ {
+ *(u16 *)(VRAM + 0xC026 + (r9 + r4) * 64) = r8;
+ r4++;
+ }
+ if (b != 0)
+ {
+ PlaySE(SE_EXPMAX);
+ sContestantStatus[a].unk10_4 = 0;
+ }
+ }
+ else
+ {
+ r8 = 0;
+ r4 = 3;
+ while (sContestantStatus[a].unkD / 10 < r4)
+ {
+ *(u16 *)(VRAM + 0xBFE6 + (r9 + r4) * 64) = r8;
+ r4--;
+ }
+ if (b != 0)
+ {
+ PlaySE(SE_FU_ZAKU2);
+ sContestantStatus[a].unk10_4 = 0;
+ }
+ }
+ return TRUE;
+}
+
+void sub_80AEF50(void)
+{
+ s32 i;
+ s32 r4;
+
+ for (i = 0; i < 4; i++)
+ {
+ u8 r8 = gUnknown_02038696[i] * 5 + 2;
+ u16 r6 = sub_80AEE4C(i);
+
+ r4 = 0;
+ while (r4 < sContestantStatus[i].unkD / 10)
+ {
+ *(u16 *)(VRAM + 0xC026 + (r8 + r4) * 64) = r6;
+ r4++;
+ }
+ r6 = 0;
+ while (r4 < 3)
+ {
+ *(u16 *)(VRAM + 0xC026 + (r8 + r4) * 64) = r6;
+ r4++;
+ }
+ }
+}
+
+u16 sub_80AEFE8(u8 unused, u8 b)
+{
+ u16 var = 0;
+
+ switch (b)
+ {
+ case 0:
+ var = 0x80;
+ break;
+ case 1:
+ var = 0x84;
+ break;
+ case 2:
+ var = 0x86;
+ break;
+ case 3:
+ var = 0x88;
+ break;
+ case 4:
+ var = 0x82;
+ break;
+ }
+ var += 0x9000;
+ return var;
+}
+
+bool8 sub_80AF038(u8 a)
+{
+ bool8 r5 = TRUE;
+ u16 r4 = 0;
+ u8 r6 = gUnknown_02038696[a] * 5 + 2;
+
+ if (sContestantStatus[a].unk10_0 != 0 || sContestantStatus[a].unk10_1 != 0 || sContestantStatus[a].unk12 != 0 || sContestantStatus[a].unkF != 0)
+ r4 = sub_80AEFE8(a, 0);
+ else if (sContestantStatus[a].unkC_0)
+ r4 = sub_80AEFE8(a, 1);
+ else if (sContestantStatus[a].unkC_1 != 0 || sContestantStatus[a].unkB_7)
+ r4 = sub_80AEFE8(a, 2);
+ else
+ r5 = FALSE;
+ if (r5)
+ {
+ *(u16 *)(VRAM + 0xC028 + r6 * 64) = r4;
+ *(u16 *)(VRAM + 0xC028 + r6 * 64 + 2) = r4 + 1;
+ *(u16 *)(VRAM + 0xC068 + r6 * 64) = r4 + 16;
+ *(u16 *)(VRAM + 0xC068 + r6 * 64 + 2) = r4 + 17;
+ }
+ else
+ {
+ *(u16 *)(VRAM + 0xC028 + r6 * 64) = 0;
+ *(u16 *)(VRAM + 0xC028 + r6 * 64 + 2) = 0;
+ *(u16 *)(VRAM + 0xC068 + r6 * 64) = 0;
+ *(u16 *)(VRAM + 0xC068 + r6 * 64 + 2) = 0;
+ }
+ return r5;
+}
+
+void sub_80AF120(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ sub_80AF038(i);
+}
+
+void sub_80AF138(void)
+{
+ FillWindowRect_DefaultPalette(&gUnknown_03004210, 0, 1, 15, 17, 18);
+}
+
+u16 GetChosenMove(u8 a)
+{
+ if (Contest_IsMonsTurnDisabled(a))
+ return 0;
+ if (a == gContestPlayerMonIndex)
+ {
+ return gContestMons[a].moves[sContest.playerMoveChoice];
+ }
+ else
+ {
+ u8 moveChoice;
+
+ sub_81288F4(a);
+ moveChoice = sub_8128944();
+ return gContestMons[a].moves[moveChoice];
+ }
+}
+
+void sub_80AF1B8(void)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ sContestantStatus[i].currMove = GetChosenMove(i);
+}
+
+void sub_80AF1E4(u8 a, u8 b)
+{
+ u8 r3;
+
+ if (b == 0)
+ r3 = a + 10;
+ else
+ r3 = 14;
+ if (sContestantStatus[a].currMove == MOVE_NONE)
+ sub_80AE598(gDisplayedStringBattle, gUnknownText_MissedTurn, r3);
+ else
+ sub_80AE598(gDisplayedStringBattle, gMoveNames[sContestantStatus[a].currMove], r3);
+ sub_80AF2A0(a);
+ sub_8003460(
+ &gUnknown_03004210,
+ gDisplayedStringBattle,
+ 696 + a * 20,
+ gUnknown_083CA318[a][0],
+ gUnknown_083CA318[a][1]);
+}
+
+void unref_sub_80AF280(u8 a)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ sub_80AF1E4(i, a);
+}
+
+void sub_80AF2A0(u8 a)
+{
+ FillWindowRect_DefaultPalette(
+ &gUnknown_03004210,
+ 0,
+ gUnknown_083CA318[a][0],
+ gUnknown_083CA318[a][1],
+ gUnknown_083CA318[a][0] + 7,
+ gUnknown_083CA318[a][1] + 1);
+}
+
+void unref_sub_80AF2E0(void)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ sub_80AF2A0(i);
+}
+
+void sub_80AF2FC(void)
+{
+ u8 i;
+ u8 j;
+ s16 arr[4];
+
+ for (i = 0; i < 4; i++)
+ {
+ sContestantStatus[i].unk4 += sContestantStatus[i].appeal2;
+ arr[i] = sContestantStatus[i].unk4;
+ }
+ for (i = 0; i < 3; i++)
+ {
+ for (j = 3; j > i; j--)
+ {
+ if (arr[j - 1] < arr[j])
+ {
+ u16 temp = arr[j];
+
+ arr[j] = arr[j - 1];
+ arr[j - 1] = temp;
+ }
+ }
+ }
+ for (i = 0; i < 4; i++)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ if (sContestantStatus[i].unk4 == arr[j])
+ {
+ sContestantStatus[i].unkB_0 = j;
+ break;
+ }
+ }
+ }
+ sub_80B0F28(1);
+ sub_80B159C();
+}
+
+void sub_80AF3C0(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ u8 attentionLevel;
+
+ if (sContestantStatus[i].currMove == MOVE_NONE)
+ attentionLevel = 5;
+ else if (sContestantStatus[i].appeal2 <= 0)
+ attentionLevel = 0;
+ else if (sContestantStatus[i].appeal2 < 30)
+ attentionLevel = 1;
+ else if (sContestantStatus[i].appeal2 < 60)
+ attentionLevel = 2;
+ else if (sContestantStatus[i].appeal2 < 80)
+ attentionLevel = 3;
+ else
+ attentionLevel = 4;
+
+ sContestantStatus[i].attentionLevel = attentionLevel;
+ }
+}
+
+bool8 sub_80AF404(u8 a)
+{
+ if (sContestantStatus[a].unkC_1 != 0 || sContestantStatus[a].unkB_7)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+void sub_80AF438(void)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ // This is bitfield hell...
+ sContestantStatus[i].appeal2 = 0;
+ sContestantStatus[i].appeal1 = 0;
+ sContestantStatus[i].unk12 = 0;
+ if (sContestantStatus[i].unkC_1 > 0)
+ sContestantStatus[i].unkC_1--;
+ sContestantStatus[i].unkE = 0;
+ sContestantStatus[i].unk10_0 = 0;
+ sContestantStatus[i].unkF = 0;
+ sContestantStatus[i].unk10_1 = 0;
+ sContestantStatus[i].unk10_2 = 0;
+ sContestantStatus[i].unk10_3 = 0;
+ sContestantStatus[i].unkC_0 = 0;
+ sContestantStatus[i].unk13 = 0xFF;
+ sContestantStatus[i].unk14 = -1;
+ sContestantStatus[i].unk10_4 = 0;
+ sContestantStatus[i].unk15_2 = sContestantStatus[i].disappointedRepeat;
+ sContestantStatus[i].disappointedRepeat = FALSE;
+ sContestantStatus[i].unk11_0 = 0;
+ sContestantStatus[i].unk11_5 = 0;
+ if (sContestantStatus[i].unk11_2)
+ {
+ sContestantStatus[i].unkC_1 = 1;
+ sContestantStatus[i].unk11_2 = 0;
+ }
+ if (sContestantStatus[i].unk11_3)
+ {
+ sContestantStatus[i].unkB_7 = 1;
+ sContestantStatus[i].unk11_3 = 0;
+ }
+ sContestantStatus[i].unk11_4 = 0;
+ }
+ for (i = 0; i < 4; i++)
+ {
+ sContestantStatus[i].prevMove = sContestantStatus[i].currMove;
+ sContest.unk19220[sContest.turnNumber][i] = sContestantStatus[i].prevMove;
+ sContest.unk19248[sContest.turnNumber][i] = Contest_GetMoveExcitement(sContestantStatus[i].currMove);
+ sContestantStatus[i].currMove = MOVE_NONE;
+ }
+ shared19328.bits_8 = 0;
+}
+
+bool8 Contest_IsMonsTurnDisabled(u8 a)
+{
+ if (sContestantStatus[a].unkC_1 != 0 || sContestantStatus[a].unkB_7)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool8 unref_sub_80AF5D0(u8 a, u8 b)
+{
+ u8 i;
+
+ if (a != gContestPlayerMonIndex)
+ return TRUE;
+ for (i = 0; i < 4; i++)
+ {
+ if (b == 3)
+ {
+ sContest.unk1920A_0 = 1;
+ return TRUE;
+ }
+ if (b == 4)
+ {
+ sContest.unk1920A_1 = 1;
+ return TRUE;
+ }
+ if (sContest.unk19206[i] == b)
+ return TRUE;
+ if (sContest.unk19206[i] == 0xFF)
+ {
+ sContest.unk19206[i] = b;
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+void sub_80AF630(u8 a)
+{
+ gUnknown_02038688[a] = sub_80AF688(a);
+ gUnknown_02038678[a] = gUnknown_02038670[a] + gUnknown_02038688[a];
+}
+
+void sub_80AF668(void)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ sub_80AF630(i);
+ DetermineFinalStandings();
+}
+
+s16 sub_80AF688(u8 a)
+{
+ return gUnknown_02038680[a] * 2;
+}
+
+// Determines standing order?
+void DetermineFinalStandings(void)
+{
+ u16 sp0[4] = {0};
+ struct UnknownContestStruct6 sp8[4];
+ s32 i;
+ s32 j;
+
+ for (i = 0; i < 4; i++)
+ {
+ s32 r2;
+
+ sp0[i] = Random();
+ for (r2 = 0; r2 < i; r2++)
+ {
+ if (sp0[i] == sp0[r2])
+ {
+ i--;
+ break;
+ }
+ }
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ sp8[i].unk0 = gUnknown_02038678[i];
+ sp8[i].unk4 = gUnknown_02038670[i];
+ sp8[i].unk8 = sp0[i];
+ sp8[i].unkC = i;
+ }
+
+ for (i = 0; i < 3; i++)
+ {
+ for (j = 3; j > i; j--)
+ {
+ if (sub_80AF828(j - 1, j, sp8))
+ {
+ struct UnknownContestStruct6 temp;
+
+ temp.unk0 = sp8[j - 1].unk0;
+ temp.unk4 = sp8[j - 1].unk4;
+ temp.unk8 = sp8[j - 1].unk8;
+ temp.unkC = sp8[j - 1].unkC;
+
+ sp8[j - 1].unk0 = sp8[j].unk0;
+ sp8[j - 1].unk4 = sp8[j].unk4;
+ sp8[j - 1].unk8 = sp8[j].unk8;
+ sp8[j - 1].unkC = sp8[j].unkC;
+
+ sp8[j].unk0 = temp.unk0;
+ sp8[j].unk4 = temp.unk4;
+ sp8[j].unk8 = temp.unk8;
+ sp8[j].unkC = temp.unkC;
+ }
+ }
+ }
+
+ for (i = 0; i < 4; i++)
+ gContestFinalStandings[sp8[i].unkC] = i;
+}
+
+bool8 sub_80AF828(s32 a, s32 b, struct UnknownContestStruct6 *c)
+{
+ bool8 retVal;
+
+ if (c[a].unk0 < c[b].unk0)
+ retVal = TRUE;
+ else if (c[a].unk0 > c[b].unk0)
+ retVal = FALSE;
+ else if (c[a].unk4 < c[b].unk4)
+ retVal = TRUE;
+ else if (c[a].unk4 > c[b].unk4)
+ retVal = FALSE;
+ else if (c[a].unk8 < c[b].unk8)
+ retVal = TRUE;
+ else
+ retVal = FALSE;
+ return retVal;
+}
+
+void sub_80AF860(void)
+{
+ gUnknown_030042A0 = 0;
+ gUnknown_03004280 = 0;
+ sub_80AF138();
+ sub_8003460(&gMenuWindow, gUnknownText_LinkStandbyAndWinner, 776, 1, 15);
+}
+
+u8 unref_sub_80AF89C(s16 a, s16 b, u8 c, u8 d)
+{
+ u8 taskId;
+ u8 r5;
+ s8 r4;
+ u16 r0;
+
+ shared19338[d].unk2_2 = 1;
+ taskId = CreateTask(sub_80AF94C, 20);
+ r5 = sub_80AFB74(a);
+ r4 = sub_80AFB74(a + b) - r5;
+ r0 = sub_80AFB40(d);
+ gTasks[taskId].data[0] = r5;
+ gTasks[taskId].data[1] = r4;
+ gTasks[taskId].data[2] = r0 + c;
+ gTasks[taskId].data[3] = d;
+ if (b < 0)
+ nullsub_19(d);
+ return taskId;
+}
+
+void sub_80AF94C(u8 taskId)
+{
+ u8 r5 = gTasks[taskId].data[3];
+
+ if (gTasks[taskId].data[1] == 0)
+ {
+ nullsub_19(r5);
+ DestroyTask(taskId);
+ shared19338[r5].unk2_2 = 0;
+ }
+ else if (++gTasks[taskId].data[10] > 29)
+ {
+ u8 r6;
+
+ gTasks[taskId].data[10] = 0;
+ if (gTasks[taskId].data[1] < 0)
+ {
+ r6 = gTasks[taskId].data[0]--;
+ gTasks[taskId].data[1]++;
+ PlaySE(SE_BOO);
+ }
+ else
+ {
+ r6 = ++gTasks[taskId].data[0];
+ gTasks[taskId].data[1]--;
+ PlaySE(SE_PIN);
+ }
+ if ((u16)gTasks[taskId].data[2] != 0xFFFF)
+ {
+ RequestSpriteCopy(
+ &gTasks[taskId].data[2],
+ (void *)(VRAM + 0xC000 + (147 + r6 + r5 * 160) * 2),
+ 2);
+ }
+ else
+ {
+ u8 i;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (gTasks[taskId].data[i + 4] < 0)
+ {
+ RequestSpriteCopy(
+ &gTasks[taskId].data[i + 7],
+ (void *)(VRAM + 0xC000 + (147 + r6 + r5 * 160) * 2),
+ 2);
+ gTasks[taskId].data[i + 4]++;
+ break;
+ }
+ }
+ }
+ }
+}
+
+void sub_80AFA5C(void)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ DmaClear16(3, (void *)(VRAM + 0xC000 + (86 + i * 160) * 2), 16);
+ DmaClear16(3, (void *)(VRAM + 0xC000 + (118 + i * 160) * 2), 16);
+ }
+}
+
+void unref_sub_80AFAB8(s16 a, u8 b)
+{
+ u8 r5 = sub_80AFB74(a);
+ u16 r2;
+ u8 i;
+ u16 arr[9];
+
+ if (b == 0)
+ r2 = 0x50A2;
+ else if (b == 1)
+ r2 = 0x60A2;
+ else if (b == 2)
+ r2 = 0x70A2;
+ else
+ r2 = 0x80A2;
+
+ for (i = 0; i < 9; i++)
+ {
+ if (i < r5)
+ arr[i] = r2;
+ else
+ arr[i] = 0;
+ }
+
+ DmaCopy16Defvars(3, arr, (void *)(VRAM + 0xC000 + (148 + b * 160) * 2), sizeof(arr));
+}
+
+u16 sub_80AFB40(u8 a)
+{
+ u16 var;
+
+ if (a == 0)
+ var = 0x5011;
+ else if (a == 1)
+ var = 0x6011;
+ else if (a == 2)
+ var = 0x7011;
+ else
+ var = 0x8011;
+ return var + 1;
+}
+
+s8 sub_80AFB74(s16 a)
+{
+ s8 retVal = a / 10;
+
+ if (retVal > 16)
+ retVal = 16;
+ else if (retVal < -16)
+ retVal = -16;
+ return retVal;
+}
+
+u8 sub_80AFBA0(s16 a, s16 b, u8 c)
+{
+ u8 taskId;
+ s8 r4;
+ s8 r5;
+
+ shared19338[c].unk2_2 = 1;
+ taskId = CreateTask(sub_80AFC74, 20);
+ r4 = sub_80AFB74(a);
+ r5 = sub_80AFB74(a + b) - r4;
+ sub_80AFB40(c); // unused return value
+ gTasks[taskId].data[0] = abs(r4);
+ gTasks[taskId].data[1] = r5;
+ if (r4 > 0 || (r4 == 0 && r5 > 0))
+ gTasks[taskId].data[2] = 1;
+ else
+ gTasks[taskId].data[2] = -1;
+ gTasks[taskId].data[3] = c;
+ if (b < 0)
+ nullsub_19(c);
+ return taskId;
+}
+
+void sub_80AFC74(u8 taskId)
+{
+ u8 r7 = gTasks[taskId].data[3];
+ s16 r3 = gTasks[taskId].data[0];
+ s16 r1 = gTasks[taskId].data[1];
+
+ if (++gTasks[taskId].data[10] > 14)
+ {
+ u16 r6;
+ u8 r5;
+ u8 r10;
+
+ gTasks[taskId].data[10] = 0;
+ if (gTasks[taskId].data[1] == 0)
+ {
+ nullsub_19(r7);
+ DestroyTask(taskId);
+ shared19338[r7].unk2_2 = 0;
+ return;
+ }
+ else if (r3 == 0)
+ {
+ if (r1 < 0)
+ {
+ r6 = sub_80AFB40(r7) + 2;
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ r6 = sub_80AFB40(r7);
+ gTasks[taskId].data[1]--;
+ }
+ r5 = gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ if (gTasks[taskId].data[2] < 0)
+ {
+ if (r1 < 0)
+ {
+ r5 = gTasks[taskId].data[0]++;
+ gTasks[taskId].data[1]++;
+ r6 = sub_80AFB40(r7) + 2;
+ }
+ else
+ {
+ r5 = --gTasks[taskId].data[0];
+ r6 = 0;
+ gTasks[taskId].data[1]--;
+ }
+ }
+ else
+ {
+ if (r1 < 0)
+ {
+ r5 = --gTasks[taskId].data[0];
+ r6 = 0;
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ r5 = gTasks[taskId].data[0]++;
+ gTasks[taskId].data[1]--;
+ r6 = sub_80AFB40(r7);
+ }
+ }
+ }
+ r10 = r5;
+ if (r5 > 7)
+ r5 += 24;
+ // Seriously, a 2-byte CpuFill? Why?
+ CpuFill16(r6, (void *)(VRAM + 0xC000 + (0x56 + r5 + gUnknown_02038696[r7] * 160) * 2), 2);
+ if (r1 > 0)
+ {
+ PlaySE(SE_C_GAJI);
+ m4aMPlayImmInit(&gMPlay_SE1);
+ m4aMPlayPitchControl(&gMPlay_SE1, 0xFFFF, r10 * 256);
+ }
+ else
+ {
+ PlaySE(SE_BOO);
+ }
+ if (r5 == 0 && r6 == 0)
+ gTasks[taskId].data[2] = -gTasks[taskId].data[2];
+ }
+}
+
+void sub_80AFE30(void)
+{
+ s32 i;
+
+ LoadSpriteSheet(&gUnknown_083CA350);
+ for (i = 0; i < 4; i++)
+ {
+ u8 y = gUnknown_083CA338[gUnknown_02038696[i]];
+
+ shared19338[i].unk0 = CreateSprite(&gSpriteTemplate_83CA3AC, 180, y, 1);
+ }
+}
+
+void sub_80AFE78(u8 a)
+{
+ u8 spriteId;
+ s16 r5;
+
+ shared19338[a].unk2_0 = 1;
+ spriteId = shared19338[a].unk0;
+ r5 = sContestantStatus[a].unk4 / 10 * 2;
+ if (r5 > 56)
+ r5 = 56;
+ else if (r5 < 0)
+ r5 = 0;
+ gSprites[spriteId].invisible = FALSE;
+ gSprites[spriteId].data[0] = a;
+ gSprites[spriteId].data[1] = r5;
+ if (gSprites[spriteId].data[1] > gSprites[spriteId].pos2.x)
+ gSprites[spriteId].data[2] = 1;
+ else
+ gSprites[spriteId].data[2] = -1;
+ gSprites[spriteId].callback = sub_80AFF60;
+}
+
+void sub_80AFF10(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ sub_80AFE78(i);
+}
+
+bool8 sub_80AFF28(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (shared19338[i].unk2_0)
+ break;
+ }
+ if (i == 4)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void sub_80AFF60(struct Sprite *sprite)
+{
+ if (sprite->pos2.x == sprite->data[1])
+ {
+ shared19338[sprite->data[0]].unk2_0 = 0;
+ sprite->callback = SpriteCallbackDummy;
+ }
+ else
+ {
+ sprite->pos2.x += sprite->data[2];
+ }
+}
+
+void sub_80AFFA0(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ gSprites[shared19338[i].unk0].pos1.y = gUnknown_083CA338[gUnknown_02038696[i]];
+}
+
+void sub_80AFFE0(bool8 a)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (gUnknown_02038696[i] > 1)
+ {
+ if (!a)
+ gSprites[shared19338[i].unk0].pos1.x = 180;
+ else
+ gSprites[shared19338[i].unk0].pos1.x = 256;
+ }
+ }
+}
+
+void sub_80B0034(void)
+{
+ s32 i;
+
+ LoadSpritePalette(&gUnknown_083CA3E4);
+ for (i = 0; i < 4; i++)
+ {
+ LoadCompressedObjectPic(&gUnknown_083CA3C4[i]);
+ shared19338[i].unk1 = CreateSprite(
+ &gSpriteTemplate_83CA3F4[i],
+ 204, gUnknown_083CA33C[gUnknown_02038696[i]],
+ 0);
+ SetSubspriteTables(&gSprites[shared19338[i].unk1], gSubspriteTables_83CA464);
+ gSprites[shared19338[i].unk1].invisible = TRUE;
+ }
+}
+
+void CreateApplauseMeterSprite(void)
+{
+ u8 spriteId;
+
+ LoadCompressedObjectPic(&gUnknown_083CA46C);
+ LoadSpritePalette(&gUnknown_083CA474);
+ spriteId = CreateSprite(&gSpriteTemplate_83CA484, 30, 44, 1);
+ gSprites[spriteId].invisible = TRUE;
+ sContest.applauseMeterSpriteId = spriteId;
+}
+
+void nullsub_18(s8 unused)
+{
+}
+
+void unref_sub_80B011C(void)
+{
+ u8 i;
+
+ LoadCompressedObjectPic(&gUnknown_083CC3AC);
+ for (i = 0; i < 4; i++)
+ LoadCompressedObjectPalette(&gUnknown_083CC3B4[i]);
+ for (i = 0; i < 4; i++)
+ {
+ u8 spriteId = CreateSprite(
+ &gSpriteTemplate_83CC454[i],
+ gUnknown_083CA330[i][0], gUnknown_083CA330[i][1],
+ 5);
+
+ gSprites[spriteId].invisible = TRUE;
+ gSprites[spriteId].data[0] = i;
+ sContest.unk1920D[i] = spriteId;
+ }
+}
+
+void unref_sub_80B01B0(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ gSprites[sContest.unk1920D[i]].callback = sub_80B0238;
+}
+
+bool8 unref_sub_80B01E0(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (gSprites[sContest.unk1920D[i]].callback != SpriteCallbackDummy)
+ break;
+ }
+ if (i == 4)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void sub_80B0238(struct Sprite *sprite)
+{
+ sprite->oam.affineMode = 1;
+ InitSpriteAffineAnim(sprite);
+ if (sprite->invisible)
+ {
+ sprite->callback = sub_80B02A8;
+ }
+ else
+ {
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->callback = sub_80B0280;
+ }
+}
+
+void sub_80B0280(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ {
+ sprite->invisible = TRUE;
+ sprite->callback = sub_80B02A8;
+ }
+}
+
+void sub_80B02A8(struct Sprite *sprite)
+{
+ sprite->invisible = FALSE;
+ StartSpriteAnim(sprite, sContestantStatus[sprite->data[0]].unkB_0);
+ StartSpriteAffineAnim(sprite, 2);
+ sprite->callback = sub_80B02F4;
+ PlaySE(SE_JYUNI);
+}
+
+void sub_80B02F4(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ {
+ FreeSpriteOamMatrix(sprite);
+ sprite->oam.affineMode = 0;
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+void sub_80B0324(void)
+{
+ u8 i;
+ u8 taskId = CreateTask(sub_80B0458, 30);
+
+ sContest.unk19211 = taskId;
+ for (i = 0; i < 4; i++)
+ gTasks[taskId].data[i * 4] = 0xFF;
+}
+
+void sub_80B0368(u8 a)
+{
+ gTasks[sContest.unk19211].data[a * 4 + 0] = 0;
+ gTasks[sContest.unk19211].data[a * 4 + 1] = 0;
+}
+
+void sub_80B03A8(u8 a)
+{
+ u8 taskId = CreateTask(sub_80B03D8, 31);
+
+ gTasks[taskId].data[0] = a;
+}
+
+void sub_80B03D8(u8 taskId)
+{
+ u8 r4 = gTasks[taskId].data[0];
+
+ if (gTasks[sContest.unk19211].data[r4 * 4 + 0] == 0
+ || gTasks[sContest.unk19211].data[r4 * 4 + 0] == 0xFF)
+ {
+ gTasks[sContest.unk19211].data[r4 * 4 + 0] = 0xFF;
+ gTasks[sContest.unk19211].data[r4 * 4 + 1] = 0;
+ BlendPalette((sContest.unk19218[r4] + 5) * 16 + 6, 2, 0, 0x4BFF);
+ DestroyTask(taskId);
+ }
+}
+
+void sub_80B0458(u8 taskId)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ u8 r3 = i * 4;
+
+ if (gTasks[taskId].data[r3 + 0] != 0xFF)
+ {
+ if (gTasks[taskId].data[r3 + 1] == 0)
+ gTasks[taskId].data[r3 + 0]++;
+ else
+ gTasks[taskId].data[r3 + 0]--;
+
+ if (gTasks[taskId].data[r3 + 0] == 16
+ || gTasks[taskId].data[r3 + 0] == 0)
+ gTasks[taskId].data[r3 + 1] ^= 1;
+
+ BlendPalette(
+ (sContest.unk19218[i] + 5) * 16 + 6,
+ 2,
+ gTasks[taskId].data[r3 + 0],
+ 0x4BFF);
+ }
+ }
+}
+
+void sub_80B0518(void)
+{
+ u8 i;
+
+ sContest.unk19212 = CreateTask(sub_80B05FC, 30);
+ for (i = 0; i < 4; i++)
+ sub_80B0548(i);
+}
+
+void sub_80B0548(u8 a)
+{
+ gTasks[sContest.unk19212].data[a * 4 + 0] = 0xFF;
+ gTasks[sContest.unk19212].data[a * 4 + 1] = 0;
+}
+
+void sub_80B0588(void)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ sub_80B05A4(i);
+}
+
+// TODO: Try to write this better
+void sub_80B05A4(u8 a)
+{
+ u32 var;
+ u32 r0;
+
+ sub_80B0548(a);
+
+ // 2-byte DMA copy? Why?
+
+ r0 = a + 5;
+ DmaCopy16Defvars(
+ 3,
+ gPlttBufferUnfaded + r0 * 16 + 10,
+ gPlttBufferFaded + r0 * 16 + 10,
+ 2);
+
+ var = (a + 5) * 16 + 12 + a;
+ DmaCopy16Defvars(
+ 3,
+ gPlttBufferUnfaded + var,
+ gPlttBufferFaded + var,
+ 2);
+}
+
+void nullsub_19(int unused)
+{
+}
+
+void sub_80B05FC(u8 taskId)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ u8 r3 = i * 4;
+
+ if (gTasks[taskId].data[r3 + 0] != 0xFF)
+ {
+ if (++gTasks[taskId].data[r3 + 2] > 2)
+ {
+ gTasks[taskId].data[r3 + 2] = 0;
+
+ if (gTasks[taskId].data[r3 + 1] == 0)
+ gTasks[taskId].data[r3 + 0]++;
+ else
+ gTasks[taskId].data[r3 + 0]--;
+
+ if (gTasks[taskId].data[r3 + 0] == 16
+ || gTasks[taskId].data[r3 + 0] == 0)
+ gTasks[taskId].data[r3 + 1] ^= 1;
+
+ BlendPalette((i + 5) * 16 + 10, 1, gTasks[taskId].data[r3 + 0], 0x4BFF);
+ BlendPalette((i + 5) * 16 + 12 + i, 1, gTasks[taskId].data[r3 + 0], 0x4BFF);
+ }
+ }
+ }
+}
+
+u8 unref_sub_80B06E0(u8 *a)
+{
+ u8 i;
+ u8 taskId = CreateTask(sub_80B0748, 10);
+
+ for (i = 0; i < 4; i++)
+ {
+ u8 r0 = i * 4;
+
+ gTasks[taskId].data[r0] = a[i];
+ if (a[i] != 0)
+ shared19338[i].unk2_1 = 1;
+ }
+ return taskId;
+}
+
+#ifdef NONMATCHING
+void sub_80B0748(u8 taskId)
+{
+ u8 i;
+ u8 r4_2;
+ u8 r1;
+ u8 r7;
+
+ for (i = 0; i < 4; i++)
+ {
+ //#define r4 r4_2
+ r4 = gUnknown_02038696[i];
+ r1 = r4 * 4;
+ r7 = gTasks[taskId].data[r1 + 0];
+
+ if (r7 != 0)
+ {
+ //_080B079C
+ u8 r8 = gTasks[taskId].data[r1 + 1];
+ u8 r5 = gTasks[taskId].data[r1 + 2];
+ u8 r6 = gTasks[taskId].data[r1 + 3];
+
+ if (r7 == 1)
+ {
+ r6++;
+ if (r6 == 1)
+ {
+ //_080B07D2
+ r6 = 0;
+ BlendPalette((r4 + 5) * 16 + 1, 3, r5, 0x7FFF);
+ if (r5 == 0 && r8 == 4)
+ {
+ gTasks[taskId].data[r1 + 0] = 0;
+ //asm("");
+ }
+ //_080B0800
+ else
+ {
+ r5 += 2;
+ if (r5 > 13)
+ {
+ r5 = 0;
+ r8++;
+ }
+ }
+ }
+ //to _080B08EA
+ }
+ //_080B0818
+ else if (r7 == 2 || r7 == 4)
+ {
+ r6++;
+ if (r6 == 3)
+ {
+ r6 = 0;
+ BlendPalette((r4 + 5) * 16 + 1, 3, r5, gUnknown_083CC5A4[r4]);
+ if (r5 == 0 && r8 == 2)
+ {
+ gTasks[taskId].data[r1 + 0] = 0;
+ }
+ //_080B0858
+ else
+ {
+ r5 += 1;
+ if (r5 == 14)
+ {
+ r5 = 0;
+ r8++;
+ if (r7 == 4 && r8 == 1)
+ {
+ BlendPalette((r4 + 9) * 16 + 2, 1, 4, 0);
+ BlendPalette((r4 + 9) * 16 + 5, 1, 4, 0);
+ }
+ }
+ }
+ }
+ //to _080B08EA
+ }
+ //_080B0896
+ else if (r7 == 3)
+ {
+ r6++;
+ if (r6 == 12)
+ {
+ r6 = 0;
+ BlendPalette((r4 + 5) * 16 + 1, 3, r5, 0);
+ r5 += 1;
+ if (r5 == 5)
+ {
+ // What the hell? These aren't pointers.
+ // This code would crash if run.
+ {
+ void *src = (void *)(u32)gPlttBufferFaded[(r4 + 5) * 16 + 1];
+ void *dest = (void *)(u32)gPlttBufferUnfaded[(r4 + 5) * 16 + 1];
+ u32 size = 6;
+ DmaCopy16(3, src, dest, size);
+ }
+ gTasks[taskId].data[r1 + 0] = 0;
+ }
+ }
+ }
+ //_080B08EA
+ gTasks[taskId].data[r1 + 1] = r8;
+ gTasks[taskId].data[r1 + 2] = r5;
+ gTasks[taskId].data[r1 + 3] = r6;
+ }
+ //_080B0910
+ }
+ //_080B0920
+
+ #define i r4_2
+ for (i = 0; i < 4; i++) // r4 is i
+ {
+ if (gTasks[taskId].data[i * 4 + 0] != 0)
+ break;
+ }
+ //_080B0958
+ if (i == 4)
+ {
+ for (i = 0; i < 4; i++)
+ shared19338[i].unk2_2 = 0;
+ DestroyTask(taskId);
+ }
+ #undef i
+}
+#else
+__attribute__((naked))
+void sub_80B0748(u8 taskId)
+{
+ asm(".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, 0x20\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp]\n\
+ movs r0, 0\n\
+ str r0, [sp, 0x4]\n\
+ ldr r2, _080B07F4 @ =gTasks\n\
+ movs r1, 0x8\n\
+ adds r1, r2\n\
+ mov r10, r1\n\
+ ldr r3, [sp]\n\
+ lsls r3, 2\n\
+ str r3, [sp, 0x1C]\n\
+ ldr r1, [sp]\n\
+ adds r0, r3, r1\n\
+ lsls r0, 3\n\
+ str r0, [sp, 0xC]\n\
+_080B0774:\n\
+ ldr r0, _080B07F8 @ =gUnknown_02038696\n\
+ ldr r3, [sp, 0x4]\n\
+ adds r0, r3, r0\n\
+ ldrb r4, [r0]\n\
+ lsls r0, r4, 26\n\
+ lsrs r1, r0, 24\n\
+ lsls r0, r1, 1\n\
+ str r0, [sp, 0x8]\n\
+ ldr r3, [sp]\n\
+ lsls r0, r3, 2\n\
+ adds r0, r3\n\
+ lsls r6, r0, 3\n\
+ ldr r3, [sp, 0x8]\n\
+ adds r0, r3, r6\n\
+ add r0, r10\n\
+ mov r9, r0\n\
+ ldrb r7, [r0]\n\
+ cmp r7, 0\n\
+ bne _080B079C\n\
+ b _080B0910\n\
+_080B079C:\n\
+ adds r3, r1, 0x1\n\
+ lsls r0, r3, 1\n\
+ adds r0, r6\n\
+ add r0, r10\n\
+ ldrb r0, [r0]\n\
+ mov r8, r0\n\
+ adds r2, r1, 0x2\n\
+ lsls r0, r2, 1\n\
+ adds r0, r6\n\
+ add r0, r10\n\
+ ldrb r5, [r0]\n\
+ adds r1, 0x3\n\
+ lsls r0, r1, 1\n\
+ adds r0, r6\n\
+ add r0, r10\n\
+ ldrb r6, [r0]\n\
+ str r3, [sp, 0x10]\n\
+ str r2, [sp, 0x14]\n\
+ str r1, [sp, 0x18]\n\
+ cmp r7, 0x1\n\
+ bne _080B0818\n\
+ adds r0, r6, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ cmp r6, 0x1\n\
+ beq _080B07D2\n\
+ b _080B08EA\n\
+_080B07D2:\n\
+ movs r6, 0\n\
+ adds r0, r4, 0x5\n\
+ lsls r0, 4\n\
+ adds r0, 0x1\n\
+ movs r1, 0x3\n\
+ adds r2, r5, 0\n\
+ ldr r3, _080B07FC @ =0x00007fff\n\
+ bl BlendPalette\n\
+ cmp r5, 0\n\
+ bne _080B0800\n\
+ mov r0, r8\n\
+ cmp r0, 0x4\n\
+ bne _080B0800\n\
+ mov r1, r9\n\
+ strh r6, [r1]\n\
+ b _080B08EA\n\
+ .align 2, 0\n\
+_080B07F4: .4byte gTasks\n\
+_080B07F8: .4byte gUnknown_02038696\n\
+_080B07FC: .4byte 0x00007fff\n\
+_080B0800:\n\
+ adds r0, r5, 0x2\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ cmp r5, 0xD\n\
+ bls _080B08EA\n\
+ movs r5, 0\n\
+ mov r0, r8\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ b _080B08EA\n\
+_080B0818:\n\
+ cmp r7, 0x2\n\
+ beq _080B0820\n\
+ cmp r7, 0x4\n\
+ bne _080B0896\n\
+_080B0820:\n\
+ adds r0, r6, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ cmp r6, 0x3\n\
+ bne _080B08EA\n\
+ movs r6, 0\n\
+ adds r0, r4, 0x5\n\
+ lsls r0, 4\n\
+ adds r0, 0x1\n\
+ ldr r2, _080B0854 @ =gUnknown_083CC5A4\n\
+ lsls r1, r4, 1\n\
+ adds r1, r2\n\
+ ldrh r3, [r1]\n\
+ movs r1, 0x3\n\
+ adds r2, r5, 0\n\
+ bl BlendPalette\n\
+ cmp r5, 0\n\
+ bne _080B0858\n\
+ mov r2, r8\n\
+ cmp r2, 0x2\n\
+ bne _080B0858\n\
+ mov r3, r9\n\
+ strh r6, [r3]\n\
+ b _080B08EA\n\
+ .align 2, 0\n\
+_080B0854: .4byte gUnknown_083CC5A4\n\
+_080B0858:\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ cmp r5, 0xE\n\
+ bne _080B08EA\n\
+ movs r5, 0\n\
+ mov r0, r8\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ cmp r7, 0x4\n\
+ bne _080B08EA\n\
+ cmp r0, 0x1\n\
+ bne _080B08EA\n\
+ adds r4, 0x9\n\
+ lsls r4, 4\n\
+ adds r0, r4, 0x2\n\
+ movs r1, 0x1\n\
+ movs r2, 0x4\n\
+ movs r3, 0\n\
+ bl BlendPalette\n\
+ adds r4, 0x5\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x1\n\
+ movs r2, 0x4\n\
+ movs r3, 0\n\
+ bl BlendPalette\n\
+ b _080B08EA\n\
+_080B0896:\n\
+ cmp r7, 0x3\n\
+ bne _080B08EA\n\
+ adds r0, r6, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ cmp r6, 0xC\n\
+ bne _080B08EA\n\
+ movs r6, 0\n\
+ adds r0, r4, 0x5\n\
+ lsls r0, 4\n\
+ adds r4, r0, 0x1\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x3\n\
+ adds r2, r5, 0\n\
+ movs r3, 0\n\
+ bl BlendPalette\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ cmp r5, 0x5\n\
+ bne _080B08EA\n\
+ ldr r0, _080B0930 @ =gPlttBufferFaded\n\
+ lsls r1, r4, 1\n\
+ adds r0, r1, r0\n\
+ ldrh r2, [r0]\n\
+ ldr r0, _080B0934 @ =gPlttBufferUnfaded\n\
+ adds r1, r0\n\
+ ldrh r0, [r1]\n\
+ ldr r1, _080B0938 @ =0x040000d4\n\
+ str r2, [r1]\n\
+ str r0, [r1, 0x4]\n\
+ movs r0, 0x80\n\
+ lsls r0, 24\n\
+ orrs r7, r0\n\
+ str r7, [r1, 0x8]\n\
+ ldr r0, [r1, 0x8]\n\
+ ldr r1, [sp, 0x8]\n\
+ ldr r2, [sp, 0xC]\n\
+ adds r0, r1, r2\n\
+ add r0, r10\n\
+ strh r6, [r0]\n\
+_080B08EA:\n\
+ ldr r3, [sp, 0x10]\n\
+ lsls r0, r3, 1\n\
+ ldr r1, [sp, 0xC]\n\
+ adds r0, r1\n\
+ add r0, r10\n\
+ mov r2, r8\n\
+ strh r2, [r0]\n\
+ ldr r3, [sp, 0x14]\n\
+ lsls r0, r3, 1\n\
+ adds r0, r1\n\
+ add r0, r10\n\
+ strh r5, [r0]\n\
+ ldr r1, [sp, 0x18]\n\
+ lsls r0, r1, 1\n\
+ ldr r2, [sp, 0xC]\n\
+ adds r0, r2\n\
+ add r0, r10\n\
+ strh r6, [r0]\n\
+ ldr r2, _080B093C @ =gTasks\n\
+_080B0910:\n\
+ ldr r0, [sp, 0x4]\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x4]\n\
+ cmp r0, 0x3\n\
+ bhi _080B0920\n\
+ b _080B0774\n\
+_080B0920:\n\
+ movs r4, 0\n\
+ ldr r3, [sp, 0x1C]\n\
+ ldr r1, [sp]\n\
+ adds r0, r3, r1\n\
+ lsls r1, r0, 3\n\
+ adds r2, 0x8\n\
+ adds r0, r1, r2\n\
+ b _080B0950\n\
+ .align 2, 0\n\
+_080B0930: .4byte gPlttBufferFaded\n\
+_080B0934: .4byte gPlttBufferUnfaded\n\
+_080B0938: .4byte 0x040000d4\n\
+_080B093C: .4byte gTasks\n\
+_080B0940:\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0x3\n\
+ bhi _080B0958\n\
+ lsls r0, r4, 3\n\
+ adds r0, r1\n\
+ adds r0, r2\n\
+_080B0950:\n\
+ movs r3, 0\n\
+ ldrsh r0, [r0, r3]\n\
+ cmp r0, 0\n\
+ beq _080B0940\n\
+_080B0958:\n\
+ cmp r4, 0x4\n\
+ bne _080B0980\n\
+ movs r4, 0\n\
+ ldr r3, _080B0990 @ =gSharedMem + 0x19338\n\
+ movs r5, 0x3\n\
+ negs r5, r5\n\
+_080B0964:\n\
+ lsls r1, r4, 2\n\
+ adds r1, r3\n\
+ ldrb r2, [r1, 0x2]\n\
+ adds r0, r5, 0\n\
+ ands r0, r2\n\
+ strb r0, [r1, 0x2]\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0x3\n\
+ bls _080B0964\n\
+ ldr r0, [sp]\n\
+ bl DestroyTask\n\
+_080B0980:\n\
+ add sp, 0x20\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\
+ .align 2, 0\n\
+_080B0990: .4byte gSharedMem + 0x19338\n\
+ .syntax divided\n");
+}
+#endif
+
+void unref_sub_80B0994(u8 a)
+{
+ if (a != 0)
+ sContest.unk1920A_2 = 1;
+}
+
+void sub_80B09B0(u8 a)
+{
+ if (sContestantStatus[a].unk15_4)
+ sub_80B0368(a);
+ else
+ sub_80B03A8(a);
+}
+
+extern const struct CompressedSpriteSheet gUnknown_083CC4B4[];
+extern const struct SpritePalette gUnknown_083CC4D4[];
+extern const struct SpriteTemplate gSpriteTemplate_83CC53C[];
+
+u8 sub_80B09E4(u8 a)
+{
+ u8 r5 = gUnknown_02038696[a] * 40 + 32;
+ u8 r8;
+ u8 r6;
+ volatile u8 zero;
+
+ LoadCompressedObjectPic(&gUnknown_083CC4B4[a]);
+ LoadSpritePalette(&gUnknown_083CC4D4[a]);
+ r8 = CreateSprite(&gSpriteTemplate_83CC53C[a], 184, r5, 29);
+ r6 = CreateSprite(&gSpriteTemplate_83CC53C[a], 248, r5, 29);
+ gSprites[r6].oam.tileNum += 64;
+
+ CopySpriteTiles(0, 3, (void *)VRAM, (u16 *)(VRAM + 0xE000 + gUnknown_02038696[a] * 5 * 64 + 0x26), (u8 *)(VRAM + 0x10000 + gSprites[r8].oam.tileNum * 32));
+ CopySpriteTiles(0, 3, (void *)VRAM, (u16 *)(VRAM + 0xE000 + gUnknown_02038696[a] * 5 * 64 + 0x36), (u8 *)(VRAM + 0x10000 + gSprites[r6].oam.tileNum * 32));
+
+ {
+ void *dest = (void *)(VRAM + 0x10000 + (0x28 + gSprites[r8].oam.tileNum) * 32);
+ u32 size = 0x300;
+ DmaFill32(3, 0, dest, size);
+ }
+
+ // What is this?
+ zero = 0;
+ zero = 0;
+
+ {
+ void *dest = (void *)(VRAM + 0x10000 + (0x28 + gSprites[r6].oam.tileNum) * 32);
+ u32 size = 0x300;
+ DmaFill32(3, 0, dest, size);
+ }
+
+ gSprites[r8].data[0] = r6;
+ gSprites[r6].data[0] = r8;
+ gSprites[r8].data[1] = a;
+ gSprites[r6].data[1] = a;
+ return r8;
+}
+
+void sub_80B0B5C(u8 spriteId)
+{
+ u8 spriteId2 = gSprites[spriteId].data[0];
+
+ FreeSpriteOamMatrix(&gSprites[spriteId2]);
+ DestroySprite(&gSprites[spriteId2]);
+ DestroySpriteAndFreeResources(&gSprites[spriteId]);
+}
+
+void sub_80B0B98(void)
+{
+ REG_BLDCNT = 0x3F40;
+ REG_BLDALPHA = 0x0907;
+}
+
+void sub_80B0BB4(void)
+{
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+}
+
+void sub_80B0BC4(u8 a, bool8 b)
+{
+ u8 r5;
+
+ sub_80B0B98();
+ shared19338[gSprites[a].data[1]].unk2_1 = 1;
+ r5 = gSprites[a].data[0];
+ StartSpriteAffineAnim(&gSprites[a], 1);
+ StartSpriteAffineAnim(&gSprites[r5], 1);
+ gSprites[a].callback = sub_80B0C5C;
+ gSprites[r5].callback = SpriteCallbackDummy;
+ if (b == FALSE)
+ PlaySE(SE_C_PIKON);
+ else
+ PlaySE(SE_PC_LOGON);
+}
+
+void sub_80B0C5C(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ {
+ u8 r1 = sprite->data[0];
+
+ if (gSprites[r1].affineAnimEnded)
+ {
+ sprite->invisible = TRUE;
+ gSprites[r1].invisible = TRUE;
+ sprite->callback = sub_80B0CB0;
+ }
+ }
+}
+
+void sub_80B0CB0(struct Sprite *sprite)
+{
+ shared19338[sprite->data[1]].unk2_1 = 0;
+ sub_80B0B5C(sprite->data[0]);
+ sub_80B0BB4();
+}
+
+void sub_80B0CDC(u8 a, int unused)
+{
+ shared19338[a].unk2_1 = 0;
+}
+
+void unref_sub_80B0CF4(void)
+{
+ //shared18000.unk18000 ^= 1;
+ gSharedMem[0x18000] ^= 1;
+ //if (shared18000.unk18000 == 0)
+ if (gSharedMem[0x18000] == 0)
+ {
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ FillWindowRect_DefaultPalette(
+ &gUnknown_03004210,
+ 0,
+ gUnknown_083CA308[i][0],
+ gUnknown_083CA308[i][1],
+ gUnknown_083CA310[i][0] + 5,
+ gUnknown_083CA310[i][1] + 1);
+ }
+ sub_80AE514();
+ sub_80AEB30();
+ }
+ else
+ {
+ sub_80B0D7C();
+ }
+}
+
+void sub_80B0D7C(void)
+{
+ u8 r5 = 0;
+ u8 sp8[8];
+
+ if (gSharedMem[0x18000] != 0)
+ {
+ u8 i;
+ s16 r2;
+
+ for (i = 0; i < 4; i++)
+ {
+ FillWindowRect_DefaultPalette(
+ &gUnknown_03004210,
+ 0,
+ gUnknown_083CA308[i][0],
+ gUnknown_083CA308[i][1],
+ gUnknown_083CA310[i][0] + 5,
+ gUnknown_083CA310[i][1] + 1);
+ }
+ for (i = 0; i < 4; i++)
+ {
+ r2 = sContestantStatus[i].unk4;
+ if (r2 < 0)
+ {
+ r2 = -r2;
+ sp8[0] = CHAR_HYPHEN;
+ r5++;
+ }
+ ConvertIntToDecimalStringN(sp8 + r5, r2, 0, 4);
+ sub_8003460(
+ &gUnknown_03004210,
+ sp8,
+ 592 + gUnknown_02038696[i] * 22,
+ gUnknown_083CA310[gUnknown_02038696[i]][0],
+ gUnknown_083CA310[gUnknown_02038696[i]][1]);
+ r5 = 0;
+ }
+ for (i = 0; i < 4; i++)
+ {
+ r2 = sContestantStatus[i].appeal2;
+ if (r2 < 0)
+ {
+ r2 = -r2;
+ sp8[0] = CHAR_HYPHEN;
+ r5++;
+ }
+ ConvertIntToDecimalStringN(sp8 + r5, r2, 0, 4);
+ sub_8003460(
+ &gUnknown_03004210,
+ sp8,
+ 512 + gUnknown_02038696[i] * 20,
+ gUnknown_083CA308[gUnknown_02038696[i]][0],
+ gUnknown_083CA308[gUnknown_02038696[i]][1]);
+ r5 = 0;
+ }
+ sub_80AEB30();
+ }
+}
+
+void unref_sub_80B0EE8(s32 *a, s32 b)
+{
+ s32 i;
+ s32 j;
+
+ for (i = 0; i < b - 1; i++)
+ {
+ for (j = b - 1; j > i; j--)
+ {
+ if (a[j - 1] > a[j])
+ {
+ s32 temp = a[j];
+
+ a[j] = a[j - 1];
+ a[j - 1] = temp;
+ }
+ }
+ }
+}
+
+// something to do with contest NPC opponents, I think.
+void sub_80B0F28(u8 a)
+{
+ u8 sp0[4];
+ u16 sp4[4] = {0};
+ s32 i;
+ s32 r2;
+ s32 r4;
+
+ for (i = 0; i < 4; i++)
+ {
+ sp4[i] = Random();
+ for (r2 = 0; r2 < i; r2++)
+ {
+ if (sp4[i] == sp4[r2])
+ {
+ i--;
+ break;
+ }
+ }
+ }
+
+ if (a == 0)
+ {
+ for (i = 0; i < 4; i++)
+ {
+ gUnknown_02038696[i] = i;
+ for (r4 = 0; r4 < i; r4++)
+ {
+ if (gUnknown_02038670[gUnknown_02038696[r4]] < gUnknown_02038670[i]
+ || (gUnknown_02038670[gUnknown_02038696[r4]] == gUnknown_02038670[i] && sp4[gUnknown_02038696[r4]] < sp4[i]))
+ {
+ for (r2 = i; r2 > r4; r2--)
+ gUnknown_02038696[r2] = gUnknown_02038696[r2 - 1];
+ gUnknown_02038696[r4] = i;
+ break;
+ }
+ }
+ if (r4 == i)
+ gUnknown_02038696[i] = i;
+ }
+ memcpy(sp0, gUnknown_02038696, sizeof(sp0));
+ for (i = 0; i < 4; i++)
+ gUnknown_02038696[sp0[i]] = i;
+ }
+ else
+ {
+ memset(sp0, 0xFF, sizeof(sp0));
+ for (i = 0; i < 4; i++)
+ {
+ u8 r2 = sContestantStatus[i].unkB_0;
+
+ while (1)
+ {
+ u8 *ptr = &sp0[r2];
+ if (*ptr == 0xFF)
+ {
+ *ptr = i;
+ gUnknown_02038696[i] = r2;
+ break;
+ }
+ r2++;
+ }
+ }
+ for (i = 0; i < 3; i++)
+ {
+ for (r4 = 3; r4 > i; r4--)
+ {
+ if (sContestantStatus[r4 - 1].unkB_0 == sContestantStatus[r4].unkB_0
+ && gUnknown_02038696[r4 - 1] < gUnknown_02038696[r4]
+ && sp4[r4 - 1] < sp4[r4])
+ {
+ u8 temp = gUnknown_02038696[r4];
+
+ gUnknown_02038696[r4] = gUnknown_02038696[r4 - 1];
+ gUnknown_02038696[r4 - 1] = temp;
+ }
+ }
+ }
+ }
+}
+
+void sub_80B1118(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ //LoadPalette(shared18000.unk18004[5 + i], (gUnknown_02038696[i] + 5) * 16, 32);
+ LoadPalette(shared18004 + (i + 5) * 16, (gUnknown_02038696[i] + 5) * 16, 32);
+ }
+ sub_80AE514();
+}
+
+void sub_80B114C(u8 contestant)
+{
+ bool8 r8;
+ s32 i;
+
+ sContestantStatus[contestant].appeal2 = 0;
+ sContestantStatus[contestant].appeal1 = 0;
+ r8 = sub_80AF404(contestant);
+ if (r8)
+ {
+ u16 move = sContestantStatus[contestant].currMove;
+ u8 effect = gContestMoves[move].effect;
+ u8 rnd;
+
+ sContestantStatus[contestant].moveCategory = gContestMoves[sContestantStatus[contestant].currMove].contestCategory;
+ if (sContestantStatus[contestant].currMove == sContestantStatus[contestant].prevMove && sContestantStatus[contestant].currMove != MOVE_NONE)
+ {
+ sContestantStatus[contestant].disappointedRepeat = TRUE;
+ sContestantStatus[contestant].moveRepeatCount++;
+ }
+ else
+ {
+ sContestantStatus[contestant].moveRepeatCount = 0;
+ }
+ sContestantStatus[contestant].appeal1 = gContestEffects[effect].appeal;
+ sContestantStatus[contestant].appeal2 = gContestEffects[effect].appeal;
+ shared192D0_.unk4 = gContestEffects[effect].jam;
+ shared192D0_.unk6 = gContestEffects[effect].jam;
+ shared192D0_.unk11 = contestant;
+ for (i = 0; i < 4; i++)
+ {
+ sContestantStatus[i].unkE = 0;
+ shared192D0_.unkD[i] = 0;
+ }
+ if (sContestantStatus[contestant].unk15_4 && AreMovesContestCombo(sContestantStatus[contestant].prevMove, sContestantStatus[contestant].currMove) == 0)
+ sContestantStatus[contestant].unk15_4 = 0;
+ gContestEffectFuncs[effect]();
+ if (sContestantStatus[contestant].unk10_4 == 1)
+ sContestantStatus[contestant].appeal2 += sContestantStatus[contestant].unkD - 10;
+ else if (sContestantStatus[contestant].unk11_5)
+ sContestantStatus[contestant].appeal2 += sContestantStatus[contestant].unkD * 3;
+ else
+ sContestantStatus[contestant].appeal2 += sContestantStatus[contestant].unkD;
+ sContestantStatus[contestant].unk16 = 0;
+ sContestantStatus[contestant].unk15_6 = 0;
+ if (sub_80B214C(contestant))
+ {
+ u8 r2 = AreMovesContestCombo(sContestantStatus[contestant].prevMove, sContestantStatus[contestant].currMove);
+
+ if (r2 != 0 && sContestantStatus[contestant].unk15_4)
+ {
+ sContestantStatus[contestant].unk16 = r2;
+ sContestantStatus[contestant].unk15_6 = 1;
+ sContestantStatus[contestant].unk15_4 = 0;
+ sContestantStatus[contestant].unk17 = sContestantStatus[contestant].appeal1 * sContestantStatus[contestant].unk16;
+ sContestantStatus[contestant].unk15_3 = 1;
+ }
+ else
+ {
+ if (gContestMoves[sContestantStatus[contestant].currMove].comboStarterId != 0)
+ {
+ sContestantStatus[contestant].unk15_4 = 1;
+ sContestantStatus[contestant].unk15_6 = 1;
+ }
+ else
+ {
+ sContestantStatus[contestant].unk15_4 = 0;
+ }
+ }
+ }
+ if (sContestantStatus[contestant].disappointedRepeat)
+ sContestantStatus[contestant].unk18 = (sContestantStatus[contestant].moveRepeatCount + 1) * 10;
+ if (sContestantStatus[contestant].unkC_0)
+ {
+ sContestantStatus[contestant].unk15_4 = 0;
+ sContestantStatus[contestant].appeal2 = 0;
+ sContestantStatus[contestant].appeal1 = 0;
+ }
+ shared19328.bits_0 = Contest_GetMoveExcitement(sContestantStatus[contestant].currMove);
+ if (sContestantStatus[contestant].unk11_4)
+ shared19328.bits_0 = 1;
+ if (shared19328.bits_0 > 0)
+ {
+ if (sContest.applauseLevel + shared19328.bits_0 > 4)
+ shared19328.unk2 = 60;
+ else
+ shared19328.unk2 = 10;
+ }
+ else
+ {
+ shared19328.unk2 = 0;
+ }
+
+ rnd = Random() % 3;
+ for (i = 0; i < 4; i++)
+ {
+ if (i != contestant)
+ {
+ if (rnd == 0)
+ break;
+ rnd--;
+ }
+ }
+ sContestantStatus[contestant].unk1B = i;
+ }
+}
+
+void sub_80B13EC(u8 a, u8 b)
+{
+ sContestantStatus[a].unk13 = b;
+}
+
+void sub_80B1404(u8 a, u8 b)
+{
+ sContestantStatus[a].unk14 = b;
+}
+
+void sub_80B141C(u8 a, u8 b)
+{
+ if (b >= 60)
+ sub_80B13EC(a, 53);
+ else if (b >= 40)
+ sub_80B13EC(a, 52);
+ else if (b >= 30)
+ sub_80B13EC(a, 51);
+ else if (b >= 20)
+ sub_80B13EC(a, 50);
+ else if (b >= 10)
+ sub_80B13EC(a, 49);
+}
+
+void sub_80B146C(u8 a, u8 b)
+{
+ StringCopy(gStringVar1, gContestMons[a].nickname);
+ StringCopy(gStringVar2, gMoveNames[sContestantStatus[a].currMove]);
+ if (gContestMoves[sContestantStatus[shared192D0_.unk11].currMove].contestCategory == CONTEST_CATEGORY_COOL)
+ StringCopy(gStringVar3, gText_Contest_Shyness);
+ else if (gContestMoves[sContestantStatus[shared192D0_.unk11].currMove].contestCategory == CONTEST_CATEGORY_BEAUTY)
+ StringCopy(gStringVar3, gText_Contest_Anxiety);
+ else if (gContestMoves[sContestantStatus[shared192D0_.unk11].currMove].contestCategory == CONTEST_CATEGORY_CUTE)
+ StringCopy(gStringVar3, gText_Contest_Laziness);
+ else if (gContestMoves[sContestantStatus[shared192D0_.unk11].currMove].contestCategory == CONTEST_CATEGORY_SMART)
+ StringCopy(gStringVar3, gText_Contest_Hesitancy);
+ else
+ StringCopy(gStringVar3, gText_Contest_Fear);
+ StringExpandPlaceholders(gStringVar4, gUnknown_083CC188[b]);
+ sub_80AF138();
+ sub_8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15);
+}
+
+void sub_80B157C(u8 p)
+{
+ sContestantStatus[p].unkC_0 = 1;
+ sContestantStatus[p].currMove = MOVE_NONE;
+}
+
+// Determines turn order?
+void sub_80B159C(void)
+{
+ u8 r12 = 0;
+ s32 i;
+ s32 j;
+ u8 sp0[4];
+ u8 sp4[4];
+
+ for (i = 0; i < 4; i++)
+ {
+ sp0[i] = gUnknown_02038696[i];
+ sp4[i] = 0;
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ if (sContestantStatus[j].unk19 == i)
+ {
+ sp0[j] = i;
+ sp4[j] = 1;
+ break;
+ }
+ }
+ if (j == 4)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ if (sp4[j] == 0 && sContestantStatus[j].unk19 == 0xFF)
+ {
+ r12 = j;
+ j++;
+ break;
+ }
+ }
+ for (; j < 4; j++)
+ {
+ if (sp4[j] == 0 && sContestantStatus[j].unk19 == 0xFF
+ && gUnknown_02038696[r12] > gUnknown_02038696[j])
+ r12 = j;
+ }
+ sp0[r12] = i;
+ sp4[r12] = 1;
+ }
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ shared192D0_.unk0[i] = sp0[i];
+ sContestantStatus[i].unk19 = 0xFF;
+ sContestantStatus[i].unk10_6 = 0;
+ gUnknown_02038696[i] = sp0[i];
+ }
+}
+
+void sub_80B16D0(struct Sprite *sprite)
+{
+ if (sprite->data[1]++ > 84)
+ {
+ sprite->data[1] = 0;
+ sprite->invisible = TRUE;
+ sprite->callback = SpriteCallbackDummy;
+ sContest.unk1920A_4 = 0;
+ }
+}
+
+void sub_80B1710(u8 a)
+{
+ u8 spriteId = sContest.unk19216;
+
+ switch (a)
+ {
+ case 0:
+ case 1:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0];
+ PlaySE(SE_HAZURE);
+ break;
+ case 2:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 4;
+ PlaySE(SE_SEIKAI);
+ break;
+ case 3:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 8;
+ PlaySE(SE_SEIKAI);
+ break;
+ case 4:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12;
+ PlaySE(SE_TK_WARPIN);
+ break;
+ case 5: // exactly the same as case 4
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12;
+ PlaySE(SE_TK_WARPIN);
+ break;
+ case 6:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 16;
+ PlaySE(SE_TK_WARPIN);
+ break;
+ case 8:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 24;
+ PlaySE(SE_W215);
+ break;
+ case 7:
+ default:
+ gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 20;
+ PlaySE(SE_TK_WARPIN);
+ break;
+ }
+ gSprites[spriteId].data[1] = 0;
+ gSprites[spriteId].invisible = FALSE;
+ gSprites[spriteId].callback = sub_80B16D0;
+ sContest.unk1920A_4 = 1;
+}
+
+void sub_80B1928(void)
+{
+ s32 i;
+
+ for (i = 0; i < 5; i++)
+ {
+ const u8 *src;
+
+ if (i < sContest.applauseLevel)
+ src = gContestApplauseMeterGfx + 64;
+ else
+ src = gContestApplauseMeterGfx;
+ CpuCopy32(src, (void *)(VRAM + 0x10000 + (gSprites[sContest.applauseMeterSpriteId].oam.tileNum + 17 + i) * 32), 32);
+ CpuCopy32(src + 32, (void *)(VRAM + 0x10000 + (gSprites[sContest.applauseMeterSpriteId].oam.tileNum + 25 + i) * 32), 32);
+ if (sContest.applauseLevel > 4)
+ sub_80B1A2C();
+ }
+}
+
+void unref_sub_80B19D0(void)
+{
+ u8 str[20];
+ StringCopy(str, gUnknown_083CC2EC);
+ sub_8003460(&gUnknown_03004210, str, 680, 0, 0);
+}
+
+s8 Contest_GetMoveExcitement(u16 move)
+{
+ return gContestExcitementTable[gSpecialVar_ContestCategory][gContestMoves[move].contestCategory];
+}
+
+// Launches crowd movement task, maybe
+u8 sub_80B1A2C(void)
+{
+ u8 taskId = CreateTask(c3_08130B10, 10);
+
+ gTasks[taskId].data[1] = 1;
+ gTasks[taskId].data[2] = IndexOfSpritePaletteTag(0x0ABE2);
+ return taskId;
+}
+
+void c3_08130B10(u8 taskId)
+{
+ if (++gTasks[taskId].data[0] == 1)
+ {
+ gTasks[taskId].data[0] = 0;
+ if (gTasks[taskId].data[3] == 0)
+ gTasks[taskId].data[4]++;
+ else
+ gTasks[taskId].data[4]--;
+ BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, gTasks[taskId].data[4], 0x7FFF);
+ if (gTasks[taskId].data[4] == 0 || gTasks[taskId].data[4] == 16)
+ {
+ gTasks[taskId].data[3] ^= 1;
+ if (sContest.applauseLevel < 5)
+ {
+ BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, 0, 31);
+ DestroyTask(taskId);
+ }
+ }
+ }
+}
+
+void sub_80B1B14(void)
+{
+ CreateTask(sub_80B1B68, 10);
+ gSprites[sContest.applauseMeterSpriteId].pos2.x = -70;
+ gSprites[sContest.applauseMeterSpriteId].invisible = FALSE;
+ sContest.unk1920A_6 = 1;
+}
+
+void sub_80B1B68(u8 taskId)
+{
+ struct Sprite *sprite = &gSprites[sContest.applauseMeterSpriteId];
+
+ gTasks[taskId].data[10] += 1664;
+ sprite->pos2.x += gTasks[taskId].data[10] >> 8;
+ gTasks[taskId].data[10] = gTasks[taskId].data[10] & 0xFF;
+ if (sprite->pos2.x > 0)
+ sprite->pos2.x = 0;
+ if (sprite->pos2.x == 0)
+ {
+ sContest.unk1920A_6 = 0;
+ DestroyTask(taskId);
+ }
+}
+
+void sub_80B1BDC(void)
+{
+ if (gSprites[sContest.applauseMeterSpriteId].invisible == TRUE)
+ {
+ sContest.unk1920A_6 = 0;
+ }
+ else
+ {
+ CreateTask(sub_80B1C34, 10);
+ gSprites[sContest.applauseMeterSpriteId].pos2.x = 0;
+ sContest.unk1920A_6 = 1;
+ }
+}
+
+void sub_80B1C34(u8 taskId)
+{
+ struct Sprite *sprite = &gSprites[sContest.applauseMeterSpriteId];
+
+ gTasks[taskId].data[10] += 1664;
+ sprite->pos2.x -= gTasks[taskId].data[10] >> 8;
+ gTasks[taskId].data[10] = gTasks[taskId].data[10] & 0xFF;
+ if (sprite->pos2.x < -70)
+ sprite->pos2.x = -70;
+ if (sprite->pos2.x == -70)
+ {
+ sprite->invisible = TRUE;
+ sContest.unk1920A_6 = 0;
+ DestroyTask(taskId);
+ }
+}
+
+void sub_80B1CBC(s8 a)
+{
+ u8 taskId = CreateTask(sub_80B1CFC, 5);
+
+ gTasks[taskId].data[0] = a;
+ sContest.unk1920A_5 = 1;
+}
+
+void sub_80B1CFC(u8 taskId)
+{
+ switch (gTasks[taskId].data[10])
+ {
+ case 0:
+ sub_80B1B14();
+ gTasks[taskId].data[10]++;
+ break;
+ case 1:
+ if (!sContest.unk1920A_6)
+ {
+ nullsub_18(gTasks[taskId].data[0]);
+ gTasks[taskId].data[10]++;
+ }
+ break;
+ case 2:
+ if (gTasks[taskId].data[11]++ > 20)
+ {
+ gTasks[taskId].data[11] = 0;
+ sub_80B1928();
+ sContest.unk1920A_5 = 0;
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void unref_sub_80B1D84(void)
+{
+ gSprites[sContest.applauseMeterSpriteId].pos2.x = 0;
+ gSprites[sContest.applauseMeterSpriteId].invisible = FALSE;
+}
+
+void unref_sub_80B1DB8(void)
+{
+ gSprites[sContest.applauseMeterSpriteId].invisible = TRUE;
+}
+
+void sub_80B1DDC(void)
+{
+ CreateTask(sub_80B1DFC, 15);
+ sContest.unk1920A_7 = 1;
+}
+
+void sub_80B1DFC(u8 taskId)
+{
+ if (gTasks[taskId].data[10]++ > 6)
+ {
+ register struct Task *task asm("r0");
+ register u32 r4 asm("r4") = taskId * 4;
+
+ gTasks[taskId].data[10] = 0;
+ if (gTasks[taskId].data[11] == 0)
+ {
+ DmaCopy32Defvars(3, shared16800, (void *)(VRAM + 0x2000), 0x1000);
+ }
+ else
+ {
+ DmaCopy32Defvars(3, shared15800, (void *)(VRAM + 0x2000), 0x1000);
+ gTasks[taskId].data[12]++;
+ }
+
+ // Why won't this match the normal way?
+ asm("add %0, %1, #0\n\t"
+ "add %0, %3\n\t"
+ "lsl %0, #3\n\t"
+ "add %0, %2\n\t"
+ : "=r"(task):"r"(r4),"r"(gTasks),"r"(taskId));
+
+ //gTasks[taskId].data[11] ^= 1;
+ task->data[11] ^= 1;
+
+ //if (gTasks[taskId].data[12] == 9)
+ if (task->data[12] == 9)
+ {
+ sContest.unk1920A_7 = 0;
+ DestroyTask(taskId);
+ }
+ }
+}
+
+#define tBlendColor data[0]
+#define tBlendCoeff data[1]
+
+void sub_80B1EA8(s8 a, s8 b)
+{
+ u8 taskId = CreateTask(sub_80B1F4C, 10);
+ u16 blendColor;
+ u8 blendCoeff;
+ u8 r3;
+
+ if (a > 0)
+ {
+ blendColor = RGB(30, 27, 8);
+ if (b > 0)
+ {
+ blendCoeff = 0;
+ r3 = sContest.applauseLevel * 3;
+ }
+ else
+ {
+ blendCoeff = sContest.applauseLevel * 3;
+ r3 = 0;
+ }
+ }
+ else
+ {
+ blendColor = 0;
+ if (b > 0)
+ {
+ blendCoeff = 0;
+ r3 = 12;
+ }
+ else
+ {
+ blendCoeff = 12;
+ r3 = 0;
+ }
+ }
+ gTasks[taskId].tBlendColor = blendColor;
+ gTasks[taskId].tBlendCoeff = blendCoeff;
+ gTasks[taskId].data[2] = b;
+ gTasks[taskId].data[3] = r3;
+ sContest.unk1920B_0 = 0;
+}
+
+void sub_80B1F4C(u8 taskId)
+{
+ if (gTasks[taskId].data[10]++ >= 0)
+ {
+ gTasks[taskId].data[10] = 0;
+ if (gTasks[taskId].data[2] > 0)
+ gTasks[taskId].tBlendCoeff++;
+ else
+ gTasks[taskId].tBlendCoeff--;
+ BlendPalette(17, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor);
+ BlendPalette(26, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor);
+ if (gTasks[taskId].tBlendCoeff == gTasks[taskId].data[3])
+ {
+ DestroyTask(taskId);
+ sContest.unk1920B_0 = 0;
+ }
+ }
+}
+
+#undef tBlendColor
+#undef tBlendCoeff
+
+void sub_80B1FD0(bool8 a)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (sContestantStatus[i].unk10_6 != 0 && a)
+ {
+ CpuCopy32(
+ GetTurnOrderNumberGfx(i),
+ (void *)(VRAM + 0x10000 + (gSprites[shared19338[i].unk1].oam.tileNum + 5) * 32),
+ 64);
+ gSprites[shared19338[i].unk1].pos1.y = gUnknown_083CA33C[gUnknown_02038696[i]];
+ gSprites[shared19338[i].unk1].invisible = FALSE;
+ }
+ else
+ {
+ gSprites[shared19338[i].unk1].invisible = TRUE;
+ }
+ }
+}
+
+const u8 *GetTurnOrderNumberGfx(u8 contestant)
+{
+ if (sContestantStatus[contestant].unk10_6 != 1)
+ return gContestNextTurnRandomGfx;
+ else
+ return gContestNextTurnNumbersGfx + sContestantStatus[contestant].unk19 * 64;
+}
+
+void sub_80B20C4(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (shared192D0_.unkD[i] != 0 && !Contest_IsMonsTurnDisabled(i))
+ {
+ u8 r4 = gUnknown_02038696[i] * 5 + 2;
+ u16 r0 = sub_80AEFE8(i, 3);
+
+ *(u16 *)(VRAM + 0xC000 + r4 * 64 + 0x28) = r0;
+ *(u16 *)(VRAM + 0xC000 + r4 * 64 + 0x2A) = r0 + 1;
+ *(u16 *)(VRAM + 0xC000 + (r4 + 1) * 64 + 0x28) = r0 + 16;
+ *(u16 *)(VRAM + 0xC000 + (r4 + 1) * 64 + 0x2A) = r0 + 17;
+ PlaySE(SE_C_PASI);
+ }
+ }
+}
+
+bool8 sub_80B214C(u8 a)
+{
+ if (sContestantStatus[a].disappointedRepeat || sContestantStatus[a].unkC_0)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+void sub_80B2184(void)
+{
+ s32 i;
+
+ ((vBgCnt *)&REG_BG1CNT)->priority = 0;
+ ((vBgCnt *)&REG_BG1CNT)->screenSize = 1;
+ ((vBgCnt *)&REG_BG1CNT)->areaOverflowMode = 0;
+
+ gUnknown_030042C0 = DISPLAY_WIDTH;
+ gUnknown_030041B4 = DISPLAY_HEIGHT;
+ REG_BG1HOFS = DISPLAY_WIDTH;
+ REG_BG1VOFS = DISPLAY_HEIGHT;
+
+ DmaClear32(3, (void *)(VRAM + 0xF000), 0x1000);
+ LZDecompressVram(gUnknown_08D17C3C, (void *)(VRAM + 0xF000));
+
+ ((vBgCnt *)&REG_BG1CNT)->charBaseBlock = 0;
+
+ for (i = 0; i < 4; i++)
+ {
+ gSprites[shared19338[i].unk0].oam.priority = 1;
+ gSprites[shared19338[i].unk1].oam.priority = 1;
+ }
+
+ ((vBgCnt *)&REG_BG2CNT)->priority = 1;
+ ((vBgCnt *)&REG_BG0CNT)->priority = 1;
+ ((vBgCnt *)&REG_BG1CNT)->screenSize = 2;
+}
+
+void sub_80B2280(void)
+{
+ s32 i;
+
+ DmaClearLarge32(3, (void *)(VRAM + 0x8000), 0x2000, 0x1000);
+ DmaClear32(3, (void *)(VRAM + 0xF000), 0x1000);
+
+ gUnknown_030042C0 = 0;
+ gUnknown_030041B4 = 0;
+
+ ((vBgCnt *)&REG_BG1CNT)->priority = 1;
+ ((vBgCnt *)&REG_BG1CNT)->screenSize = 0;
+ ((vBgCnt *)&REG_BG1CNT)->areaOverflowMode = 0;
+ ((vBgCnt *)&REG_BG1CNT)->charBaseBlock = 2;
+
+ for (i = 0; i < 4; i++)
+ {
+ gSprites[shared19338[i].unk0].oam.priority = 0;
+ gSprites[shared19338[i].unk1].oam.priority = 0;
+ }
+}
+
+void sub_80B237C(u8 taskId)
+{
+ gUnknown_030042C0 = 0;
+ gUnknown_030041B4 = DISPLAY_HEIGHT;
+ PlaySE12WithPanning(SE_C_MAKU_D, 0);
+ gTasks[taskId].func = sub_80B23BC;
+}
+
+void sub_80B23BC(u8 taskId)
+{
+ gUnknown_030041B4 -= 7;
+ if (gUnknown_030041B4 < 0)
+ gUnknown_030041B4 = 0;
+ if (*(u16 *)&gUnknown_030041B4 == 0) // Why cast?
+ {
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].func = sub_80B2400;
+ }
+}
+
+void sub_80B2400(u8 taskId)
+{
+ s32 i;
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ for (i = 0; i < 4; i++)
+ sContest.unk19218[i] = gUnknown_02038696[i];
+ sub_80AFA5C();
+ sub_80B0588();
+ sub_80AEF50();
+ sub_80B1118();
+ sub_80B1FD0(TRUE);
+ sub_80AFFA0();
+ gTasks[taskId].data[0] = 1;
+ break;
+ case 1:
+ if (gIsLinkContest & 1)
+ {
+ u8 taskId2;
+
+ sContest.unk1920B_2 = 1;
+ if (sub_80AE074())
+ sub_80AF438();
+ taskId2 = CreateTask(sub_80C8C80, 0);
+ SetTaskFuncWithFollowupFunc(taskId2, sub_80C8C80, sub_80AD8DC);
+ sub_80AF860();
+ gTasks[taskId].data[0] = 2;
+ }
+ else
+ {
+ sub_80AF438();
+ gTasks[taskId].data[0] = 3;
+ }
+ break;
+ case 2:
+ if (!sContest.unk1920B_2)
+ gTasks[taskId].data[0] = 3;
+ break;
+ case 3:
+ sub_80AF120();
+ sub_80AEB30();
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80B253C;
+ break;
+ }
+}
+
+void sub_80B2508(u8 taskId)
+{
+ gUnknown_030041B4 += 7;
+ if (gUnknown_030041B4 > DISPLAY_HEIGHT)
+ gTasks[taskId].func = sub_80ADCDC;
+}
+
+void sub_80B253C(u8 taskId)
+{
+ if (gTasks[taskId].data[2] < 10)
+ {
+ gTasks[taskId].data[2]++;
+ }
+ else
+ {
+ if (gTasks[taskId].data[1] == 0)
+ {
+ if (gTasks[taskId].data[0] == 16)
+ gTasks[taskId].data[1]++;
+ else
+ gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ if (gTasks[taskId].data[0] == 0)
+ {
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].func = sub_80B25A4;
+ }
+ else
+ {
+ gTasks[taskId].data[0]--;
+ }
+ }
+ }
+}
+
+void sub_80B25A4(u8 taskId)
+{
+ if (gTasks[taskId].data[2] < 10)
+ {
+ gTasks[taskId].data[2]++;
+ }
+ else
+ {
+ gTasks[taskId].data[2] = 0;
+ PlaySE12WithPanning(SE_C_MAKU_U, 0);
+ gTasks[taskId].func = sub_80B2508;
+ }
+}
+
+void sub_80B25E4(u8 a)
+{
+ s32 i;
+ u8 taskId;
+
+ for (i = 0; i < 4; i++)
+ {
+ gSprites[shared19338[i].unk0].oam.matrixNum = AllocOamMatrix();
+ gSprites[shared19338[i].unk0].oam.affineMode = 1;
+ StartSpriteAffineAnim(&gSprites[shared19338[i].unk0], a);
+ if (a == 2)
+ {
+ AnimateSprite(&gSprites[shared19338[i].unk0]);
+ gSprites[shared19338[i].unk0].invisible = FALSE;
+ }
+ }
+ taskId = CreateTask(sub_80B26C8, 5);
+ gTasks[taskId].data[0] = a;
+ sContest.unk1920B_1 = 1;
+}
+
+void sub_80B26C8(u8 taskId)
+{
+ s32 i;
+
+ if (gSprites[shared19338[0].unk0].affineAnimEnded)
+ {
+ if ((u8)gTasks[taskId].data[0] == 1)
+ {
+ for (i = 0; i < 4; i++)
+ gSprites[shared19338[i].unk0].invisible = TRUE;
+ }
+ for (i = 0; i < 4; i++)
+ FreeSpriteOamMatrix(&gSprites[shared19338[i].unk0]);
+ sContest.unk1920B_1 = 0;
+ DestroyTask(taskId);
+ }
+}
+
+u16 SanitizeMove(u16 move)
+{
+ if (move >= NUM_MOVES)
+ move = MOVE_POUND;
+ return move;
+}
+
+u16 SanitizeSpecies(u16 species)
+{
+ if (species >= NUM_SPECIES)
+ species = SPECIES_NONE;
+ return species;
+}
+
+void sub_80B2790(u8 a)
+{
+ s32 i;
+ u16 move = SanitizeMove(sContestantStatus[a].currMove);
+ u16 species = SanitizeSpecies(gContestMons[a].species);
+ u8 r5_2;
+
+ memset(&shared19348_, 0, sizeof(shared19348_));
+ battle_anim_clear_some_data();
+ for (i = 0; i < 4; i++)
+ gBattleMonForms[i] = 0;
+ switch (move)
+ {
+ case MOVE_CURSE:
+ if (gBaseStats[species].type1 == TYPE_GHOST || gBaseStats[species].type2 == TYPE_GHOST)
+ gUnknown_0202F7C4 = 0;
+ else
+ gUnknown_0202F7C4 = 1;
+ break;
+ case MOVE_TRANSFORM:
+ case MOVE_ROLE_PLAY:
+ r5_2 = sContestantStatus[a].unk1B;
+ shared19348_.unk2 = SanitizeSpecies(gContestMons[r5_2].species);
+ shared19348_.unk10 = gContestMons[r5_2].personality;
+ shared19348_.unk4_0 = 1;
+ break;
+ case MOVE_RETURN:
+ gHappinessMoveAnim = 0xFF;
+ break;
+ case MOVE_FRUSTRATION:
+ gHappinessMoveAnim = 0;
+ break;
+ case MOVE_SOLAR_BEAM:
+ case MOVE_RAZOR_WIND:
+ case MOVE_SKULL_BASH:
+ case MOVE_SKY_ATTACK:
+ if (sContest.unk1925E == 0)
+ {
+ sContest.unk1925E = 2;
+ gUnknown_0202F7C4 = 0;
+ }
+ else
+ {
+ gUnknown_0202F7C4 = 1;
+ }
+ break;
+ }
+ sub_80B2968();
+}
+
+void sub_80B28CC(int unused)
+{
+ memset(&shared19348_, 0, sizeof(shared19348_));
+ if (sContest.unk1925E != 0)
+ sContest.unk1925E--;
+}
+
+void sub_80B28F0(u8 a)
+{
+ shared19348_.unk5 = a;
+ shared19348_.unk0 = SanitizeSpecies(gContestMons[a].species);
+ shared19348_.unk8 = gContestMons[a].personality;
+ shared19348_.unkC = gContestMons[a].otId;
+}
+
+void sub_80B292C(void)
+{
+ gObjectBankIDs[3] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
+ InitSpriteAffineAnim(&gSprites[gObjectBankIDs[gBankTarget]]);
+ sub_80B2968();
+}
+
+void sub_80B2968(void)
+{
+ struct Sprite *sprite = &gSprites[gObjectBankIDs[3]];
+
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ sprite->pos1.x = sub_8077ABC(3, 0);
+ sprite->pos1.y = sub_8077ABC(3, 1);
+ sprite->invisible = TRUE;
+}
+
+void SelectContestMoveBankTarget(u16 move)
+{
+ switch (gBattleMoves[move].target)
+ {
+ case F_TARGET_UNK2:
+ case F_TARGET_USER:
+ gBankTarget = 2;
+ break;
+ case F_TARGET_SELECTED_POKEMON:
+ case F_TARGET_RANDOM:
+ case F_TARGET_BOTH_ENEMIES:
+ case F_TARGET_ALL_EXCEPT_USER:
+ default:
+ gBankTarget = 3;
+ break;
+ }
+}
+
+bool8 Contest_SaveWinner(u8 a)
+{
+ s32 i;
+ u8 r7 = Random() % 3;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (gContestFinalStandings[i] == 0)
+ break;
+ }
+ if (a == 0xFF && i != gContestPlayerMonIndex)
+ return FALSE;
+ switch (gSpecialVar_ContestCategory)
+ {
+ case CONTEST_CATEGORY_COOL:
+ r7 += 0;
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ r7 += 3;
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ r7 += 6;
+ break;
+ case CONTEST_CATEGORY_SMART:
+ r7 += 9;
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ r7 += 12;
+ break;
+ }
+ if (a != 0xFE)
+ {
+ u8 r4 = sub_80B2C4C(a, 1);
+
+ gSaveBlock1.contestWinners[r4].personality = gContestMons[i].personality;
+ gSaveBlock1.contestWinners[r4].species = gContestMons[i].species;
+ gSaveBlock1.contestWinners[r4].otId = gContestMons[i].otId;
+ StringCopy(gSaveBlock1.contestWinners[r4].nickname, gContestMons[i].nickname);
+ StringCopy(gSaveBlock1.contestWinners[r4].trainerName, gContestMons[i].trainerName);
+ if (a != 0xFF)
+ gSaveBlock1.contestWinners[r4].contestCategory = gSpecialVar_ContestCategory;
+ else
+ gSaveBlock1.contestWinners[r4].contestCategory = r7;
+ }
+ else
+ {
+ shared15DE0.personality = gContestMons[i].personality;
+ shared15DE0.otId = gContestMons[i].otId;
+ shared15DE0.species = gContestMons[i].species;
+ StringCopy(shared15DE0.nickname, gContestMons[i].nickname);
+ if (gIsLinkContest & 1)
+ StringCopy(shared15DE0.trainerName, gLinkPlayers[i].name);
+ else
+ StringCopy(shared15DE0.trainerName, gContestMons[i].trainerName);
+ shared15DE0.contestCategory = r7;
+ }
+ return TRUE;
+}
+
+u8 sub_80B2C4C(u8 a, u8 b)
+{
+ s32 i;
+
+ switch (a)
+ {
+ case 0:
+ case 1:
+ return a;
+ case 2:
+ if (b != 0)
+ {
+ for (i = 4; i >= 3; i--)
+ memcpy(&gSaveBlock1.contestWinners[i], &gSaveBlock1.contestWinners[i - 1], sizeof(struct ContestWinner));
+ }
+ return 2;
+ case 3:
+ if (b != 0)
+ {
+ for (i = 7; i >= 6; i--)
+ memcpy(&gSaveBlock1.contestWinners[i], &gSaveBlock1.contestWinners[i - 1], sizeof(struct ContestWinner));
+ }
+ return 5;
+ default:
+ switch (gSpecialVar_ContestCategory)
+ {
+ case CONTEST_CATEGORY_COOL:
+ return 8;
+ case CONTEST_CATEGORY_BEAUTY:
+ return 9;
+ case CONTEST_CATEGORY_CUTE:
+ return 10;
+ case CONTEST_CATEGORY_SMART:
+ return 11;
+ case CONTEST_CATEGORY_TOUGH:
+ default:
+ return 12;
+ }
+ }
+}
+
+void Contest_ResetWinners(void)
+{
+ s32 i;
+
+ for (i = 0; i < 8; i++)
+ gSaveBlock1.contestWinners[i] = gUnknown_083CC5D0[i];
+}
diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c
index 0f77d2814..728562b81 100644
--- a/src/debug/matsuda_debug_menu.c
+++ b/src/debug/matsuda_debug_menu.c
@@ -18,17 +18,16 @@
#include "ewram.h"
extern u8 gUnknown_0203856C;
-extern u8 gUnknown_0203857D[][64];
extern u16 gUnknown_02038670[];
extern u16 gUnknown_02038678[];
extern u16 gUnknown_02038680[];
-extern u8 gUnknown_02038690[];
+extern u8 gContestFinalStandings[];
extern u8 gUnknown_02038694;
extern u8 gIsLinkContest;
extern u8 gUnknown_0203869B;
extern u8 gContestPlayerMonIndex;
-extern u16 gScriptContestCategory;
-extern u16 gScriptContestRank;
+extern u16 gSpecialVar_ContestCategory;
+extern u16 gSpecialVar_ContestRank;
extern u16 gUnknown_030042A4;
extern u16 gUnknown_030042A0;
@@ -321,7 +320,7 @@ u8 MatsudaDebugMenu_CommTest(void)
static void sub_80A9C98(u8 taskId)
{
- sub_80AE098(0);
+ Contest_CreatePlayerMon(0);
SetTaskFuncWithFollowupFunc(taskId, sub_80C8734, sub_80A9CC0);
}
@@ -360,7 +359,7 @@ static void sub_80A9D58(u8 taskId)
dest[i] = gTasks[taskId].data[5 + i];
gUnknown_0203869B = sub_80C4B34(dest);
- sub_80AE82C((u8)gScriptContestCategory);
+ sub_80AE82C((u8)gSpecialVar_ContestCategory);
sub_80B0F28(0);
SetTaskFuncWithFollowupFunc(taskId, sub_80C8EBC, sub_80A9DBC);
}
@@ -541,9 +540,9 @@ static void sub_80AA10C(void)
gUnknown_02038694 = 0;
if (!(gContestMons[0].nickname[0]))
- sub_80AE398(0, 0);
+ Contest_InitAllPokemon(0, 0);
- sub_80AE098(gUnknown_02038694);
+ Contest_CreatePlayerMon(gUnknown_02038694);
for (i = 0; i < 6; i++)
{
@@ -552,10 +551,10 @@ static void sub_80AA10C(void)
gMatsudaDebugMenuContestTopLeft[i][1]);
}
- gScriptContestCategory = gScriptContestRank = 0;
+ gSpecialVar_ContestCategory = gSpecialVar_ContestRank = 0;
zero = 0; // it's possible this was some assignment that matsuda used to quickly edit and test things without changing whats passed to the later functions.
sub_80AA5BC(zero);
- sub_80AA5E8(gScriptContestRank);
+ sub_80AA5E8(gSpecialVar_ContestRank);
sub_8003460(&gMenuWindow, gMatsudaDebugMenu_GoBackText, 0xD6, 0x12, 0x12);
sub_8003460(&gMenuWindow, gMatsudaDebugMenu_BattlePointsText, 0xDC, zero, 0xC);
LoadSpriteSheet(gUnknown_083C92B4);
@@ -576,19 +575,14 @@ void sub_80AA280(u8 var) // no?
FillWindowRect_DefaultPalette(&gMenuWindow, 0, 0, 0, 0x1E, 3);
StringCopy(gSharedMem, gMatsudaDebugMenu_StartText);
- StringAppend(gSharedMem, &gUnknown_0203857D[var][0]);
+ StringAppend(gSharedMem, gContestMons[var].trainerName);
for (i = 0; i < 4; i++)
{
if (var == i)
- {
- sub_8003460(&gMenuWindow, gSharedMem, (10 * i + 2), gUnknown_083C926E[i][0], gUnknown_083C926E[i][1]);
- }
+ sub_8003460(&gMenuWindow, gSharedMem, 10 * i + 2, gUnknown_083C926E[i][0], gUnknown_083C926E[i][1]);
else
- {
- u8 *ptr = gUnknown_0203857D[i];
- sub_8003460(&gMenuWindow, ptr, (10 * i + 2), gUnknown_083C926E[i][0], gUnknown_083C926E[i][1]);
- }
+ sub_8003460(&gMenuWindow, gContestMons[i].trainerName, 10 * i + 2, gUnknown_083C926E[i][0], gUnknown_083C926E[i][1]);
}
}
@@ -873,8 +867,8 @@ void sub_80AABF0(struct Sprite *sprite, s8 var2)
r4 = 4;
sub_80AA5BC(r4);
sprite->data[3] = r4;
- gScriptContestCategory = sprite->data[3];
- sub_80AE398(sprite->data[3], gScriptContestRank);
+ gSpecialVar_ContestCategory = sprite->data[3];
+ Contest_InitAllPokemon(sprite->data[3], gSpecialVar_ContestRank);
sub_80AA280(sprite->data[2]);
sub_80AA658(sprite->data[2]);
}
@@ -882,13 +876,13 @@ void sub_80AABF0(struct Sprite *sprite, s8 var2)
void sub_80AAC5C(struct Sprite *sprite, s8 var2)
{
if (var2 > 0)
- gScriptContestRank++;
- else if (gScriptContestRank != 0)
- gScriptContestRank--;
- if (gScriptContestRank > 3)
- gScriptContestRank = 3;
- sub_80AA5E8(gScriptContestRank);
- sub_80AE398(gScriptContestCategory, gScriptContestRank);
+ gSpecialVar_ContestRank++;
+ else if (gSpecialVar_ContestRank != 0)
+ gSpecialVar_ContestRank--;
+ if (gSpecialVar_ContestRank > 3)
+ gSpecialVar_ContestRank = 3;
+ sub_80AA5E8(gSpecialVar_ContestRank);
+ Contest_InitAllPokemon(gSpecialVar_ContestCategory, gSpecialVar_ContestRank);
sub_80AA280(sprite->data[2]);
sub_80AA658(sprite->data[2]);
}
@@ -901,7 +895,7 @@ void sub_80AACC4(void)
SetDebugMonForContest();
if (!(gIsLinkContest & 1))
sub_80AE82C(eMatsudaDebugVar);
- SetMainCallback2(sub_80AB47C);
+ SetMainCallback2(CB2_StartContest);
}
}
@@ -923,7 +917,7 @@ void sub_80AAD44(struct Sprite *sprite, s8 var2)
SetDebugMonForContest();
for (i = 0; i < 4; i++)
- gUnknown_02038670[i] = sub_80AE770(i, gScriptContestCategory);
+ gUnknown_02038670[i] = sub_80AE770(i, gSpecialVar_ContestCategory);
SetMainCallback2(sub_805469C);
}
}
@@ -1155,10 +1149,10 @@ void sub_80AAF30(void)
gUnknown_0203856C = 1;
gContestPlayerMonIndex = 3;
- sub_80AE098(0);
+ Contest_CreatePlayerMon(0);
for (i = 3; i > -1; i--)
- gUnknown_02038690[i] = 3 - i;
+ gContestFinalStandings[i] = 3 - i;
for (i = 0; i < 3; i++)
{
@@ -1171,7 +1165,7 @@ void sub_80AAF30(void)
gUnknown_02038670[3] = 0x12C;
gUnknown_02038680[3] = 0x190;
gUnknown_02038678[3] = 0x190;
- sub_80B2A7C(0xFE);
+ Contest_SaveWinner(0xFE);
}
u8 MatsudaDebugMenu_SetHighScore(void)
@@ -1201,11 +1195,11 @@ u8 MatsudaDebugMenu_SetArtMuseumItems(void)
s32 i;
gContestPlayerMonIndex = 3;
- sub_80AE098(0);
+ Contest_CreatePlayerMon(0);
for (i = 3; i > -1; i--)
- gUnknown_02038690[i] = 3 - i;
- for (gScriptContestCategory = 0; gScriptContestCategory < 5; gScriptContestCategory++)
- sub_80B2A7C(0xFF);
+ gContestFinalStandings[i] = 3 - i;
+ for (gSpecialVar_ContestCategory = 0; gSpecialVar_ContestCategory < 5; gSpecialVar_ContestCategory++)
+ Contest_SaveWinner(0xFF);
CloseMenu();
return 1;
}
diff --git a/src/engine/cable_club.c b/src/engine/cable_club.c
index 4dda372f4..3187de7ed 100644
--- a/src/engine/cable_club.c
+++ b/src/engine/cable_club.c
@@ -23,7 +23,7 @@
#include "text.h"
#include "trainer_card.h"
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
extern struct TrainerCard gTrainerCards[4];
extern u8 gUnknown_03004860;
extern u8 gFieldLinkPlayerCount;
@@ -343,8 +343,8 @@ static void sub_8083188(u8 taskId)
}
else
{
- gScriptResult = sub_8082D9C(local1, local2);
- if (gScriptResult != 0)
+ gSpecialVar_Result = sub_8082D9C(local1, local2);
+ if (gSpecialVar_Result != 0)
gTasks[taskId].func = sub_8083288;
}
}
@@ -360,10 +360,10 @@ void sub_80831F8(u8 taskId)
|| sub_8082DF4(taskId) == TRUE)
return;
- gScriptResult = sub_8082D9C(local1, local2);
- if (gScriptResult == 0)
+ gSpecialVar_Result = sub_8082D9C(local1, local2);
+ if (gSpecialVar_Result == 0)
return;
- if (gScriptResult == 3)
+ if (gSpecialVar_Result == 3)
{
sub_800832C();
HideFieldMessageBox();
@@ -384,7 +384,7 @@ static void sub_8083288(u8 taskId)
if (sub_8082DF4(taskId) == TRUE)
return;
- if (gScriptResult == 3)
+ if (gSpecialVar_Result == 3)
{
sub_800832C();
HideFieldMessageBox();
@@ -425,7 +425,7 @@ static void sub_8083314(u8 taskId)
ResetBlockReceivedFlags();
HideFieldMessageBox();
- if (gScriptResult == 1)
+ if (gSpecialVar_Result == 1)
{
#if ENGLISH
u16 linkType;
@@ -461,7 +461,7 @@ static void sub_80833C4(u8 taskId)
static void sub_80833EC(u8 taskId)
{
- gScriptResult = 5;
+ gSpecialVar_Result = 5;
sub_8082D4C();
HideFieldMessageBox();
EnableBothScriptContexts();
@@ -470,7 +470,7 @@ static void sub_80833EC(u8 taskId)
static void sub_8083418(u8 taskId)
{
- gScriptResult = 6;
+ gSpecialVar_Result = 6;
sub_8082D4C();
HideFieldMessageBox();
EnableBothScriptContexts();
@@ -523,7 +523,7 @@ void sub_80834E4(void)
void sub_808350C(void)
{
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
gLinkType = 0x3311;
gBattleTypeFlags = 0;
sub_8082CD4(2, 4);
@@ -537,14 +537,14 @@ static void sub_808353C(u8 taskId)
switch (gTasks[taskId].data[0])
{
case 0:
- if (gScriptResult == 1)
+ if (gSpecialVar_Result == 1)
{
playerCount = GetLinkPlayerCount();
for (i = 0; i < playerCount; i++)
{
if (gLinkPlayers[i].language == LANGUAGE_JAPANESE)
{
- gScriptResult = 7;
+ gSpecialVar_Result = 7;
sub_8008480();
gTasks[taskId].data[0] = 1;
return;
diff --git a/src/engine/link.c b/src/engine/link.c
index 27afef937..28323207c 100644
--- a/src/engine/link.c
+++ b/src/engine/link.c
@@ -635,7 +635,7 @@ static void BuildSendCmd(u16 code)
break;
case 0xAAAB:
gSendCmd[0] = 0xAAAB;
- gSendCmd[1] = gScriptItemId;
+ gSendCmd[1] = gSpecialVar_ItemId;
break;
case 0xCCCC:
gSendCmd[0] = 0xCCCC;
diff --git a/src/engine/sprite.c b/src/engine/sprite.c
index 69fa860c1..c1bb36917 100644
--- a/src/engine/sprite.c
+++ b/src/engine/sprite.c
@@ -26,14 +26,6 @@
#define SPRITE_TILE_IS_ALLOCATED(n) ((gSpriteTileAllocBitmap[(n) / 8] >> ((n) % 8)) & 1)
-struct OamMatrix
-{
- s16 a;
- s16 b;
- s16 c;
- s16 d;
-};
-
struct SpriteCopyRequest
{
const u8 *src;
diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c
index db822f71b..6b6064c16 100644
--- a/src/field/battle_tower.c
+++ b/src/field/battle_tower.c
@@ -350,7 +350,7 @@ bool8 ShouldBattleEReaderTrainer(u8 levelType, u16 winStreak)
ValidateEReaderTrainer();
- if (gScriptResult != 0 || gSaveBlock2.battleTower.ereaderTrainer.winStreak != winStreak)
+ if (gSpecialVar_Result != 0 || gSaveBlock2.battleTower.ereaderTrainer.winStreak != winStreak)
{
return FALSE;
}
@@ -1516,7 +1516,7 @@ void CheckPartyBattleTowerBanlist(void)
level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL);
hp = GetMonData(&gPlayerParty[i], MON_DATA_HP);
- CheckMonBattleTowerBanlist(species2, heldItem, hp, gScriptResult, level, validPartySpecies, validPartyHeldItems, &counter);
+ CheckMonBattleTowerBanlist(species2, heldItem, hp, gSpecialVar_Result, level, validPartySpecies, validPartyHeldItems, &counter);
}
if (counter < 3)
@@ -1549,7 +1549,7 @@ void CheckPartyBattleTowerBanlist(void)
else
{
gSpecialVar_0x8004 = 0;
- gSaveBlock2.battleTower.battleTowerLevelType = gScriptResult;
+ gSaveBlock2.battleTower.battleTowerLevelType = gSpecialVar_Result;
}
}
@@ -1700,7 +1700,7 @@ void sub_8135668(void)
gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]++;
sub_8135A3C();
- gScriptResult = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType];
+ gSpecialVar_Result = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType];
gStringVar1[0] = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] + 0xA1;
gStringVar1[1] = 0xFF;
@@ -1712,7 +1712,7 @@ void sub_8135668(void)
}
sub_8135A3C();
- gScriptResult = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType];
+ gSpecialVar_Result = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType];
break;
case 8:
gSaveBlock2.battleTower.unk_554 = gSpecialVar_0x8005;
@@ -1747,29 +1747,29 @@ void sub_81358A4(void)
switch (gSpecialVar_0x8004)
{
case 0:
- gScriptResult = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType];
+ gSpecialVar_Result = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType];
break;
case 1:
- gScriptResult = gSaveBlock2.battleTower.battleTowerLevelType;
+ gSpecialVar_Result = gSaveBlock2.battleTower.battleTowerLevelType;
break;
case 2:
- gScriptResult = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType];
+ gSpecialVar_Result = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType];
break;
case 3:
- gScriptResult = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType];
+ gSpecialVar_Result = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType];
break;
case 4:
- gScriptResult = gSaveBlock2.battleTower.battleTowerTrainerId;
+ gSpecialVar_Result = gSaveBlock2.battleTower.battleTowerTrainerId;
break;
case 5:
case 6:
case 7:
break;
case 8:
- gScriptResult = gSaveBlock2.battleTower.unk_554;
+ gSpecialVar_Result = gSaveBlock2.battleTower.unk_554;
break;
case 9:
- gScriptResult = GetCurrentBattleTowerWinStreak(battleTowerLevelType);
+ gSpecialVar_Result = GetCurrentBattleTowerWinStreak(battleTowerLevelType);
break;
case 10:
SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak);
@@ -2149,11 +2149,11 @@ void GiveBattleTowerPrize(void)
if (AddBagItem(gSaveBlock2.battleTower.prizeItem, 1) == TRUE)
{
CopyItemName(gSaveBlock2.battleTower.prizeItem, gStringVar1);
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
}
else
{
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = 6;
}
}
@@ -2172,7 +2172,7 @@ void AwardBattleTowerRibbons(void)
ribbonType = MON_DATA_VICTORY_RIBBON;
}
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
if (GetCurrentBattleTowerWinStreak(battleTowerLevelType) > 55)
{
@@ -2182,13 +2182,13 @@ void AwardBattleTowerRibbons(void)
pokemon = &gPlayerParty[partyIndex];
if (!GetMonData(pokemon, ribbonType))
{
- gScriptResult = 1;
- SetMonData(pokemon, ribbonType, &gScriptResult);
+ gSpecialVar_Result = 1;
+ SetMonData(pokemon, ribbonType, &gSpecialVar_Result);
}
}
}
- if (gScriptResult != 0)
+ if (gSpecialVar_Result != 0)
{
IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS);
}
@@ -2266,7 +2266,7 @@ void ValidateEReaderTrainer(void)
u32 checksum;
struct BattleTowerEReaderTrainer *ereaderTrainer;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
ereaderTrainer = &gSaveBlock2.battleTower.ereaderTrainer;
checksum = 0;
@@ -2277,7 +2277,7 @@ void ValidateEReaderTrainer(void)
if (checksum == 0)
{
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
return;
}
@@ -2290,7 +2290,7 @@ void ValidateEReaderTrainer(void)
if (gSaveBlock2.battleTower.ereaderTrainer.checksum != checksum)
{
ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer);
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
}
}
diff --git a/src/field/berry.c b/src/field/berry.c
index 874a60aa7..088267ad0 100644
--- a/src/field/berry.c
+++ b/src/field/berry.c
@@ -981,7 +981,7 @@ const struct Berry gBerries[] =
static const struct BerryTree gBlankBerryTree = {0};
extern u8 S_BerryTree[];
-extern u16 gScriptLastTalked;
+extern u16 gSpecialVar_LastTalked;
extern u16 gSpecialVar_0x8004;
extern u16 gSpecialVar_0x8005;
extern u16 gSpecialVar_0x8006;
@@ -1368,7 +1368,7 @@ void FieldObjectInteractionGetBerryTreeData(void)
id = FieldObjectGetBerryTreeId(gSelectedMapObject);
berry = GetBerryTypeByBerryTreeId(id);
ResetBerryTreeSparkleFlag(id);
- localId = gScriptLastTalked;
+ localId = gSpecialVar_LastTalked;
num = gSaveBlock1.location.mapNum;
group = gSaveBlock1.location.mapGroup;
if (IsBerryTreeSparkling(localId, num, group))
@@ -1392,7 +1392,7 @@ void Berry_FadeAndGoToBerryBagMenu(void)
void FieldObjectInteractionPlantBerryTree(void)
{
- u8 berry = ItemIdToBerryType(gScriptItemId);
+ u8 berry = ItemIdToBerryType(gSpecialVar_ItemId);
PlantBerryTree(FieldObjectGetBerryTreeId(gSelectedMapObject), berry, 1, TRUE);
FieldObjectInteractionGetBerryTreeData();
@@ -1409,7 +1409,7 @@ void FieldObjectInteractionPickBerryTree(void)
void FieldObjectInteractionRemoveBerryTree(void)
{
RemoveBerryTree(FieldObjectGetBerryTreeId(gSelectedMapObject));
- sub_8060288(gScriptLastTalked, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
+ sub_8060288(gSpecialVar_LastTalked, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
}
bool8 PlayerHasBerries(void)
diff --git a/src/field/berry_tag_screen.c b/src/field/berry_tag_screen.c
index 694599680..2abbac287 100644
--- a/src/field/berry_tag_screen.c
+++ b/src/field/berry_tag_screen.c
@@ -133,12 +133,12 @@ static bool8 sub_8146058(void)
gMain.state += 1;
break;
case 8:
- berry = gScriptItemId + OFFSET_7B;
+ berry = gSpecialVar_ItemId + OFFSET_7B;
gUnknown_0203932C = CreateBerrySprite(berry, 56, 64);
gMain.state += 1;
break;
case 9:
- sub_8146600(gScriptItemId + OFFSET_7B);
+ sub_8146600(gSpecialVar_ItemId + OFFSET_7B);
gMain.state += 1;
break;
case 10:
@@ -277,9 +277,9 @@ static void sub_81464E4(void)
u8 buffer[16];
#endif
- berryInfo = GetBerryInfo(gScriptItemId + OFFSET_7B + 1);
+ berryInfo = GetBerryInfo(gSpecialVar_ItemId + OFFSET_7B + 1);
- ConvertIntToDecimalStringN(gStringVar1, gScriptItemId - FIRST_BERRY + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
+ ConvertIntToDecimalStringN(gStringVar1, gSpecialVar_ItemId - FIRST_BERRY + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
MenuPrint(gStringVar1, 12, 4);
#if ENGLISH
@@ -437,7 +437,7 @@ static void sub_8146810(s8 berry)
gBagPocketScrollStates[berryPocket].cursorPos += berry;
}
}
- gScriptItemId = gCurrentBagPocketItemSlots[gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos].itemId;
+ gSpecialVar_ItemId = gCurrentBagPocketItemSlots[gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos].itemId;
DestroySprite(&gSprites[gUnknown_0203932C]);
sub_81466A0();
sub_80A7DD4();
@@ -449,7 +449,7 @@ static void sub_81468BC(void)
sub_81464E4();
// center of berry sprite
- gUnknown_0203932C = CreateBerrySprite(gScriptItemId + OFFSET_7B, 56, 64);
+ gUnknown_0203932C = CreateBerrySprite(gSpecialVar_ItemId + OFFSET_7B, 56, 64);
- sub_8146600(gScriptItemId + OFFSET_7B);
+ sub_8146600(gSpecialVar_ItemId + OFFSET_7B);
}
diff --git a/src/field/daycare.c b/src/field/daycare.c
index 9ac63b3c7..c28bc65ca 100644
--- a/src/field/daycare.c
+++ b/src/field/daycare.c
@@ -1758,7 +1758,7 @@ static void HandleDaycareLevelMenuInput(u8 taskId)
{
HandleDestroyMenuCursors();
PlaySE(SE_SELECT);
- gLastFieldPokeMenuOpened = gScriptResult = gTasks[taskId].data[0];
+ gLastFieldPokeMenuOpened = gSpecialVar_Result = gTasks[taskId].data[0];
DestroyTask(taskId);
MenuZeroFillWindowRect(15, 6, 29, 13);
EnableBothScriptContexts();
@@ -1766,7 +1766,7 @@ static void HandleDaycareLevelMenuInput(u8 taskId)
else if (gMain.newKeys & B_BUTTON)
{
HandleDestroyMenuCursors();
- gLastFieldPokeMenuOpened = gScriptResult = 2;
+ gLastFieldPokeMenuOpened = gSpecialVar_Result = 2;
DestroyTask(taskId);
MenuZeroFillWindowRect(15, 6, 29, 13);
EnableBothScriptContexts();
diff --git a/src/field/decoration.c b/src/field/decoration.c
index c36c10a08..8b774afc3 100644
--- a/src/field/decoration.c
+++ b/src/field/decoration.c
@@ -3647,10 +3647,10 @@ void sub_8100A7C(void)
{
u16 i;
gSpecialVar_0x8005 = 0;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
if (gSpecialVar_0x8004 == gUnknown_02039234)
{
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
} else if (gDecorations[ewram_1f000.items[gUnknown_020391B4[gSpecialVar_0x8004].decorId]].permission == DECORPERM_SOLID_MAT)
{
gSpecialVar_0x8005 = gUnknown_020391B4[gSpecialVar_0x8004].flagId;
diff --git a/src/field/dewford_trend.c b/src/field/dewford_trend.c
index b36459655..b67f3a2bd 100644
--- a/src/field/dewford_trend.c
+++ b/src/field/dewford_trend.c
@@ -8,7 +8,7 @@
#include "text.h"
#include "ewram.h"
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
extern u16 gSpecialVar_0x8004;
static void sub_80FA46C(struct EasyChatPair *s, u16 b, u8 c);
@@ -219,12 +219,12 @@ void sub_80FA5E4(void)
if (!gSaveBlock1.easyChatPairs[0].unk1_6 && gSaveBlock1.easyChatPairs[1].unk1_6)
result = 1;
}
- gScriptResult = result;
+ gSpecialVar_Result = result;
}
void sub_80FA648(void)
{
- gScriptResult = (gSaveBlock1.easyChatPairs[0].words[0] + gSaveBlock1.easyChatPairs[0].words[1]) & 7;
+ gSpecialVar_Result = (gSaveBlock1.easyChatPairs[0].words[0] + gSaveBlock1.easyChatPairs[0].words[1]) & 7;
}
static bool8 sub_80FA670(struct EasyChatPair *a, struct EasyChatPair *b, u8 c)
diff --git a/src/field/event_data.c b/src/field/event_data.c
index 3b3ac7bca..587da8138 100644
--- a/src/field/event_data.c
+++ b/src/field/event_data.c
@@ -18,9 +18,9 @@ EWRAM_DATA u16 gSpecialVar_0x8008 = 0;
EWRAM_DATA u16 gSpecialVar_0x8009 = 0;
EWRAM_DATA u16 gSpecialVar_0x800A = 0;
EWRAM_DATA u16 gSpecialVar_0x800B = 0;
-EWRAM_DATA u16 gScriptResult = 0;
-EWRAM_DATA u16 gScriptLastTalked = 0;
-EWRAM_DATA u16 gScriptFacing = 0;
+EWRAM_DATA u16 gSpecialVar_Result = 0;
+EWRAM_DATA u16 gSpecialVar_LastTalked = 0;
+EWRAM_DATA u16 gSpecialVar_Facing = 0;
EWRAM_DATA u8 gUnknown_0202E8E2[16] = {0};
extern u16 *gSpecialVars[];
diff --git a/src/field/field_control_avatar.c b/src/field/field_control_avatar.c
index dd29e9df5..cd7d3a2e2 100644
--- a/src/field/field_control_avatar.c
+++ b/src/field/field_control_avatar.c
@@ -30,8 +30,8 @@ struct Coords32
s32 y;
};
-extern u16 gScriptLastTalked;
-extern u16 gScriptFacing;
+extern u16 gSpecialVar_LastTalked;
+extern u16 gSpecialVar_Facing;
extern struct LinkPlayerMapObject gLinkPlayerMapObjects[];
extern u16 gSpecialVar_0x8004;
extern u16 gSpecialVar_0x8005;
@@ -295,8 +295,8 @@ u8 *sub_80682A8(struct MapPosition *position, u8 unused, u8 c)
return NULL;
}
gSelectedMapObject = r3;
- gScriptLastTalked = gMapObjects[r3].localId;
- gScriptFacing = c;
+ gSpecialVar_LastTalked = gMapObjects[r3].localId;
+ gSpecialVar_Facing = c;
return GetFieldObjectScriptPointerByFieldObjectId(r3);
}
@@ -316,10 +316,10 @@ static u8 *sub_8068364(struct MapPosition *position, u8 b, u8 c)
}
//_080683E8
gSelectedMapObject = r3;
- gScriptLastTalked = gMapObjects[r3].localId;
- gScriptFacing = c;
+ gSpecialVar_LastTalked = gMapObjects[r3].localId;
+ gSpecialVar_Facing = c;
script = GetFieldObjectScriptPointerByFieldObjectId(r3);
- script = GetRamScript(gScriptLastTalked, script);
+ script = GetRamScript(gSpecialVar_LastTalked, script);
return script;
}
diff --git a/src/field/field_poison.c b/src/field/field_poison.c
index 74d70cb36..49678f269 100644
--- a/src/field/field_poison.c
+++ b/src/field/field_poison.c
@@ -9,7 +9,7 @@
#include "task.h"
#include "text.h"
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
extern u8 fieldPoisonText_PokemonFainted[];
bool32 CheckMonIsValid(struct Pokemon *pkmn)
@@ -93,9 +93,9 @@ void Task_WhiteOut(u8 taskId)
break;
case 2: //Done checking Pokemon
if (AllMonsFainted())
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
else
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
EnableBothScriptContexts();
DestroyTask(taskId);
break;
diff --git a/src/field/field_screen_effect.c b/src/field/field_screen_effect.c
index a18190809..a472d5a9c 100644
--- a/src/field/field_screen_effect.c
+++ b/src/field/field_screen_effect.c
@@ -283,17 +283,17 @@ void sub_80818A4(void)
u8 taskId = CreateTask(sub_80816A8, 80);
s16 *data = gTasks[taskId].data;
- if (gScriptResult == 0)
+ if (gSpecialVar_Result == 0)
{
data[1] = 0;
data[2] = 104;
}
- else if (gScriptResult == 1)
+ else if (gSpecialVar_Result == 1)
{
data[1] = 1;
data[2] = 104;
}
- else if (gScriptResult == 2)
+ else if (gSpecialVar_Result == 2)
{
data[1] = 0;
data[2] = 120;
diff --git a/src/field/field_specials.c b/src/field/field_specials.c
index 78c60c94e..87a9e2d5d 100644
--- a/src/field/field_specials.c
+++ b/src/field/field_specials.c
@@ -46,7 +46,7 @@ extern struct WarpData gUnknown_020297F0;
extern u8 gBattleOutcome;
extern u16 gSpecialVar_0x8004;
extern u16 gSpecialVar_0x8005;
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
extern u8 *const gUnknown_083D1464[3];
@@ -169,7 +169,7 @@ static void DetermineCyclingRoadResults(u32 arg0, u8 arg1)
}
- gScriptResult = result;
+ gSpecialVar_Result = result;
}
void FinishCyclingRoadChallenge(void) {
@@ -1112,17 +1112,17 @@ void sub_810E984(u8 taskId)
saved_warp2_set_2(0, gUnknown_03000760[gUnknown_0203925B].var1, gUnknown_03000760[gUnknown_0203925B].var2, -1, 2, 1);
if (gSpecialVar_0x8005 == gUnknown_0203925B)
{
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
PlaySE(SE_SELECT);
MenuZeroFillWindowRect(0, 0, 29, 12);
sub_810EC9C(taskId);
}
else
{
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
gSpecialVar_0x8005 = gUnknown_0203925B;
sub_810EBEC();
- FieldObjectTurnByLocalIdAndMap(gScriptLastTalked, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, DIR_SOUTH);
+ FieldObjectTurnByLocalIdAndMap(gSpecialVar_LastTalked, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, DIR_SOUTH);
sub_810EEDC();
MenuZeroFillScreen();
DestroyTask(taskId);
@@ -1130,7 +1130,7 @@ void sub_810E984(u8 taskId)
}
else if (gMain.newKeys & B_BUTTON)
{
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
PlaySE(SE_SELECT);
sub_810EEDC();
MenuZeroFillWindowRect(0, 0, 29, 12);
@@ -1516,12 +1516,12 @@ void IsGrassTypeInParty(void)
species = GetMonData(pokemon, MON_DATA_SPECIES);
if (gBaseStats[species].type1 == TYPE_GRASS || gBaseStats[species].type2 == TYPE_GRASS)
{
- gScriptResult = TRUE;
+ gSpecialVar_Result = TRUE;
return;
}
}
}
- gScriptResult = FALSE;
+ gSpecialVar_Result = FALSE;
}
const u8 *const gUnknown_083F83C0[] = {
@@ -1579,7 +1579,7 @@ void sub_810F118(u8 taskId)
if (gMain.newKeys & A_BUTTON)
{
HandleDestroyMenuCursors();
- gScriptResult = gUnknown_0203925B;
+ gSpecialVar_Result = gUnknown_0203925B;
PlaySE(SE_SELECT);
sub_810EEDC();
MenuZeroFillWindowRect(0, 0, 29, 12);
@@ -1588,7 +1588,7 @@ void sub_810F118(u8 taskId)
if (gMain.newKeys & B_BUTTON)
{
HandleDestroyMenuCursors();
- gScriptResult = 0x7f;
+ gSpecialVar_Result = 0x7f;
PlaySE(SE_SELECT);
sub_810EEDC();
MenuZeroFillWindowRect(0, 0, 29, 12);
@@ -2077,27 +2077,27 @@ bool8 sub_810F96C(void)
void sub_810F9AC(void)
{
- if (gScriptResult >= 10000)
+ if (gSpecialVar_Result >= 10000)
{
- sub_80BF088(0, gScriptResult);
+ sub_80BF088(0, gSpecialVar_Result);
}
- else if (gScriptResult >= 1000)
+ else if (gSpecialVar_Result >= 1000)
{
gStringVar1[0] = CHAR_0;
- ConvertIntToDecimalStringN(gStringVar1 + 1, gScriptResult, 0, sub_80BF0B8(gScriptResult));
+ ConvertIntToDecimalStringN(gStringVar1 + 1, gSpecialVar_Result, 0, sub_80BF0B8(gSpecialVar_Result));
}
- else if (gScriptResult >= 100)
+ else if (gSpecialVar_Result >= 100)
{
gStringVar1[0] = CHAR_0;
gStringVar1[1] = CHAR_0;
- ConvertIntToDecimalStringN(gStringVar1 + 2, gScriptResult, 0, sub_80BF0B8(gScriptResult));
+ ConvertIntToDecimalStringN(gStringVar1 + 2, gSpecialVar_Result, 0, sub_80BF0B8(gSpecialVar_Result));
}
- else if (gScriptResult >= 10)
+ else if (gSpecialVar_Result >= 10)
{
gStringVar1[0] = CHAR_0;
gStringVar1[1] = CHAR_0;
gStringVar1[2] = CHAR_0;
- ConvertIntToDecimalStringN(gStringVar1 + 3, gScriptResult, 0, sub_80BF0B8(gScriptResult));
+ ConvertIntToDecimalStringN(gStringVar1 + 3, gSpecialVar_Result, 0, sub_80BF0B8(gSpecialVar_Result));
}
else
{
@@ -2105,7 +2105,7 @@ void sub_810F9AC(void)
gStringVar1[1] = CHAR_0;
gStringVar1[2] = CHAR_0;
gStringVar1[3] = CHAR_0;
- ConvertIntToDecimalStringN(gStringVar1 + 4, gScriptResult, 0, sub_80BF0B8(gScriptResult));
+ ConvertIntToDecimalStringN(gStringVar1 + 4, gSpecialVar_Result, 0, sub_80BF0B8(gSpecialVar_Result));
}
}
diff --git a/src/field/fldeff_decoration.c b/src/field/fldeff_decoration.c
index 7c8ff44db..37f024b9f 100644
--- a/src/field/fldeff_decoration.c
+++ b/src/field/fldeff_decoration.c
@@ -344,21 +344,21 @@ void GetShieldToyTVDecorationInfo(void)
case 822:
ConvertIntToDecimalStringN(gStringVar1, 100, STR_CONV_MODE_LEFT_ALIGN, 3);
StringCopy(gStringVar2, gSecretBaseText_GoldRank);
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
break;
case 734:
ConvertIntToDecimalStringN(gStringVar1, 50, STR_CONV_MODE_LEFT_ALIGN, 2);
StringCopy(gStringVar2, gSecretBaseText_SilverRank);
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
break;
case 756:
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
break;
case 757:
- gScriptResult = 2;
+ gSpecialVar_Result = 2;
break;
case 758:
- gScriptResult = 3;
+ gSpecialVar_Result = 3;
break;
}
}
diff --git a/src/field/fldeff_secretpower.c b/src/field/fldeff_secretpower.c
index 9bcfaa8c4..bf8e98403 100644
--- a/src/field/fldeff_secretpower.c
+++ b/src/field/fldeff_secretpower.c
@@ -249,7 +249,7 @@ bool8 SetUpFieldMove_SecretPower(void)
sub_80BB63C();
- if (gScriptResult == 1 || player_get_direction_lower_nybble() != DIR_NORTH)
+ if (gSpecialVar_Result == 1 || player_get_direction_lower_nybble() != DIR_NORTH)
return FALSE;
GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203923C.x, &gUnknown_0203923C.y);
diff --git a/src/field/fldeff_strength.c b/src/field/fldeff_strength.c
index d9603d094..565ac1651 100644
--- a/src/field/fldeff_strength.c
+++ b/src/field/fldeff_strength.c
@@ -14,7 +14,7 @@ static void sub_811AA38(void);
static void sub_811AA9C(void);
extern u8 gLastFieldPokeMenuOpened;
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
extern void (*gFieldCallback)(void);
extern void (*gUnknown_03005CE4)(void);
@@ -24,7 +24,7 @@ bool8 SetUpFieldMove_Strength(void)
{
if (ShouldDoBrailleStrengthEffect())
{
- gScriptResult = gLastFieldPokeMenuOpened;
+ gSpecialVar_Result = gLastFieldPokeMenuOpened;
gFieldCallback = FieldCallback_Teleport;
gUnknown_03005CE4 = sub_811AA38;
}
@@ -32,7 +32,7 @@ bool8 SetUpFieldMove_Strength(void)
{
if (npc_before_player_of_type(87) != TRUE)
return 0;
- gScriptResult = gLastFieldPokeMenuOpened;
+ gSpecialVar_Result = gLastFieldPokeMenuOpened;
gFieldCallback = FieldCallback_Teleport;
gUnknown_03005CE4 = sub_811AA18;
}
diff --git a/src/field/item_menu.c b/src/field/item_menu.c
index 8f7cb3d90..4e283ffe9 100644
--- a/src/field/item_menu.c
+++ b/src/field/item_menu.c
@@ -138,7 +138,7 @@ EWRAM_DATA static s8 sCurrentBagPocket = 0;
EWRAM_DATA static u8 gUnknown_0203855A = 0;
EWRAM_DATA static s8 gUnknown_0203855B = 0;
EWRAM_DATA static s8 gUnknown_0203855C = 0;
-EWRAM_DATA u16 gScriptItemId = 0;
+EWRAM_DATA u16 gSpecialVar_ItemId = 0;
EWRAM_DATA u8 gUnknown_02038560 = 0;
EWRAM_DATA u8 gUnknown_02038561 = 0;
EWRAM_DATA static u8 gUnknown_02038562 = 0;
@@ -1662,7 +1662,7 @@ static void sub_80A4BF0(u16 *a)
const u8 *text;
if (i == 0)
- text = sub_80A4B90(gScriptItemId);
+ text = sub_80A4B90(gSpecialVar_ItemId);
else
text = sItemPopupMenuActions[sPopupMenuActionList[i]].text;
MenuPrint(text, 1 + (i / 2) * 6, 8 + (i % 2) * 2);
@@ -1849,7 +1849,7 @@ static void sub_80A50C8(u8 taskId)
{
if (r5[10] == 0)
{
- gScriptItemId = 0;
+ gSpecialVar_ItemId = 0;
gUnknown_083C16BC[sReturnLocation].onBagClose(taskId);
}
else
@@ -1864,7 +1864,7 @@ static void sub_80A50C8(u8 taskId)
{
PlaySE(SE_SELECT);
gUnknown_02038560 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos;
- gScriptItemId = gCurrentBagPocketItemSlots[gUnknown_02038560].itemId;
+ gSpecialVar_ItemId = gCurrentBagPocketItemSlots[gUnknown_02038560].itemId;
gUnknown_083C16BC[sReturnLocation].onItemSelect(taskId);
sub_80F98A4(0);
sub_80F98A4(1);
@@ -1887,7 +1887,7 @@ static void sub_80A50C8(u8 taskId)
{
if (sReturnLocation != RETURN_TO_FIELD_5)
{
- gScriptItemId = 0;
+ gSpecialVar_ItemId = 0;
gUnknown_083C16BC[sReturnLocation].onBagClose(taskId);
}
}
@@ -2527,7 +2527,7 @@ static void sub_80A57C4(void)
gUnknown_02038564 = 1;
r5 = 9;
}
- else if (sub_80F92F4(gScriptItemId) == 0)
+ else if (sub_80F92F4(gSpecialVar_ItemId) == 0)
{
sPopupMenuActionList = gUnknown_083C16AE[4];
gUnknown_02038564 = 1;
@@ -2654,10 +2654,10 @@ void sub_80A5B40(void)
static void HandlePopupMenuAction_UseOnField(u8 taskId)
{
- if (ItemId_GetFieldFunc(gScriptItemId) != NULL)
+ if (ItemId_GetFieldFunc(gSpecialVar_ItemId) != NULL)
{
PlaySE(SE_SELECT);
- if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gScriptItemId) == 1)
+ if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gSpecialVar_ItemId) == 1)
{
sub_80A5BF8(taskId);
}
@@ -2665,7 +2665,7 @@ static void HandlePopupMenuAction_UseOnField(u8 taskId)
{
gTasks[taskId].data[2] = 0;
if (sCurrentBagPocket != BAG_POCKET_BERRIES)
- ItemId_GetFieldFunc(gScriptItemId)(taskId);
+ ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId);
else
sub_80C9C7C(taskId);
}
@@ -2793,7 +2793,7 @@ static void sub_80A5EA0(u8 taskId)
if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
- sub_80A5DA0(gScriptItemId, gTasks[taskId].data[1]);
+ sub_80A5DA0(gSpecialVar_ItemId, gTasks[taskId].data[1]);
DoYesNoFuncWithChoice(taskId, &gUnknown_083C16F4);
}
else if (gMain.newKeys & B_BUTTON)
@@ -2827,7 +2827,7 @@ static void sub_80A5F80(u8 taskId)
static void HandlePopupMenuAction_Register(u8 taskId)
{
PlaySE(SE_SELECT);
- if (gSaveBlock1.registeredItem == gScriptItemId)
+ if (gSaveBlock1.registeredItem == gSpecialVar_ItemId)
{
// Un-register the registered item
RemoveSelectIconFromRegisteredItem();
@@ -2836,7 +2836,7 @@ static void HandlePopupMenuAction_Register(u8 taskId)
else
{
AddSelectIconToRegisteredItem();
- gSaveBlock1.registeredItem = gScriptItemId;
+ gSaveBlock1.registeredItem = gSpecialVar_ItemId;
}
sub_80A7528(0);
sub_80A41D4(taskId);
@@ -2865,7 +2865,7 @@ static void sub_80A6024(u8 taskId)
static void DisplayCannotBeHeldMessage(u8 taskId)
{
sub_80A73FC();
- CopyItemName(gScriptItemId, gStringVar1);
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
StringExpandPlaceholders(gStringVar4, gOtherText_CantBeHeld);
sub_80A7590();
DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6024, 1);
@@ -2874,13 +2874,13 @@ static void DisplayCannotBeHeldMessage(u8 taskId)
static void HandlePopupMenuAction_Give(u8 taskId)
{
PlaySE(SE_SELECT);
- if (sub_80F931C(gScriptItemId) == 0)
+ if (sub_80F931C(gSpecialVar_ItemId) == 0)
{
sub_80A73FC();
sub_80A7590();
DisplayCannotUseItemMessage(taskId, gOtherText_CantWriteMail, sub_80A6024, 1);
}
- else if (ItemId_GetImportance(gScriptItemId) == 0)
+ else if (ItemId_GetImportance(gSpecialVar_ItemId) == 0)
{
if (CalculatePlayerPartyCount() == 0)
{
@@ -2931,21 +2931,21 @@ static void OnItemSelect_PkmnList(u8 taskId)
{
u8 r6 = sCurrentBagPocket + 1;
- if (sub_80F931C(gScriptItemId) == 0)
+ if (sub_80F931C(gSpecialVar_ItemId) == 0)
{
sub_80A73FC();
sub_80A7590();
DisplayCannotUseItemMessage(taskId, gOtherText_CantWriteMail, sub_80A6024, 1);
}
- else if (sub_80F92F4(gScriptItemId) == 0)
+ else if (sub_80F92F4(gSpecialVar_ItemId) == 0)
{
sub_80A73FC();
- CopyItemName(gScriptItemId, gStringVar1);
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
StringExpandPlaceholders(gStringVar4, gOtherText_CantBeHeldHere);
sub_80A7590();
DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6024, 1);
}
- else if (r6 != 5 && ItemId_GetImportance(gScriptItemId) == 0)
+ else if (r6 != 5 && ItemId_GetImportance(gSpecialVar_ItemId) == 0)
{
gTasks[taskId].data[8] = (u32)sub_808A3F8 >> 16;
gTasks[taskId].data[9] = (u32)sub_808A3F8;
@@ -2983,8 +2983,8 @@ static void OnItemSelect_Shop(u8 taskId)
gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1;
sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos);
sub_80A73FC();
- CopyItemName(gScriptItemId, gStringVar2);
- if (ItemId_GetPrice(gScriptItemId) == 0)
+ CopyItemName(gSpecialVar_ItemId, gStringVar2);
+ if (ItemId_GetPrice(gSpecialVar_ItemId) == 0)
{
StringExpandPlaceholders(gStringVar4, gOtherText_CantBuyThat);
DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6444, 1);
@@ -3025,7 +3025,7 @@ static void sub_80A648C(u8 taskId)
sub_80A418C(1, 1, 1, 11, 3);
else
sub_80A418C(1, 1, 1, 11, 2);
- BuyMenuDisplayMessage(gScriptItemId, 1);
+ BuyMenuDisplayMessage(gSpecialVar_ItemId, 1);
sub_80A683C();
}
@@ -3047,7 +3047,7 @@ static void sub_80A6548(u8 taskId)
static void sub_80A6574(u8 taskId)
{
PlaySE(SE_REGI);
- sub_80A6870(gScriptItemId, gTasks[taskId].data[1]);
+ sub_80A6870(gSpecialVar_ItemId, gTasks[taskId].data[1]);
gTasks[taskId].func = sub_80A6548;
}
@@ -3055,7 +3055,7 @@ static void sub_80A65AC(u8 taskId)
{
MenuZeroFillWindowRect(7, 6, 13, 12);
sub_80A36B8(gBGTilemapBuffers[1], 7, 6, 6, 6);
- CopyItemName(gScriptItemId, gStringVar2);
+ CopyItemName(gSpecialVar_ItemId, gStringVar2);
StringExpandPlaceholders(gStringVar4, gOtherText_SoldItem);
DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6574, 1);
sub_80A3D5C(taskId);
@@ -3079,14 +3079,14 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId)
if (sub_80A5350(taskId) == TRUE)
{
MenuZeroFillWindowRect(6, 11, 12, 11);
- BuyMenuDisplayMessage(gScriptItemId, gTasks[taskId].data[1]);
+ BuyMenuDisplayMessage(gSpecialVar_ItemId, gTasks[taskId].data[1]);
}
else if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
MenuZeroFillWindowRect(0, 10, 13, 13);
sub_80A36B8(gBGTilemapBuffers[1], 0, 10, 13, 3);
- ConvertIntToDecimalStringN(gStringVar1, ItemId_GetPrice(gScriptItemId) / 2 * gTasks[taskId].data[1], STR_CONV_MODE_LEFT_ALIGN, 6);
+ ConvertIntToDecimalStringN(gStringVar1, ItemId_GetPrice(gSpecialVar_ItemId) / 2 * gTasks[taskId].data[1], STR_CONV_MODE_LEFT_ALIGN, 6);
StringExpandPlaceholders(gStringVar4, gOtherText_CanPay);
DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6650, 1);
}
@@ -3227,7 +3227,7 @@ static void sub_80A6A84(u8 taskId)
s16 *taskData = gTasks[taskId].data;
sub_80A4DA4(gBGTilemapBuffers[1]);
- CopyItemName(gScriptItemId, gStringVar1);
+ CopyItemName(gSpecialVar_ItemId, gStringVar1);
ConvertIntToDecimalStringN(gStringVar2, taskData[1], STR_CONV_MODE_LEFT_ALIGN, 3);
MenuZeroFillWindowRect(7, 6, 11, 13);
sub_80A7528(7);
@@ -3250,14 +3250,14 @@ static void sub_80A6B64(u8 taskId)
{
s16 *taskData = gTasks[taskId].data;
- if (ItemId_GetImportance(gScriptItemId) == 2)
+ if (ItemId_GetImportance(gSpecialVar_ItemId) == 2)
{
gTasks[taskId].func = sub_80A6B00;
sub_80A7528(9);
}
else
{
- if (AddPCItem(gScriptItemId, taskData[1]) == TRUE)
+ if (AddPCItem(gSpecialVar_ItemId, taskData[1]) == TRUE)
{
sub_80A6A84(taskId);
}
@@ -3325,7 +3325,7 @@ bool32 sub_80A6D1C(void)
FreezeMapObjects();
sub_80594C0();
sub_80597F4();
- gScriptItemId = gSaveBlock1.registeredItem;
+ gSpecialVar_ItemId = gSaveBlock1.registeredItem;
taskId = CreateTask(ItemId_GetFieldFunc(gSaveBlock1.registeredItem), 8);
gTasks[taskId].data[2] = 1;
return TRUE;
@@ -3415,7 +3415,7 @@ static const u8 gUnknown_083C170A[] = {5, 0};
static void sub_80A6FDC(void)
{
- if (ItemId_GetBattleUsage(gScriptItemId) != 0)
+ if (ItemId_GetBattleUsage(gSpecialVar_ItemId) != 0)
{
sPopupMenuActionList = gUnknown_083C1708;
gUnknown_02038564 = 2;
@@ -3454,10 +3454,10 @@ static void OnBagClose_Battle(u8 taskId)
static void HandlePopupMenuAction_UseInBattle(u8 taskId)
{
- if (ItemId_GetBattleFunc(gScriptItemId) != NULL)
+ if (ItemId_GetBattleFunc(gSpecialVar_ItemId) != NULL)
{
PlaySE(SE_SELECT);
- ItemId_GetBattleFunc(gScriptItemId)(taskId);
+ ItemId_GetBattleFunc(gSpecialVar_ItemId)(taskId);
}
}
@@ -3525,7 +3525,7 @@ static void sub_80A7230(u8 taskId)
PlaySE(SE_SELECT);
sub_80F98A4(2);
sub_80F98A4(3);
- gScriptItemId = ITEM_POKE_BALL;
+ gSpecialVar_ItemId = ITEM_POKE_BALL;
sPopupMenuActionList = gUnknown_083C1708;
gUnknown_02038564 = 2;
gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1;
@@ -3824,7 +3824,7 @@ static void sub_80A7768(void)
int var;
if (r4->unk1 == 1)
- text = sub_80A4B90(gScriptItemId);
+ text = sub_80A4B90(gSpecialVar_ItemId);
else
text = sItemPopupMenuActions[sPopupMenuActionList[r4->unk1 - 1]].text;
var = r4->unk1 - 1;
diff --git a/src/field/item_use.c b/src/field/item_use.c
index c2e71070c..37cd8ba78 100644
--- a/src/field/item_use.c
+++ b/src/field/item_use.c
@@ -80,10 +80,10 @@ void ExecuteSwitchToOverworldFromItemUse(u8 taskId)
{
u8 taskData;
- if (gScriptItemId == 0xAF)
+ if (gSpecialVar_ItemId == 0xAF)
taskData = gTasks[taskId].data[15] - 1;
else
- taskData = ItemId_GetType(gScriptItemId) - 1;
+ taskData = ItemId_GetType(gSpecialVar_ItemId) - 1;
gTasks[taskId].data[8] = (u32)gExitToOverworldFuncList[taskData] >> 16;
gTasks[taskId].data[9] = (u32)gExitToOverworldFuncList[taskData];
@@ -157,7 +157,7 @@ void ItemMenu_ReadMail(u8 taskId)
if (!gPaletteFade.active)
{
- mailStruct.itemId = gScriptItemId;
+ mailStruct.itemId = gSpecialVar_ItemId;
HandleReadMail(&mailStruct, sub_80A5D04, 0);
DestroyTask(taskId);
}
@@ -199,9 +199,9 @@ void ItemUseOutOfBattle_Bike(u8 taskId)
void ItemUseOnFieldCB_Bike(u8 taskId)
{
- if (ItemId_GetSecondaryId(gScriptItemId) == 0)
+ if (ItemId_GetSecondaryId(gSpecialVar_ItemId) == 0)
GetOnOffBike(2);
- if (ItemId_GetSecondaryId(gScriptItemId) == 1)
+ if (ItemId_GetSecondaryId(gSpecialVar_ItemId) == 1)
GetOnOffBike(4);
sub_8064E2C();
@@ -252,7 +252,7 @@ void ItemUseOutOfBattle_Rod(u8 taskId)
void ItemUseOnFieldCB_Rod(u8 taskId)
{
- StartFishing(ItemId_GetSecondaryId(gScriptItemId));
+ StartFishing(ItemId_GetSecondaryId(gSpecialVar_ItemId));
DestroyTask(taskId);
}
@@ -770,11 +770,11 @@ void ItemUseOutOfBattle_SSTicket(u8 taskId)
if (gTasks[taskId].data[2] == 0)
{
MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14);
- DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gScriptItemId)], sub_80C9BB8, 1);
+ DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gSpecialVar_ItemId)], sub_80C9BB8, 1);
}
else
{
- DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gScriptItemId)], sub_80C9BD8, 0);
+ DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gSpecialVar_ItemId)], sub_80C9BD8, 0);
}
}
@@ -791,13 +791,13 @@ void sub_80C9C7C(u8 taskId)
}
else
{
- ItemId_GetFieldFunc(gScriptItemId)(taskId);
+ ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId);
}
}
void sub_80C9D00(u8 taskId)
{
- RemoveBagItem(gScriptItemId, 1);
+ RemoveBagItem(gSpecialVar_ItemId, 1);
ScriptContext2_Enable();
ScriptContext1_SetupScript(gUnknown_081A1654);
DestroyTask(taskId);
@@ -876,7 +876,7 @@ void ItemUseOutOfBattle_TMHM(u8 taskId)
{
MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14);
- if (gScriptItemId >= ITEM_HM01)
+ if (gSpecialVar_ItemId >= ITEM_HM01)
DisplayItemMessageOnField(taskId, gOtherText_BootedHM, sub_80C9EE4, 1); // HM
else
DisplayItemMessageOnField(taskId, gOtherText_BootedTM, sub_80C9EE4, 1); // TM
@@ -892,7 +892,7 @@ void sub_80C9F10(u8 taskId)
{
if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
{
- StringCopy(gStringVar1, gMoveNames[ItemIdToBattleMoveId(gScriptItemId)]);
+ StringCopy(gStringVar1, gMoveNames[ItemIdToBattleMoveId(gSpecialVar_ItemId)]);
StringExpandPlaceholders(gStringVar4, gOtherText_ContainsMove);
DisplayItemMessageOnField(taskId, gStringVar4, sub_80C9F80, 1);
}
@@ -913,9 +913,9 @@ void sub_80C9FC0(u8 var)
static void PrepareItemUseMessage(void)
{
- RemoveBagItem(gScriptItemId, 1);
+ RemoveBagItem(gSpecialVar_ItemId, 1);
sub_80A3E0C();
- CopyItemName(gScriptItemId, gStringVar2);
+ CopyItemName(gSpecialVar_ItemId, gStringVar2);
StringExpandPlaceholders(gStringVar4, gOtherText_UsedItem);
}
@@ -923,7 +923,7 @@ void ItemUseOutOfBattle_Repel(u8 var)
{
if (VarGet(VAR_REPEL_STEP_COUNT) == FALSE)
{
- VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gScriptItemId));
+ VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gSpecialVar_ItemId));
PrepareItemUseMessage();
DisplayItemMessageOnField(var, gStringVar4, CleanUpItemMenuMessage, 1);
}
@@ -936,7 +936,7 @@ void ItemUseOutOfBattle_Repel(u8 var)
void sub_80CA07C(void)
{
sub_80A3E0C();
- CopyItemName(gScriptItemId, gStringVar2);
+ CopyItemName(gSpecialVar_ItemId, gStringVar2);
}
void sub_80CA098(u8 taskId)
@@ -950,7 +950,7 @@ void sub_80CA098(u8 taskId)
void ItemUseOutOfBattle_BlackWhiteFlute(u8 taskId)
{
- if (gScriptItemId == ITEM_WHITE_FLUTE)
+ if (gSpecialVar_ItemId == ITEM_WHITE_FLUTE)
{
FlagSet(FLAG_SYS_ENC_UP_ITEM);
FlagClear(FLAG_SYS_ENC_DOWN_ITEM);
@@ -959,7 +959,7 @@ void ItemUseOutOfBattle_BlackWhiteFlute(u8 taskId)
gTasks[taskId].func = sub_80CA098;
gTasks[taskId].data[15] = 0;
}
- else if (gScriptItemId == ITEM_BLACK_FLUTE)
+ else if (gSpecialVar_ItemId == ITEM_BLACK_FLUTE)
{
FlagSet(FLAG_SYS_ENC_DOWN_ITEM);
FlagClear(FLAG_SYS_ENC_UP_ITEM);
@@ -1016,7 +1016,7 @@ void ItemUseInBattle_PokeBall(u8 var)
{
if (PlayerPartyAndPokemonStorageFull() == FALSE) // have room for mon?
{
- RemoveBagItem(gScriptItemId, 1);
+ RemoveBagItem(gSpecialVar_ItemId, 1);
sub_80A7094(var);
}
else
@@ -1037,8 +1037,8 @@ void sub_80CA2BC(u8 taskId)
if(++gTasks[taskId].data[15] > 7)
{
PlaySE(SE_KAIFUKU);
- RemoveBagItem(gScriptItemId, 1);
- DisplayItemMessageOnField(taskId, sub_803F378(gScriptItemId), sub_80CA294, 1);
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ DisplayItemMessageOnField(taskId, sub_803F378(gSpecialVar_ItemId), sub_80CA294, 1);
}
}
@@ -1048,7 +1048,7 @@ void ItemUseInBattle_StatIncrease(u8 taskId)
MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14);
- if (ExecuteTableBasedItemEffect_(&gPlayerParty[partyId], gScriptItemId, partyId, 0) != FALSE)
+ if (ExecuteTableBasedItemEffect_(&gPlayerParty[partyId], gSpecialVar_ItemId, partyId, 0) != FALSE)
{
DisplayItemMessageOnField(taskId, gOtherText_WontHaveAnyEffect, CleanUpItemMenuMessage, 1);
}
@@ -1097,9 +1097,9 @@ void unref_sub_80CA448(u8 var)
{
MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14);
- if (ExecuteTableBasedItemEffect__(0, gScriptItemId, 0) == FALSE)
+ if (ExecuteTableBasedItemEffect__(0, gSpecialVar_ItemId, 0) == FALSE)
{
- RemoveBagItem(gScriptItemId, 1);
+ RemoveBagItem(gSpecialVar_ItemId, 1);
GetMonNickname(&gPlayerParty[0], gStringVar1);
StringExpandPlaceholders(gStringVar4, gOtherText_SnapConfusion);
DisplayItemMessageOnField(var, gStringVar4, sub_80A7094, 1);
@@ -1127,7 +1127,7 @@ void ItemUseInBattle_Escape(u8 taskId)
void ItemUseOutOfBattle_EnigmaBerry(u8 taskId)
{
- switch (GetItemEffectType(gScriptItemId) - 1)
+ switch (GetItemEffectType(gSpecialVar_ItemId) - 1)
{
case 1:
case 2:
@@ -1170,7 +1170,7 @@ void ItemUseOutOfBattle_EnigmaBerry(u8 taskId)
void ItemUseInBattle_EnigmaBerry(u8 taskId)
{
- switch (GetItemEffectType(gScriptItemId))
+ switch (GetItemEffectType(gSpecialVar_ItemId))
{
case 0:
ItemUseInBattle_StatIncrease(taskId);
diff --git a/src/field/lottery_corner.c b/src/field/lottery_corner.c
index 2cfdb7f88..83febc56e 100644
--- a/src/field/lottery_corner.c
+++ b/src/field/lottery_corner.c
@@ -7,7 +7,7 @@
#include "string_util.h"
#include "text.h"
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
extern u16 gSpecialVar_0x8004;
extern struct PokemonStorage gPokemonStorage;
extern u16 gSpecialVar_0x8005;
@@ -46,7 +46,7 @@ void SetRandomLotteryNumber(u16 i)
void RetrieveLotteryNumber(void)
{
u16 lottoNumber = GetLotteryNumber();
- gScriptResult = lottoNumber;
+ gSpecialVar_Result = lottoNumber;
}
void PickLotteryCornerTicket(void)
@@ -70,7 +70,7 @@ void PickLotteryCornerTicket(void)
if (!GetMonData(pkmn, MON_DATA_IS_EGG))
{
u32 otId = GetMonData(pkmn, MON_DATA_OT_ID);
- u8 numMatchingDigits = GetMatchingDigits(gScriptResult, otId);
+ u8 numMatchingDigits = GetMatchingDigits(gSpecialVar_Result, otId);
if (numMatchingDigits > gSpecialVar_0x8004 && numMatchingDigits > 1)
{
@@ -97,7 +97,7 @@ void PickLotteryCornerTicket(void)
!GetBoxMonData(pkmn, MON_DATA_IS_EGG))
{
u32 otId = GetBoxMonData(pkmn, MON_DATA_OT_ID);
- u8 numMatchingDigits = GetMatchingDigits(gScriptResult, otId);
+ u8 numMatchingDigits = GetMatchingDigits(gSpecialVar_Result, otId);
if (numMatchingDigits > gSpecialVar_0x8004 && numMatchingDigits > 1)
{
diff --git a/src/field/map_obj_lock.c b/src/field/map_obj_lock.c
index 91feaf177..954fcb446 100644
--- a/src/field/map_obj_lock.c
+++ b/src/field/map_obj_lock.c
@@ -6,7 +6,7 @@
#include "script_movement.h"
#include "task.h"
-extern u16 gScriptFacing;
+extern u16 gSpecialVar_Facing;
bool8 walkrun_is_standing_still(void)
{
@@ -109,7 +109,7 @@ void unref_sub_8064E5C(void)
void sub_8064EAC(void)
{
- FieldObjectFaceOppositeDirection(&gMapObjects[gSelectedMapObject], gScriptFacing);
+ FieldObjectFaceOppositeDirection(&gMapObjects[gSelectedMapObject], gSpecialVar_Facing);
}
void sub_8064ED4(void)
diff --git a/src/field/mauville_man.c b/src/field/mauville_man.c
index fad6674db..30f6f5233 100644
--- a/src/field/mauville_man.c
+++ b/src/field/mauville_man.c
@@ -21,7 +21,7 @@
extern struct MusicPlayerInfo gMPlay_SE2;
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
extern u16 gSpecialVar_0x8004;
extern const u8 gTextStoryteller_Story1Title[];
@@ -258,12 +258,12 @@ static u8 GetCurrentMauvilleOldMan(void)
void ScrSpecial_GetCurrentMauvilleMan(void)
{
- gScriptResult = GetCurrentMauvilleOldMan();
+ gSpecialVar_Result = GetCurrentMauvilleOldMan();
}
void ScrSpecial_HasBardSongBeenChanged(void)
{
- u16 *scriptResult = &gScriptResult; // why??
+ u16 *scriptResult = &gSpecialVar_Result; // why??
struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard;
*scriptResult = bard->hasChangedSong;
@@ -350,7 +350,7 @@ void ScrSpecial_PlayBardSong(void)
void ScrSpecial_GetHipsterSpokenFlag(void)
{
- u16 *scriptResult = &gScriptResult; // again??
+ u16 *scriptResult = &gSpecialVar_Result; // again??
struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster;
*scriptResult = hipster->alreadySpoken;
@@ -369,12 +369,12 @@ void ScrSpecial_HipsterTeachWord(void)
if (var == 0xFFFF)
{
- gScriptResult = FALSE;
+ gSpecialVar_Result = FALSE;
}
else
{
EasyChat_GetWordText(gStringVar1, var);
- gScriptResult = TRUE;
+ gSpecialVar_Result = TRUE;
}
}
@@ -384,12 +384,12 @@ void ScrSpecial_GiddyShouldTellAnotherTale(void)
if (giddy->taleCounter == 10)
{
- gScriptResult = FALSE;
+ gSpecialVar_Result = FALSE;
giddy->taleCounter = 0;
}
else
{
- gScriptResult = TRUE;
+ gSpecialVar_Result = TRUE;
}
}
@@ -421,7 +421,7 @@ void ScrSpecial_GenerateGiddyLine(void)
else
giddy->taleCounter++;
- gScriptResult = TRUE;
+ gSpecialVar_Result = TRUE;
}
#ifdef NONMATCHING
@@ -1251,11 +1251,11 @@ static void Task_StoryListMenu(u8 taskId)
break;
if (selection == -1 || selection == GetFreeStorySlot())
{
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
}
else
{
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
gUnknown_03000748 = selection;
}
HandleDestroyMenuCursors();
@@ -1266,7 +1266,7 @@ static void Task_StoryListMenu(u8 taskId)
}
}
-// Sets gScriptResult to TRUE if player selected a story
+// Sets gSpecialVar_Result to TRUE if player selected a story
void ScrSpecial_StorytellerStoryListMenu(void)
{
CreateTask(Task_StoryListMenu, 0x50);
diff --git a/src/field/party_menu.c b/src/field/party_menu.c
index 7d21c365a..089f93f9e 100644
--- a/src/field/party_menu.c
+++ b/src/field/party_menu.c
@@ -4314,7 +4314,7 @@ void TaughtMove(u8 taskId)
u16 r4;
gTasks[taskId].func = TaskDummy;
- sub_806E8D0(taskId, gScriptItemId, sub_808B508);
+ sub_806E8D0(taskId, gSpecialVar_ItemId, sub_808B508);
moveIndex = sub_809FA30();
r4 = GetMonData(ewram1C000.pokemon, MON_DATA_MOVE1 + moveIndex);
GetMonNickname(ewram1C000.pokemon, gStringVar1);
@@ -4340,7 +4340,7 @@ void StopTryingToTeachMove_806F588(u8 taskId)
if (!gPaletteFade.active)
{
gTasks[taskId].func = TaskDummy;
- sub_806E8D0(taskId, gScriptItemId, sub_808B508);
+ sub_806E8D0(taskId, gSpecialVar_ItemId, sub_808B508);
StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]);
StringExpandPlaceholders(gStringVar4, gOtherText_StopTryingTo);
sub_806E834(gStringVar4, 1);
diff --git a/src/field/pokeblock.c b/src/field/pokeblock.c
index 3b70e7d76..4a904fbb1 100644
--- a/src/field/pokeblock.c
+++ b/src/field/pokeblock.c
@@ -664,7 +664,7 @@ static void sub_810BF7C(u8 taskId)
PlaySE(SE_SELECT);
if (gUnknown_02039248.unk1 + gUnknown_02039248.unk0 == gUnknown_02039248.unk2)
{
- gScriptResult = 0xffff;
+ gSpecialVar_Result = 0xffff;
sub_810C31C(taskId);
}
else
@@ -675,7 +675,7 @@ static void sub_810BF7C(u8 taskId)
else if (gMain.newKeys & B_BUTTON)
{
PlaySE(SE_SELECT);
- gScriptResult = 0xffff;
+ gSpecialVar_Result = 0xffff;
sub_810C31C(taskId);
}
}
@@ -800,7 +800,7 @@ static void sub_810C31C(u8 taskId)
BeginNormalPaletteFade(-1, 0, 0, 16, 0);
if (gUnknown_02039244 > 1)
{
- gScriptItemId = ITEM_NONE;
+ gSpecialVar_ItemId = ITEM_NONE;
}
gTasks[taskId].func = sub_810C2C8;
}
@@ -816,7 +816,7 @@ static void sub_810C368(u8 taskId)
MenuDrawTextWindow(7, v0 + 4, 13, 11);
PrintMenuItemsReordered(8, v0 + 5, gUnknown_0203924C, gUnknown_083F7EF4, gUnknown_03000758);
InitMenu(0, 8, v0 + 5, gUnknown_0203924C, 0, 5);
- gScriptItemId = gUnknown_02039248.unk0 + gUnknown_02039248.unk1;
+ gSpecialVar_ItemId = gUnknown_02039248.unk0 + gUnknown_02039248.unk1;
gTasks[taskId].func = sub_810C40C;
}
@@ -855,7 +855,7 @@ static void sub_810C4C4(u8 taskId)
if (!gPaletteFade.active)
{
sub_810C2B0();
- sub_8136130(&gSaveBlock1.pokeblocks[gScriptItemId], sub_810B96C);
+ sub_8136130(&gSaveBlock1.pokeblocks[gSpecialVar_ItemId], sub_810B96C);
DestroyTask(taskId);
}
}
@@ -939,21 +939,21 @@ static void sub_810C748(u8 taskId)
static void sub_810C788(u8 taskId)
{
- s16 v0 = PokeblockGetGain(GetNature(&gEnemyParty[0]), &gSaveBlock1.pokeblocks[gScriptItemId]);
- StringCopy(gBattleTextBuff1, gPokeblockNames[gSaveBlock1.pokeblocks[gScriptItemId].color]);
- PokeblockClearIfExists(gScriptItemId);
- gScriptItemId = gSaveBlock1.pokeblocks[gScriptItemId].color << 8;
+ s16 v0 = PokeblockGetGain(GetNature(&gEnemyParty[0]), &gSaveBlock1.pokeblocks[gSpecialVar_ItemId]);
+ StringCopy(gBattleTextBuff1, gPokeblockNames[gSaveBlock1.pokeblocks[gSpecialVar_ItemId].color]);
+ PokeblockClearIfExists(gSpecialVar_ItemId);
+ gSpecialVar_ItemId = gSaveBlock1.pokeblocks[gSpecialVar_ItemId].color << 8;
if (v0 == 0)
{
- gScriptItemId += 1;
+ gSpecialVar_ItemId += 1;
}
if (v0 > 0)
{
- gScriptItemId += 2;
+ gSpecialVar_ItemId += 2;
}
if (v0 < 0)
{
- gScriptItemId += 3;
+ gSpecialVar_ItemId += 3;
}
BeginNormalPaletteFade(-1, 0, 0, 16, 0);
gTasks[taskId].func = sub_810C2C8;
@@ -961,10 +961,10 @@ static void sub_810C788(u8 taskId)
static void sub_810C854(u8 taskId)
{
- SafariZoneActivatePokeblockFeeder(gScriptItemId);
- StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[gScriptItemId].color]);
- gScriptResult = gScriptItemId;
- PokeblockClearIfExists(gScriptItemId);
+ SafariZoneActivatePokeblockFeeder(gSpecialVar_ItemId);
+ StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[gSpecialVar_ItemId].color]);
+ gSpecialVar_Result = gSpecialVar_ItemId;
+ PokeblockClearIfExists(gSpecialVar_ItemId);
BeginNormalPaletteFade(-1, 0, 0, 16, 0);
gTasks[taskId].func = sub_810C2C8;
}
diff --git a/src/field/safari_zone.c b/src/field/safari_zone.c
index 73fb01f3e..e9ca3a9f9 100644
--- a/src/field/safari_zone.c
+++ b/src/field/safari_zone.c
@@ -37,7 +37,7 @@ extern u8 gUnknown_081C3448;
extern u8 gUnknown_081C3459;
extern u8 *gPokeblockNames[];
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
bool32 GetSafariZoneFlag(void)
{
@@ -137,13 +137,13 @@ void SafariZoneGetPokeblockNameInFeeder(void)
&& gPokeblockFeeders[i].x == x
&& gPokeblockFeeders[i].y == y)
{
- gScriptResult = i;
+ gSpecialVar_Result = i;
StringCopy(gStringVar1, gPokeblockNames[gPokeblockFeeders[i].pokeblock.color]);
return;
}
}
- gScriptResult = -1;
+ gSpecialVar_Result = -1;
}
static void GetPokeblockFeederWithinRange(void)
@@ -166,23 +166,23 @@ static void GetPokeblockFeederWithinRange(void)
y *= -1;
if ((x + y) <= 5)
{
- gScriptResult = i;
+ gSpecialVar_Result = i;
return;
}
}
}
- gScriptResult = -1;
+ gSpecialVar_Result = -1;
}
struct Pokeblock *unref_sub_80C8418(void)
{
SafariZoneGetPokeblockNameInFeeder();
- if (gScriptResult == 0xFFFF)
+ if (gSpecialVar_Result == 0xFFFF)
return NULL;
else
- return &gPokeblockFeeders[gScriptResult].pokeblock;
+ return &gPokeblockFeeders[gSpecialVar_Result].pokeblock;
}
@@ -190,10 +190,10 @@ struct Pokeblock *SafariZoneGetActivePokeblock(void)
{
GetPokeblockFeederWithinRange();
- if (gScriptResult == 0xFFFF)
+ if (gSpecialVar_Result == 0xFFFF)
return NULL;
else
- return &gPokeblockFeeders[gScriptResult].pokeblock;
+ return &gPokeblockFeeders[gSpecialVar_Result].pokeblock;
}
@@ -240,13 +240,13 @@ bool8 unref_sub_80C853C(void)
{
SafariZoneGetPokeblockNameInFeeder();
- if (gScriptResult == 0xFFFF)
+ if (gSpecialVar_Result == 0xFFFF)
{
return FALSE;
}
ConvertIntToDecimalStringN(gStringVar2,
- gPokeblockFeeders[gScriptResult].stepCounter,
+ gPokeblockFeeders[gSpecialVar_Result].stepCounter,
STR_CONV_MODE_LEADING_ZEROS, 3);
return TRUE;
diff --git a/src/field/scrcmd.c b/src/field/scrcmd.c
index e6305d9c4..d5fc56e8d 100644
--- a/src/field/scrcmd.c
+++ b/src/field/scrcmd.c
@@ -61,9 +61,9 @@ extern u16 gSpecialVar_0x8001;
extern u16 gSpecialVar_0x8002;
extern u16 gSpecialVar_0x8004;
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
-extern u16 gScriptContestCategory;
+extern u16 gSpecialVar_ContestCategory;
extern SpecialFunc gSpecials[];
extern u8 *gStdScripts[];
@@ -479,25 +479,25 @@ bool8 ScrCmd_random(struct ScriptContext *ctx)
{
u16 max = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = Random() % max;
+ gSpecialVar_Result = Random() % max;
return FALSE;
}
-bool8 ScrCmd_additem(struct ScriptContext *ctx)
+bool8 ScrCmd_giveitem(struct ScriptContext *ctx)
{
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u32 quantity = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = AddBagItem(itemId, (u8)quantity);
+ gSpecialVar_Result = AddBagItem(itemId, (u8)quantity);
return FALSE;
}
-bool8 ScrCmd_removeitem(struct ScriptContext *ctx)
+bool8 ScrCmd_takeitem(struct ScriptContext *ctx)
{
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u32 quantity = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = RemoveBagItem(itemId, (u8)quantity);
+ gSpecialVar_Result = RemoveBagItem(itemId, (u8)quantity);
return FALSE;
}
@@ -506,7 +506,7 @@ bool8 ScrCmd_checkitemspace(struct ScriptContext *ctx)
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u32 quantity = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = CheckBagHasSpace(itemId, (u8)quantity);
+ gSpecialVar_Result = CheckBagHasSpace(itemId, (u8)quantity);
return FALSE;
}
@@ -515,7 +515,7 @@ bool8 ScrCmd_checkitem(struct ScriptContext *ctx)
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u32 quantity = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = CheckBagHasItem(itemId, (u8)quantity);
+ gSpecialVar_Result = CheckBagHasItem(itemId, (u8)quantity);
return FALSE;
}
@@ -523,16 +523,16 @@ bool8 ScrCmd_checkitemtype(struct ScriptContext *ctx)
{
u16 itemId = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = GetPocketByItemId(itemId);
+ gSpecialVar_Result = GetPocketByItemId(itemId);
return FALSE;
}
-bool8 ScrCmd_addpcitem(struct ScriptContext *ctx)
+bool8 ScrCmd_givepcitem(struct ScriptContext *ctx)
{
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u16 quantity = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = AddPCItem(itemId, quantity);
+ gSpecialVar_Result = AddPCItem(itemId, quantity);
return FALSE;
}
@@ -541,39 +541,39 @@ bool8 ScrCmd_checkpcitem(struct ScriptContext *ctx)
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u16 quantity = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = CheckPCHasItem(itemId, quantity);
+ gSpecialVar_Result = CheckPCHasItem(itemId, quantity);
return FALSE;
}
-bool8 ScrCmd_adddecor(struct ScriptContext *ctx)
+bool8 ScrCmd_givedecoration(struct ScriptContext *ctx)
{
- u32 decorId = VarGet(ScriptReadHalfword(ctx));
+ u32 decoration = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = IsThereStorageSpaceForDecoration(decorId);
+ gSpecialVar_Result = IsThereStorageSpaceForDecoration(decoration);
return FALSE;
}
-bool8 ScrCmd_removedecor(struct ScriptContext *ctx)
+bool8 ScrCmd_takedecoration(struct ScriptContext *ctx)
{
- u32 decorId = VarGet(ScriptReadHalfword(ctx));
+ u32 decoration = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = sub_81340A8(decorId);
+ gSpecialVar_Result = sub_81340A8(decoration);
return FALSE;
}
-bool8 ScrCmd_checkdecor(struct ScriptContext *ctx)
+bool8 ScrCmd_checkdecorspace(struct ScriptContext *ctx)
{
u32 decorId = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = sub_8134074(decorId);
+ gSpecialVar_Result = sub_8134074(decorId);
return FALSE;
}
-bool8 ScrCmd_hasdecor(struct ScriptContext *ctx)
+bool8 ScrCmd_checkdecor(struct ScriptContext *ctx)
{
u32 decorId = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = sub_8133FE4(decorId);
+ gSpecialVar_Result = sub_8133FE4(decorId);
return FALSE;
}
@@ -601,14 +601,14 @@ bool8 ScrCmd_incrementgamestat(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_animdarklevel(struct ScriptContext *ctx)
+bool8 ScrCmd_animateflash(struct ScriptContext *ctx)
{
sub_8081594(ScriptReadByte(ctx));
ScriptContext1_Stop();
return TRUE;
}
-bool8 ScrCmd_setdarklevel(struct ScriptContext *ctx)
+bool8 ScrCmd_setflashradius(struct ScriptContext *ctx)
{
u16 flashLevel = VarGet(ScriptReadHalfword(ctx));
@@ -631,7 +631,7 @@ bool8 ScrCmd_fadescreen(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_fadescreendelay(struct ScriptContext *ctx)
+bool8 ScrCmd_fadescreenspeed(struct ScriptContext *ctx)
{
u8 duration = ScriptReadByte(ctx);
u8 delay = ScriptReadByte(ctx);
@@ -641,7 +641,7 @@ bool8 ScrCmd_fadescreendelay(struct ScriptContext *ctx)
return TRUE;
}
-bool8 s28_pause_asm()
+bool8 RunPauseTimer()
{
sPauseCounter--;
@@ -654,7 +654,7 @@ bool8 s28_pause_asm()
bool8 ScrCmd_delay(struct ScriptContext *ctx)
{
sPauseCounter = ScriptReadHalfword(ctx);
- SetupNativeScript(ctx, s28_pause_asm);
+ SetupNativeScript(ctx, RunPauseTimer);
return TRUE;
}
@@ -702,7 +702,7 @@ bool8 ScrCmd_doweather(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_tileeffect(struct ScriptContext *ctx)
+bool8 ScrCmd_setstepcallback(struct ScriptContext *ctx)
{
ActivatePerStepCallback(ScriptReadByte(ctx));
return FALSE;
@@ -859,9 +859,9 @@ bool8 ScrCmd_getplayerxy(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_countpokemon(struct ScriptContext *ctx)
+bool8 ScrCmd_getpartysize(struct ScriptContext *ctx)
{
- gScriptResult = CalculatePlayerPartyCount();
+ gSpecialVar_Result = CalculatePlayerPartyCount();
return FALSE;
}
@@ -871,7 +871,7 @@ bool8 ScrCmd_playse(struct ScriptContext *ctx)
return FALSE;
}
-static bool8 WaitForSoundEffectFinish()
+static bool8 WaitForSoundEffectFinish(void)
{
if (!IsSEPlaying())
return TRUE;
@@ -891,7 +891,7 @@ bool8 ScrCmd_playfanfare(struct ScriptContext *ctx)
return FALSE;
}
-static bool8 WaitForFanfareFinish()
+static bool8 WaitForFanfareFinish(void)
{
return IsFanfareTaskInactive();
}
@@ -1073,7 +1073,7 @@ bool8 ScrCmd_moveobjectoffscreen(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_showobject(struct ScriptContext *ctx)
+bool8 ScrCmd_showobjectat(struct ScriptContext *ctx)
{
u16 localId = VarGet(ScriptReadHalfword(ctx));
u8 mapGroup = ScriptReadByte(ctx);
@@ -1083,7 +1083,7 @@ bool8 ScrCmd_showobject(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_hideobject(struct ScriptContext *ctx)
+bool8 ScrCmd_hideobjectat(struct ScriptContext *ctx)
{
u16 localId = VarGet(ScriptReadHalfword(ctx));
u8 mapGroup = ScriptReadByte(ctx);
@@ -1267,7 +1267,7 @@ static bool8 WaitForAorBPress(void)
return FALSE;
}
-bool8 ScrCmd_waitbutton(struct ScriptContext *ctx)
+bool8 ScrCmd_waitbuttonpress(struct ScriptContext *ctx)
{
SetupNativeScript(ctx, WaitForAorBPress);
return TRUE;
@@ -1386,7 +1386,7 @@ bool8 ScrCmd_drawboxtext(struct ScriptContext *ctx)
}
}
-bool8 ScrCmd_drawpokepic(struct ScriptContext *ctx)
+bool8 ScrCmd_drawmonpic(struct ScriptContext *ctx)
{
u16 species = VarGet(ScriptReadHalfword(ctx));
u8 x = ScriptReadByte(ctx);
@@ -1396,7 +1396,7 @@ bool8 ScrCmd_drawpokepic(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_erasepokepic(struct ScriptContext *ctx)
+bool8 ScrCmd_erasemonpic(struct ScriptContext *ctx)
{
bool8 (*func)(void) = ScriptMenu_GetPicboxWaitFunc();
@@ -1441,7 +1441,7 @@ bool8 ScrCmd_vmessage(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_getspeciesname(struct ScriptContext *ctx)
+bool8 ScrCmd_bufferspeciesname(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 species = VarGet(ScriptReadHalfword(ctx));
@@ -1450,7 +1450,7 @@ bool8 ScrCmd_getspeciesname(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_getfirstpartypokename(struct ScriptContext *ctx)
+bool8 ScrCmd_bufferleadmonspeciesname(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
@@ -1461,7 +1461,7 @@ bool8 ScrCmd_getfirstpartypokename(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_getpartypokename(struct ScriptContext *ctx)
+bool8 ScrCmd_bufferpartymonnick(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 partyIndex = VarGet(ScriptReadHalfword(ctx));
@@ -1471,7 +1471,7 @@ bool8 ScrCmd_getpartypokename(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_getitemname(struct ScriptContext *ctx)
+bool8 ScrCmd_bufferitemname(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 itemId = VarGet(ScriptReadHalfword(ctx));
@@ -1480,7 +1480,7 @@ bool8 ScrCmd_getitemname(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_getdecorname(struct ScriptContext *ctx)
+bool8 ScrCmd_bufferdecorationname(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 decorId = VarGet(ScriptReadHalfword(ctx));
@@ -1489,7 +1489,7 @@ bool8 ScrCmd_getdecorname(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_getmovename(struct ScriptContext *ctx)
+bool8 ScrCmd_buffermovename(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 moveId = VarGet(ScriptReadHalfword(ctx));
@@ -1498,7 +1498,7 @@ bool8 ScrCmd_getmovename(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_getnumberstring(struct ScriptContext *ctx)
+bool8 ScrCmd_buffernumberstring(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 v1 = VarGet(ScriptReadHalfword(ctx));
@@ -1508,7 +1508,7 @@ bool8 ScrCmd_getnumberstring(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_getstdstring(struct ScriptContext *ctx)
+bool8 ScrCmd_bufferstdstring(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 index = VarGet(ScriptReadHalfword(ctx));
@@ -1517,7 +1517,7 @@ bool8 ScrCmd_getstdstring(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_getstring(struct ScriptContext *ctx)
+bool8 ScrCmd_bufferstring(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u8 *text = (u8 *)ScriptReadWord(ctx);
@@ -1526,7 +1526,7 @@ bool8 ScrCmd_getstring(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_vloadword(struct ScriptContext *ctx)
+bool8 ScrCmd_vloadptr(struct ScriptContext *ctx)
{
u8 *ptr = (u8 *)(ScriptReadWord(ctx) - gUnknown_0202E8B0);
@@ -1534,7 +1534,7 @@ bool8 ScrCmd_vloadword(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_vgetstring(struct ScriptContext *ctx)
+bool8 ScrCmd_vbufferstring(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u32 addr = ScriptReadWord(ctx);
@@ -1545,7 +1545,7 @@ bool8 ScrCmd_vgetstring(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_givepoke(struct ScriptContext *ctx)
+bool8 ScrCmd_givemon(struct ScriptContext *ctx)
{
u16 species = VarGet(ScriptReadHalfword(ctx));
u8 level = ScriptReadByte(ctx);
@@ -1554,7 +1554,7 @@ bool8 ScrCmd_givepoke(struct ScriptContext *ctx)
u32 unkParam2 = ScriptReadWord(ctx);
u8 unkParam3 = ScriptReadByte(ctx);
- gScriptResult = ScriptGiveMon(species, level, item, unkParam1, unkParam2, unkParam3);
+ gSpecialVar_Result = ScriptGiveMon(species, level, item, unkParam1, unkParam2, unkParam3);
return FALSE;
}
@@ -1562,11 +1562,11 @@ bool8 ScrCmd_giveegg(struct ScriptContext *ctx)
{
u16 species = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = ScriptGiveEgg(species);
+ gSpecialVar_Result = ScriptGiveEgg(species);
return FALSE;
}
-bool8 ScrCmd_setpokemove(struct ScriptContext *ctx)
+bool8 ScrCmd_setmonmove(struct ScriptContext *ctx)
{
u8 partyIndex = ScriptReadByte(ctx);
u8 slot = ScriptReadByte(ctx);
@@ -1576,13 +1576,13 @@ bool8 ScrCmd_setpokemove(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_checkpokemove(struct ScriptContext *ctx)
+bool8 ScrCmd_checkpartymove(struct ScriptContext *ctx)
{
u8 i;
u16 moveId = ScriptReadHalfword(ctx);
- gScriptResult = 6;
- for (i = 0; i < 6; i++)
+ gSpecialVar_Result = 6;
+ for (i = 0; i < PARTY_SIZE; i++)
{
u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL);
if (!species)
@@ -1590,7 +1590,7 @@ bool8 ScrCmd_checkpokemove(struct ScriptContext *ctx)
// UB: GetMonData() arguments don't match function definition
if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) && pokemon_has_move(&gPlayerParty[i], moveId) == TRUE)
{
- gScriptResult = i;
+ gSpecialVar_Result = i;
gSpecialVar_0x8004 = species;
break;
}
@@ -1624,7 +1624,7 @@ bool8 ScrCmd_checkmoney(struct ScriptContext *ctx)
u8 ignore = ScriptReadByte(ctx);
if (!ignore)
- gScriptResult = IsEnoughMoney(gSaveBlock1.money, amount);
+ gSpecialVar_Result = IsEnoughMoney(gSaveBlock1.money, amount);
return FALSE;
}
@@ -1692,19 +1692,19 @@ bool8 ScrCmd_trainerbattle(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_battlebegin(struct ScriptContext *ctx)
+bool8 ScrCmd_trainerbattlebegin(struct ScriptContext *ctx)
{
BattleSetup_StartTrainerBattle();
return TRUE;
}
-bool8 ScrCmd_ontrainerbattleend(struct ScriptContext *ctx)
+bool8 ScrCmd_gotopostbattlescript(struct ScriptContext *ctx)
{
ctx->scriptPtr = BattleSetup_GetScriptAddrAfterBattle();
return FALSE;
}
-bool8 ScrCmd_ontrainerbattleendgoto(struct ScriptContext *ctx)
+bool8 ScrCmd_gotobeatenscript(struct ScriptContext *ctx)
{
ctx->scriptPtr = BattleSetup_GetTrainerPostBattleScript();
return FALSE;
@@ -1760,7 +1760,7 @@ bool8 ScrCmd_pokemart(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_pokemartdecor(struct ScriptContext *ctx)
+bool8 ScrCmd_pokemartdecoration(struct ScriptContext *ctx)
{
void *ptr = (void *)ScriptReadWord(ctx);
@@ -1769,7 +1769,7 @@ bool8 ScrCmd_pokemartdecor(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_pokemartbp(struct ScriptContext *ctx)
+bool8 ScrCmd_pokemartdecoration2(struct ScriptContext *ctx)
{
void *ptr = (void *)ScriptReadWord(ctx);
@@ -1787,7 +1787,7 @@ bool8 ScrCmd_playslotmachine(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_plantberrytree(struct ScriptContext *ctx)
+bool8 ScrCmd_setberrytree(struct ScriptContext *ctx)
{
u8 treeId = ScriptReadByte(ctx);
u8 berry = ScriptReadByte(ctx);
@@ -1804,11 +1804,11 @@ bool8 ScrCmd_getpricereduction(struct ScriptContext *ctx)
{
u16 value = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = GetPriceReduction(value);
+ gSpecialVar_Result = GetPriceReduction(value);
return FALSE;
}
-bool8 ScrCmd_choosecontestpkmn(struct ScriptContext *ctx)
+bool8 ScrCmd_choosecontestmon(struct ScriptContext *ctx)
{
sub_80F99CC();
ScriptContext1_Stop();
@@ -1831,7 +1831,7 @@ bool8 ScrCmd_showcontestresults(struct ScriptContext *ctx)
bool8 ScrCmd_contestlinktransfer(struct ScriptContext *ctx)
{
- sub_80C4980(gScriptContestCategory);
+ sub_80C4980(gSpecialVar_ContestCategory);
ScriptContext1_Stop();
return TRUE;
}
@@ -1845,7 +1845,7 @@ bool8 ScrCmd_dofieldeffect(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_setfieldeffect(struct ScriptContext *ctx)
+bool8 ScrCmd_setfieldeffectargument(struct ScriptContext *ctx)
{
u8 argNum = ScriptReadByte(ctx);
@@ -1868,7 +1868,7 @@ bool8 ScrCmd_waitfieldeffect(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_sethealplace(struct ScriptContext *ctx)
+bool8 ScrCmd_setrespawn(struct ScriptContext *ctx)
{
u16 healLocationId = VarGet(ScriptReadHalfword(ctx));
@@ -1878,11 +1878,11 @@ bool8 ScrCmd_sethealplace(struct ScriptContext *ctx)
bool8 ScrCmd_checkplayergender(struct ScriptContext *ctx)
{
- gScriptResult = gSaveBlock2.playerGender;
+ gSpecialVar_Result = gSaveBlock2.playerGender;
return FALSE;
}
-bool8 ScrCmd_playpokecry(struct ScriptContext *ctx)
+bool8 ScrCmd_playmoncry(struct ScriptContext *ctx)
{
u16 species = VarGet(ScriptReadHalfword(ctx));
u16 mode = VarGet(ScriptReadHalfword(ctx));
@@ -1891,25 +1891,25 @@ bool8 ScrCmd_playpokecry(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_waitpokecry(struct ScriptContext *ctx)
+bool8 ScrCmd_waitmoncry(struct ScriptContext *ctx)
{
SetupNativeScript(ctx, IsCryFinished);
return TRUE;
}
-bool8 ScrCmd_setmaptile(struct ScriptContext *ctx)
+bool8 ScrCmd_setmetatile(struct ScriptContext *ctx)
{
u16 x = VarGet(ScriptReadHalfword(ctx));
u16 y = VarGet(ScriptReadHalfword(ctx));
- u16 tileId = VarGet(ScriptReadHalfword(ctx));
+ u16 metatileId = VarGet(ScriptReadHalfword(ctx));
u16 v8 = VarGet(ScriptReadHalfword(ctx));
x += 7;
y += 7;
if (!v8)
- MapGridSetMetatileIdAt(x, y, tileId);
+ MapGridSetMetatileIdAt(x, y, metatileId);
else
- MapGridSetMetatileIdAt(x, y, tileId | 0xC00);
+ MapGridSetMetatileIdAt(x, y, metatileId | 0xC00);
return FALSE;
}
@@ -2002,9 +2002,9 @@ bool8 ScrCmd_givecoins(struct ScriptContext *ctx)
u16 coins = VarGet(ScriptReadHalfword(ctx));
if (GiveCoins(coins) == TRUE)
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
else
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
return FALSE;
}
@@ -2013,8 +2013,8 @@ bool8 ScrCmd_takecoins(struct ScriptContext *ctx)
u16 coins = VarGet(ScriptReadHalfword(ctx));
if (TakeCoins(coins) == TRUE)
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
else
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
return FALSE;
}
diff --git a/src/field/script_menu.c b/src/field/script_menu.c
index 1f8c2c45e..9f3ab75cc 100644
--- a/src/field/script_menu.c
+++ b/src/field/script_menu.c
@@ -580,7 +580,7 @@ const u8 *const gUnknown_083CE048[] =
extern u8 gPCText_WhichPCShouldBeAccessed[];
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
static void Task_HandleMultichoiceInput(u8);
static void Task_HandleYesNoInput(u8);
@@ -599,7 +599,7 @@ bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress)
}
else
{
- gScriptResult = 0xFF;
+ gSpecialVar_Result = 0xFF;
DrawMultichoiceMenu(left, top, gMultichoiceLists[multichoiceId].count, gMultichoiceLists[multichoiceId].list, ignoreBPress, 0);
return TRUE;
}
@@ -613,7 +613,7 @@ bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 multichoiceId, u8 ig
}
else
{
- gScriptResult = 0xFF;
+ gSpecialVar_Result = 0xFF;
DrawMultichoiceMenu(left, top, gMultichoiceLists[multichoiceId].count, gMultichoiceLists[multichoiceId].list, ignoreBPress, defaultChoice);
return TRUE;
}
@@ -698,11 +698,11 @@ static void Task_HandleMultichoiceInput(u8 taskId)
if (gTasks[taskId].tIgnoreBPress)
return;
PlaySE(SE_SELECT);
- gScriptResult = 127;
+ gSpecialVar_Result = 127;
}
else
{
- gScriptResult = selection;
+ gSpecialVar_Result = selection;
}
HandleDestroyMenuCursors();
MenuZeroFillWindowRect(gTasks[taskId].tLeft, gTasks[taskId].tTop, gTasks[taskId].tRight, gTasks[taskId].tBottom);
@@ -720,7 +720,7 @@ bool8 Multichoice(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress)
}
else
{
- gScriptResult = 0xFF;
+ gSpecialVar_Result = 0xFF;
sub_80B53B4(left, top, gMultichoiceLists[multichoiceId].count, gMultichoiceLists[multichoiceId].list, ignoreBPress);
return TRUE;
}
@@ -760,7 +760,7 @@ bool8 ScriptMenu_YesNo(u8 left, u8 top)
}
else
{
- gScriptResult = 0xFF;
+ gSpecialVar_Result = 0xFF;
DisplayYesNoMenu(left, top, 1);
taskId = CreateTask(Task_HandleYesNoInput, 0x50);
gTasks[taskId].tLeft = left;
@@ -772,7 +772,7 @@ bool8 ScriptMenu_YesNo(u8 left, u8 top)
// unused
bool8 IsScriptActive(void)
{
- if (gScriptResult == 0xFF)
+ if (gSpecialVar_Result == 0xFF)
return FALSE;
else
return TRUE;
@@ -795,10 +795,10 @@ static void Task_HandleYesNoInput(u8 taskId)
case -1:
case 1:
PlaySE(SE_SELECT);
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
break;
case 0:
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
break;
}
@@ -823,7 +823,7 @@ bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPr
u8 taskId;
u8 width;
- gScriptResult = 0xFF;
+ gSpecialVar_Result = 0xFF;
sub_807274C(left, top, gMultichoiceLists[multichoiceId].count, 0, gMultichoiceLists[multichoiceId].list, columnCount, 0);
@@ -860,11 +860,11 @@ static void Task_HandleMultichoiceGridInput(u8 taskId)
if (gTasks[taskId].tIgnoreBPress)
return;
PlaySE(SE_SELECT);
- gScriptResult = 127;
+ gSpecialVar_Result = 127;
}
else
{
- gScriptResult = selection;
+ gSpecialVar_Result = selection;
}
HandleDestroyMenuCursors();
MenuZeroFillWindowRect(gTasks[taskId].tLeft, gTasks[taskId].tTop, gTasks[taskId].tRight, gTasks[taskId].tBottom);
@@ -888,7 +888,7 @@ bool8 ScrSpecial_CreatePCMenu(void)
}
else
{
- gScriptResult = 0xFF;
+ gSpecialVar_Result = 0xFF;
ScriptMenu_CreatePCMenu();
return TRUE;
}
diff --git a/src/field/secret_base.c b/src/field/secret_base.c
index bb7716190..7589ab1e3 100644
--- a/src/field/secret_base.c
+++ b/src/field/secret_base.c
@@ -175,11 +175,11 @@ void sub_80BB5D0(void)
void sub_80BB5E4(void)
{
u16 i;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
for (i = 0; i < MAX_SECRET_BASES; i++) {
if (gUnknown_020387DC != gSaveBlock1.secretBases[i].secretBaseId)
continue;
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
VarSet(VAR_0x4054, i);
break;
}
@@ -188,9 +188,9 @@ void sub_80BB5E4(void)
void sub_80BB63C(void) // 80bb63c
{
if (gSaveBlock1.secretBases[0].secretBaseId)
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
else
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
}
u8 sub_80BB66C(void) // 80bb66c
@@ -462,13 +462,13 @@ void sub_80BBDD0(void)
gSpecialVar_0x8007 = roomdecorpos[decidx] & 0xF;
metatile = MapGridGetMetatileBehaviorAt(gSpecialVar_0x8006 + 7, gSpecialVar_0x8007 + 7);
if (sub_80572D8(metatile) == TRUE || sub_80572EC(metatile) == TRUE) {
- gScriptResult = gMapHeader.events->mapObjects[objid].graphicsId + VAR_0x3F20;
- VarSet(gScriptResult, gDecorations[roomdecor[decidx]].tiles[0]);
- gScriptResult = gMapHeader.events->mapObjects[objid].localId;
+ gSpecialVar_Result = gMapHeader.events->mapObjects[objid].graphicsId + VAR_0x3F20;
+ VarSet(gSpecialVar_Result, gDecorations[roomdecor[decidx]].tiles[0]);
+ gSpecialVar_Result = gMapHeader.events->mapObjects[objid].localId;
FlagClear(gSpecialVar_0x8004 + 0xAE);
- show_sprite(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
- sub_805C0F8(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, gSpecialVar_0x8006, gSpecialVar_0x8007);
- sub_805C78C(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
+ show_sprite(gSpecialVar_Result, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
+ sub_805C0F8(gSpecialVar_Result, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, gSpecialVar_0x8006, gSpecialVar_0x8007);
+ sub_805C78C(gSpecialVar_Result, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
gSpecialVar_0x8004 ++;
}
}
@@ -504,7 +504,7 @@ bool8 sub_80BC050(void)
{
sub_80BB5D0();
sub_80BB5E4();
- if (gScriptResult == 1)
+ if (gSpecialVar_Result == 1)
return FALSE;
return TRUE;
}
@@ -539,9 +539,9 @@ void sub_80BC0F8(void) {
void sub_80BC114(void) {
if (gSaveBlock1.secretBases[0].secretBaseId != gUnknown_020387DC)
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
else
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
}
u8 sub_80BC14C(u8 sbid)
@@ -862,15 +862,15 @@ void sub_80BC56C(void)
u8 secretBaseIndex = sub_80BC14C(gUnknown_020387DC);
if (sub_80BC268(secretBaseIndex) == TRUE)
{
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
}
else if (sub_80BC538() > 9)
{
- gScriptResult = 2;
+ gSpecialVar_Result = 2;
}
else
{
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
}
}
@@ -1237,7 +1237,7 @@ void sub_80BCE1C(void)
void sub_80BCE4C()
{
- gSaveBlock1.secretBases[VarGet(VAR_0x4054)].sbr_field_1_5 = gScriptResult;
+ gSaveBlock1.secretBases[VarGet(VAR_0x4054)].sbr_field_1_5 = gSpecialVar_Result;
}
void sub_80BCE90()
@@ -1257,7 +1257,7 @@ void sub_80BCE90()
}
gSpecialVar_0x8004 = sub_80BCCA4(curBaseIndex);
- gScriptResult = gSaveBlock1.secretBases[curBaseIndex].sbr_field_1_5;
+ gSpecialVar_Result = gSaveBlock1.secretBases[curBaseIndex].sbr_field_1_5;
}
void sub_80BCF1C(u8 taskId)
diff --git a/src/field/start_menu.c b/src/field/start_menu.c
index 9f4eacd09..dccf1714e 100644
--- a/src/field/start_menu.c
+++ b/src/field/start_menu.c
@@ -50,7 +50,7 @@ static bool8 savingComplete;
extern bool8 gDifferentSaveFile;
extern u16 gSaveFileStatus;
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
extern u8 gUnknown_03004860;
@@ -528,10 +528,10 @@ static void Task_SaveDialog(u8 taskId)
{
case SAVE_CANCELED:
case SAVE_ERROR:
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
break;
case SAVE_SUCCESS:
- gScriptResult = status;
+ gSpecialVar_Result = status;
break;
case SAVE_IN_PROGRESS:
return;
diff --git a/src/field/starter_choose.c b/src/field/starter_choose.c
index 149eaa03d..701d4087a 100644
--- a/src/field/starter_choose.c
+++ b/src/field/starter_choose.c
@@ -16,7 +16,7 @@
#include "trig.h"
#include "unknown_task.h"
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
extern struct SpriteTemplate gUnknown_02024E8C;
//--------------------------------------------------
@@ -439,7 +439,7 @@ static void Task_StarterChoose5(u8 taskId)
{
case 0: // YES
//Return the starter choice and exit.
- gScriptResult = gTasks[taskId].tStarterSelection;
+ gSpecialVar_Result = gTasks[taskId].tStarterSelection;
SetMainCallback2(gMain.savedCallback);
break;
case 1: // NO
diff --git a/src/field/trader.c b/src/field/trader.c
index c4fe73ba1..61cb0b4a2 100644
--- a/src/field/trader.c
+++ b/src/field/trader.c
@@ -179,7 +179,7 @@ void Task_HandleGetDecorationMenuInput(u8 taskId)
void ScrSpecial_GetTraderTradedFlag(void)
{
struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader;
- gScriptResult = trader->alreadyTraded;
+ gSpecialVar_Result = trader->alreadyTraded;
}
void ScrSpecial_DoesPlayerHaveNoDecorations(void)
@@ -190,21 +190,21 @@ void ScrSpecial_DoesPlayerHaveNoDecorations(void)
{
if (sub_8134194(i))
{
- gScriptResult = FALSE;
+ gSpecialVar_Result = FALSE;
return;
}
}
- gScriptResult = TRUE;
+ gSpecialVar_Result = TRUE;
}
void ScrSpecial_IsDecorationFull(void)
{
- gScriptResult = FALSE;
+ gSpecialVar_Result = FALSE;
if (gDecorations[gSpecialVar_0x8004].category != gDecorations[gSpecialVar_0x8006].category
&& sub_8133F9C(gDecorations[gSpecialVar_0x8004].category) == -1)
{
sub_80FE7D4(gStringVar2, gDecorations[gSpecialVar_0x8004].category);
- gScriptResult = TRUE;
+ gSpecialVar_Result = TRUE;
}
}
diff --git a/src/field/tv.c b/src/field/tv.c
index db96775e3..1d5bf929c 100644
--- a/src/field/tv.c
+++ b/src/field/tv.c
@@ -68,10 +68,10 @@ extern struct TVSaleItem gUnknown_02038724[3];
struct UnkTvStruct gUnknown_03005D38;
-extern u16 gScriptLastTalked;
+extern u16 gSpecialVar_LastTalked;
-extern u8 gScriptContestCategory;
-extern u8 gScriptContestRank;
+extern u8 gSpecialVar_ContestCategory;
+extern u8 gSpecialVar_ContestRank;
extern u8 gUnknown_03004316[11];
extern u8 gBattleOutcome;
@@ -447,8 +447,8 @@ void ClearTVShowData(void)
bool8 sub_80BF1B4(u8);
void sub_80BF20C(void);
-extern u8 gScriptContestCategory;
-extern u8 gScriptContestRank;
+extern u8 gSpecialVar_ContestCategory;
+extern u8 gSpecialVar_ContestRank;
extern u8 gUnknown_03004316[11];
extern u8 gBattleOutcome;
@@ -983,8 +983,8 @@ void sub_80BE284(u8 a0)
if (gUnknown_03005D38.var0 != -1)
{
bravoTrainer->contestResult = a0;
- bravoTrainer->contestCategory = gScriptContestCategory;
- bravoTrainer->contestRank = gScriptContestRank;
+ bravoTrainer->contestCategory = gSpecialVar_ContestCategory;
+ bravoTrainer->contestRank = gSpecialVar_ContestRank;
bravoTrainer->species = GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_SPECIES, NULL);
GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_NICKNAME, bravoTrainer->pokemonNickname);
}
@@ -1047,7 +1047,7 @@ void sub_80BE3BC(void)
void sub_80BE478(void)
{
sub_80BF478();
- if (gScriptResult == 1)
+ if (gSpecialVar_Result == 1)
return;
GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar1);
@@ -1414,7 +1414,7 @@ void sub_80BECE8(void)
arg0 = sub_80BECA0();
if (arg0 == 0xff)
{
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
return;
}
if (gSaveBlock1.unknown_2ABC[arg0].val2 == 0)
@@ -1433,7 +1433,7 @@ void sub_80BECE8(void)
gSaveBlock1.unknown_2ABC[arg0].val1 = 0;
ShowFieldMessage(gTVNewsTextGroup1[gSaveBlock1.unknown_2ABC[arg0].val0]);
}
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
}
bool8 GetPriceReduction(u8 arg0)
@@ -1462,7 +1462,7 @@ bool8 IsPriceDiscounted(u8 arg0)
case 1:
if (gSaveBlock1.location.mapGroup == MAP_GROUP(SLATEPORT_CITY)
&& gSaveBlock1.location.mapNum == MAP_NUM(SLATEPORT_CITY)
- && gScriptLastTalked == 0x1a)
+ && gSpecialVar_LastTalked == 0x1a)
return TRUE;
else
return FALSE;
@@ -1660,7 +1660,7 @@ void sub_80BF25C(u8 showType)
{
if(gSaveBlock1.tvShows[i].common.var01 == 1)
{
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
}
else
{
@@ -1676,7 +1676,7 @@ void sub_80BF25C(u8 showType)
void sub_80BF2C4(void)
{
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
switch (gSpecialVar_0x8005)
{
case TVSHOW_FAN_CLUB_LETTER:
@@ -1708,7 +1708,7 @@ void sub_80BF334(void)
struct TVShowFanClubLetter *fanclubLetter;
sub_80BF25C(TVSHOW_FAN_CLUB_LETTER);
- if (gScriptResult == 0)
+ if (gSpecialVar_Result == 0)
{
StringCopy(gStringVar1, gSpeciesNames[GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, 0)]);
fanclubLetter = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].fanclubLetter;
@@ -1721,7 +1721,7 @@ void sub_80BF3A4(void)
struct TVShowRecentHappenings *recentHappenings;
sub_80BF25C(TVSHOW_RECENT_HAPPENINGS);
- if (gScriptResult == 0)
+ if (gSpecialVar_Result == 0)
{
recentHappenings = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].recentHappenings;
sub_80EB6FC(recentHappenings->var04, 6);
@@ -1733,7 +1733,7 @@ void sub_80BF3DC(void)
struct TVShowFanclubOpinions *fanclubOpinions;
sub_80BF25C(TVSHOW_PKMN_FAN_CLUB_OPINIONS);
- if (gScriptResult == 0)
+ if (gSpecialVar_Result == 0)
{
StringCopy(gStringVar1, gSpeciesNames[GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, 0)]);
GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_NICKNAME, gStringVar2);
@@ -1745,7 +1745,7 @@ void sub_80BF3DC(void)
void sub_80BF46C(void)
{
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
}
void sub_80BF478(void)
@@ -1758,7 +1758,7 @@ void sub_80BF484(void)
struct TVShowBravoTrainerPokemonProfiles *bravoTrainer;
sub_80BF25C(TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE);
- if (gScriptResult == 0)
+ if (gSpecialVar_Result == 0)
{
bravoTrainer = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].bravoTrainer;
sub_80EB6FC(bravoTrainer->var04, 2);
@@ -1770,7 +1770,7 @@ void sub_80BF4BC(void)
struct TVShowBravoTrainerBattleTowerSpotlight *bravoTrainerTower;
sub_80BF25C(TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE);
- if (gScriptResult == 0)
+ if (gSpecialVar_Result == 0)
{
bravoTrainerTower = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].bravoTrainerTower;
sub_80EB6FC(bravoTrainerTower->var18, 1); // wrong struct ident, fix later
@@ -1898,9 +1898,9 @@ void sub_80BF6D8(void)
gUnknown_03005D38.var0 = sub_80BF720(gSaveBlock1.tvShows);
gSpecialVar_0x8006 = gUnknown_03005D38.var0;
if (gUnknown_03005D38.var0 == -1)
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
else
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
}
s8 sub_80BF720(TVShow tvShow[])
@@ -2095,9 +2095,9 @@ void sub_80BFAE0(void)
void sub_80BFB10(void)
{
if (GetPlayerTrainerId() == GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_OT_ID, 0))
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
else
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
}
u8 sub_80BFB54(u8 arg0)
@@ -2869,7 +2869,7 @@ void DoTVShowBravoTrainerPokemonProfile(void)
struct TVShowBravoTrainerPokemonProfiles *bravoTrainer = &gSaveBlock1.tvShows[gSpecialVar_0x8004].bravoTrainer;
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch(state)
{
@@ -2940,7 +2940,7 @@ void DoTVShowBravoTrainerBattleTowerProfile(void)
struct TVShowBravoTrainerBattleTowerSpotlight *bravoTrainerTower = &gSaveBlock1.tvShows[gSpecialVar_0x8004].bravoTrainerTower;
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch(state)
{
@@ -3029,7 +3029,7 @@ void DoTVShowTodaysSmartShopper(void)
struct TVShowSmartShopper *smartShopper = &gSaveBlock1.tvShows[gSpecialVar_0x8004].smartshopperShow;
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch(state)
{
@@ -3117,7 +3117,7 @@ void DoTVShowTheNameRaterShow(void)
struct TVShowNameRaterShow *nameRaterShow = &gSaveBlock1.tvShows[gSpecialVar_0x8004].nameRaterShow;
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch (state)
{
@@ -3213,7 +3213,7 @@ void DoTVShowPokemonTodaySuccessfulCapture(void)
struct TVShowPokemonToday *pokemonToday = &gSaveBlock1.tvShows[gSpecialVar_0x8004].pokemonToday;
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch (state)
{
@@ -3282,7 +3282,7 @@ void DoTVShowPokemonTodayFailedCapture(void)
struct TVShowPokemonTodayFailed *pokemonTodayFailed = &gSaveBlock1.tvShows[gSpecialVar_0x8004].pokemonTodayFailed;
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch (state)
{
@@ -3327,7 +3327,7 @@ void DoTVShowPokemonFanClubLetter(void)
u8 state;
u16 rval;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch (state)
{
@@ -3379,7 +3379,7 @@ void DoTVShowRecentHappenings(void)
struct TVShowRecentHappenings *recentHappenings = &gSaveBlock1.tvShows[gSpecialVar_0x8004].recentHappenings;
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch (state)
{
@@ -3413,7 +3413,7 @@ void DoTVShowPokemonFanClubOpinions(void)
struct TVShowFanclubOpinions *fanclubOpinions = &gSaveBlock1.tvShows[gSpecialVar_0x8004].fanclubOpinions;
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch (state)
{
@@ -3459,7 +3459,7 @@ void DoTVShowInSearchOfTrainers(void)
{
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch (state)
{
@@ -3501,7 +3501,7 @@ void DoTVShowInSearchOfTrainers(void)
EasyChat_GetWordText(gStringVar1, gSaveBlock1.gabbyAndTyData.quote);
StringCopy(gStringVar2, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon1]);
StringCopy(gStringVar3, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon2]);
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
gUnknown_020387E8 = 0;;
TakeTVShowInSearchOfTrainersOffTheAir();
break;
@@ -3514,7 +3514,7 @@ void DoTVShowPokemonAngler(void)
struct TVShowPokemonAngler *pokemonAngler = &gSaveBlock1.tvShows[gSpecialVar_0x8004].pokemonAngler;
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
if (pokemonAngler->var02 < pokemonAngler->var03)
gUnknown_020387E8 = 0;
else
@@ -3543,7 +3543,7 @@ void DoTVShowTheWorldOfMasters(void)
struct TVShowWorldOfMasters *worldOfMasters = &gSaveBlock1.tvShows[gSpecialVar_0x8004].worldOfMasters;
u8 state;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
state = gUnknown_020387E8;
switch (state)
{
@@ -3571,7 +3571,7 @@ void DoTVShowTheWorldOfMasters(void)
void TVShowDone(void)
{
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
gUnknown_020387E8 = 0;
gSaveBlock1.tvShows[gSpecialVar_0x8004].common.var01 = 0;
}
diff --git a/src/field/use_pokeblock.c b/src/field/use_pokeblock.c
index 8155b4216..7253ac901 100644
--- a/src/field/use_pokeblock.c
+++ b/src/field/use_pokeblock.c
@@ -105,7 +105,7 @@ EWRAM_DATA u8 gPokeblockMonID = 0;
EWRAM_DATA s16 gPokeblockGain = 0;
extern u16 gKeyRepeatStartDelay;
-extern u16 gScriptItemId; // FIXME: remove after merge of #349 Pokeblock
+extern u16 gSpecialVar_ItemId; // FIXME: remove after merge of #349 Pokeblock
static void launch_c3_walk_stairs_and_run_once(void (*const)(void));
static void sub_81361E4(void);
@@ -574,7 +574,7 @@ static void sub_81369CC(void)
case 5:
if (gMain.newKeys & (A_BUTTON | B_BUTTON) && !sub_8136D00())
{
- PokeblockClearIfExists((u8)gScriptItemId);
+ PokeblockClearIfExists((u8)gSpecialVar_ItemId);
launch_c3_walk_stairs_and_run_once(sub_8136B44);
}
break;
diff --git a/src/field/wild_encounter.c b/src/field/wild_encounter.c
index cc4468728..4bf83cad8 100644
--- a/src/field/wild_encounter.c
+++ b/src/field/wild_encounter.c
@@ -3695,7 +3695,7 @@ const u16 gRoute119WaterTileData[] =
0x5C, 0x8B, 0x12A,
};
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
extern u8 S_RepelWoreOff[];
EWRAM_DATA static u8 sWildEncountersDisabled = 0;
@@ -4167,18 +4167,18 @@ void ScrSpecial_RockSmashWildEncounter(void)
if (wildPokemonInfo == NULL)
{
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
return;
}
else if (DoWildEncounterTest(wildPokemonInfo->encounterRate, 1) == TRUE
&& GenerateWildMon(wildPokemonInfo, 2, TRUE) == TRUE)
{
BattleSetup_StartWildBattle();
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
return;
}
}
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
return;
}
diff --git a/src/pokemon/learn_move.c b/src/pokemon/learn_move.c
index 8aa10254c..5eee45b23 100644
--- a/src/pokemon/learn_move.c
+++ b/src/pokemon/learn_move.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "contest.h"
#include "data2.h"
#include "field_fadetransition.h"
#include "main.h"
@@ -24,8 +25,6 @@ extern u16 gSpecialVar_0x8004;
extern u16 gSpecialVar_0x8005;
extern u8 gTileBuffer[];
-extern const struct ContestMove gContestMoves[];
-extern const struct ContestEffect gContestEffects[];
extern const struct WindowConfig gWindowConfig_81E6CE4;
extern const struct WindowConfig gWindowConfig_81E7240;
extern const u8 *const gContestEffectStrings[];
diff --git a/src/pokemon/pokeblock_feed.c b/src/pokemon/pokeblock_feed.c
index 389c4bb25..8e3adda12 100644
--- a/src/pokemon/pokeblock_feed.c
+++ b/src/pokemon/pokeblock_feed.c
@@ -645,7 +645,7 @@ static bool8 sub_8147B20(struct Pokemon* mon)
ewram1FFFF++;
break;
case 5:
- SetPokeblockFeedSpritePal(gScriptItemId);
+ SetPokeblockFeedSpritePal(gSpecialVar_ItemId);
LoadCompressedObjectPalette(&sPokeblockFeedSpritePal);
ewram1FFFF++;
break;
@@ -722,7 +722,7 @@ static void Task_WaitForAtePokeblockText(u8 taskID)
static void Task_PrintAtePokeblockText(u8 taskID)
{
struct Pokemon* mon = &gPlayerParty[gPokeblockMonID];
- struct Pokeblock* pokeblock = &gSaveBlock1.pokeblocks[gScriptItemId];
+ struct Pokeblock* pokeblock = &gSaveBlock1.pokeblocks[gSpecialVar_ItemId];
gPokeblockGain = PokeblockGetGain(GetNature(mon), pokeblock);
GetMonNickname(mon, gStringVar1);
diff --git a/src/pokemon/pokemon_menu.c b/src/pokemon/pokemon_menu.c
index f6f5e24e7..d2a5197a0 100644
--- a/src/pokemon/pokemon_menu.c
+++ b/src/pokemon/pokemon_menu.c
@@ -435,7 +435,7 @@ static void sub_808A1E0(u8 taskID)
static void sub_808A228(u8 taskID)
{
- if (ItemIsMail(gScriptItemId) && gUnknown_0202E8F4 != 0)
+ if (ItemIsMail(gSpecialVar_ItemId) && gUnknown_0202E8F4 != 0)
{
BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
gTasks[taskID].func = sub_808A180;
@@ -451,7 +451,7 @@ static void sub_808A228(u8 taskID)
static void sub_808A2AC(u8 taskID)
{
if (!gPaletteFade.active)
- PartyMenuTryGiveMonHeldItem(taskID, gScriptItemId, sub_808A228);
+ PartyMenuTryGiveMonHeldItem(taskID, gSpecialVar_ItemId, sub_808A228);
}
static void sub_808A2DC(u8 taskID)
@@ -463,7 +463,7 @@ static void sub_808A2DC(u8 taskID)
static void sub_808A330(u8 taskID)
{
- PartyMenuTryGiveMonHeldItem(taskID, gScriptItemId, sub_808A2DC);
+ PartyMenuTryGiveMonHeldItem(taskID, gSpecialVar_ItemId, sub_808A2DC);
}
static void sub_808A34C(void)
@@ -507,7 +507,7 @@ static void sub_808A3A4(void)
void sub_808A3F8(void)
{
- if (ItemIsMail(gScriptItemId))
+ if (ItemIsMail(gSpecialVar_ItemId))
{
u8 taskID = CreateTask(sub_808A330, 0);
gPaletteFade.bufferTransferDisabled = 1;
@@ -523,7 +523,7 @@ void sub_808A3F8(void)
DestroyTask(taskID);
}
gPaletteFade.bufferTransferDisabled = 1;
- if (gScriptItemId)
+ if (gSpecialVar_ItemId)
{
SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0xFF, sub_808A2AC, 0xFF);
SetMainCallback2(sub_808A358);
@@ -554,7 +554,7 @@ static void sub_808A4D4(void)
void sub_808A520(void)
{
gPaletteFade.bufferTransferDisabled = 1;
- if (gScriptResult == 0)
+ if (gSpecialVar_Result == 0)
{
if (gUnknown_0202E8F8)
RemoveBagItem(gUnknown_0202E8F8, 1);
@@ -572,7 +572,7 @@ static void sub_808A5BC(u8 taskID)
{
if (!gPaletteFade.active)
{
- DisplayGiveHeldItemMessage(gLastFieldPokeMenuOpened, gScriptItemId, 0);
+ DisplayGiveHeldItemMessage(gLastFieldPokeMenuOpened, gSpecialVar_ItemId, 0);
gTasks[taskID].func = sub_808A1E0;
}
}
@@ -915,7 +915,7 @@ static bool8 SetUpFieldMove_Waterfall(void)
static void sub_808AE8C(void)
{
u8 i;
- u8 arg = gScriptItemId - 33;
+ u8 arg = gSpecialVar_ItemId - 33;
for (i = 0; i < 6; i++)
{
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES))
@@ -923,7 +923,7 @@ static void sub_808AE8C(void)
sub_806D668(i);
if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) || !CanMonLearnTMHM(&gPlayerParty[i], arg))
sub_806BC3C(i, 0x9A);
- else if (pokemon_has_move(&gPlayerParty[i], ItemIdToBattleMoveId(gScriptItemId)))
+ else if (pokemon_has_move(&gPlayerParty[i], ItemIdToBattleMoveId(gSpecialVar_ItemId)))
sub_806BC3C(i, 0xA8);
else
sub_806BC3C(i, 0x8C);
@@ -938,7 +938,7 @@ static void sub_808AF20(void)
{
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES))
{
- if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) || !GetEvolutionTargetSpecies(&gPlayerParty[i], 3, gScriptItemId))
+ if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) || !GetEvolutionTargetSpecies(&gPlayerParty[i], 3, gSpecialVar_ItemId))
{
sub_806D668(i);
sub_806BC3C(i, 0);
@@ -955,7 +955,7 @@ static void sub_808AF80(void)
{
if (gUnknown_02038561 == 0)
{
- switch (CheckIfItemIsTMHMOrEvolutionStone(gScriptItemId))
+ switch (CheckIfItemIsTMHMOrEvolutionStone(gSpecialVar_ItemId))
{
case 1:
sub_808AE8C();
@@ -983,7 +983,7 @@ void sub_808B020(void)
switch (gUnknown_02038561)
{
case 0:
- if (CheckIfItemIsTMHMOrEvolutionStone(gScriptItemId) == 1)
+ if (CheckIfItemIsTMHMOrEvolutionStone(gSpecialVar_ItemId) == 1)
SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, sub_808B0C0, 20);
else
SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, sub_808B0C0, 3);
@@ -1013,11 +1013,11 @@ void sub_808B0C0(u8 taskID)
{
sub_806D5A4();
if (gUnknown_02038561 == 0)
- gUnknown_03004AE4(taskID, gScriptItemId, sub_808B224);
+ gUnknown_03004AE4(taskID, gSpecialVar_ItemId, sub_808B224);
if (gUnknown_02038561 == 1)
{
PlaySE(SE_SELECT);
- PartyMenuTryGiveMonHeldItem(taskID, gScriptItemId, sub_808B2EC);
+ PartyMenuTryGiveMonHeldItem(taskID, gSpecialVar_ItemId, sub_808B2EC);
}
if (gUnknown_02038561 == 3)
{
@@ -1042,7 +1042,7 @@ void sub_808B0C0(u8 taskID)
static void sub_808B1EC(u8 taskID)
{
if (!gPaletteFade.active)
- gUnknown_03004AE4(taskID, gScriptItemId, sub_808B224);
+ gUnknown_03004AE4(taskID, gSpecialVar_ItemId, sub_808B224);
}
static void sub_808B224(u8 taskID)
@@ -1120,7 +1120,7 @@ static void sub_808B3EC(void)
IntrCallback callback;
gPaletteFade.bufferTransferDisabled = 1;
- if (gScriptResult == 0)
+ if (gSpecialVar_Result == 0)
{
if (gUnknown_0202E8F8)
RemoveBagItem(gUnknown_0202E8F8, 1);
@@ -1143,7 +1143,7 @@ static void sub_808B4A4(u8 taskID)
{
if (!gPaletteFade.active)
{
- DisplayGiveHeldItemMessage(gLastFieldPokeMenuOpened, gScriptItemId, 1);
+ DisplayGiveHeldItemMessage(gLastFieldPokeMenuOpened, gSpecialVar_ItemId, 1);
gTasks[taskID].func = sub_808B4EC;
}
}
diff --git a/src/pokemon/pokemon_size_record.c b/src/pokemon/pokemon_size_record.c
index 2ab289416..f92a95bfb 100644
--- a/src/pokemon/pokemon_size_record.c
+++ b/src/pokemon/pokemon_size_record.c
@@ -15,7 +15,7 @@ struct UnknownStruct
u16 unk4;
};
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
static const struct UnknownStruct sBigMonSizeTable[] =
{
@@ -104,13 +104,13 @@ static void FormatMonSizeRecord(u8 *string, u32 size)
static u8 CompareMonSize(u16 species, u16 *sizeRecord)
{
- if (gScriptResult == 0xFF)
+ if (gSpecialVar_Result == 0xFF)
{
return 0;
}
else
{
- struct Pokemon *pkmn = &gPlayerParty[gScriptResult];
+ struct Pokemon *pkmn = &gPlayerParty[gSpecialVar_Result];
// UB: Too few arguments for function 'GetMonData'
if (GetMonData(pkmn, MON_DATA_IS_EGG) == TRUE || GetMonData(pkmn, MON_DATA_SPECIES) != species)
@@ -169,7 +169,7 @@ void CompareShroomishSize(void)
{
u16 *sizeRecord = GetVarPointer(VAR_SHROOMISH_SIZE_RECORD);
- gScriptResult = CompareMonSize(SPECIES_SHROOMISH, sizeRecord);
+ gSpecialVar_Result = CompareMonSize(SPECIES_SHROOMISH, sizeRecord);
}
void InitBarboachSizeRecord(void)
@@ -188,7 +188,7 @@ void CompareBarboachSize(void)
{
u16 *sizeRecord = GetVarPointer(VAR_BARBOACH_SIZE_RECORD);
- gScriptResult = CompareMonSize(SPECIES_BARBOACH, sizeRecord);
+ gSpecialVar_Result = CompareMonSize(SPECIES_BARBOACH, sizeRecord);
}
void GiveGiftRibbonToParty(u8 index, u8 ribbonId)
diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c
index 532f30aaa..4de5f5345 100644
--- a/src/pokemon/pokemon_summary_screen.c
+++ b/src/pokemon/pokemon_summary_screen.c
@@ -1,11 +1,14 @@
#include "global.h"
+#include "constants/items.h"
+#include "constants/songs.h"
+#include "constants/species.h"
#include "battle.h"
+#include "contest.h"
#include "data2.h"
#include "decompress.h"
#include "event_data.h"
#include "ewram.h"
#include "item.h"
-#include "constants/items.h"
#include "learn_move.h"
#include "link.h"
#include "m4a.h"
@@ -19,9 +22,7 @@
#include "pokemon.h"
#include "pokemon_summary_screen.h"
#include "region_map.h"
-#include "constants/songs.h"
#include "sound.h"
-#include "constants/species.h"
#include "sprite.h"
#include "string_util.h"
#include "strings.h"
diff --git a/src/rom6.c b/src/rom6.c
index c25f0f9f5..e71484b0a 100644
--- a/src/rom6.c
+++ b/src/rom6.c
@@ -13,7 +13,7 @@
#include "sprite.h"
#include "task.h"
-extern u16 gScriptLastTalked;
+extern u16 gSpecialVar_LastTalked;
extern void (*gFieldCallback)(void);
extern u8 gLastFieldPokeMenuOpened;
extern void (*gUnknown_03005CE4)(void);
@@ -43,7 +43,7 @@ bool8 npc_before_player_of_type(u8 a)
}
else
{
- gScriptLastTalked = gMapObjects[mapObjId].localId;
+ gSpecialVar_LastTalked = gMapObjects[mapObjId].localId;
return TRUE;
}
}
diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c
index 8fea7f710..347f113c3 100644
--- a/src/rom_8077ABC.c
+++ b/src/rom_8077ABC.c
@@ -51,13 +51,6 @@ struct Struct_gUnknown_0837F578 {
u8 field_1;
};
-struct OamMatrix {
- s16 a;
- s16 b;
- s16 c;
- s16 d;
-};
-
struct Struct_2017810 {
u8 filler_0[6];
u8 field_6;
@@ -70,12 +63,6 @@ struct Color {
u16 b:5;
};
-struct Struct_sub_8078914 {
- u8 *field_0;
- u8 *field_4;
- u8 field_8;
-};
-
struct BGCnt {
u16 priority:2;
u16 charBase:2;
@@ -1742,7 +1729,7 @@ u8 sub_8079F44(u16 species, u8 isBackpic, u8 a3, s16 a4, s16 a5, u8 a6, u32 a7,
sprite = CreateSprite(&gSpriteTemplate_837F5B0[a3], a4, a5 + gMonBackPicCoords[species].y_offset, a6);
}
if (NotInBattle()) {
- gSprites[sprite].affineAnims = &gSpriteAffineAnimTable_81E7C18;
+ gSprites[sprite].affineAnims = gSpriteAffineAnimTable_81E7C18;
StartSpriteAffineAnim(&gSprites[sprite], 0);
}
return sprite;
diff --git a/src/scene/berry_blender.c b/src/scene/berry_blender.c
index 47ed314a8..d147d11ce 100644
--- a/src/scene/berry_blender.c
+++ b/src/scene/berry_blender.c
@@ -208,7 +208,7 @@ extern void de_sub_8073110();
extern struct MusicPlayerInfo gMPlay_SE2;
extern struct MusicPlayerInfo gMPlay_BGM;
-extern u16 gScriptItemId;
+extern u16 gSpecialVar_ItemId;
extern u8 gUnknown_020297ED;
extern u8 byte_3002A68;
@@ -1192,7 +1192,7 @@ static void sub_804E9F8(void)
case 8:
gBerryBlenderData->field_0++;
gBerryBlenderData->field_13C = 0;
- Blender_CopyBerryData(&gBerryBlenderData->blendedBerries[0], gScriptItemId);
+ Blender_CopyBerryData(&gBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId);
memcpy(gBlockSendBuffer, &gBerryBlenderData->blendedBerries[0], sizeof(struct BlenderBerry));
sub_80084A4();
gBerryBlenderData->framesToWait = 0;
@@ -1438,9 +1438,9 @@ static void sub_804F378(void)
{
case 0:
sub_804F0F4();
- Blender_SetBankBerryData(0, gScriptItemId);
- Blender_CopyBerryData(&gBerryBlenderData->blendedBerries[0], gScriptItemId);
- sub_804F1BC(gScriptItemId, gBerryBlenderData->playersNo, &gBerryBlenderData->blendedBerries[0]);
+ Blender_SetBankBerryData(0, gSpecialVar_ItemId);
+ Blender_CopyBerryData(&gBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId);
+ sub_804F1BC(gSpecialVar_ItemId, gBerryBlenderData->playersNo, &gBerryBlenderData->blendedBerries[0]);
for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
{
gBerryBlenderData->field_70[i] = 0;
@@ -3431,7 +3431,7 @@ static bool8 Blender_PrintBlendingResults(void)
Blender_PrintMadePokeblockString(&pokeblock, gBerryBlenderData->stringVar);
CreateTask(sub_8052BD0, 6);
MenuPrintMessage(gBerryBlenderData->stringVar, 1, 15);
- RemoveBagItem(gScriptItemId, 1);
+ RemoveBagItem(gSpecialVar_ItemId, 1);
sub_810CA34(&pokeblock);
gBerryBlenderData->field_0++;
break;
diff --git a/src/scene/new_game.c b/src/scene/new_game.c
index ee042a0de..0279f99c6 100644
--- a/src/scene/new_game.c
+++ b/src/scene/new_game.c
@@ -24,6 +24,7 @@
#include "rtc.h"
#include "script.h"
#include "secret_base.h"
+#include "text.h"
#include "tv.h"
EWRAM_DATA u8 gDifferentSaveFile = 0;
@@ -35,14 +36,10 @@ extern u16 gSaveFileStatus;
extern u8 gUnknown_0819FA81[];
-const struct SB1_2EFC_Struct gUnknown_08216604 =
+static const struct ContestWinner sEmptyMuseumPortrait =
{
- 0x0000,
- {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- }
+ .nickname = {EOS},
+ .trainerName = {EOS},
};
void write_word_to_mem(u32 var, u8 *dataPtr)
@@ -83,13 +80,13 @@ void ClearPokedexFlags(void)
memset(&gSaveBlock2.pokedex.seen, 0, sizeof(gSaveBlock2.pokedex.seen));
}
-void sub_8052DA8(void)
+void ResetContestAndMuseumWinners(void)
{
s32 i;
- sub_80B2D1C();
+ Contest_ResetWinners();
for (i = 0; i < 5; i++)
- gSaveBlock1.sbStruct.unkSB1.sb1_2EFC_struct[i] = gUnknown_08216604;
+ gSaveBlock1.museumPortraits[i] = sEmptyMuseumPortrait;
}
void ZeroBattleTowerData(void)
@@ -142,7 +139,7 @@ void NewGameInitData(void)
gSaveBlock1.money = 3000;
ResetLinkContestBoolean();
ResetGameStats();
- sub_8052DA8();
+ ResetContestAndMuseumWinners();
InitLinkBattleRecords();
InitShroomishSizeRecord();
InitBarboachSizeRecord();
diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c
index 9d1aaa125..164d71cb5 100644
--- a/src/script_pokemon_util_80C4BF0.c
+++ b/src/script_pokemon_util_80C4BF0.c
@@ -38,22 +38,22 @@ extern u16 gSpecialVar_0x8004;
extern u16 gSpecialVar_0x8005;
extern u16 gSpecialVar_0x8006;
-extern u16 gScriptContestCategory;
-extern u16 gScriptContestRank;
-extern u16 gScriptResult;
+extern u16 gSpecialVar_ContestCategory;
+extern u16 gSpecialVar_ContestRank;
+extern u16 gSpecialVar_Result;
extern u32 gUnknown_03005D28;
extern u8 gUnknown_02038694;
extern u8 gUnknown_0203856C;
-extern u8 gUnknown_02038690[];
+extern u8 gContestFinalStandings[];
extern u16 gUnknown_02038678[];
void sub_80C4BF0(void)
{
- gSaveBlock1.vars[0x10] = gContestMons[0].unk16;
- gSaveBlock1.vars[0x11] = gContestMons[1].unk16;
- gSaveBlock1.vars[0x12] = gContestMons[2].unk16;
+ gSaveBlock1.vars[0x10] = gContestMons[0].trainerGfxId;
+ gSaveBlock1.vars[0x11] = gContestMons[1].trainerGfxId;
+ gSaveBlock1.vars[0x12] = gContestMons[2].trainerGfxId;
}
void sub_80C4C28(void)
@@ -91,7 +91,7 @@ void sub_80C4C78(void)
u16 var;
u16 returnVar;
- switch(gScriptContestCategory)
+ switch(gSpecialVar_ContestCategory)
{
case 0:
var = 8;
@@ -111,7 +111,7 @@ void sub_80C4C78(void)
break;
}
- returnVar = gSaveBlock1.sbStruct.unkSB2.sb1_2EFC_struct2[var].var;
+ returnVar = gSaveBlock1.contestWinners[var].species;
if(returnVar == 0)
gSpecialVar_0x8004 = returnVar;
@@ -121,13 +121,13 @@ void sub_80C4C78(void)
void sub_80C4CEC(void)
{
- sub_80B2A7C(0xFF);
+ Contest_SaveWinner(0xFF);
}
void sub_80C4CF8(void)
{
- if(!gUnknown_02038690[gContestPlayerMonIndex]
- && gScriptContestRank == 3
+ if(!gContestFinalStandings[gContestPlayerMonIndex]
+ && gSpecialVar_ContestRank == 3
&& (s16)gUnknown_02038678[gContestPlayerMonIndex] >= 800)
{
gSpecialVar_0x8004 = 1;
@@ -144,7 +144,7 @@ u8 sub_80C4D50(void)
int i;
for (i = 0; i < 5; i++)
- if (gSaveBlock1.sbStruct.unkSB2.sb1_2EFC_struct2[i + 8].var)
+ if (gSaveBlock1.museumPortraits[i].species != 0)
retVar++;
return retVar;
@@ -367,7 +367,7 @@ void ShowContestWinner(void)
sub_80AAF30();
BATTLE_STRUCT->unk15DDF = 1;
BATTLE_STRUCT->unk15DDE = sub_80B2C4C(254, 0);
- sub_80B2A7C(3);
+ Contest_SaveWinner(3);
gUnknown_0203856C = 0;
}
SetMainCallback2(CB2_ContestPainting);
@@ -376,10 +376,10 @@ void ShowContestWinner(void)
void sub_80C4F70(void)
{
- VarSet(0x4010, gContestMons[0].unk16);
- VarSet(0x4011, gContestMons[1].unk16);
- VarSet(0x4012, gContestMons[2].unk16);
- VarSet(0x4013, gContestMons[3].unk16);
+ VarSet(0x4010, gContestMons[0].trainerGfxId);
+ VarSet(0x4011, gContestMons[1].trainerGfxId);
+ VarSet(0x4012, gContestMons[2].trainerGfxId);
+ VarSet(0x4013, gContestMons[3].trainerGfxId);
}
bool8 GiveMonArtistRibbon(void)
@@ -387,8 +387,8 @@ bool8 GiveMonArtistRibbon(void)
u8 ribbon = GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_ARTIST_RIBBON);
if(ribbon == FALSE
- && gUnknown_02038690[gContestPlayerMonIndex] == 0
- && gScriptContestRank == 3
+ && gContestFinalStandings[gContestPlayerMonIndex] == 0
+ && gSpecialVar_ContestRank == 3
&& (s16)gUnknown_02038678[gContestPlayerMonIndex] >= 800)
{
ribbon = TRUE;
@@ -421,8 +421,8 @@ void ShowContestEntryMonPic(void)
MenuDrawTextWindow(left, top, 19, 13);
species = gContestMons[gSpecialVar_0x8006].species;
- var1 = gContestMons[gSpecialVar_0x8006].unk38; // v2
- var2 = gContestMons[gSpecialVar_0x8006].unk3C; // v3
+ var1 = gContestMons[gSpecialVar_0x8006].personality;
+ var2 = gContestMons[gSpecialVar_0x8006].otId;
taskId = CreateTask(sub_80C5190, 0x50);
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = species;
@@ -488,9 +488,9 @@ void sub_80C5190(u8 taskId)
void ScriptGetMultiplayerId(void)
{
if(gIsLinkContest & 1)
- gScriptResult = GetMultiplayerId();
+ gSpecialVar_Result = GetMultiplayerId();
else
- gScriptResult = 4;
+ gSpecialVar_Result = 4;
}
void ScriptRandom(void)
@@ -502,11 +502,11 @@ void ScriptRandom(void)
{
gUnknown_03005D28 = 1103515245 * gUnknown_03005D28 + 24691;
random = gUnknown_03005D28 >> 16;
- scriptPtr = &gScriptResult;
+ scriptPtr = &gSpecialVar_Result;
}
else
{
- scriptPtr = &gScriptResult;
+ scriptPtr = &gSpecialVar_Result;
random = Random();
}
*scriptPtr = random % *scriptPtr;
@@ -587,13 +587,13 @@ void CheckForAlivePartyMons(void)
switch(var)
{
case 1:
- gScriptResult = var;
+ gSpecialVar_Result = var;
break;
case 0:
- gScriptResult = var;
+ gSpecialVar_Result = var;
break;
case 2:
- gScriptResult = var;
+ gSpecialVar_Result = var;
break;
}
}
@@ -657,10 +657,10 @@ void sub_80C5580(void)
switch(var)
{
case 0:
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
break;
default:
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
break;
}
@@ -681,11 +681,11 @@ void SetBattleTowerPlayerParty(void)
{
case 0: // player quit battle tower?
LoadPlayerParty();
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
break;
default: // load battle tower.
ReducePlayerPartyToThree();
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
break;
}
diff --git a/src/script_pokemon_util_80F99CC.c b/src/script_pokemon_util_80F99CC.c
index aed11bb7e..33e7620f7 100644
--- a/src/script_pokemon_util_80F99CC.c
+++ b/src/script_pokemon_util_80F99CC.c
@@ -23,7 +23,7 @@ extern u8 gPlayerPartyCount;
extern u16 gSpecialVar_0x8004;
extern u16 gSpecialVar_0x8005;
extern u8 gUnknown_02038694;
-extern u16 gScriptResult;
+extern u16 gSpecialVar_Result;
extern void (*gFieldCallback)(void);
@@ -281,11 +281,11 @@ void ScrSpecial_CountPokemonMoves(void) // count pokemon moves
{
u8 i;
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
for (i = 0; i < 4; i++) // checks MOVE1-MOVE4
if (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_MOVE1 + i))
- gScriptResult++;
+ gSpecialVar_Result++;
}
void ScrSpecial_GetPokemonNicknameAndMoveName(void)
@@ -437,8 +437,8 @@ void sub_80FA0DC(void)
void sub_80FA148(void)
{
struct Pokemon *party = &gPlayerParty[gSpecialVar_0x8004];
- gScriptResult = 0;
+ gSpecialVar_Result = 0;
if (GetMonData(party, MON_DATA_IS_EGG))
- gScriptResult = 1;
+ gSpecialVar_Result = 1;
}